Tools provided
Tools the agent exposes — your AI client calls them automatically when it needs them.
- audit_technical_seo — Read a supplied crawl and report indexability, canonical integrity, hreflang reciprocity, structured data, titles and Core Web Vitals. Every check returns pass, fail, or NOT CHECKED - and not-checked is reported as loudly as a failure, naming the field that was missing, because a crawl with no performance column is not a site with no performance problem. Nothing is fetched; it reads the rows you hand it.
- build_content_brief — Turn a target query and the queries around it into the brief a writer works from: one section per supporting query, the internal links to make, and a length target computed from the competitor lengths you supply. Where a length target cannot be computed it says NOT DERIVABLE and explains why - a made-up word count is the most-followed and least-founded line in most briefs. Every heading traces to a query you supplied.
- build_search_artifacts — Build the machine-readable files a search engine and an LLM read: sitemap.xml, robots.txt, llms.txt and schema.org structured data. Every line traces to a page you supplied. robots.txt carries NO Disallow, because nothing told this agent which paths are private and a guessed one can de-index a live section. A page missing a schema type's required properties gets NO block and is listed with exactly what to supply - an incomplete block reads as present to an auditor and is ignored by the consumer.
- find_keyword_gaps — Two findings, and it says which one it gave you. STRIKING DISTANCE needs only your own free Search Console export: queries you already rank ${STRIKING_MIN_POSITION}-${STRIKING_MAX_POSITION} for, where relevance is proven and visibility is not there - NO paid tool required. NOT RANKED needs a competitor list from any source, because nothing in your own data can name a query you never showed for. Supply no competitor list and it reports striking distance and SAYS no gap was computed, rather than relabelling one as the other.
- generate_meta_tags — Build title and description variants from signals you supply, and score each against the width a desktop result actually shows. The score is a BAND, not a verdict: search engines truncate on rendered pixel width and a character count is only a proxy, so a tag is reported as likely-fitting or at-risk with the basis named. Nothing is invented - with no keyword and no heading it asks rather than writing a title over your brand.
- optimize_listing_seo — Measure a marketplace listing against the keywords it should rank for: which appear in the title, which only in the description (the weakest position), and which appear nowhere at all. It reports coverage and placement and does NOT rewrite your copy - an invented product claim on a marketplace listing is a compliance incident the seller carries, so new sentences are left to a person who can stand behind them. Character limits come from you; without them length is reported and never judged.
- plan_topic_clusters — Group queries into topics, label the intent behind each, and name the page that should lead every cluster. Intent is inferred from the WORDS in the query and each label names the token that produced it, so a guess can be seen and overruled; a query matching no token is reported unknown rather than assumed informational. A cluster whose members want different things is flagged, because one page cannot serve both well. The pillar is always one of your own queries - never an invented URL.
- research_keywords — Rank a supplied query set by opportunity and group it into topics. The opportunity score is COMPUTED from impressions and current position, and the formula is returned with the report so the ranking can be checked rather than trusted. A row missing either input is ranked as unscored and counted, never scored zero; a query matching no other query is reported as unclustered rather than dressed up as a topic of one.
- watch_competitor_serp — Diff two snapshots of a competitor's rankings and report what actually moved. A move is computed only where the query appears in BOTH snapshots; a query present in one is reported as appeared or disappeared with no delta and an explicit note, because 'we did not see it' and 'it is gone' are different claims. Supply your own positions too and it also lists the queries they rank for and you do not. Nothing is fetched - it reads the lists you collected.
- run_full — Run every capability you supplied the input for, in registry order, and return one report. Capabilities whose input is missing are listed as skipped with the fields they need — never run against a fixture and never reported as zero.
- list_capabilities — List what this agent can do: every tool it advertises, what each one is for, and the arguments each one reads. Useful for discovery before the first call.
- plan_inputs — Plan the inputs for a tool: returns the questions to ask, the JSON schema of the arguments, and a ready-to-edit example. Every argument it names is an argument the tool actually reads.
- discover_intent — Understand your goal and co-design the exact input through clarifying questions before anything runs.
- open_form — Use this the moment the user wants to run this agent on their own input. It opens an interactive form that collects the run arguments. Do NOT check credentials, do NOT ask clarifying questions in chat, and do NOT run any analysis before calling this — the form is the entry point for running the agent.
- run_form — Internal: invoked by the open_form form when the user submits. Reads exactly the same arguments as run_full and forwards all of them. Not for direct use.