Skip to main content
Glama

Server Details

Free SEO MCP that closes the loop: find, fix, ship as a PR or to a CMS, prove. 37 tools, no key.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.9% over 24 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Server Listing
OnPage.dev MCP server

TDQS

A3.6/5.0

Scored across 37 tools

Disambiguation3/5

Several tools overlap in purpose, especially scan_page/site_audit/check_keyword/answer_readiness for page analysis and measure/find_opportunities/prioritize_fixes for data-driven prioritization. The detailed mode descriptions help, but an agent still faces ambiguous choices for common SEO tasks.

Naming Consistency4/5

Tool names use snake_case consistently, with no camelCase or chaotic casing. However, the set mixes verb_noun names (check_keyword, scan_page, prioritize_fixes) with noun phrases (accessibility, backlinks, content), a minor deviation from a single predictable pattern.

Tool Count2/5

37 tools is heavy, especially since each tool bundles many modes; the surface is broad enough to justify a suite, but multiple tools could be consolidated without losing capability. This exceeds the reasonable 3-15 range for a coherent MCP set.

Completeness5/5

The surface covers the SEO lifecycle comprehensively: audits, page scans, keyword and content analysis, backlinks, schema, technical checks, local, accessibility, AI visibility, analytics, monitoring, reporting, and fixes. No obvious major workflow is missing, though many tools require externally supplied data.

Available Tools

37 tools
accessibilityAccessibilityA
Read-onlyIdempotent
Inspect

Accessibility for people and the European Accessibility Act. Pick with mode: wcag = WCAG 2.1 AA checks. Needs url. screen_reader = The page as a screen reader reads it. Needs url.

NameRequiredDescriptionDefault
urlNoFull address of the page, for example https://example.com/pricing.
modeNoDefault wcag.
treeNoOptional: an accessibility snapshot from your own browser (role, name, level, children), for example Puppeteer page.accessibility.snapshot().
detailNobrief = short summary.
memory_keyNosite_memory key, records this call.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds that the tool requires a url and that each mode produces a distinct kind of output, which is useful context but not rich behavioral disclosure (no scope, cost, or failure behavior).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five short sentences, zero padding, and the core purpose plus the mode-keyed requirements are front-loaded. The telegraphic style ("Needs url.") is efficient, though slightly choppy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the input schema is fully documented, so return values and param details needn't be re-explained. The description covers the mode split and the url precondition, which is enough for an agent to call the tool correctly, though it omits guidance on the tree/detail parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents url, mode, tree, detail, and memory_key. The description restates the mode enum values and the url requirement without adding syntax or format detail beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete capability (accessibility checking) and names its two concrete outputs, WCAG 2.1 AA checks and screen-reader rendering. It doesn't compare itself to siblings like scan_page, but the purpose is unambiguous without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives real selection guidance for the mode parameter (wcag vs screen_reader) and a precondition ("Needs url"). However, it never says when to reach for this tool versus alternatives such as scan_page or technical, so usage is implied rather than framed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ai_visibilityAI visibilityA
Read-onlyIdempotent
Inspect

Whether AI assistants can read, quote and recommend a site. Pick with mode: check = AI crawler access, llms.txt, 15 citability checks and the page as a model reads it. Needs url. bots = Fetch the page as Googlebot, GPTBot, ClaudeBot, PerplexityBot and more against a browser: firewall blocks, challenges, cloaking. Needs url. gaps = Where AI answers name competitors, not you, from Brand Radar or similar. Needs site, brand, responses[{question, response, links, search_queries, engine, volume}]. citations = What pages cited by AI do differently, from citation counts. Needs pages[{url, chatgpt, perplexity, gemini, google_ai_overviews, google_ai_mode}].

NameRequiredDescriptionDefault
urlNoFull address of the page, for example https://example.com/pricing.
modeNoDefault check.
siteNoYour site, for example example.com.
brandNoYour brand name as people write it.
pagesNo
detailNobrief = short summary.
sourceNoWhere the citation counts come from.
responsesNo
memory_keyNosite_memory key, records this call.
competitorsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered; the description adds real behavioral substance on top, namely what each mode actually inspects (crawler access, firewall blocks, challenges, cloaking, competitor naming) and where the data originates (Brand Radar, citation counts, ahrefs/semrush). It does not mention rate limits, cost, or auth requirements, which is the remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence followed by a tight mode-by-mode breakdown; the 'mode = behavior. Needs X.' pattern is scannable and every clause carries information. The mode blocks are run-on but justified by the four-way branching and the differing input requirements.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, four-mode tool with an output schema present (so return values need not be described), the description covers the mode semantics and per-mode required inputs well. It leaves out the secondary parameters (detail, source, competitors, memory_key) and any note that no parameter is strictly required, which an agent choosing a mode would benefit from.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 70% schema coverage the schema does part of the work, but the description maps parameters to modes (url for check/bots, site+brand+responses for gaps, pages for citations) and spells out the nested response fields (question, response, links, search_queries, engine, volume) that the schema leaves bare. It omits any explanation of detail, source, memory_key or competitors, which are common-trap parameters here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a concrete outcome ('whether AI assistants can read, quote and recommend a site') and then enumerates four named modes (check, bots, gaps, citations) with the specific artifact each produces. An agent can immediately distinguish this from siblings like robots_txt, llms_txt or scan_page, which cover only fragments of this scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is effectively driven by mode selection, and the description states exactly what each mode needs ('Needs url', 'Needs site, brand, responses[...]', 'Needs pages[...]'), so the agent knows which inputs select which behavior. It stops short of naming when-not-to-use or pointing at alternative siblings, so it is clear context without explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

answer_readinessAnswers for AI searchA
Read-onlyIdempotent
Inspect

Whether a page answers the questions people ask AI and Google. Pick with mode: questions = Sub-questions AI Mode fans out to, and which the page answers. Needs url, topic, questions. passages = The passages that answer given questions, or the gaps. Needs url, question. format = Answer format against the pages that rank. Needs url, question, competitors.

NameRequiredDescriptionDefault
urlNoFull address of the page.
modeNoDefault questions.
topicNoThe topic or main query, for example 'passport renewal'.
detailNobrief = short summary.
questionNoThe question people ask, for example 'how long does shipping take to Germany'.
questionsNoThe sub-questions an AI search engine would ask for the topic.
memory_keyNosite_memory key, records this call.
competitorsNoOptional: up to 2 pages that rank for the topic.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds the mode-conditional invocation behavior but does not disclose anything further about cost, external calls, or output characteristics beyond what annotations and the output schema provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One framing sentence followed by three compact mode clauses, each pairing a mode with what it returns and what it needs. Front-loaded and every clause earns its place; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be restated, and the mode/parameter mapping gives the agent everything required to invoke correctly. Minor gap: no guidance on default mode behavior despite the schema noting 'Default questions', which the description could have confirmed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the schema lists zero required parameters while the description supplies the conditional requirement logic per mode ('Needs url, topic, questions', 'Needs url, question', 'Needs url, question, competitors'). That is genuine semantic value the schema does not encode, and it also explains what each mode returns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific purpose: whether a page answers the questions people ask AI and Google, framed around an answer-readiness evaluation. It clearly separates this from generic scan/audit siblings, though the verb is somewhat implicit rather than a clean 'evaluate X against Y'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly tells the agent how to select a mode (questions vs passages vs format) and which parameters each mode requires. This is real invocation guidance. It stops short of naming when to prefer a sibling tool or when not to use this one, so it is not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_keywordKeyword targetingA
Read-onlyIdempotent
Inspect

How pages target a keyword. Pick with mode: focus = One page against one keyword: 8 checks. Needs url, keyword. cannibalization = Your pages competing for one keyword, side by side on every signal, with the plan. Needs keyword, target_url.

NameRequiredDescriptionDefault
urlNoFull address of the page, for example https://example.com/pricing.
modeNoDefault focus.
rowsNoOptional Search Console rows for the keyword, to find the competing pages and their positions.
detailNobrief = short summary.
keywordNoThe search term the page should rank for, for example 'running shoes'.
memory_keyNosite_memory key, records this call.
target_urlNoThe page that should rank for it.
competing_urlsNoOther pages of the same site that compete for the keyword.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the description's added value is in behavior: it discloses that focus performs '8 checks' and that cannibalization lays competing pages 'side by side on every signal, with the plan.' That is meaningful procedural context beyond the annotations, though return shape is left to the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded: the core purpose leads, then each mode with its own inputs. The phrasing is compressed to the point of being slightly telegraphic ('with the plan'), but nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not describe returns, and it covers the two decision points an agent must resolve: which mode and which inputs. The remaining parameters (rows, competing_urls, detail, memory_key) are fully documented in the schema, so the definition is adequate for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so 3 is the baseline, but the description adds real meaning the schema does not carry: the schema lists zero required parameters, while the description states which inputs each mode actually needs (url+keyword for focus, keyword+target_url for cannibalization). That per-mode parameter requirement is genuinely additive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the subject (how pages target a keyword) and splits it into two concrete modes with distinct outputs: 'focus = One page against one keyword: 8 checks' and 'cannibalization = Your pages competing for one keyword.' This is more specific than the title alone, though it never differentiates itself from adjacent siblings like track_rankings or content, so it falls just short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Pick with mode:' phrasing gives explicit selection criteria between the two modes and states the required inputs for each ('Needs url, keyword' vs 'Needs keyword, target_url'). It stops short of naming when to prefer this over a sibling tool, so it is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compareCompareA
Read-only
Inspect

Compare pages side by side. Pick with mode: pages = Your page against up to 3 competitors. Needs url, competitors. html = Two versions of HTML before and after. Needs before, after. preview = Deploy preview against production before merging. Needs preview_url, production_url.

NameRequiredDescriptionDefault
urlNoFull address, for example https://example.com.
modeNoDefault pages.
afterNoHTML after the change.
pathsNoPaths like /pricing, default /.
beforeNoHTML before the change.
detailNobrief = short summary.
keywordNoOptional search term to compare keyword use.
memory_keyNosite_memory key, records this call.
competitorsNoCompetitor page addresses.
preview_urlNoThe deploy preview URL.
bypass_tokenNoVercel protection bypass secret.
production_urlNoThe live site.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so safety is covered. The description adds mode-dependent behavior and per-mode input requirements, which goes beyond the annotations, though it says nothing about permissions, rate limits, or what the comparison returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then a tight one-line-per-mode breakdown. Every clause carries information; there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description need not explain return values, and annotations cover the safety profile. The mode/parameter mapping makes the 12-parameter tool navigable, though optional params like paths, detail, keyword, and memory_key are left to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds genuine value beyond the schema by grouping parameters per mode (url+competitors for pages, before+after for html, preview_url+production_url for preview), which the flat schema does not express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Compare pages side by side") and then enumerates the three modes with a concrete description of each comparison. An agent can tell exactly what the tool does and how the three variants differ without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly maps each mode to a scenario (pages = you vs competitors, html = before/after versions, preview = deploy preview vs production) and names the parameters each mode requires. It stops short of naming when not to use the tool or alternatives among siblings, but the mode-routing guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contentContent strategyA
Read-only
Inspect

What to write and how, in the site's own voice, from the pages that rank and the user's search data. Pick with mode: brief = A content brief from the pages that rank. Needs keyword, competitors. topics = Search Console queries into topics, with the page that owns each, and keyword gaps. Needs rows[{query, page, clicks, impressions, position, url}]. intent = Your page against the search intent of the pages that rank. voice = Learn how the site writes from its best articles. Needs urls. calendar = A dated calendar of refreshes and new pages, steered by what worked here. draft = A draft against the site's voice, sources and SEO, before approval. Needs html.

NameRequiredDescriptionDefault
urlNoOptional: your existing page for this term.
htmlNoThe draft as HTML, title in <title> or <h1>.
modeNoDefault brief.
rowsNoSearch Console rows by query and page.
urlsNoThe site's own best articles, ones that rank and that the owner likes.
ideasNoTopics without a page yet.
startNoFirst day, YYYY-MM-DD, default today.
weeksNoWeeks to plan, default 8.
detailNobrief = short summary.
keywordNoThe search term the page should rank for.
queriesNoSearch Console rows by query and page, for the site-wide check.
audit_idNoOptional: a finished site audit, for internal link suggestions.
per_weekNoItems per week, default 2.
memory_keyNosite_memory key, records this call.
competitorsNoPages that rank for the term.
webhook_urlNoOptional https Slack or Discord webhook for a Monday reminder; off stops it.
competitor_rowsNoOptional keyword gap: competitors' organic keywords (Ahrefs organic-keywords or Semrush domain_organic for each competitor, or Semrush keyword gap rows).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=false, and destructiveHint=false, so the safety profile is covered. The description adds little beyond that — it hints at side effects (webhook Monday reminder, memory_key recording the call, draft 'before approval') but never states permissions, rate limits, or reversibility, so with annotations carrying the burden a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening states the tool's job and then the mode list is dense and front-loaded, with each mode entry pairing a verb with its required inputs. It is longer than average but nearly every clause carries routing or required-parameter information, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and annotations cover safety. For a 17-parameter, six-mode dispatcher the description supplies the critical mode-to-required-parameter mapping, though it leaves some parameters (detail, start, weeks, per_week, audit_id, ideas) mapped only via the schema, which is acceptable given 100% schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema alone would justify a baseline 3. The description earns above baseline by stating which parameters each mode requires ('Needs keyword, competitors', 'Needs rows[{query, page, clicks, impressions, position, url}]', 'Needs urls', 'Needs html') — information the schema cannot convey, since required is empty and every parameter is optional there.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete deliverable ('What to write and how, in the site's own voice') and then enumerates six distinct modes — brief, topics, intent, voice, calendar, draft — each with its own output. This distinguishes it sharply from siblings like text_quality, answer_readiness, and check_keyword, which an agent can rule out without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Pick with mode:' plus per-mode needs (brief needs keyword, competitors; topics needs rows[...]; voice needs urls; draft needs html) tells the agent exactly how to route within the tool. What is missing is any when-not-to-use or explicit cross-reference to sibling tools, which is why this falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dashboardSEO dashboardAInspect

A daily SEO data feed for key pages and a live dashboard in the chat. Pick with mode: feed = Start a daily feed of key pages; returns feed_id. Needs url. data = The feed as clean tables over time. Needs feed_id, dataset. build = Blueprint for a live SEO command center with realtime GA4 visitors. Needs feed_id.

NameRequiredDescriptionDefault
toNoEnd date, YYYY-MM-DD.
urlNoHome page of the site.
fromNoStart date, YYYY-MM-DD.
modeNoDefault feed.
nameNoOptional name, for example the client's name.
pagesNoOptional key pages to track, up to 10.
detailNobrief = short summary.
formatNoblueprint (default) for Claude Dashboards, or html for a complete, designed dashboard page filled with the feed's data, ready to show as an artifact.
datasetNo
feed_idNoFeed from create_dashboard_feed.
replaceNoReplace this connection's existing feed.
sourcesNoWhat the user has connected in Claude.
bigqueryNoOptional, for ready SQL.
fix_log_idNoOptional fix log from log_fix, to include shipped fixes.
memory_keyNosite_memory key, records this call.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false and destructiveHint=false, so mutation status and open-world behavior are covered structurally. The description adds meaningful state-chaining context ('returns feed_id', data mode consumes feed_id/dataset, build produces a blueprint) but says nothing about whether re-running feed mode overwrites prior output, what sources must be connected first, or what the returned dashboard actually contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The mode-first structure is front-loaded and the per-mode clauses are telegraphic with no filler sentences. It is dense to the point of clipped grammar, but every phrase carries a required-input or output fact, so nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter, nested-object, multi-mode tool with an output schema, the description supplies what the structured fields cannot: which mode to pick and which inputs each mode demands. Remaining gaps (how the three modes interact across a session, what the feed/dashboard delivers in practice) are modest given the output schema and high schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 93%, so the baseline is 3, and the description clears that bar by mapping parameters to modes (feed needs url, data needs feed_id and dataset, build needs feed_id) - a cross-parameter dependency the flat schema with no required fields cannot convey. It adds nothing about the many remaining optional parameters (from/to, pages, replace, sources, bigquery, memory_key), which the schema mostly documents on its own.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description leads with a concrete verb+resource ('daily SEO data feed for key pages and a live dashboard in the chat') and then decomposes the tool into three named modes with distinct deliverables, which is well beyond a restatement of the name. It never distinguishes itself from plausible siblings like watch or site_audit, so an agent still has to guess whether this is the right entry point within the suite.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Pick with mode: feed = ... data = ... build = ...' is explicit routing guidance and is reinforced by naming the required inputs for each branch, which the schema cannot express since zero parameters are marked required. There are no when-not conditions or pointers to alternative sibling tools for overlapping tasks such as tracking or auditing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edge_workerCloudflare WorkersB
Read-onlyIdempotent
Inspect

Fixes applied at the edge on the user's own Cloudflare, on any CMS. Pick with mode: rules = One Worker that fixes a whole section by rules. Needs audit_id. prerender = Serve rendered HTML to AI crawlers for JavaScript apps. Needs url.

NameRequiredDescriptionDefault
urlNoA page of the app, for example https://app.example.com/pricing.
modeNoDefault rules.
detailNobrief = short summary.
audit_idNoId of a completed site audit (start_site_audit, then get_site_audit until complete).
site_nameNoBrand name for title endings, for example 'Acme Shoes'.
memory_keyNosite_memory key, records this call.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description says 'Fixes applied at the edge on the user's own Cloudflare', which describes a mutating deployment to the user's Cloudflare account, while annotations declare readOnlyHint=true and destructiveHint=false. A write action presented as read-only is the exact contradiction pattern to flag. It also omits the auth/permission requirements such a deployment would need.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the tool is, then mode-by-mode detail and prerequisites in three tight sentences; every clause carries information. The telegraphic 'Pick with mode:' / 'Needs audit_id.' style is slightly clipped but wastes nothing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the two modes plus their prerequisites are covered. However, for an openWorld tool that touches the user's own Cloudflare, the description never states the authorization/setup prerequisite, what exactly is deployed, or whether it can be undone, leaving meaningful gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, and the schema already documents url, mode, detail, audit_id, site_name and memory_key. The description does add one piece of meaning beyond the schema: the conditional requirement that rules needs audit_id and prerender needs url, which the flat schema does not express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (a Worker running on the user's own Cloudflare, CMS-agnostic) and splits it into two named modes, rules and prerender, with a one-line definition of each. An agent can tell what the tool produces, though no sibling tool is named to differentiate it from the many other fix/asset generators in the suite.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear mode-selection guidance and the prerequisite for each mode: 'rules ... Needs audit_id' and 'prerender ... Needs url'. That is actionable when-to-use context, but it never says when to prefer edge_worker over siblings such as llms_txt, robots_txt, or get_fix_pack, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

entityEntity and trustA
Read-onlyIdempotent
Inspect

How Google understands who is behind a site. Pick with mode: graph = Organization, sameAs, logo and founder in structured data. Needs url. trust = Author, about, contact and policy signals. Needs url.

NameRequiredDescriptionDefault
urlNoFull address, for example https://example.com/blog/post.
modeNoDefault graph.
detailNobrief = short summary.
memory_keyNosite_memory key, records this call.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered. The description adds a useful signal ('Needs url') that compensates for the schema showing zero required parameters, but it discloses nothing about cost, rate limits or output behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences with the conceptual framing front-loaded, then the mode split. Every sentence carries information; no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only analysis tool with an output schema and a fully described input schema, the description covers the essentials: purpose, mode selection and the url requirement. Return-value details are correctly omitted since the output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes beyond the terse schema text ('Default graph') by explaining what each mode actually yields. It still says nothing about 'detail' or 'memory_key', which the schema already names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Frames the resource clearly ('How Google understands who is behind a site') and then specifies that it operates in two named modes, graph (Organization/sameAs/logo/founder) and trust (Author/about/contact/policy). An agent can tell what the tool returns, though it never uses a crisp verb like 'analyze' or 'extract' and doesn't name a sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Pick with mode: graph = ... trust = ...' gives explicit guidance for choosing between the two internal modes, which is genuinely useful. However it offers no when-to-use versus alternatives like 'schema' or 'content', and no when-not guidance, so tool-level selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explain_googleExplain Google and BingA
Read-onlyIdempotent
Inspect

Explain what Google Search Console and Bing Webmaster Tools report, and what to do. Pick with mode: index_status = Index coverage and rich result statuses, with the fix. Needs rows[{url, coverageState, verdict, indexingState, robotsTxtState, pageFetchState}]. manual_action = A manual action, with the cleanup plan and reconsideration draft. Needs action. bing = Bing Webmaster crawl issues, and Bing against Google per query.

NameRequiredDescriptionDefault
modeNoDefault index_status.
rowsNo
siteNoThe site or Search Console property.
actionNoThe manual action as Search Console shows it.
detailNobrief = short summary.
issuesNoBing crawl or index issues.
memory_keyNosite_memory key, records this call.
sample_urlsNoExample URLs Google listed.
bing_queriesNo
google_queriesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so safety is covered. The description adds genuine non-structured context: it returns remediation content ('with the fix', 'the cleanup plan and reconsideration draft') rather than raw report data, which an agent could not infer from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then uses a compact mode = meaning / needs-X pattern that is easy to scan. Dense but every clause carries information; the trailing 'bing' clause is slightly terse about what data it consumes but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, multi-mode tool with an output schema present, the description covers all three modes and their required inputs, and the return shape is handled by the output schema. Minor gaps remain (site, detail, memory_key are left to the schema), but nothing critical for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 70%, and the description adds mode-conditional parameter requirements that the schema does not encode since all 10 params are optional: rows[{url, coverageState, verdict, indexingState, robotsTxtState, pageFetchState}] for index_status, action for manual_action. This is real added meaning over the flat optional schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Explain what Google Search Console and Bing Webmaster Tools report, and what to do') and breaks the tool into three named modes with their outputs. An agent can distinguish it from diagnostic siblings like site_audit or technical, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear mode-selection rule (index_status / manual_action / bing) and states the input each mode needs (rows[...], action, bing query data), which is effectively the when-to-use guidance. It does not state when to prefer a sibling tool or when this tool is inappropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_opportunitiesFind search opportunitiesA
Read-onlyIdempotent
Inspect

Turn Search Console, GA4 or Ahrefs rows (also rows the user pastes) into the fastest wins, instead of judging them by hand; content_decay and traffic_drop take search_type for Discover, News, Image or Video rows. Pick with mode: ctr_gaps = Page 1 results with a click-through rate far below normal. Needs rows[{position, page, query, clicks, impressions, ctr}]. striking_distance = Queries at positions 8 to 20 worth a push. Needs rows[{position, page, query, clicks, impressions, ctr}]. content_decay = Pages slowly losing clicks over months: a refresh queue. Needs rows[{url, month, clicks}]. traffic_drop = Explain a drop page by page, by device and country. Needs rows[{url, before, after, query, device, country}]. prune = Keep, refresh, merge (301), noindex or remove (410) per page. Needs rows[{url, clicks, impressions, conversions, referring_domains, inlinks}]. discover = Readiness for Google Discover and News, with Discover or News rows. paid_organic = Google Ads terms against Search Console: ad spend you can test cutting, content to write. Needs ads[{term, cost, clicks, conversions}], gsc[{query, position, clicks, page}]. anomalies = Spike and drop days in daily rows, with Google updates near them. Needs rows[{date, clicks, impressions, page}]. ai_queries = Question and prompt-style queries per page, for AI answers. Needs rows[{query, page, clicks, impressions, position}].

NameRequiredDescriptionDefault
adsNoGoogle Ads search terms.
gscNoSearch Console queries.
modeNoDefault ctr_gaps.
rowsNoSearch Console rows for one period (28 days works well).
urlsNoArticle pages to check.
detailNobrief = short summary.
drop_dateNoOptional first day of the drop, YYYY-MM-DD, to check Google updates around it.
fix_log_idNoOptional fix log from log_fix, to spot undone fixes on losing pages.
memory_keyNosite_memory key, records this call.
brand_termsNoOptional brand names, handled apart.
search_typeNoSearch Console search type of the rows, default web.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds mode-specific output goals ('a refresh queue', 'Explain a drop page by page') and input constraints, but no extra behavioral context such as auth requirements or return format beyond what the schema and output schema provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loads the core purpose and then devotes each sentence to a mode, so little is wasted. It would be more scannable as a bulleted list rather than a single dense paragraph, but the information density is appropriate for nine modes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and all parameters documented, the description is nearly complete for mode selection and required row fields. It does not explain how auxiliary parameters (urls, drop_date, fix_log_id, etc.) pair with specific modes, leaving some integration detail to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters like ads, gsc, mode, and others are already documented. However, the description adds crucial meaning by mapping each mode to the exact fields required inside the generic rows array (e.g., ctr_gaps needs position, page, query, clicks, impressions, ctr), which the schema alone does not specify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('turn rows into fastest wins') and resource (Search Console/GA4/Ahrefs rows), and enumerates nine distinct modes with their distinct outputs. An agent can distinguish this from siblings like prioritize_fixes or check_keyword without opening other tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit mode-selection criteria ('ctr_gaps = Page 1 results with a click-through rate far below normal', etc.) and states the required row shape for each mode. It lacks any when-not-to-use guidance or naming of external sibling alternatives, but the internal routing is very clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fix_logFix logAInspect

Record shipped fixes, keep them live and report on them. Pick with mode: log = Record a shipped fix; checked every 6 hours, restore code on regression. Needs fixes[{url, field, new, old, via, ref}]. report = Every fix with status and results: a monthly client report. Needs fix_log_id.

NameRequiredDescriptionDefault
modeNoDefault log.
brandNoFor the report: your agency name for the header.
fixesNo
monthNoFor the report: YYYY-MM.
detailNobrief = short summary.
formatNostatus (default), a client report, or GA4 annotations (one per ship date) for the Admin API.
verifyNoCheck the live pages now (4 pages per call).
webhookNoOptional https URL (Slack, Discord, Zapier, n8n, a GitHub Action) that gets the restore code when a fix is undone.
fix_log_idNoAdd to an existing log.
memory_keyNosite_memory key, records this call.
shipped_atNoDate the fixes went live, YYYY-MM-DD.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (which only say not-read-only, open-world, non-idempotent, non-destructive), the description discloses real behavior: fixes are re-checked every 6 hours and code is restored on regression, the webhook receives restore code when a fix is undone, verify checks live pages at 4 pages per call, and format=annotations emits GA4 Admin API annotations. Auth/permission requirements are not covered, keeping it at 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose followed by two clearly labeled mode branches; nothing reads as filler and the per-branch prerequisite lists are compact. The bracketed "fixes[{url, field, new, old, via, ref}]" shorthand is terse but functional rather than elegant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 11 parameters at 91% schema coverage and an output schema present, the description does the work that matters: mode selection, branch prerequisites, verification cadence, and webhook notification behavior. Only authentication/authorization context and the relationship to sibling monitoring tools are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 91%, so the baseline is 3, but the description adds mode-scoped meaning the flat schema does not convey: which parameters belong to the log branch (fixes subfields url/field/new/old/via/ref) versus the report branch (fix_log_id), plus the 6-hour check semantics tied to the logged values. Minor tension exists between the schema's "Add to an existing log" phrasing for fix_log_id and the description presenting it as required for report mode.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource ("Record shipped fixes, keep them live and report on them") and the mode branch spells out both operations, so the agent knows exactly what the tool does. It does not, however, name or contrast any sibling (e.g. watch, tracking, site_memory), so it falls short of the 5-level sibling differentiation bar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Pick with mode: log = ... report = ..." gives explicit branch conditions, and the "Needs fixes[...]" / "Needs fix_log_id" clauses state which inputs each branch requires. There is no when-not guidance and no named alternative tool, so it stops short of 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_fix_packFixes as codeAInspect

Fixes ready to ship: as code, for a CMS through its MCP, as a pull request or at the edge. Pick with mode: fixes = Title, description, canonical, social tags, JSON-LD; platform html, wordpress, shopify, webflow, wix, storyblok, sanity, contentful, strapi, ghost, magento, git or cloudflare. Needs url. alt_texts = Write and ship missing alt texts. Needs url. web_vitals = Speed fixes as tags, WordPress steps or a Worker. Needs url. wordpress = Send fixes, new drafts and post updates to the OnPage.dev WordPress plugin for one-click approval and undo. Needs site_key.

NameRequiredDescriptionDefault
urlNoFull address of the page, for example https://example.com/pricing.
altsNoStep 2: the alt text per image src.
modeNoDefault fixes.
noteNoOptional reason shown to the site owner.
detailNobrief = short summary.
changesNoOptional field and new value pairs.
failingNoMetrics that fail for real users, if known.
platformNohtml (default) for code to paste; wordpress, webflow, wix, shopify, storyblok, sanity, contentful, strapi, ghost or magento for a plan with the exact fields and
site_keyNoThe site key from the plugin, wpk_...
change_idNoStatus of an earlier send.
frameworkNoWith platform git: the site's framework.
memory_keyNosite_memory key, records this call.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true and destructiveHint=false. The description adds real context beyond that for the wordpress mode: fixes, drafts and post updates are sent to the plugin with one-click approval and undo, which reassures about reversibility. It does not disclose auth requirements, rate limits, or whether repeated non-idempotent calls duplicate sends, so it is useful but partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The mode list is dense but consistently structured ('mode = output. Needs x.'), and the deliverable is front-loaded. The opening clause 'Fixes ready to ship' is marketing filler, and cramming four modes plus platform lists into one paragraph makes it harder to scan than bullets would.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described. For a 12-parameter, 4-mode tool the description covers the mode taxonomy and required inputs well; the main omission is any signal about ordering relative to siblings (e.g. analyze first, then generate fixes).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes further by binding parameters to modes – url is required for fixes/alt_texts/web_vitals and site_key for wordpress. That mode-to-parameter dependency is not expressible in the flat schema and is the single most useful thing added here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete deliverable – a 'fix pack' emitted as code, CMS payload, PR, or edge worker – and enumerates the four modes (fixes, alt_texts, web_vitals, wordpress) with the artifact each produces. That is specific verb+resource+output. It does not, however, name or contrast itself against closely related siblings such as prioritize_fixes, plan, accessibility, or web_vitals, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through mode semantics and the per-mode prerequisites ('Needs url', 'Needs site_key'), which tells an agent which mode requires what input. There is no explicit when-to-use/when-not guidance and no routing to alternatives, e.g. which sibling to call first to decide which fixes are needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

layoutLayout and first screenA
Read-onlyIdempotent
Inspect

What visitors and crawlers see on every screen size. Pick with mode: render = First screen on phone, tablet and desktop in a real browser, and what crawlers without JavaScript get (default). Needs url. probe = A measurement script to run in the user's own browser tool. analyze = Analyse the results of that script. Needs url, results.

NameRequiredDescriptionDefault
urlNoFull address of the page, for example https://example.com/pricing.
modeNoDefault render.
no_jsNoOptional: the probe result with JavaScript turned off, for an exact comparison.
detailNobrief = short summary.
resultsNoOne probe result per viewport, each with device set to phone, tablet or desktop.
memory_keyNosite_memory key, records this call.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, open-world, non-destructive behavior, and the description adds real context: render uses "a real browser" and captures "what crawlers without JavaScript get," while probe delegates execution to the user's browser. That materially explains execution model beyond the structured safety hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence followed by a compact per-mode breakdown; every clause carries information. It is telegraphic and slightly dense, but there is no filler to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the description covers mode semantics and required inputs for a 6-parameter tool. The main residual gap is that it does not call out optional params (no_js, detail, memory_key) or differentiate from siblings, though the schema fills those in.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining what each mode value actually produces and which params each mode requires. It leaves no_js, detail, and memory_key to the schema, but those are already well documented there.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the resource concretely: "What visitors and crawlers see on every screen size," and then describes each mode's distinct output (first-screen rendering vs. a probe script vs. analysis). This lets an agent distinguish the three behaviors. It never positions itself against sibling tools like content or technical, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit mode-selection guidance ("Pick with mode"), marks render as the default, and names the required inputs per mode ("Needs url," "Needs url, results"). It does not say when to prefer this tool over sibling tools such as content or scan_page, which keeps it below a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

llms_txtllms.txtA
Read-onlyIdempotent
Inspect

The llms.txt file for AI assistants. Pick with mode: generate = Write one from the sitemap and home page. Needs url. validate = Check an existing one and its links. Needs url.

NameRequiredDescriptionDefault
urlNoHome page of the site, for example https://example.com.
modeNoDefault generate.
textNoOptional llms.txt content to validate instead of the live file.
detailNobrief = short summary.
memory_keyNosite_memory key, records this call.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations carry the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the bar is lower. The description usefully states that generate derives content from the sitemap and home page and that validate inspects links, but says nothing about network access, rate limits, or that memory_key causes the call to be recorded.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three terse sentences, front-loaded with the resource and then the mode decision. Every clause carries information; nothing is padded or restated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter tool with full schema coverage plus an output schema, the description covers the decision an agent must make (which mode, and that a URL is needed) and correctly leaves return values to the output schema. The incomplete handling of the text/detail/memory_key path is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description exceeds it by supplying the conditional requirement the schema does not encode ('Needs url' for both modes) even though no parameter is marked required. It is slightly imprecise, since url may be unnecessary when text is supplied, and it never mentions text, detail, or memory_key.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the resource (the llms.txt file for AI assistants) and splits it into two concrete operations with explicit verbs: generate writes one from the sitemap and home page, validate checks an existing one and its links. It does not, however, distinguish itself from adjacent siblings such as robots_txt or sitemap, which an agent could plausibly confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Pick with mode' framing gives a clear branch rule, and each mode's precondition ('Needs url') tells the agent what must be supplied before calling. No exclusions or alternative-tool routing are given, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

localLocal SEOA
Read-onlyIdempotent
Inspect

Local search: the site, the Business Profile and the map. Pick with mode: check = LocalBusiness markup, NAP, locations and the Business Profile (default). Needs url. reviews = Reply drafts for Google reviews, unhappy ones first, for the user's GBP connector after approval. Needs reviews[{rating, author, text, date, replied, review_id}]. demand = Business Profile search terms and geo-grid ranks into new service and location pages.

NameRequiredDescriptionDefault
urlNoThe home page, a location page or the locations overview page.
cityNoMain city, left out when matching terms to pages.
gridNoOptional geo-grid rankings.
modeNoDefault check.
pagesNoThe site's page URLs, e.g.
termsNoSearch terms from the Business Profile performance report.
detailNobrief = short summary.
contactNoWhere unhappy customers can reach you, e.g.
reviewsNo
businessNoBusiness name to sign with.
memory_keyNosite_memory key, records this call.
gbp_profileNoOptional: the Google Business Profile of this location, from the user's GBP connector or typed by the user, to compare with the site.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the bar is lower. The description adds real behavioral context beyond them: reviews mode only produces reply drafts routed to the user's GBP connector 'after approval', unhappy reviews are handled first, and GBP profile data is used only for comparison. No contradiction with the readOnly hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the domain, then three tight mode clauses each stating purpose and required input. Dense but every clause carries routing information. Slightly compressed notation (e.g. 'Needs reviews[{...}]') costs a little readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter multi-mode tool with an output schema (so return values need not be explained), the description covers all three modes and their key inputs and side effects. It leaves secondary parameters (city, grid, terms, detail, contact, memory_key) unexplained, but those are documented in the schema at 92% coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 92%, so the baseline is 3, but the description adds value the schema cannot: it maps which inputs each mode requires (url for check, the reviews[] array for reviews) even though every top-level parameter is formally optional (required: 0). That per-mode requirement linkage is genuine added semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete domain (local search: site, Business Profile, map) and decomposes it into three clearly labeled modes with distinct outputs, so an agent can tell what the tool produces. The bare name 'local' is weak, but the description compensates. It differentiates internally by mode rather than from siblings like schema or entity, so it stops just short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit mode selection with defaults and prerequisites ('check... (default). Needs url', 'reviews... Needs reviews[...]', 'demand = ...'). That is strong within-tool routing. It does not name when to avoid the tool or which sibling (schema, entity, track_rankings) to prefer instead, so it is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

measureMeasure resultsA
Idempotent
Inspect

Prove and measure with numbers from the user's Search Console, GA4, Ahrefs or Semrush, including numbers the user pastes. Use it instead of calculating by hand: it handles spelling variants, control groups and trends. Pick with mode: impact = Before and after fixes, against pages you did not touch. Needs pages[{url, before, after, changed, fix}]. ai_citations = AI citations before and after, per engine. Needs pages[{url, before, after, changed}]. ai_referrals = Visits from ChatGPT, Perplexity, Gemini and other assistants, from GA4. Needs rows[{source, sessions, landing_page, period, conversions, revenue}]. brand_split = Brand versus non-brand clicks and how each moved. Needs brand_terms, rows[{query, keyword, clicks, traffic, impressions, position}]. share_of_voice = Share of the clicks against competitors from rank rows. Needs your_domain, rows[{keyword, position, volume, domain, url, group}].

NameRequiredDescriptionDefault
daysNoLength of each period in days.
modeNoDefault impact.
rowsNo
pagesNo
detailNobrief = short summary.
sourceNoWhere the counts come from, for example Ahrefs Brand Radar.
fix_dateNoDate the fixes went live, YYYY-MM-DD.
watch_idsNoOptional watch ids, to list what changed on each page and when.
fix_log_idNoOptional fix log from log_fix: takes the fix date from it and saves the result per fix, with a rollback plan for fixes that did worse.
memory_keyNosite_memory key, records this call.
brand_termsNoBrand and product names, and misspellings.
rows_beforeNoOptional same rows from an earlier period.
your_domainNoYour domain, e.g. example.com.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=false, idempotent=true, destructive=false), and the description adds real behavioral context beyond them: fix_log_id saves results per fix and produces a rollback plan for fixes that did worse, and memory_key records the call into site_memory. It does not discuss rate limits or failure behavior, but the mutation/persistence semantics are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the mode-selection rationale, then compressed into a dense mode-by-mode input list. Every clause carries information, though the packed enumeration reads as terse rather than ideally structured prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 13 parameters, five modes, 85% schema coverage, an output schema, and annotations, the description supplies the mode-to-input mapping and persistence semantics an agent needs to invoke it correctly. Minor gaps remain around default behavior for unlisted optional parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 85% (baseline 3), and the description goes further by spelling out the concrete field sets required per mode — e.g. pages[{url, before, after, changed, fix}] for impact and rows[{source, sessions, landing_page, period, conversions, revenue}] for ai_referrals. This meaningfully compensates for the untyped nested object arrays the schema leaves bare.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and scope: prove and measure numbers from named sources (Search Console, GA4, Ahrefs, Semrush) plus pasted data. It distinguishes itself from calculation-by-hand and from sibling analytics tools by enumerating the five modes it produces, so an agent can tell what it does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes usage ('Use it instead of calculating by hand') and gives per-mode selection guidance with the required input shape for each mode. It does not name a sibling tool to prefer or state when not to use it, so it falls short of full when/when-not/alternative coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

planPlan the workA
Read-onlyIdempotent
Inspect

Plans for migrations, experiments and the team. Pick with mode: redirects = Redirect map for a migration or URL change. split_test = SEO split test on a page template, with the Worker. Needs urls, field, pattern. sprint = Fixes into a week plan of tickets per role. Needs fixes[{title, url, detail, severity, impact, effort}].

NameRequiredDescriptionDefault
modeNoDefault redirects.
urlsNoPages of one template.
fieldNoWhat to change.
fixesNo
hoursNoHours per week per role, default 8 each.
weeksNoWeeks to plan, default 4.
clicksNoOptional clicks per page for a balanced split.
detailNobrief = short summary.
formatNoOutput format, default redirects (Cloudflare Pages and Netlify).
patternNoThe new value with {title} or {description} as placeholders.
new_siteNoNew site address, to read its sitemap instead of new_urls.
new_urlsNo
old_siteNoOld site address, to read its sitemap instead of old_urls.
old_urlsNo
memory_keyNosite_memory key, records this call.
start_dateNoOptional planned start, YYYY-MM-DD.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, openWorld, so safety is covered. The description adds mode-specific behavioral context the annotations cannot: what each mode produces (redirect map, Worker-based split test, week plan of tickets per role) and the required input shapes, which is genuine added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The mode breakdown is front-loaded right after a one-line purpose statement, and each clause carries distinct information. It is dense shorthand rather than filler, though the compact "=" notation reads a little run-on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter, multi-mode tool, the description covers the three modes' key inputs and the output schema handles returns. However, it leaves many parameters (hours, weeks, detail, format, old_site/new_site, clicks, memory_key, start_date) unmapped to modes, so an agent must infer which apply when.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 81% schema coverage the baseline is 3, but the description goes further by mapping parameters to modes (split_test needs urls/field/pattern; sprint needs fixes with its subfields), which the schema alone cannot express since param applicability is mode-dependent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the verb ("Plans") and the three concrete resources/use cases (migrations, split tests, team sprints), then breaks each mode down so an agent can tell redirects from split_test from sprint. It is specific and non-tautological, though it does not differentiate from any sibling tool by name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly tells the agent how to select behavior via "Pick with mode" and gives a condition/purpose for each of the three modes, plus the inputs each mode needs. There is no "when not to use" guidance or pointer to alternative sibling tools, keeping it out of the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prioritize_fixesRank fixes by traffic impactA
Read-onlyIdempotent
Inspect

Use when Search Console, GA4, Ahrefs or Semrush data is available, also to explain a traffic drop (pass clicks_previous): ranks the fixes by the traffic or revenue they can win. Rank SEO fixes by how much traffic they can win, using data from the user's other connected tools. With GA4, also pass each page's organic conversions (key events) or revenue, and fixes are ranked by the money they can bring instead of clicks.

NameRequiredDescriptionDefault
pagesYes
detailNobrief = short summary.
sourceNoWhere the numbers come from.
audit_idNoOptional id of a finished site audit, so pages are not scanned again.
currencyNoCurrency of revenue, for example EUR or USD.
memory_keyNosite_memory key, records this call.

Output Schema

NameRequiredDescription
modeNo
statusYes
actionsNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety burden is light. The description adds real behavioral detail beyond them: passing clicks_previous triggers a refresh fix, and supplying GA4 conversions or revenue switches the ranking objective from clicks to money.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The usage condition and click-loss tip are front-loaded, but the second sentence largely restates the title and the first sentence's ranking claim without adding information, creating noticeable redundancy in a short description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and annotations cover safety. The description supplies the data-source preconditions and the two objective-switching behaviors an agent needs, leaving only minor gaps such as scope limits (max 10 pages).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 83%, so the baseline is 3. The description adds genuine semantics on top of the schema by explaining the purpose of clicks_previous (diagnosing traffic drops) and of conversions/revenue (re-ranking by monetary return), which the schema fields alone only hint at.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: ranks SEO fixes by the traffic or revenue they can win. An agent can tell this is a prioritization tool rather than a raw data collector, though it never names the sibling it is distinguished from (e.g. find_opportunities or plan).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit trigger conditions are given: use when Search Console, GA4, Ahrefs or Semrush data is available, and additionally to explain a traffic drop by passing clicks_previous. It lacks exclusion criteria or named alternatives, but the when-to-use context is concrete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_recrawlRecrawlA
Idempotent
Inspect

Get changed pages recrawled. Pick with mode: recrawl = Check pages are indexable, sitemap lastmod entries, IndexNow and Search Console steps (default). Needs urls. indexnow = Submit URLs to IndexNow, or set up the key. Needs urls.

NameRequiredDescriptionDefault
keyNoThe site's IndexNow key (8 to 128 letters, digits or dashes).
modeNoDefault recrawl.
urlsNoChanged pages on one site.
detailNobrief = short summary.
memory_keyNosite_memory key, records this call.
indexnow_keyNoOptional IndexNow key that is live at /<key>.txt.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=true, destructive=false and openWorld=true, so the safety profile is covered. The description adds meaningful behavioral detail beyond that: it enumerates the steps the recrawl performs (indexability check, sitemap lastmod, IndexNow, Search Console) and discloses a practical requirement ('Needs urls') that the schema does not enforce, since zero parameters are marked required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded in the first sentence, then mode semantics follow in a compact form. 'Needs urls' is repeated for each mode, which is mildly redundant but serves as an emphasis of the shared requirement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. For a 6-parameter, 0-required tool the description supplies the missing mode semantics and the practical 'needs urls' constraint, leaving little an agent needs but doesn't have.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description earns a bump because the schema's own enum descriptions are terse ('Default recrawl'), whereas the description explains what 'recrawl' and 'indexnow' actually do and flags that 'urls' is effectively needed for both, adding meaning the schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get changed pages recrawled') and then breaks the tool into its two operating modes, so the agent understands what it does. It doesn't name or contrast against sibling tools like sitemap or a dedicated IndexNow tool, so sibling differentiation is only implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent how to choose a mode: 'recrawl' (default) versus 'indexnow', and describes what each does. This is clear when-to-use guidance for the sub-behaviors, though it gives no when-not-to-use or cross-tool alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

robots_txtrobots.txtA
Read-onlyIdempotent
Inspect

robots.txt for search and AI crawlers. Pick with mode: test = Which crawlers may fetch a URL, and the rule that decides. Needs url. ai_policy = Rules per AI crawler: allow AI search, block training. Needs url, policy.

NameRequiredDescriptionDefault
urlNoFull address of the page, for example https://example.com/pricing.
modeNoDefault test.
detailNobrief = short summary.
policyNoWhich AI crawlers to allow.
memory_keyNosite_memory key, records this call.
robots_txtNoOptional robots.txt content to test instead of the live file.
user_agentsNoCrawler names, for example Googlebot, GPTBot, ClaudeBot, PerplexityBot.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds the useful behavioral fact that required inputs vary by mode, but says nothing about the robots_txt override, user_agents, or memory_key side effects, leaving that to the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loaded with the resource and then the mode decision; every clause carries information an agent needs to select a mode.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and the mode split plus prerequisite params are covered. Coverage of the auxiliary inputs (detail, user_agents, robots_txt, memory_key) is left entirely to the schema, which is acceptable given 100% schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents url, mode, detail, policy, user_agents and the robots_txt override. The description only reinforces which params are needed per mode, which is marginal added meaning over the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the resource (robots.txt) and splits it into two concrete capabilities, test and ai_policy, each with a one-line outcome. An agent can tell the two modes apart, though it gives no signal about how this differs from the sibling llms_txt tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says how to pick: 'Pick with mode: test = ...' and 'ai_policy = ...', and names the prerequisites for each ('Needs url', 'Needs url, policy'). There is no when-not guidance or sibling alternative routing, which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scan_pageSEO and AI scanA
Read-only
Inspect

Scan a page for Google and AI search: 0-100 score, issues to fix first with why and how, AI readiness and key facts. Pick with mode: page = A live page by url (default). Needs url. html = Unpublished HTML before deploy, to gate a release. Needs html. deep = Everything measured on one page, by section. Needs url. rescan = Scan again after fixes and compare with the last scan. Needs url.

NameRequiredDescriptionDefault
urlNoFull address of the page, for example https://example.com/pricing.
htmlNoThe complete HTML document, up to 900 KB.
modeNoDefault page.
detailNobrief = short summary.
sectionsNoSections to include. Default: all.
memory_keyNosite_memory key, records this call.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, non-destructive, openWorld, and non-idempotent, so the safety profile is covered. The description adds mode-specific prerequisites ("Needs url" / "Needs html") and the compare-with-last-scan behavior of rescan, which is real context beyond the structured fields, though it does not mention limits or how the scan is scoped.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the value proposition, then a compact mode list where every clause carries needed information. No filler sentences; the dense prose is justified by the number of distinct modes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering safety, the description need not explain return values, and it covers the mode branching well. Its gap is that it never positions this against broad siblings like site_audit or accessibility, leaving the page-vs-site choice to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the schema's mode field says only "Default page" while the description gives each enum value distinct meaning and its required companion parameter. That is meaningful semantic value added on top of the schema, though detail, sections, and memory_key get no extra explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Scan a page") and enumerates the concrete outputs (0-100 score, prioritized issues with why/how, AI readiness, key facts), which separates it from single-facet siblings like accessibility, content, or technical. An agent can immediately tell this is the broad page-level SEO/AI scan.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The mode breakdown is explicit when-to-use guidance: page for a live URL, html for unpublished HTML gating a release, deep for per-section measurement, rescan for post-fix comparison. Each mode names its required input, so the agent can pick correctly without inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

schemaStructured dataA
Read-onlyIdempotent
Inspect

JSON-LD structured data for rich results. Pick with mode: generate = Write JSON-LD for a page: type Article, Product, FAQPage, Organization, BreadcrumbList, VideoObject, Event, Recipe, JobPosting, SoftwareApplication, ProfilePage or Course. Needs url. validate = Validate JSON-LD for rich results. Needs jsonld. product_page = Check an existing ecommerce product page (price, stock, merchant listing fields). To write Product JSON-LD use generate with type Product. Needs url.

NameRequiredDescriptionDefault
urlNoFull address of the page, for example https://example.com/pricing.
modeNoDefault generate.
typeNoSchema type, default auto.
detailNobrief = short summary.
jsonldNoThe JSON-LD as text, with or without the <script> tag.
memory_keyNosite_memory key, records this call.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuine behavior beyond that: what each mode actually does (generate produces JSON-LD, validate checks it, product_page inspects an existing ecommerce page for price/stock/merchant fields) and the required input per mode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the one-line purpose, then uses a compact mode = behavior = requirement structure that is easy to scan. Dense but every fragment carries routing or prerequisite information; only the type enumeration is slightly list-heavy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter, three-mode tool with an output schema and full annotation coverage, the description covers what each mode does and what each needs, so an agent has enough to call it. It leaves the memory_key side effect and the detail parameter's impact largely to the schema, a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes further by tying parameters together across the mode enum: url is needed for generate and product_page, jsonld for validate, and the type enum is spelled out with a note that 'auto' is the default. That cross-parameter conditional logic is not expressible in the flat schema and adds real value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (JSON-LD structured data for rich results) and then decomposes the tool into three concrete operations: generate, validate, and product_page. Each mode is described with its own verb and required input, so an agent can tell exactly what the tool produces in each case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives per-mode selection guidance and prerequisites ('Needs url', 'Needs jsonld') and disambiguates an easy mistake by routing Product writing to 'generate with type Product'. It does not name any sibling alternative or state when not to use the tool, so it stops short of a full when-to-use/when-not treatment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shareShare and exportAInspect

Send results where the team works. Pick with mode: link = A link to the visual report. Needs url. export = A Google Sheet, CSV, Slack message or one task per issue.

NameRequiredDescriptionDefault
urlNoFull address, for example https://example.com/pricing.
modeNoDefault link.
detailNobrief = short summary.
audit_idNoA finished site audit from start_site_audit, to export the whole site.
memory_keyNosite_memory key, records this call.
slack_webhook_urlNoOptional https incoming webhook (Slack, Discord, Teams) to post the summary to.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false and destructiveHint=false, so the safety profile is covered. The description adds useful context about external side effects (creating a Google Sheet, CSV, Slack message, or one task per issue) and the url dependency for link mode, but says nothing about repeat-call behavior, auth needs, or rate limits despite idempotentHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences that are front-loaded with the overall purpose before the mode breakdown. Nearly every clause carries information, though 'Send results where the team works' is slightly promotional filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained, and the six parameters are fully documented in the schema. The description covers the two operationally important knobs (mode and url) but omits any mention of detail, audit_id, memory_key, or slack_webhook_url beyond what the schema already provides.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so a baseline of 3 is warranted, but the description goes beyond the terse schema text by explaining what each mode value actually produces and by flagging that link mode additionally requires url. That extra meaning exceeds the schema's 'Default link.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (send/share) and resource (results/reports) and splits the tool into two named modes with link and export outputs. It is clear what the tool does, though it does not directly contrast itself with sibling analysis tools like dashboard or site_audit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives conditional guidance for choosing a mode ('link = A link to the visual report. Needs url', 'export = A Google Sheet, CSV...'), which routes the agent reasonably well. However, there is no explicit when-not-to-use, no prerequisites, and no mention of alternatives among the many sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

site_auditWhole-site auditAInspect

Audit a whole site, step by step, and work with the result. Pick with mode: start = Start an audit of up to 25 pages; returns audit_id. Needs url. continue = Scan the next pages; call until complete. Issues by code, sections, average score. Needs audit_id. import = Turn a crawl from Screaming Frog, Ahrefs or Semrush (up to 500 pages) into an audit_id. Needs pages[{url, status, redirect_to, title, meta_description, h1}]. compare = What changed since the last audit, or against a competitor audit. Needs audit_id. report = A client-ready report page with a link. Needs audit_id.

NameRequiredDescriptionDefault
urlNoFull address, for example https://example.com.
modeNoDefault start.
noteNoOptional short note for the reader, shown at the top.
brandNoOptional agency or team name to show instead of OnPage.dev.
linksNoOptional internal links, for link equity, orphans and internal link suggestions.
pagesNoOne row per crawled page.
detailNobrief = short summary.
sourceNoWhere the rows come from, for example Screaming Frog or Ahrefs Site Audit.
audit_idNoThe id returned by start_site_audit.
max_pagesNoHow many pages to audit, default 10, at most 25.
memory_keyNosite_memory key, records this call.
previous_audit_idNoOptional: the audit to compare with.
competitor_audit_idNoOptional: a finished audit of a competitor's site, to compare the two sites side by side instead of over time.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint false, destructiveHint false, openWorldHint true), so the description's job is to add workflow context — which it does: start returns an audit_id, continue iterates until complete, import converts external crawl data into an audit_id, and report produces a client-ready page with a link. The multi-step state-chaining and the 25/500 page caps are useful disclosures beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded ('Audit a whole site, step by step') and each mode is presented as a compact 'mode = behavior. Needs X.' unit. It is telegraphic and runs together as one block, but nearly every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all five modes, their required arguments, and step limits, and an output schema exists so return values need not be described. The compare mode only says 'Needs audit_id' without mentioning the schema's previous_audit_id/competitor_audit_id options, a minor gap for a 13-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real value by mapping which parameter each mode requires (url for start, audit_id for continue/compare/report, pages[{...}] for import) — for a mode-dispatch tool this mapping is the key semantic an agent needs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Audit a whole site') and enumerates five distinct modes (start, continue, import, compare, report), so an agent immediately understands this is the whole-site audit orchestrator rather than a single-page scan. It does not explicitly distinguish itself from siblings like scan_page or technical, which keeps it at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Each mode carries inline usage context: 'call until complete' for continue, 'compare the two sites side by side' for compare, and the required argument per mode. This is strong when-to-use guidance for a mode-dispatch tool, though it offers no explicit exclusions or pointers to alternative siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sitemapXML sitemapA
Read-onlyIdempotent
Inspect

The XML sitemap. Pick with mode: check = Check the sitemap and a sample of its URLs. Needs url. generate = Write a sitemap from a page list or audit. Needs audit_id.

NameRequiredDescriptionDefault
urlNoThe site's home page, or the sitemap URL itself.
modeNoDefault check.
detailNobrief = short summary.
audit_idNoA finished site audit.
memory_keyNosite_memory key, records this call.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds useful behaviour (check samples the sitemap's URLs; generate derives a sitemap from a page list or a finished audit), but it doesn't resolve the tension between 'Write a sitemap' and readOnlyHint=true — it should say the generated sitemap is an artifact returned to the caller rather than a change to the site. No rate limits, no side effects, no auth requirements stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short clauses, mode selection front-loaded, zero filler. Every sentence carries routing information an agent can act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and the mode/parameter contract is fully covered. Minor gaps remain around the detail flag's effect and around how generate relates to site_audit, but for a two-mode tool with 100% schema coverage this is close to sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes beyond the schema by mapping modes to the parameters they require (url for check, audit_id for generate) — information the schema's terse 'Default check.' does not convey. It still says nothing about detail, memory_key, or the url-vs-sitemap-URL distinction beyond what the schema already contains.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The mode definitions supply real verbs and resources: 'check = Check the sitemap and a sample of its URLs' and 'generate = Write a sitemap from a page list or audit.' An agent can tell this is a two-mode sitemap tool. However, the tool is not distinguished from nearby siblings such as site_audit, robots_txt, or llms_txt, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit mode-selection guidance with the triggering parameter for each branch ('check ... Needs url', 'generate ... Needs audit_id'), which is exactly what an agent needs to route a request. It stops at context though — there is no when-not-to-use and no pointer to an alternative sibling when the sitemap is not the right target.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

site_memorySite memoryAInspect

A memory per site that every OnPage.dev tool writes to, across chats and clients. Open it first when working on a site over time. Pick with mode: open = Open or create the memory, bind it to this chat, get the brief and next steps (default). Needs url. next = The best next steps from everything recorded. timeline = What happened, newest first. note = Record a decision or context. Needs note. forget = Delete the memory (ask the user first). Needs memory_key.

NameRequiredDescriptionDefault
urlNoThe site's home page.
kindNo
modeNoDefault open.
noteNo
limitNo
detailNobrief = short summary.
memory_keyNoThe memory_key you got when the memory was created.
share_learningNoOpt in (true) or out (false) of sharing anonymous results: only the fix type and the rounded lift, never the site, URLs or numbers.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states that forget mode deletes the memory, which is a destructive operation, but the annotations declare destructiveHint=false. This directly contradicts the tool's own behavioral description. Even though other modes are well explained, the contradiction is serious enough to cap this dimension at 1.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and usage, then compactly enumerates each mode with its behavior and required inputs. Every clause earns its place despite covering five modes, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex eight-parameter, multi-mode tool, the description covers the main modes and their required inputs well, and an output schema exists so return values need not be explained. However, it omits meaning for kind, limit, detail, and share_learning, and the destructiveHint contradiction leaves the agent with an inconsistent behavioral picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds conditional requirements for url, note, and memory_key, and clarifies the default mode. However, it does not explain the kind, limit, detail, or share_learning parameters, and schema description coverage is only moderate. It adds useful mode-linked semantics but leaves several parameters unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the tool as a site-specific memory that every OnPage.dev tool writes to, distinguishing it from all sibling tools. The multi-mode behavior is stated up front, so an agent immediately understands this is the central persistent memory layer for a site.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to open it first when working on a site over time, then explains when to use each mode: open for setup and brief, next for next steps, timeline for history, note for recording context, and forget for deletion. Required parameters per mode and the instruction to ask the user before forgetting are also included.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

snippetSnippets and share cardsA
Read-onlyIdempotent
Inspect

How a page looks in Google and when shared, measured in pixels the way Google truncates. Use it instead of estimating title or description length. Pick with mode: search = Title and description as Google shows them; give title (and description) or a url to read them. social = Open Graph and X cards, and the share image. Needs url.

NameRequiredDescriptionDefault
urlNoPage to read the current title and description from, when no title is given.
modeNoDefault search.
titleNoProposed title tag text.
detailNobrief = short summary.
memory_keyNosite_memory key, records this call.
descriptionNoProposed meta description.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world. The description adds behavior they don't cover: results are 'measured in pixels the way Google truncates', and social mode imposes a url requirement. It does not discuss return format, but the output schema handles that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core value (pixel-accurate snippet/sharing preview), then mode selection and requirements. Dense and mostly waste-free, though the mid-sentence mode explanations read a touch run-on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only preview tool with a 6-param, fully documented schema and an output schema, the description covers purpose, mode selection, and input requirements well. Return values are delegated to the output schema, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it clarifies the mode enum ('search = Title and description as Google shows them; social = Open Graph and X cards'), the title/description-or-url interplay, and that social mode 'Needs url'. This is more than the schema restates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: how a page renders as a Google snippet and as a social share card, measured in pixels. The two-mode split (search vs social) makes the scope concrete. It doesn't explicitly differentiate from siblings like 'share' or 'explain_google', so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear when-to-use guidance: 'Use it instead of estimating title or description length' names an alternative practice to avoid. It also explains what each mode is for and which inputs each needs. No explicit when-not-to-use, but the alternative framing is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

technicalTechnical SEOA
Read-onlyIdempotent
Inspect

Technical checks across pages and logs. Pick with mode: hreflang = Hreflang across language versions, with the corrected tag set. Needs url. parameters = URL parameters and filters that waste crawl budget. duplicates = Duplicate and near-duplicate pages. Needs audit_id. extract = One value pulled from many pages. Needs urls. logs = Access logs: what Googlebot and AI crawlers really crawl, with IP verification. Needs log.

NameRequiredDescriptionDefault
logNoRaw access log lines, one request per line.
urlNoFull address of one language version of the page.
modeNoDefault hreflang.
urlsNoOptional extra URLs, for example from server logs or Search Console.
regexNoA regular expression; the first group is returned if there is one, otherwise the whole match.
detailNobrief = short summary.
jsonldNoA JSON-LD path: the @type, then the properties, for example Product.offers.price or Article.author.name.
audit_idNoId of a completed site audit.
selectorNoCSS selector, for example .price, h1 or link[rel=canonical].
attributeNoWith selector: read this attribute instead of the text, for example href or content.
memory_keyNosite_memory key, records this call.
sitemap_urlsNoOptional: the URLs from the site's sitemap, to find pages bots never crawl.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds mode-specific behavior ('IP verification', 'corrected tag set', 'waste crawl budget'), which is useful, but says nothing about rate limits, cost, or how results differ per mode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is densely front-loaded: the general purpose opens, then each mode is a compact clause. The mode list reads as a run-on, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 12 params but 0 required, the mode-to-parameter dependency is the critical missing piece from the schema, and the description supplies it. An output schema exists, so return values need not be explained, and the remaining gap is only the absence of sibling routing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema documents every parameter and the baseline is 3. The description adds real value beyond that by mapping which parameter each mode requires, which the schema cannot express on its own.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description enumerates all five modes (hreflang, parameters, duplicates, extract, logs) and says what each finds, so an agent understands the tool's scope. The umbrella phrase 'Technical checks across pages and logs' is generic, and no sibling tool is named for contrast, which keeps it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Pick with mode' plus per-mode requirements ('Needs url', 'Needs audit_id', 'Needs urls', 'Needs log') tells the agent exactly how to invoke each branch. There is no explicit when-not-to-use and no routing to siblings like sitemap or scan_page, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

text_qualityText qualityA
Read-onlyIdempotent
Inspect

Readability and correct language. Pick with mode: readability = Readability that fits the page and the pages that rank. Needs url. spelling = Spelling and grammar errors in about 30 languages. Needs url.

NameRequiredDescriptionDefault
urlNoYour page.
modeNoDefault readability.
detailNobrief = short summary.
keywordNoOptional: the search term, for context.
memory_keyNosite_memory key, records this call.
competitorsNoOptional: top organic results for the keyword.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered and the bar is lower. The description adds two useful behavioral facts beyond structured data: the ~30-language coverage for spelling and the url prerequisite. It stops there and adds nothing about limits or interpretation of results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Short and front-loaded, with the core purpose first and mode selection immediately after. The telegraphic "Needs url" phrasing and terse fragments cost a little polish but no sentence is wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-param read-only tool with rich annotations and an output schema, the description covers purpose, mode selection and the key prerequisite adequately. Missing sibling routing and per-parameter context are minor given the schema and output schema carry the rest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description clarifies the mode enum (readability vs spelling) and reinforces the url requirement, but detail, keyword, memory_key and competitors are left entirely to the schema. Value added over schema is marginal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear purpose (readability + language correctness) and splits it into two named modes, readability and spelling. An agent can tell this apart from siblings like content or accessibility. It stops short of naming sibling alternatives explicitly, so it is clear but not fully differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Pick with mode" gives explicit selection guidance: readability for fit-to-page and ranking-page fit, spelling for grammar/errors. Each mode's scope and the shared "Needs url" prerequisite are stated. No when-not-to-use or alternative-tool guidance is offered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trackingTracking and consentA
Read-onlyIdempotent
Inspect

Whether analytics and consent are set up right, and whether the numbers add up. Pick with mode: ga4 = GA4 tags, events and duplicates. Needs url. consent = Cookie banner and Consent Mode v2. Needs url. gsc_vs_ga4 = Search Console clicks against GA4 sessions per page: broken or filtered tracking. Needs gsc[{page, clicks}], ga4[{landing_page, sessions}].

NameRequiredDescriptionDefault
ga4NoGA4 sessions per landing page, organic Google only.
gscNoSearch Console clicks per page.
urlNoFull address of the page, for example https://example.com/.
modeNoDefault ga4.
detailNobrief = short summary.
memory_keyNosite_memory key, records this call.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the per-mode behavior (what each check inspects) but says nothing about auth needs, rate limits, or cost. Adequate but thin given annotations do most of the work.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the mode selection and then walks each mode compactly in parallel structure. It is telegraphic but every clause carries routing or input information; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Modes, their purposes, and their required inputs are covered, and an output schema exists so return values need not be explained. Minor gaps are the undocumented detail/memory_key semantics, but those are covered by the schema descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds value the schema cannot express: with zero top-level required params, it clarifies the conditional requirement of url for ga4/consent modes and the required gsc/ga4 array shapes for gsc_vs_ga4. Only detail and memory_key go unmentioned, and those are self-documenting in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The lead sentence is a bit abstract ('whether the numbers add up'), but the mode breakdown gives concrete, specific checks: GA4 tags/events/duplicates, cookie banner and Consent Mode v2, and GSC clicks vs GA4 sessions. An agent can tell what each mode does without opening the schema. It does not differentiate itself from adjacent siblings like technical or measure, which keeps it out of 5 territory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs 'Pick with mode' and maps each mode to its purpose and required inputs, which is real routing guidance among the tool's own modes. However, it never states when to choose this tool over siblings such as technical, measure, or scan_page, so the alternative-selection guidance is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

track_rankingsSmart rank tracker that knows what mattersAInspect

Use for ongoing rank tracking without picking keywords by hand. Each run, fetch Search Console rows by query and page (last 7 or 28 days) and, if connected, the rows of Ahrefs Rank Tracker (rank-tracker-overview) or Semrush Position Tracking, plus GA4 conversions or revenue per landing page if available, and pass them with the tracker_id (leave it out on the first run to create a tracker).

NameRequiredDescriptionDefault
siteNoYour site. Needed on the first run.
actionNorun (default), status or stop.
detailNobrief = short summary.
gsc_rowsNoSearch Console rows by query and page for the period.
fix_log_idNoOptional fix log (log_fix) whose pages count as work done.
memory_keyNosite_memory key, records this call.
tracker_idNoFrom the first run. Leave out to create a tracker.
conversionsNoOptional GA4 key events or revenue per landing page.
webhook_urlNoOptional https webhook for the changes (Slack and Discord work).
tracker_rowsNoAhrefs Rank Tracker or Semrush Position Tracking rows.
money_keywordsNoOptional keywords you always want followed.

Output Schema

NameRequiredDescription
runsNo
eventsNo
groupsNo
trackerIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, idempotentHint=false, openWorldHint=true, so the mutation/open-world nature is already flagged. The description adds real value beyond that: it discloses the stateful create-on-first-run behavior (omit tracker_id to create a tracker) and the per-run data-collection workflow.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the primary use case and packed into a single dense sentence with no filler. It is a bit run-on and reads like an instruction sequence, but every clause carries operational content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be described, and the 'run' path is well covered. However the tool exposes action=run/status/stop, detail, memory_key, fix_log_id, webhook_url and money_keywords, and the description explains none of the status/stop or notification behavior — a notable gap for an 11-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. Most of what the description says about parameters (tracker_id from first run, rows sourced from GSC/Ahrefs/Semrush/GA4) is already echoed in the schema descriptions. It does add the 'last 7 or 28 days' period hint, but that is marginal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (ongoing rank tracking) and describes the concrete data sources it aggregates (Search Console, Ahrefs Rank Tracker, Semrush Position Tracking, GA4). An agent can tell it is a rank-tracking aggregation tool, though it never explicitly names or differentiates from the sibling 'tracking'/'watch' tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use for ongoing rank tracking without picking keywords by hand' gives a clear use context, and it explains the first-run bootstrap ('leave it out on the first run to create a tracker'). It stops short of stating when NOT to use it or which sibling to prefer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

watchKeep watchingAInspect

Monitoring that runs on its own and posts changes to a webhook. Each kind takes action create (default), status or stop where it applies. Pick with mode: page = Watch one page (or a competitor page with competitor_of) for SEO changes. Needs url. page_status = Latest result of a page watch. Needs watch_id. page_stop = Stop a page watch. Needs watch_id. site_audit = Audit the whole site every 1, 7 or 30 days and alert on regressions. guard = Every 6 hours: robots.txt, sitemap, https, noindex and canonical on key pages, for deploy accidents. competitors = Weekly new, updated and removed pages from competitors' sitemaps, flagged by your topics.

NameRequiredDescriptionDefault
urlNoFull address, for example https://example.com/pricing.
modeNoDefault page.
pagesNoKey pages to guard besides the home page (money pages first).
actionNocreate (default), status or stop.
detailNobrief = short summary.
topicsNoYour topics or keywords, to flag overlapping pages.
guard_idNoFor status and stop.
watch_idNoFor status and stop.
max_pagesNoPages per audit, default 25.
every_daysNoHow often, default 7.
memory_keyNosite_memory key, records this call.
competitorsNoCompetitor home pages.
schedule_idNoFor status and stop.
webhook_urlNoOptional https URL that receives a JSON POST when something changes, for example a Slack or Discord incoming webhook.
competitor_ofNoOptional: your own page.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint=false, openWorldHint=true), the description discloses that the tool runs automatically, posts to a webhook, and follows schedules (every 1/7/30 days, every 6 hours, weekly). It also describes mode-specific actions and required IDs, which enriches behavioral understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then organises mode details in a readable sequence. While dense, it avoids filler and is appropriately sized for a 15-parameter multi-mode tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema and full schema descriptions, the description need not explain return values. It covers the main modes and schedules, but leaves action/ID usage for guard, site_audit, and competitors unspecified, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds cross-parameter meaning by mapping modes to required parameters (e.g., page needs url, page_status needs watch_id), though it omits such mapping for guard, site_audit, and competitors.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool's purpose as autonomous monitoring that posts changes to a webhook, and enumerates six modes with specific resources (page, site, robots.txt, etc.). It does not contrast the tool with siblings like site_audit or tracking, so it stops short of the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for each mode (e.g., page for SEO changes, guard for deploy accidents) and notes action create/status/stop. However, it offers no explicit guidance on when to choose this tool over alternatives such as the site_audit or tracking siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_vitalsCore Web VitalsA
Read-onlyIdempotent
Inspect

Core Web Vitals from real Chrome users. Pick with mode: now = The latest field data for a page or site. Needs url. trend = Weekly history, before and after a change date. Needs url.

NameRequiredDescriptionDefault
urlNoFull address of the page, for example https://example.com/pricing.
modeNoDefault now.
detailNobrief = short summary.
memory_keyNosite_memory key, records this call.
change_dateNoOptional date a speed fix went live, YYYY-MM-DD.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive, open-world semantics, and the description adds real value on top: the data source is real Chrome user field data, and trend returns weekly history segmented before/after a change date. It does not mention quotas, latency, or auth, which is a minor gap given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences that front-load the resource, then the mode decision rule; no filler or repetition of the title. Every clause carries either scope or a selection condition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a full schema, an output schema covering return values, and annotations covering the safety profile, the description supplies the missing decision logic (which mode, what each needs). It stops short of clarifying optionality of change_date within trend or what 'brief' detail omits, but nothing critical for correct invocation is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description genuinely enhances the mode enum by explaining what each value returns, and ties url/change_date to the mode that requires them. It leaves detail and memory_key to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource — Core Web Vitals field data from real Chrome users — and splits it into two clearly labeled modes (now = latest field data, trend = weekly history). An agent can tell what it returns, though there is no explicit differentiation from nearby siblings like measure or technical.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Pick with mode: now = ... trend = ...' gives a direct selection rule for the two modes, and each mode states its prerequisite ('Needs url'). No alternative-tool routing or exclusion guidance against the other 30+ siblings is offered, which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedcontent1 field changed
      • addedInput schema / properties / webhook_url
        Added value: +{
        +  "description": "Optional https Slack or Discord webhook for a Monday reminder; off stops it.",
        +  "maxLength": 1000,
        +  "type": "string"
        +}
    • Changedget_fix_pack1 field changed
      • changedInput schema / properties / changes / items / properties / field / enum
        Previous value: -[
        -  "title",
        -  "meta_description",
        -  "canonical",
        -  "og_title",
        -  "og_description",
        -  "og_image",
        -  "jsonld",
        -  "image_alt"
        -]New value: +[
        +  "title",
        +  "meta_description",
        +  "canonical",
        +  "og_title",
        +  "og_description",
        +  "og_image",
        +  "jsonld",
        +  "image_alt",
        +  "post_content",
        +  "new_post"
        +]
  2. 35 tool updates
    • Changedaccessibility1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedai_visibility1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedanswer_readiness1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedbacklinks1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedcheck_keyword1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedcheck_links1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedcompare1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedcontent11 fields changed
      • addedInput schema / properties / html
        Added value: +{
        +  "description": "The draft as HTML, title in <title> or <h1>.",
        +  "maxLength": 921600,
        +  "type": "string"
        +}
      • addedInput schema / properties / ideas
        Added value: +{
        +  "description": "Topics without a page yet.",
        +  "items": {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  "maxItems": 50,
        +  "type": "array"
        +}
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "brief",
        -  "topics",
        -  "intent"
        -]New value: +[
        +  "brief",
        +  "topics",
        +  "intent",
        +  "voice",
        +  "calendar",
        +  "draft"
        +]
      • addedInput schema / properties / per_week
        Added value: +{
        +  "description": "Items per week, default 2.",
        +  "maximum": 7,
        +  "minimum": 1,
        +  "type": "number"
        +}
      • removedInput schema / properties / rows / items / properties
        Removed value: -{
        -  "clicks": {
        -    "type": "number"
        -  },
        -  "impressions": {
        -    "type": "number"
        -  },
        -  "keyword": {
        -    "description": "Ahrefs/Semrush name for query.",
        -    "maxLength": 2000,
        -    "type": "string"
        -  },
        -  "page": {
        -    "maxLength": 2048,
        -    "type": "string"
        -  },
        -  "position": {
        -    "type": "number"
        -  },
        -  "query": {
        -    "maxLength": 2000,
        -    "type": "string"
        -  },
        -  "traffic": {
        -    "description": "Estimated monthly traffic, used in place of clicks.",
        -    "minimum": 0,
        -    "type": "number"
        -  },
        -  "url": {
        -    "description": "Ahrefs/Semrush name for page.",
        -    "maxLength": 2048,
        -    "type": "string"
        -  },
        -  "volume": {
        -    "description": "Monthly search volume, used in place of impressions when there is no Search Console data.",
        -    "minimum": 0,
        -    "type": "number"
        -  }
        -}
      • removedInput schema / properties / rows / maxItems
        Removed value: -1000
      • removedInput schema / properties / rows / minItems
        Removed value: -1
      • addedInput schema / properties / start
        Added value: +{
        +  "description": "First day, YYYY-MM-DD, default today.",
        +  "maxLength": 10,
        +  "type": "string"
        +}
      • addedInput schema / properties / urls
        Added value: +{
        +  "description": "The site's own best articles, ones that rank and that the owner likes.",
        +  "items": {
        +    "maxLength": 2048,
        +    "type": "string"
        +  },
        +  "maxItems": 5,
        +  "minItems": 2,
        +  "type": "array"
        +}
      • addedInput schema / properties / weeks
        Added value: +{
        +  "description": "Weeks to plan, default 8.",
        +  "maximum": 52,
        +  "minimum": 1,
        +  "type": "number"
        +}
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changeddashboard1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changededge_worker1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedentity1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedexplain_google1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedfind_opportunities1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedfix_log1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedget_fix_pack1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedinternal_links1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedlayout1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedllms_txt1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedlocal1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedmeasure1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedplan1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedrequest_recrawl1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedrobots_txt1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedscan_page1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedschema1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedshare1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedsite_audit1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedsite_memory1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedsitemap1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedsnippet1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedtechnical1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedtext_quality1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedtracking1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedwatch1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
    • Changedweb_vitals1 field changed
      • removedOutput schema / description
        Removed value: -"The result as structured data; fields depend on mode."
  3. 37 tool updates
    • Changedaccessibility2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedai_visibility2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedanswer_readiness2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedbacklinks2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedcheck_keyword2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedcheck_links2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedcompare7 fields changed
      • addedInput schema / properties / bypass_token
        Added value: +{
        +  "description": "Vercel protection bypass secret.",
        +  "maxLength": 200,
        +  "type": "string"
        +}
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "pages",
        -  "html"
        -]New value: +[
        +  "pages",
        +  "html",
        +  "preview"
        +]
      • addedInput schema / properties / paths
        Added value: +{
        +  "description": "Paths like /pricing, default /.",
        +  "items": {
        +    "maxLength": 2048,
        +    "type": "string"
        +  },
        +  "maxItems": 5,
        +  "type": "array"
        +}
      • addedInput schema / properties / preview_url
        Added value: +{
        +  "description": "The deploy preview URL.",
        +  "maxLength": 2048,
        +  "type": "string"
        +}
      • addedInput schema / properties / production_url
        Added value: +{
        +  "description": "The live site.",
        +  "maxLength": 2048,
        +  "type": "string"
        +}
    • Changedcontent2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changeddashboard2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changededge_worker2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedentity2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedexplain_google2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedfind_opportunities4 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • addedInput schema / properties / drop_date
        Added value: +{
        +  "description": "Optional first day of the drop, YYYY-MM-DD, to check Google updates around it.",
        +  "maxLength": 10,
        +  "type": "string"
        +}
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "ctr_gaps",
        -  "striking_distance",
        -  "content_decay",
        -  "traffic_drop",
        -  "prune",
        -  "discover",
        -  "paid_organic"
        -]New value: +[
        +  "ctr_gaps",
        +  "striking_distance",
        +  "content_decay",
        +  "traffic_drop",
        +  "prune",
        +  "discover",
        +  "paid_organic",
        +  "anomalies",
        +  "ai_queries"
        +]
    • Changedfix_log2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedget_fix_pack7 fields changed
      • addedInput schema / properties / change_id
        Added value: +{
        +  "description": "Status of an earlier send.",
        +  "maxLength": 40,
        +  "type": "string"
        +}
      • addedInput schema / properties / changes
        Added value: +{
        +  "description": "Optional field and new value pairs.",
        +  "items": {
        +    "properties": {
        +      "field": {
        +        "enum": [
        +          "title",
        +          "meta_description",
        +          "canonical",
        +          "og_title",
        +          "og_description",
        +          "og_image",
        +          "jsonld",
        +          "image_alt"
        +        ],
        +        "type": "string"
        +      },
        +      "value": {}
        +    },
        +    "required": [
        +      "field",
        +      "value"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 20,
        +  "type": "array"
        +}
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "fixes",
        -  "alt_texts",
        -  "web_vitals"
        -]New value: +[
        +  "fixes",
        +  "alt_texts",
        +  "web_vitals",
        +  "wordpress"
        +]
      • addedInput schema / properties / note
        Added value: +{
        +  "description": "Optional reason shown to the site owner.",
        +  "maxLength": 300,
        +  "type": "string"
        +}
      • addedInput schema / properties / site_key
        Added value: +{
        +  "description": "The site key from the plugin, wpk_...",
        +  "maxLength": 60,
        +  "type": "string"
        +}
    • Changedinternal_links2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedlayout2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedllms_txt2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedlocal2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedmeasure2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedplan2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedprioritize_fixes2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedrequest_recrawl2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedrobots_txt2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedscan_page2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedschema2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedshare2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedsite_audit2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedsite_memory1 field changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
    • Changedsitemap2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedsnippet2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedtechnical2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedtext_quality2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedtrack_rankings2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedtracking2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedwatch2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • Changedweb_vitals2 fields changed
      • changedInput schema / properties / detail / description
        Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
      • changedInput schema / properties / memory_key / description
        Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
  4. 37 tool updates
    • Changedaccessibility1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedai_visibility1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedanswer_readiness1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedbacklinks1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedcheck_keyword1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedcheck_links1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedcompare1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedcontent1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changeddashboard1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changededge_worker1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedentity1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedexplain_google1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedfind_opportunities1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedfix_log1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedget_fix_pack1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedinternal_links1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedlayout1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedllms_txt1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedlocal1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedmeasure1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedplan1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedprioritize_fixes1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedrequest_recrawl1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedrobots_txt1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedscan_page1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedschema2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "generate",
        -  "validate",
        -  "product"
        -]New value: +[
        +  "generate",
        +  "validate",
        +  "product_page"
        +]
    • Changedshare1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedsite_audit1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedsite_memory1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedsitemap1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedsnippet2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / url / description
        Previous value: -"Full address of the page."New value: +"Page to read the current title and description from, when no title is given."
    • Changedtechnical1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedtext_quality1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedtrack_rankings1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedtracking1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedwatch1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
    • Changedweb_vitals1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "brief returns a short summary, default full.",
        +  "enum": [
        +    "full",
        +    "brief"
        +  ],
        +  "type": "string"
        +}
  5. 50 tool updates
    • Changedaccessibility1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedai_visibility1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Removedanalyze_logs
    • Changedanswer_readiness1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedbacklinks1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Removedcheck_hreflang
    • Changedcheck_keyword1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedcheck_links1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Removedcheck_product_page
    • Removedcheck_url_parameters
    • Changedcompare1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Addedcontent
    • Removedcreate_content_brief
    • Changeddashboard1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changededge_worker1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedentity1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedexplain_google1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Removedextract_from_pages
    • Removedfind_duplicate_content
    • Changedfind_opportunities1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedfix_log1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedget_fix_pack1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedinternal_links1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedlayout3 fields changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
      • changedInput schema / properties / mode / description
        Previous value: -"Default analyze."New value: +"Default render."
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "analyze",
        -  "probe"
        -]New value: +[
        +  "render",
        +  "probe",
        +  "analyze"
        +]
    • Changedllms_txt1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedlocal1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Removedmap_topics
    • Removedmatch_intent
    • Changedmeasure1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Addedplan
    • Removedplan_redirects
    • Removedplan_split_test
    • Removedplan_sprint
    • Changedprioritize_fixes1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Removedrender_page
    • Changedrequest_recrawl1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedrobots_txt1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedscan_page1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedschema2 fields changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "generate",
        -  "validate"
        -]New value: +[
        +  "generate",
        +  "validate",
        +  "product"
        +]
    • Changedshare1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedsite_audit1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedsite_memory1 field changed
      • addedInput schema / properties / share_learning
        Added value: +{
        +  "description": "Opt in (true) or out (false) of sharing anonymous results: only the fix type and the rounded lift, never the site, URLs or numbers.",
        +  "type": "boolean"
        +}
    • Changedsitemap1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedsnippet1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Addedtechnical
    • Changedtext_quality1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedtrack_rankings1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedtracking1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedwatch1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedweb_vitals1 field changed
      • addedInput schema / properties / memory_key
        Added value: +{
        +  "description": "Optional site_memory key, to record this call in the site memory.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
  6. 6 tool updates
    • Removedcheck_local_seo
    • Changedexplain_google4 fields changed
      • addedInput schema / properties / bing_queries
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "clicks": {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "impressions": {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "position": {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "query": {
        +        "maxLength": 2000,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "query",
        +      "clicks"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 5000,
        +  "type": "array"
        +}
      • addedInput schema / properties / google_queries
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "clicks": {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "impressions": {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "position": {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "query": {
        +        "maxLength": 2000,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "query",
        +      "clicks"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 5000,
        +  "type": "array"
        +}
      • addedInput schema / properties / issues
        Added value: +{
        +  "description": "Bing crawl or index issues.",
        +  "items": {
        +    "properties": {
        +      "issue": {
        +        "maxLength": 200,
        +        "type": "string"
        +      },
        +      "url": {
        +        "maxLength": 2048,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "issue"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 5000,
        +  "type": "array"
        +}
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "index_status",
        -  "manual_action"
        -]New value: +[
        +  "index_status",
        +  "manual_action",
        +  "bing"
        +]
    • Changedfind_opportunities4 fields changed
      • addedInput schema / properties / ads
        Added value: +{
        +  "description": "Google Ads search terms.",
        +  "items": {
        +    "properties": {
        +      "clicks": {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "conversions": {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "cost": {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "term": {
        +        "maxLength": 2000,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "term",
        +      "cost"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 10000,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / brand_terms
        Added value: +{
        +  "description": "Optional brand names, handled apart.",
        +  "items": {
        +    "maxLength": 60,
        +    "type": "string"
        +  },
        +  "maxItems": 20,
        +  "type": "array"
        +}
      • addedInput schema / properties / gsc
        Added value: +{
        +  "description": "Search Console queries.",
        +  "items": {
        +    "properties": {
        +      "clicks": {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "page": {
        +        "maxLength": 2048,
        +        "type": "string"
        +      },
        +      "position": {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "query": {
        +        "maxLength": 2000,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "query",
        +      "position"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 10000,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "ctr_gaps",
        -  "striking_distance",
        -  "content_decay",
        -  "traffic_drop",
        -  "prune",
        -  "discover"
        -]New value: +[
        +  "ctr_gaps",
        +  "striking_distance",
        +  "content_decay",
        +  "traffic_drop",
        +  "prune",
        +  "discover",
        +  "paid_organic"
        +]
    • Addedlocal
    • Addedsite_memory
    • Changedtracking3 fields changed
      • addedInput schema / properties / ga4
        Added value: +{
        +  "description": "GA4 sessions per landing page, organic Google only.",
        +  "items": {
        +    "properties": {
        +      "landing_page": {
        +        "maxLength": 2000,
        +        "type": "string"
        +      },
        +      "sessions": {
        +        "minimum": 0,
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "landing_page",
        +      "sessions"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 5000,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / gsc
        Added value: +{
        +  "description": "Search Console clicks per page.",
        +  "items": {
        +    "properties": {
        +      "clicks": {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "page": {
        +        "maxLength": 2048,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "page",
        +      "clicks"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 5000,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "ga4",
        -  "consent"
        -]New value: +[
        +  "ga4",
        +  "consent",
        +  "gsc_vs_ga4"
        +]
  7. 3 tool updates
    • Changedai_visibility1 field changed
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "check",
        -  "gaps",
        -  "citations"
        -]New value: +[
        +  "check",
        +  "bots",
        +  "gaps",
        +  "citations"
        +]
    • Changedfind_opportunities3 fields changed
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "ctr_gaps",
        -  "striking_distance",
        -  "content_decay",
        -  "traffic_drop"
        -]New value: +[
        +  "ctr_gaps",
        +  "striking_distance",
        +  "content_decay",
        +  "traffic_drop",
        +  "prune",
        +  "discover"
        +]
      • addedInput schema / properties / search_type
        Added value: +{
        +  "description": "Search Console search type of the rows, default web.",
        +  "enum": [
        +    "web",
        +    "discover",
        +    "news",
        +    "image",
        +    "video"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / urls
        Added value: +{
        +  "description": "Article pages to check.",
        +  "items": {
        +    "maxLength": 2048,
        +    "type": "string"
        +  },
        +  "maxItems": 5,
        +  "type": "array"
        +}
    • Changedschema1 field changed
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "auto",
        -  "Article",
        -  "Product",
        -  "FAQPage",
        -  "Organization",
        -  "BreadcrumbList"
        -]New value: +[
        +  "auto",
        +  "Article",
        +  "Product",
        +  "FAQPage",
        +  "Organization",
        +  "BreadcrumbList",
        +  "VideoObject",
        +  "Event",
        +  "Recipe",
        +  "JobPosting",
        +  "SoftwareApplication",
        +  "ProfilePage",
        +  "Course"
        +]
  8. 108 tool updates
    • Addedaccessibility
    • Removedai_crawler_policy
    • Addedai_visibility
    • Removedanalyze_layout
    • Addedanswer_readiness
    • Addedbacklinks
    • Removedbuild_disavow
    • Removedbuild_edge_rules
    • Removedbuild_seo_dashboard
    • Removedcheck_accessibility
    • Removedcheck_ai_visibility
    • Removedcheck_answer_format
    • Removedcheck_consent
    • Removedcheck_entity_graph
    • Removedcheck_focus_keyword
    • Removedcheck_ga4_tracking
    • Addedcheck_keyword
    • Addedcheck_links
    • Removedcheck_og_tags
    • Removedcheck_outbound_links
    • Removedcheck_question_coverage
    • Removedcheck_readability
    • Removedcheck_sitemap
    • Removedcheck_snippet
    • Removedcheck_spelling
    • Removedcheck_trust_signals
    • Removedcheck_urls
    • Removedcheck_vitals_trend
    • Removedcheck_web_vitals
    • Addedcompare
    • Removedcompare_ai_citations
    • Removedcompare_html
    • Removedcompare_pages
    • Removedcompare_site_audits
    • Removedcreate_dashboard_feed
    • Addeddashboard
    • Removeddeep_audit
    • Removeddiagnose_cannibalization
    • Removeddiagnose_traffic_drop
    • Removeddraft_outreach
    • Addededge_worker
    • Addedentity
    • Addedexplain_google
    • Removedexplain_index_status
    • Removedexplain_manual_action
    • Removedexport_findings
    • Removedfind_ai_visibility_gaps
    • Removedfind_answer_passages
    • Removedfind_content_decay
    • Removedfind_ctr_gaps
    • Removedfind_link_opportunities
    • Addedfind_opportunities
    • Removedfind_striking_distance
    • Removedfix_alt_texts
    • Removedfix_broken_backlinks
    • Removedfix_core_web_vitals
    • Addedfix_log
    • Removedgenerate_llms_txt
    • Removedgenerate_schema
    • Removedgenerate_sitemap
    • Removedget_dashboard_data
    • Removedget_fix_log
    • Changedget_fix_pack8 fields changed
      • addedInput schema / properties / alts
        Added value: +{
        +  "description": "Step 2: the alt text per image src.",
        +  "items": {
        +    "properties": {
        +      "alt": {
        +        "maxLength": 300,
        +        "type": "string"
        +      },
        +      "src": {
        +        "maxLength": 2000,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "src",
        +      "alt"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 50,
        +  "type": "array"
        +}
      • addedInput schema / properties / failing
        Added value: +{
        +  "description": "Metrics that fail for real users, if known.",
        +  "items": {
        +    "enum": [
        +      "LCP",
        +      "INP",
        +      "CLS",
        +      "FCP",
        +      "TTFB"
        +    ],
        +    "type": "string"
        +  },
        +  "maxItems": 5,
        +  "type": "array"
        +}
      • changedInput schema / properties / framework / description
        Previous value: -"With platform git: the site's framework. auto (default) detects it from the page."New value: +"With platform git: the site's framework."
      • addedInput schema / properties / mode
        Added value: +{
        +  "description": "Default fixes.",
        +  "enum": [
        +    "fixes",
        +    "alt_texts",
        +    "web_vitals"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / platform / description
        Previous value: -"html (default) for code to paste; wordpress, webflow, wix, shopify, storyblok, sanity, contentful, strapi, ghost or magento for a plan with the exact fields and MCP or API calls that the user's own connection to that platform applies after approval; git for framework code and a pull request; or cloudflare for a Worker that applies the fixes as the page is served, on any CMS on the user's own Cloudflare."New value: +"html (default) for code to paste; wordpress, webflow, wix, shopify, storyblok, sanity, contentful, strapi, ghost or magento for a plan with the exact fields and"
      • changedInput schema / properties / url / description
        Previous value: -"Full address of the page, for example https://example.com/pricing. A bare domain like example.com also works."New value: +"Full address of the page, for example https://example.com/pricing."
      • removedInput schema / required
        Removed value: -[
        -  "url"
        -]
      • changedOutput schema / description
        Previous value: -"The same result as the text, as structured data."New value: +"The result as structured data; fields depend on mode."
    • Removedget_layout_probe
    • Removedget_prerender_worker
    • Removedget_site_audit
    • Removedget_watch
    • Removedimport_site_audit
    • Addedinternal_links
    • Addedlayout
    • Addedllms_txt
    • Removedlog_fix
    • Removedmap_link_equity
    • Addedmeasure
    • Removedmeasure_ai_citations
    • Removedmeasure_ai_referrals
    • Removedmeasure_brand_split
    • Removedmeasure_impact
    • Removedmeasure_share_of_voice
    • Changedrequest_recrawl9 fields changed
      • changedInput schema / properties / indexnow_key / description
        Previous value: -"Optional IndexNow key that is live at /<key>.txt. Without it, submit_indexnow explains the setup."New value: +"Optional IndexNow key that is live at /<key>.txt."
      • addedInput schema / properties / key
        Added value: +{
        +  "description": "The site's IndexNow key (8 to 128 letters, digits or dashes).",
        +  "maxLength": 2000,
        +  "type": "string"
        +}
      • addedInput schema / properties / mode
        Added value: +{
        +  "description": "Default recrawl.",
        +  "enum": [
        +    "recrawl",
        +    "indexnow"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / urls / maxItems
        Removed value: -10
      • removedInput schema / properties / urls / minItems
        Removed value: -1
      • removedInput schema / required
        Removed value: -[
        -  "urls"
        -]
      • addedOutput schema / description
        Added value: +"The result as structured data; fields depend on mode."
      • removedOutput schema / properties
        Removed value: -{
        -  "indexNow": {
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "pages": {
        -    "items": {
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "sitemap": {
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "pages"
        -]
    • Removedrescan_and_compare
    • Addedrobots_txt
    • Removedscan_html
    • Changedscan_page6 fields changed
      • addedInput schema / properties / html
        Added value: +{
        +  "description": "The complete HTML document, up to 900 KB.",
        +  "maxLength": 921600,
        +  "type": "string"
        +}
      • addedInput schema / properties / mode
        Added value: +{
        +  "description": "Default page.",
        +  "enum": [
        +    "page",
        +    "html",
        +    "deep",
        +    "rescan"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / sections
        Added value: +{
        +  "description": "Sections to include. Default: all.",
        +  "items": {
        +    "enum": [
        +      "speed",
        +      "links",
        +      "accessibility",
        +      "images",
        +      "rich_results",
        +      "security",
        +      "content",
        +      "technical"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / url / description
        Previous value: -"Full address of the page, for example https://example.com/pricing. A bare domain like example.com also works."New value: +"Full address of the page, for example https://example.com/pricing."
      • removedInput schema / required
        Removed value: -[
        -  "url"
        -]
      • changedOutput schema / description
        Previous value: -"The same result as the text, as structured data."New value: +"The result as structured data; fields depend on mode."
    • Removedschedule_site_audit
    • Addedschema
    • Removedscreen_reader_view
    • Addedshare
    • Removedshare_audit_report
    • Removedshare_result
    • Addedsite_audit
    • Addedsitemap
    • Addedsnippet
    • Removedstart_site_audit
    • Removedsubmit_indexnow
    • Removedsuggest_internal_links
    • Removedtest_robots
    • Addedtext_quality
    • Changedtrack_rankings1 field changed
      • changedInput schema / properties / fix_log_id / description
        Previous value: -"Optional fix log (log_fix) whose pages count as work done. Kept on the tracker."New value: +"Optional fix log (log_fix) whose pages count as work done."
    • Addedtracking
    • Removedunwatch
    • Removedvalidate_llms_txt
    • Removedvalidate_schema
    • Addedwatch
    • Removedwatch_competitor_content
    • Removedwatch_page
    • Removedwatch_site_guard
    • Addedweb_vitals
  9. 8 tool updates
    • Addeddraft_outreach
    • Addedmeasure_ai_referrals
    • Addedmeasure_brand_split
    • Addedmeasure_share_of_voice
    • Addedplan_sprint
    • Addedrequest_recrawl
    • Addedwatch_competitor_content
    • Addedwatch_site_guard
  10. 1 tool update
    • Changedget_fix_pack2 fields changed
      • changedInput schema / properties / platform / description
        Previous value: -"html (default) for code to paste, wordpress for a plan your WordPress connection can apply, git for framework code and the steps to open a pull request, or cloudflare for a Cloudflare Worker that applies the fixes as the page is served, on any CMS, when the domain runs through the user's own Cloudflare."New value: +"html (default) for code to paste; wordpress, webflow, wix, shopify, storyblok, sanity, contentful, strapi, ghost or magento for a plan with the exact fields and MCP or API calls that the user's own connection to that platform applies after approval; git for framework code and a pull request; or cloudflare for a Worker that applies the fixes as the page is served, on any CMS on the user's own Cloudflare."
      • changedInput schema / properties / platform / enum
        Previous value: -[
        -  "html",
        -  "wordpress",
        -  "git",
        -  "cloudflare"
        -]New value: +[
        +  "html",
        +  "wordpress",
        +  "git",
        +  "cloudflare",
        +  "webflow",
        +  "wix",
        +  "shopify",
        +  "storyblok",
        +  "sanity",
        +  "contentful",
        +  "strapi",
        +  "ghost",
        +  "magento"
        +]
  11. 1 tool update
    • Addedtrack_rankings
  12. 10 tool updates
    • Addedbuild_disavow
    • Addedcheck_outbound_links
    • Addedcheck_spelling
    • Changedcompare_site_audits1 field changed
      • addedInput schema / properties / competitor_audit_id
        Added value: +{
        +  "description": "Optional: a finished audit of a competitor's site, to compare the two sites side by side instead of over time.",
        +  "maxLength": 2000,
        +  "type": "string"
        +}
    • Addeddiagnose_cannibalization
    • Changeddiagnose_traffic_drop3 fields changed
      • changedInput schema / properties / rows / description
        Previous value: -"Search Console rows for both periods, per page (or per page and query)."New value: +"Search Console rows for both periods, per page (or per page and query, device or country)."
      • addedInput schema / properties / rows / items / properties / country
        Added value: +{
        +  "description": "Optional: country code, to see where the drop is.",
        +  "maxLength": 2000,
        +  "type": "string"
        +}
      • addedInput schema / properties / rows / items / properties / device
        Added value: +{
        +  "description": "Optional: MOBILE, DESKTOP or TABLET, to see where the drop is.",
        +  "maxLength": 2000,
        +  "type": "string"
        +}
    • Addedexplain_manual_action
    • Addedgenerate_sitemap
    • Addedplan_split_test
    • Addedshare_audit_report
  13. 9 tool updates
    • Changedcheck_local_seo1 field changed
      • addedInput schema / properties / gbp_profile
        Added value: +{
        +  "description": "Optional: the Google Business Profile of this location, from the user's GBP connector or typed by the user, to compare with the site.",
        +  "properties": {
        +    "city": {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    "hours": {
        +      "description": "Opening hours per day; leave a day out when closed.",
        +      "items": {
        +        "properties": {
        +          "closes": {
        +            "description": "HH:MM",
        +            "maxLength": 2000,
        +            "type": "string"
        +          },
        +          "day": {
        +            "description": "Monday to Sunday.",
        +            "maxLength": 2000,
        +            "type": "string"
        +          },
        +          "opens": {
        +            "description": "HH:MM",
        +            "maxLength": 2000,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "day"
        +        ],
        +        "type": "object"
        +      },
        +      "maxItems": 14,
        +      "type": "array"
        +    },
        +    "phone": {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    "postcode": {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    "primary_category": {
        +      "description": "For example Dentist, Italian restaurant, Plumber.",
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    "street": {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    "title": {
        +      "maxLength": 2000,
        +      "type": "string"
        +    },
        +    "website": {
        +      "description": "The website link on the profile.",
        +      "maxLength": 2000,
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedexplain_index_status4 fields changed
      • addedInput schema / properties / rows / items / properties / richResultsResult
        Added value: +{
        +  "description": "URL Inspection richResultsResult as returned (detectedItems with richResultType and item issues).",
        +  "type": "object"
        +}
      • addedInput schema / properties / rows / items / properties / rich_issue
        Added value: +{
        +  "description": "The issue from the Enhancements report, for example Missing field \"price\".",
        +  "maxLength": 2000,
        +  "type": "string"
        +}
      • addedInput schema / properties / rows / items / properties / rich_result_type
        Added value: +{
        +  "description": "From the Enhancements report export, for example Product snippets or FAQ.",
        +  "maxLength": 2000,
        +  "type": "string"
        +}
      • addedInput schema / properties / rows / items / properties / rich_severity
        Added value: +{
        +  "description": "ERROR or WARNING.",
        +  "maxLength": 2000,
        +  "type": "string"
        +}
    • Addedfind_content_decay
    • Changedfind_ctr_gaps5 fields changed
      • addedInput schema / properties / rows / items / properties / keyword
        Added value: +{
        +  "description": "Ahrefs/Semrush name for query.",
        +  "maxLength": 2000,
        +  "type": "string"
        +}
      • addedInput schema / properties / rows / items / properties / traffic
        Added value: +{
        +  "description": "Estimated monthly traffic, used in place of clicks.",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / rows / items / properties / url
        Added value: +{
        +  "description": "Ahrefs/Semrush name for page.",
        +  "maxLength": 2048,
        +  "type": "string"
        +}
      • addedInput schema / properties / rows / items / properties / volume
        Added value: +{
        +  "description": "Monthly search volume, used in place of impressions when there is no Search Console data.",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / rows / items / required
        Previous value: -[
        -  "page",
        -  "impressions",
        -  "position"
        -]New value: +[
        +  "position"
        +]
    • Changedfind_striking_distance6 fields changed
      • changedInput schema / properties / rows / description
        Previous value: -"Search Console rows by query and page for one period."New value: +"Search Console rows by query and page for one period, or Ahrefs/Semrush organic keyword rows."
      • addedInput schema / properties / rows / items / properties / keyword
        Added value: +{
        +  "description": "Ahrefs/Semrush name for query.",
        +  "maxLength": 2000,
        +  "type": "string"
        +}
      • addedInput schema / properties / rows / items / properties / traffic
        Added value: +{
        +  "description": "Estimated monthly traffic, used in place of clicks.",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / rows / items / properties / url
        Added value: +{
        +  "description": "Ahrefs/Semrush name for page.",
        +  "maxLength": 2048,
        +  "type": "string"
        +}
      • addedInput schema / properties / rows / items / properties / volume
        Added value: +{
        +  "description": "Monthly search volume, used in place of impressions when there is no Search Console data.",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / rows / items / required
        Previous value: -[
        -  "page",
        -  "query",
        -  "impressions",
        -  "position"
        -]New value: +[
        +  "position"
        +]
    • Addedfix_alt_texts
    • Addedfix_core_web_vitals
    • Changedmap_topics6 fields changed
      • addedInput schema / properties / competitor_rows
        Added value: +{
        +  "description": "Optional keyword gap: competitors' organic keywords (Ahrefs organic-keywords or Semrush domain_organic for each competitor, or Semrush keyword gap rows).",
        +  "items": {
        +    "properties": {
        +      "competitor": {
        +        "description": "Competitor domain or ranking URL.",
        +        "maxLength": 2000,
        +        "type": "string"
        +      },
        +      "keyword": {
        +        "maxLength": 2000,
        +        "type": "string"
        +      },
        +      "position": {
        +        "type": "number"
        +      },
        +      "url": {
        +        "maxLength": 2048,
        +        "type": "string"
        +      },
        +      "volume": {
        +        "type": "number"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "maxItems": 1000,
        +  "type": "array"
        +}
      • addedInput schema / properties / rows / items / properties / keyword
        Added value: +{
        +  "description": "Ahrefs/Semrush name for query.",
        +  "maxLength": 2000,
        +  "type": "string"
        +}
      • addedInput schema / properties / rows / items / properties / traffic
        Added value: +{
        +  "description": "Estimated monthly traffic, used in place of clicks.",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / rows / items / properties / url
        Added value: +{
        +  "description": "Ahrefs/Semrush name for page.",
        +  "maxLength": 2048,
        +  "type": "string"
        +}
      • addedInput schema / properties / rows / items / properties / volume
        Added value: +{
        +  "description": "Monthly search volume, used in place of impressions when there is no Search Console data.",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • removedInput schema / properties / rows / items / required
        Removed value: -[
        -  "query",
        -  "page"
        -]
    • Changedsuggest_internal_links2 fields changed
      • addedInput schema / properties / phrases
        Added value: +{
        +  "description": "Optional: phrases to turn into the link, besides the anchor text, for example natural variants.",
        +  "items": {
        +    "maxLength": 80,
        +    "type": "string"
        +  },
        +  "maxItems": 6,
        +  "type": "array"
        +}
      • addedInput schema / properties / platform
        Added value: +{
        +  "description": "Optional: also return the links ready to apply: a Cloudflare Worker that links the first mention on each page, a WordPress edit plan, or the edits for the code.",
        +  "enum": [
        +    "cloudflare",
        +    "wordpress",
        +    "git"
        +  ],
        +  "type": "string"
        +}
  14. 3 tool updates
    • Addedfind_ai_visibility_gaps
    • Addedfind_link_opportunities
    • Addedschedule_site_audit
  15. 3 tool updates
    • Addedcompare_site_audits
    • Changedfix_broken_backlinks4 fields changed
      • addedInput schema / properties / rows / items / properties / lost_reason
        Added value: +{
        +  "description": "For lost backlinks (Ahrefs all-backlinks with history, lost_reason): notfound, lostredirect, removedfromhtml, pageerror, pageredirected, noindex or notcanonical.",
        +  "maxLength": 2000,
        +  "type": "string"
        +}
      • addedInput schema / properties / rows / items / properties / referrer
        Added value: +{
        +  "description": "The page visitors came from (GA4 pageReferrer). A page on your own site means a broken internal link.",
        +  "maxLength": 2000,
        +  "type": "string"
        +}
      • addedInput schema / properties / rows / items / properties / snippet
        Added value: +{
        +  "description": "Text around the lost link (Ahrefs snippet_left + anchor + snippet_right), to quote in the outreach email.",
        +  "maxLength": 2000,
        +  "type": "string"
        +}
      • addedInput schema / properties / rows / items / properties / visits
        Added value: +{
        +  "description": "Visits or page views that hit target_url, for example GA4 views of your 404 page per path.",
        +  "minimum": 0,
        +  "type": "number"
        +}
    • Addedimport_site_audit
  16. 1 tool update
    • Addedfix_broken_backlinks
  17. 70 tool updates
    • Changedai_crawler_policy2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedanalyze_layout1 field changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
    • Changedanalyze_logs3 fields changed
      • addedInput schema / properties / log / maxLength
        Added value: +819200
      • addedInput schema / properties / sitemap_urls / items / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedbuild_edge_rules3 fields changed
      • addedInput schema / properties / audit_id / maxLength
        Added value: +2000
      • addedInput schema / properties / site_name / maxLength
        Added value: +2000
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedbuild_seo_dashboard5 fields changed
      • addedInput schema / properties / bigquery / properties / ga4_dataset / maxLength
        Added value: +2000
      • addedInput schema / properties / bigquery / properties / gsc_dataset / maxLength
        Added value: +2000
      • addedInput schema / properties / bigquery / properties / project / maxLength
        Added value: +2000
      • addedInput schema / properties / feed_id / maxLength
        Added value: +2000
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcheck_accessibility2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcheck_ai_visibility2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcheck_answer_format4 fields changed
      • addedInput schema / properties / competitors / items / maxLength
        Added value: +2048
      • addedInput schema / properties / question / maxLength
        Added value: +2000
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcheck_consent2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcheck_entity_graph1 field changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
    • Changedcheck_focus_keyword3 fields changed
      • addedInput schema / properties / keyword / maxLength
        Added value: +2000
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcheck_ga4_tracking2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcheck_hreflang2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcheck_local_seo2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcheck_og_tags1 field changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
    • Changedcheck_product_page2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcheck_question_coverage5 fields changed
      • addedInput schema / properties / competitors / items / maxLength
        Added value: +2048
      • addedInput schema / properties / questions / items / maxLength
        Added value: +2000
      • addedInput schema / properties / topic / maxLength
        Added value: +2000
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcheck_readability3 fields changed
      • addedInput schema / properties / competitors / items / maxLength
        Added value: +2048
      • addedInput schema / properties / keyword / maxLength
        Added value: +2000
      • addedInput schema / properties / url / maxLength
        Added value: +2048
    • Changedcheck_sitemap2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcheck_snippet3 fields changed
      • addedInput schema / properties / description / maxLength
        Added value: +2000
      • addedInput schema / properties / title / maxLength
        Added value: +2000
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcheck_trust_signals2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcheck_url_parameters3 fields changed
      • addedInput schema / properties / audit_id / maxLength
        Added value: +2000
      • addedInput schema / properties / urls / items / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcheck_urls2 fields changed
      • addedInput schema / properties / expected / items / maxLength
        Added value: +2000
      • addedInput schema / properties / urls / items / maxLength
        Added value: +2048
    • Changedcheck_vitals_trend3 fields changed
      • addedInput schema / properties / change_date / maxLength
        Added value: +2000
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcheck_web_vitals2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedcompare_ai_citations1 field changed
      • addedInput schema / properties / pages / items / properties / url / maxLength
        Added value: +2048
    • Changedcompare_html3 fields changed
      • addedInput schema / properties / after / maxLength
        Added value: +921600
      • addedInput schema / properties / before / maxLength
        Added value: +921600
      • addedInput schema / properties / url / maxLength
        Added value: +2048
    • Changedcompare_pages3 fields changed
      • addedInput schema / properties / competitors / items / maxLength
        Added value: +2048
      • addedInput schema / properties / keyword / maxLength
        Added value: +2000
      • addedInput schema / properties / url / maxLength
        Added value: +2048
    • Changedcreate_content_brief4 fields changed
      • addedInput schema / properties / audit_id / maxLength
        Added value: +2000
      • addedInput schema / properties / competitors / items / maxLength
        Added value: +2048
      • addedInput schema / properties / keyword / maxLength
        Added value: +2000
      • addedInput schema / properties / url / maxLength
        Added value: +2048
    • Changedcreate_dashboard_feed5 fields changed
      • addedInput schema / properties / fix_log_id / maxLength
        Added value: +2000
      • addedInput schema / properties / name / maxLength
        Added value: +2000
      • addedInput schema / properties / pages / items / maxLength
        Added value: +2048
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changeddeep_audit1 field changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
    • Changeddiagnose_traffic_drop4 fields changed
      • addedInput schema / properties / fix_log_id / maxLength
        Added value: +2000
      • addedInput schema / properties / rows / items / properties / query / maxLength
        Added value: +2000
      • addedInput schema / properties / rows / items / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedexplain_index_status10 fields changed
      • addedInput schema / properties / rows / items / properties / coverageState / maxLength
        Added value: +2000
      • addedInput schema / properties / rows / items / properties / googleCanonical / maxLength
        Added value: +2000
      • addedInput schema / properties / rows / items / properties / indexingState / maxLength
        Added value: +2000
      • addedInput schema / properties / rows / items / properties / lastCrawlTime / maxLength
        Added value: +2000
      • addedInput schema / properties / rows / items / properties / pageFetchState / maxLength
        Added value: +2000
      • addedInput schema / properties / rows / items / properties / robotsTxtState / maxLength
        Added value: +2000
      • addedInput schema / properties / rows / items / properties / url / maxLength
        Added value: +2048
      • addedInput schema / properties / rows / items / properties / userCanonical / maxLength
        Added value: +2000
      • addedInput schema / properties / rows / items / properties / verdict / maxLength
        Added value: +2000
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedexport_findings3 fields changed
      • addedInput schema / properties / audit_id / maxLength
        Added value: +2000
      • addedInput schema / properties / slack_webhook_url / maxLength
        Added value: +2048
      • addedInput schema / properties / url / maxLength
        Added value: +2048
    • Changedextract_from_pages6 fields changed
      • addedInput schema / properties / attribute / maxLength
        Added value: +2000
      • addedInput schema / properties / jsonld / maxLength
        Added value: +1048576
      • addedInput schema / properties / regex / maxLength
        Added value: +2000
      • addedInput schema / properties / selector / maxLength
        Added value: +2000
      • addedInput schema / properties / urls / items / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedfind_answer_passages3 fields changed
      • addedInput schema / properties / question / maxLength
        Added value: +2000
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedfind_ctr_gaps3 fields changed
      • addedInput schema / properties / rows / items / properties / page / maxLength
        Added value: +2048
      • addedInput schema / properties / rows / items / properties / query / maxLength
        Added value: +2000
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedfind_duplicate_content2 fields changed
      • addedInput schema / properties / audit_id / maxLength
        Added value: +2000
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedfind_striking_distance3 fields changed
      • addedInput schema / properties / rows / items / properties / page / maxLength
        Added value: +2048
      • addedInput schema / properties / rows / items / properties / query / maxLength
        Added value: +2000
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedgenerate_llms_txt2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedgenerate_schema2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedget_dashboard_data4 fields changed
      • addedInput schema / properties / feed_id / maxLength
        Added value: +2000
      • addedInput schema / properties / from / maxLength
        Added value: +2048
      • addedInput schema / properties / to / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedget_fix_log4 fields changed
      • addedInput schema / properties / brand / maxLength
        Added value: +2000
      • addedInput schema / properties / fix_log_id / maxLength
        Added value: +2000
      • addedInput schema / properties / month / maxLength
        Added value: +2000
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedget_fix_pack2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedget_layout_probe1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedget_prerender_worker2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedget_site_audit1 field changed
      • addedInput schema / properties / audit_id / maxLength
        Added value: +2000
    • Changedget_watch2 fields changed
      • addedInput schema / properties / watch_id / maxLength
        Added value: +2000
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedlog_fix9 fields changed
      • addedInput schema / properties / fix_log_id / maxLength
        Added value: +2000
      • addedInput schema / properties / fixes / items / properties / new / maxLength
        Added value: +2048
      • addedInput schema / properties / fixes / items / properties / note / maxLength
        Added value: +2000
      • addedInput schema / properties / fixes / items / properties / old / maxLength
        Added value: +2048
      • addedInput schema / properties / fixes / items / properties / ref / maxLength
        Added value: +2000
      • addedInput schema / properties / fixes / items / properties / url / maxLength
        Added value: +2048
      • addedInput schema / properties / shipped_at / maxLength
        Added value: +2000
      • addedInput schema / properties / webhook / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedmap_link_equity3 fields changed
      • addedInput schema / properties / audit_id / maxLength
        Added value: +2000
      • addedInput schema / properties / important_urls / items / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedmap_topics4 fields changed
      • addedInput schema / properties / audit_id / maxLength
        Added value: +2000
      • addedInput schema / properties / rows / items / properties / page / maxLength
        Added value: +2048
      • addedInput schema / properties / rows / items / properties / query / maxLength
        Added value: +2000
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedmatch_intent5 fields changed
      • addedInput schema / properties / competitors / items / maxLength
        Added value: +2048
      • addedInput schema / properties / keyword / maxLength
        Added value: +2000
      • addedInput schema / properties / queries / items / properties / page / maxLength
        Added value: +2048
      • addedInput schema / properties / queries / items / properties / query / maxLength
        Added value: +2000
      • addedInput schema / properties / url / maxLength
        Added value: +2048
    • Changedmeasure_ai_citations4 fields changed
      • addedInput schema / properties / fix_date / maxLength
        Added value: +2000
      • addedInput schema / properties / pages / items / properties / url / maxLength
        Added value: +2048
      • addedInput schema / properties / source / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedmeasure_impact5 fields changed
      • addedInput schema / properties / fix_date / maxLength
        Added value: +2000
      • addedInput schema / properties / fix_log_id / maxLength
        Added value: +2000
      • addedInput schema / properties / pages / items / properties / fix / maxLength
        Added value: +2000
      • addedInput schema / properties / pages / items / properties / url / maxLength
        Added value: +2048
      • addedInput schema / properties / watch_ids / items / maxLength
        Added value: +2000
    • Changedplan_redirects4 fields changed
      • addedInput schema / properties / new_site / maxLength
        Added value: +2048
      • addedInput schema / properties / new_urls / items / maxLength
        Added value: +2048
      • addedInput schema / properties / old_site / maxLength
        Added value: +2048
      • addedInput schema / properties / old_urls / items / maxLength
        Added value: +2048
    • Changedprioritize_fixes3 fields changed
      • addedInput schema / properties / audit_id / maxLength
        Added value: +2000
      • addedInput schema / properties / pages / items / properties / queries / items / properties / query / maxLength
        Added value: +2000
      • addedInput schema / properties / pages / items / properties / url / maxLength
        Added value: +2048
    • Changedrender_page1 field changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
    • Changedrescan_and_compare2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedscan_html3 fields changed
      • addedInput schema / properties / html / maxLength
        Added value: +921600
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedscan_page2 fields changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedscreen_reader_view1 field changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
    • Changedshare_result1 field changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
    • Changedstart_site_audit1 field changed
      • addedInput schema / properties / url / maxLength
        Added value: +2048
    • Changedsubmit_indexnow3 fields changed
      • addedInput schema / properties / key / maxLength
        Added value: +2000
      • addedInput schema / properties / urls / items / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedsuggest_internal_links3 fields changed
      • addedInput schema / properties / audit_id / maxLength
        Added value: +2000
      • addedInput schema / properties / target_url / maxLength
        Added value: +2048
      • addedInput schema / properties / topic / maxLength
        Added value: +2000
    • Changedtest_robots3 fields changed
      • addedInput schema / properties / robots_txt / maxLength
        Added value: +524288
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • addedInput schema / properties / user_agents / items / maxLength
        Added value: +2000
    • Changedunwatch2 fields changed
      • addedInput schema / properties / watch_id / maxLength
        Added value: +2000
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The same result as the text, as structured data.",
        +  "type": "object"
        +}
    • Changedvalidate_llms_txt2 fields changed
      • addedInput schema / properties / text / maxLength
        Added value: +1048576
      • addedInput schema / properties / url / maxLength
        Added value: +2048
    • Changedvalidate_schema1 field changed
      • addedInput schema / properties / jsonld / maxLength
        Added value: +1048576
    • Changedwatch_page3 fields changed
      • addedInput schema / properties / competitor_of / maxLength
        Added value: +2048
      • addedInput schema / properties / url / maxLength
        Added value: +2048
      • addedInput schema / properties / webhook_url / maxLength
        Added value: +2048
  18. 3 tool updates
    • Addedbuild_seo_dashboard
    • Addedcreate_dashboard_feed
    • Addedget_dashboard_data
  19. 9 tool updates
    • Addedcheck_sitemap
    • Addedcheck_url_parameters
    • Addedcheck_vitals_trend
    • Addeddiagnose_traffic_drop
    • Addedextract_from_pages
    • Addedfind_ctr_gaps
    • Addedfind_duplicate_content
    • Addedfind_striking_distance
    • Addedmeasure_ai_citations
  20. 3 tool updates
    • Addedbuild_edge_rules
    • Addedexplain_index_status
    • Addedget_prerender_worker

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Free, open-source desktop SEO crawler with a built-in MCP server. 250 technical SEO, GEO and AI-search checks across 23 areas, run locally; MCP tools list crawls, inspect issues, run Lighthouse, check AI-crawler access, and apply confirmation-gated WordPress fixes with rollback.
    76 PyPI
    17
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables SEO audits, keyword research, rank tracking, and Core Web Vitals reporting through an MCP interface using only free services.
    11 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server for SEO, performance, GEO, and UX audits with 37 tools covering technical SEO, Lighthouse performance, AI search optimization, content analysis, accessibility, security, and more.
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    SEO MCP over Search Console, GA4, PageSpeed, Cloudflare, IndexNow, CrUX, and 7 technical-SEO HTTP tools.
    70
    318 PyPI
    554
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources