SEOMonster
SEOMonster is an MCP server that brings 70+ SEO tools into your existing AI assistant, working from your own Google Search Console, GA4, PageSpeed, Cloudflare, and other credentials to answer plain-English SEO questions and run workflows.
Search Console workhorses – query clicks/impressions/CTR/position, top queries/pages, period comparisons, URL inspection, sitemaps, and indexing requests.
Content intelligence – find content opportunities, build data-backed briefs, map topic clusters, and attribute ranking changes with confidence intervals vs a control group.
Keyword discovery – expand winning queries into adjacent and net-new terms using autocomplete, PAA, and competitor gap analysis.
Analytics (GA4) – run custom reports, top landing pages, channel breakdowns, organic overviews, site-search terms, landing-page conversions, and setup audits.
PageSpeed & CrUX – Lighthouse scores, lab/field Core Web Vitals, opportunity audits, performance budgets, and 25-week CrUX history/snapshots.
AI/GEO visibility – assess AI-citation readiness, review AI referral traffic and crawler coverage, and track brand share-of-voice across AI engines.
Cloudflare – list zones/DNS, web analytics, cache purge (gated), redirect management (gated), settings audits/updates, and managed robots.txt/policy controls.
IndexNow – submit single or bulk URLs to Bing, Yandex, Naver, Seznam, and Yep.
Technical SEO – inspect meta/canonical/schema, redirect-chain audits, mixed-content checks, robots.txt validation (RFC 9309), sitemap validation/health, hreflang consistency, and internal-link analysis.
Workflow prompts – 13 chained recipes covering post-deploy verification, weekly review, content audits, migration checks, technical/structured-data audits, pre-deploy gates, and full content publishing workflows.
Provides tools to manage zones, DNS records, purge cache, and access web analytics.
Provides tools to run reports, top landing pages, traffic by channel, and organic search overview from Google Analytics 4.
Provides tools to query Search Console data including search analytics, URL inspection, sitemap management, and indexing requests.
Provides analysis of Lighthouse scores, lab and field Core Web Vitals for a URL.
You don't open a new tool — you just ask, in plain English, inside Claude (or Cursor / Cline / Codex):
You "What should I write about next?"
🦖 SEOMonster Pulls your Search Console and surfaces three topics you're almost ranking for — positions 8–20 with real demand — ranked by opportunity. Say the word and it drafts the brief.
You ask … | … SEOMonster does |
"What should I write about next?" | Surfaces near-ranking topics from your own Search Console demand |
"Is this page ready to publish?" | Runs the technical-SEO + structured-data checks before you ship |
"Get this indexed." | Nudges Google (Indexing API) and Bing / Yandex (IndexNow) |
"Did my change actually move rankings?" | Before/after attribution vs a matched control group — with a confidence interval, not a guess |
"Is ChatGPT recommending us, or our competitors?" | Tracks your brand's share of voice across the AI answer engines |
70 tools across Search Console, GA4, PageSpeed, Cloudflare, AI-citation tracking, keyword discovery, and technical SEO — every one returning the same JSON result envelope, every one driven by your own credentials. No new dashboard to learn; you chat with the assistant you already use.
Published on PyPI asseo-monster (so the command is uvx seo-monster). The import package is seo_mcp; seo-mcp is a dev/local alias. The package ships zero secrets — every credential is resolved at runtime from your own environment or config file.
Your data, your machine. User-credential-driven; nothing is sent to any third party.
Read-first, safe by default. Reads always work; the two routine writes (sitemap submit, indexing request) are on by default; the Cloudflare write tools (cache purge, redirects, settings, managed robots.txt) are gated behind
SEO_MCP_ALLOW_DESTRUCTIVE, and the riskier ones also need a per-callconfirmtoken.Lean. Standard library + the
mcpSDK + the Google client libraries; PageSpeed and Cloudflare ride onurllib, no extra HTTP dependency.
Quickstart
Fastest path: theone-click install buttons above. Or add it to any MCP client by hand:
{
"mcpServers": {
"seomonster": { "command": "uvx", "args": ["seo-monster"] }
}
}Run the one-time Google sign-in once — uvx --from seo-monster seo-monster auth — then ask your assistant to call system_status to confirm what's connected. Full per-client setup and credentials are in Install and Auth.
Related MCP server: gsc-mcp
How it works
flowchart LR
U["You — plain English"] --> H["Claude · Cursor · Cline · Codex"]
H -- "MCP · stdio" --> S["SEOMonster<br/>70 tools"]
S --> GSC["Search Console · GA4"]
S --> PSI["PageSpeed · CrUX"]
S --> CF["Cloudflare · IndexNow"]
S --> AI["AI engines · SERP<br/>(optional)"]
S -. "your creds · your machine" .-> USEOMonster is a stdio MCP server: your AI host launches it, it calls Google / Cloudflare / the AI engines with your credentials, and returns a consistent JSON envelope the assistant reads back to you in plain language.
Requirements
For the .mcpb bundle path (Claude Desktop): just Claude Desktop on macOS
or Windows. The bundle declares Python 3.11+ as a runtime; Claude Desktop
materializes the environment for you. No prior uv install needed.
For the uvx path (Cursor, Cline, Codex, advanced Claude Desktop): Python
3.11 or newer plus uv (which provides uvx).
Find the absolute path to uvx with which uvx; GUI hosts do not read your
shell profile, so MCP configs need the full path.
Tools
70 tools, grouped by service. All return the same result envelope (see
Result envelope). Call system_status first if unsure what
is configured. The server also publishes thirteen named workflow prompts.
Cross-service
system_status- which services are configured/reachable, the Google auth method and scopes, whether destructive mode is on, the full tool catalog, and the list of registered prompts.
Google Search Console (18)
Workhorses
gsc_list_properties- properties the credentials can see, with permission level and a derivedwritableflag (true forsiteOwner/siteFullUser).gsc_search_analytics- the workhorse: clicks/impressions/CTR/position by dimensions, date range, filters, anddata_state.gsc_top_queries/gsc_top_pages- convenience top-N wrappers.gsc_compare_periods- current vs prior window with per-key deltas. v0.2.0 addedsort_by,sort_dir,min_delta_clicks/_impressions/_position,anomalies_only+sigma_threshold, andtopfor one-call movers / losers / outliers reporting.gsc_inspect_url- URL Inspection (index verdict, coverage, canonicals).gsc_batch_inspect_urls- inspect up to 25 URLs, per-URL failures collected.gsc_list_sitemaps- registered sitemaps and their status.gsc_submit_sitemap- submit a sitemap (write, un-gated; needs the writable scope). Accepts eithersitemap_url(friendly) orfeedpath(raw API field).gsc_request_indexing- request (re)crawl via the Indexing API (write, un-gated). Accepts singularurlorurls.
Query intelligence (v0.2.0)
gsc_query_opportunities- queries already ranking top N with below-target CTR. Title and meta optimization candidates.gsc_query_gaps- queries that draw impressions but barely any clicks. Content opportunity signal.gsc_new_queries- queries appearing in the current window with no prior impressions. Emerging topics.gsc_top_pages_by_query- which pages rank for a specific query. The cannibalization audit input.
Multi-property + lifecycle (v0.5.0)
gsc_portfolio_summary(days, include?, exclude?)- multi-property fleet view. Per-property one-row summary (clicks, impressions, CTR, position) for the last N days, plus a portfolio-level rollup. Honors optionalinclude/excludefilters. The single fastest answer to "how is the whole portfolio doing?" across agency or multi-brand setups.gsc_trending_pages(days, limit)- pages whose impressions grew most over the last N days vs the prior N days. Wrapper ongsc_compare_periodswithdimensions=["page"], sort_by="delta_impressions", sort_dir="desc".gsc_decaying_pages(days, limit)- same wrapper, ascending sort. Pages to rescue.gsc_coverage_audit(urls, site_url?)- heuristic coverage audit. The GSC Index Coverage report is not exposed in the API; this tool takes a user- supplied URL list (typically pulled from a sitemap) and bulk-inspects each, then rolls up verdicts (PASS / PARTIAL / FAIL) and coverage_state frequencies.
Content intelligence (4)
content_opportunities(site_url?, days?, count?, impressions_min?)- ranks data-grounded content topics from your own Search Console data: fuses CTR-vs-expected gap (curve self-calibrated from your own per-position CTR), striking-distance position, demand, and momentum into a transparent opportunity score; flags cannibalization. If a GA4 property is configured, it also weights each topic by the organic conversions its top page already drives (up to +50%), so topics that convert rank higher;filters_applied.ga4_value_statusreports whether that ran and why (applied/no_ga4_property/ga4_unreachable/no_conversions). Prioritizes demand you already have; does not do cold-start keyword research or write the content. Pairs with the content workflow prompts below. (GA4 weighting v0.7.3) v0.9.0 adds an additive per-candidatewinnabilityblock (banded: striking-distance + topical- proximity, GSC-personalization tier; existing fields unchanged).content_brief_data(target_query, competitor_urls?, topic?, site_url?, days?)- data-wired backing for a content brief: fetches the competitor pages (or your own GSC-ranking pages as a fallback) and returns the heading union, median word-count floor, schema types, and entity coverage, plus the 2026 GEO writing directives and validation rules. The host writes the prose; SEOMonster brings rules + evidence. Backs thecontent_briefprompt. (v0.9.0)topic_cluster_map(cluster_path | pillar_url, site_url?, days?, impressions_min?)maps a content cluster from your own GSC data and surfaces missing subtopics. Classifies each cluster query into defend / optimize / create / monitor by demand and best position; the create quadrant is your missing-subtopic list. Flags cannibalization. GSC-only; honest about the ~47% query anonymization. (v0.9.0)
rank_change_attribution(url | urls, change_date, query?, site_url?, pre_days?, post_days?, gap_days?, control_scope?)estimates whether an on-site change moved a page's clicks via difference-in-differences against a matched control group (never a naked before/after). Returns an estimated lift with a 95% CI, a three-state verdict (likely_positive / likely_negative / inconclusive), and a confounders block that auto-detects the 2025 GSC data-regime breaks (impression bug, num=100) and downgrades position reliability. Observational, not causal -- a server-side split test is the only true causal test. GSC-only. (v0.9.0)
AI / GEO citation (3, v0.9.0) - whether the AI answer surfaces reach and cite you.
ai_citation_readiness(url)- is a page structured to be extracted/cited by LLM answer engines? Leads with a render-blindness check (GPTBot / ClaudeBot / PerplexityBot fetch but do not run JS, so a client-rendered SPA is invisible to them), then scores evidence-backed signals (statistics, quotations, cited sources, no keyword-stuffing). schema.org / FAQ / llms.txt are reported as informational only -- the 2026 evidence does not support them as AI-citation drivers, so they are not scored. Free, HTTP-only.ai_referral_overview(property_id?, site_url?, days?)- first-party AI traffic: GA4 referral sessions from AI apps (the nativeai-assistantchannel plus a configurable source-host regex) and AI-crawler robots coverage (GPTBot, ClaudeBot, PerplexityBot, ...). Surfaces the ~70% dark-traffic undercount and keeps AI-Overview clicks (counted as Organic) separate. Free.ai_citation_track(prompts, brand, brand_domains?, competitors?, engines?, samples?)sampled brand mention + citation share-of-voice across AI engines (Perplexity / OpenAI / Anthropic / Gemini APIs + Google AI Overviews via DataForSEO) for a managed prompt set, vs competitors. N samples/prompt (default
with a 95% CI, share-of-voice, and run-to-run volatility -- NOT an "AI rank" (single runs are statistically meaningless). Discloses that developer-API output differs from the logged-in consumer UI and that AIO has no API. Paid + non-deterministic. Needs at least one engine key and/or DataForSEO.
Keyword discovery (3, v0.9.0) - find terms you don't already rank for.
gsc_keyword_expand(candidates, site_url?, days?, impressions_min?)- you (the host) brainstorm candidate terms from your winning queries; this grounds each against your own Search Console data (footprint covered / thin / none) with a sibling-strength confidence band. "none" = no VISIBLE footprint (GSC hides ~75% of impressions), so net-new terms are scored hypotheses. Free.serp_adjacency_expand(seeds, include_paa?)- expand seed terms into adjacent terms. FREE core: Google Autocomplete (no key). Optional People-Also-Ask + related searches via DataForSEO. Returns per-seed suggestions plus the aggregated net-new terms; degrades gracefully without a key.keyword_universe(target_domain?, competitors?, keywords?, limit?)- optional, paid. Core value: the competitor keyword GAP (DataForSEO Domain Intersection; no Google equivalent). Optional search volume / difficulty / intent via a provider chain (DataForSEO, else Google Ads volume-only). External volume is a degraded directional signal -- a tiebreaker, never a gate.
Google Analytics 4 (7)
ga4_run_report- the workhorse: arbitrary dimensions/metrics/date range, optional dimension filter and ordering.ga4_top_landing_pages- top landing pages, organic-only by default.ga4_traffic_by_channel- sessions/engagement/conversions by channel group.ga4_organic_search_overview- organic totals plus a day-by-day trend.ga4_setup_audit(property_id?)- read-only SEO-measurement-readiness audit: web data stream, key events, data retention, content-group dimensions, and (v0.7.4) enhanced measurement, internal site search, and Google Signals. Severity-graded with a benign exception per finding. Uses the GA4 Admin API over REST (analytics.readonly; no extra dependency). (v0.7.0)ga4_site_search(days?, limit?)- internal site-search query report (a direct content-gap signal); honest envelope when no real search terms. (v0.7.1)ga4_landing_page_conversions(days?, organic_only?, limit?)- organic landing pages ranked by conversions. (v0.7.1)
PageSpeed Insights (2)
psi_analyze- Lighthouse scores, lab Core Web Vitals, and field (CrUX) Core Web Vitals for a URL. Defaults to the mobile strategy. Field data carries afield_data_note: Google is deprecating PSI field data, so usecrux_snapshot/crux_historyfor durable field metrics.psi_opportunities(url, strategy?)- the actionable Lighthouse "opportunity" audits (with estimated savings) plus the SEO-category audits, severity-graded. Lab data only. An on-page-basics checklist, not a ranking predictor. (v0.7.1)
Cloudflare (13)
cf_list_zones- zones the token can see.cf_zone_info- status, plan, name servers for a zone.cf_list_dns- DNS records (read-only); useful for verifying canonical host and TXT verification records during migrations.cf_web_analytics- read-only edge Web Analytics (RUM), to compare against GA4. Cloudflare returnshost: nullfor some sites; pass thesite_tagto look those up explicitly.cf_purge_cache- purge specific URLs (gated).cf_purge_cache_all- purge an entire zone (gated + confirm token).cf_settings_audit(zone?)- read-only audit of SEO-relevant Cloudflare zone settings (SSL mode, Always-Use-HTTPS, HSTS, Automatic HTTPS Rewrites, Brotli, cache TTL). Severity-graded with a "verify, not fail" discipline because CF cannot see the origin; HSTS is never a hard failure. Needs Zone Settings Read on the token. Each finding carries a machine-readablefixhint (the exactcf_settings_updatesetting + recommended value) to chain audit -> fix. (v0.7.1)cf_settings_update(settings, zone?, confirm?, acknowledge_hsts_risk?, dry_run?)write the SEO/crawl/security settings the audit grades (SSL mode, Always-Use- HTTPS, Automatic HTTPS Rewrites, Brotli, browser cache TTL, HSTS), closing the audit -> remediate loop. Gated. ssl_mode or any HSTS-raise needs
confirm=<zone>(HSTS-raise also needsacknowledge_hsts_risk=true); validates locally, supportsdry_run, and re-runs the audit so you see the finding clear. Needs Zone Settings:Edit (vs the audit's Read). (v0.7.10)
cf_list_redirects(zone?)- list a zone's single (dynamic) redirect rules plus the account's Bulk Redirect lists (read-only). Call before any redirect write so nothing is clobbered. (v0.7.8; bulk lists added v0.7.9)cf_create_redirect(source, target, status_code?, ...)- create one edge redirect (e.g. a 301 for a renamed URL). Gated. Pre-flights the target (no redirecting to a dead URL), refuses loops/duplicates, supportsdry_run. (v0.7.8)cf_delete_redirect(rule_id, zone?)- remove a single-redirect rule by id (rollback for cf_create_redirect). Gated. (v0.7.8)cf_bulk_redirect_upsert(items, list_name, confirm, ...)- create/append many redirects at once via an account-level Bulk Redirect List (for migrations). Gated + a confirm token equal tolist_name. Validates every item locally first and rejects the whole batch on any bad item (never half-applies); supportsdry_run. (v0.7.9)cf_managed_robots(action, zone?, ...)- get / configure / disable Cloudflare's managed robots.txt and Content-Signals policy (these ride on the zone's Bot Management config).action="get"reads the current state (read-only, un-gated).action="configure"sets the managed robots.txt (managed_robots), the Content-Signals variant (cf_robots_variant: off / policy_only), and the AI-bot blocking levers (ai_bots_protection,content_bots_protection,crawler_protection).action="disable"turns the managed robots.txt and the policy back off. Managed robots.txt and the Content-Signals policy are mutually exclusive in Cloudflare, so the valid combinations aremanaged_robots=true+cf_robots_variant="off"(managed robots.txt) ORmanaged_robots=false+cf_robots_variant="policy_only"(the policy); the tool rejects the invalid combo locally withINVALID_INPUT. A custom Content-Signal line (e.g. fromrobots_ai_posture) is not a managed option - put that in your origin robots.txt. Writes are gated, needconfirm=<zone>, and supportdry_run; reads are safe (GET -> overlay -> PUT, so nothing else in the config is clobbered). Every response carries a caveat separating the stated-preference signals (Content-Signals, honored only by adopting crawlers and ignored by Googlebot) from the levers that actually enforce at the edge. Needs Bot Management:Edit for writes (Read for get). (v0.8.2)
IndexNow (2, v0.2.0)
indexnow_submit(url)- submit a single URL to Bing, Yandex, Naver, Seznam, Yep. Complements (does not replace)gsc_request_indexing, which only talks to Google. RequiresSEO_MCP_INDEXNOW_KEYplus a verification file athttps://<your-host>/<key>.txt(see IndexNow setup for the full key + file format + same-host rules).indexnow_bulk_submit(urls)- up to 10,000 URLs sharing one host in a single POST. Mixed-host batches are rejected client-side withINVALID_INPUTbefore any network call. TheSEO_MCP_INDEXNOW_KEY_LOCATIONenv var overrides the default verification-file URL when your CDN rewrites/key.txtpaths.
Technical SEO (8, v0.3.0) - no credentials needed; built-in HTTP client.
inspect_meta(url)- on-page surface in one call: title, meta description, meta robots, canonical, Open Graph + Twitter Card tags, hreflang, H1 count.check_canonical(url)- canonical-link audit: self-referential / cross-host / protocol-mismatched / trailing-slash drift / canonical target reachable.mixed_content_check(url)- parses an HTTPS page and flags anyhttp://references (img / script / iframe / form action / srcset). No-op forhttp://.redirect_chain_audit(url, max_redirects=10)- walks the chain hop by hop. Flags long chains, protocol downgrades, loops, non-2xx terminus.robots_txt_validate(site_url, probes?)- parses robots.txt (per-group rules + sitemaps + Content-Signals), optionally verdicts (user_agent, url) probes using RFC 9309 longest-match (matches what Google + Bing actually do, not stdlib's first-match). Also detects a stale edge-cached robots.txt (cache-bust comparison; re-parses from the fresh content) and a Cloudflare Managed robots.txt / Content-Signals policy overriding your origin - catching false-clean robots on migrated/CF-fronted sites. (v0.8.0)sitemap_validate(sitemap_url)- validates a sitemap or sitemap-index XML, counts entries, flags oversize + cross-host + missing lastmod..gztransparent.sitemap_health(sitemap_url, sample_size=25)- sample-HEAD audit. Status histogram + first non-2xx examples.robots_ai_posture(goal?, sitemap_url?)- deterministic, offline advisor for the Content-Signals levers (search/ai-input/ai-train). Takes a business goal (content_authoritydefault /maximize_visibility/protect_ip), recommends a posture with a plain-language rationale, lays out the trade-off alternatives, and emits a ready-to-apply artifact: theContent-Signal:directive line plus a full suggested robots.txt. No network, no writes. Every response carries the mandatory caveat that Content-Signal is honored only by adopting crawlers, is ignored by Googlebot, and is not a ranking factor. (v0.8.1)
Chrome UX Report (2)
crux_history(url? | origin?, form_factor?, metrics?)- 25 weeks of p75 Core Web Vitals via the CrUX History API. ReusesPSI_API_KEY; works anonymously at a tighter rate limit when no key is configured.crux_snapshot(url? | origin?, form_factor?)- the current p75 Core Web Vitals (point-in-time, vs the history). Each metric reports a category (GOOD / NEEDS_IMPROVEMENT / POOR); the rolled-up rating isoverall_category. Time metrics usep75_ms; the unitless CLS usesp75. Small origins return ano_dataenvelope. (v0.7.1)
Structured data + cross-site + on-page (7) - no new credentials (the v0.9 SERP auto-fetch is optional).
inspect_schema(url)- extract every JSON-LD block from a page; report the schema.org @type counts and a sample entity per type.validate_schema(url, types?)- verdict each JSON-LD entity against the Google Rich Results required-field set. Covers Article, NewsArticle, BlogPosting, Product, FAQPage, BreadcrumbList, Organization, LocalBusiness, Event, Review, Recipe. Per-entity verdict plus missing_required and missing_recommended lists.hreflang_consistency_check(urls)- cross-page hreflang audit on a user-supplied URL set. Flags missing reciprocity, broken hreflang targets, duplicate hreflang on one page, missing self-link, missing x-default when there are 3+ language variants.internal_link_graph(start_url, max_depth=2, max_pages=50)- small BFS crawl within the same host. Per-page in-degree + out-degree, orphan pages, broken internal links, depth distribution. Hard caps (max_depth <= 4, max_pages <= 200) so a misuse never melts the host.lighthouse_budget(url, budget)- wrapspsi_analyzeand verdicts the results against a budget dict, e.g.{performance: 80, LCP_ms: 2500, CLS: 0.1}. Per-metric pass/fail and an overall verdict. Useful as a CI / pre-deploy gate inside an LLM session. ReusesPSI_API_KEY.internal_link_recommend(start_url, site_url?, days?, position_min?, position_max?, relevance_floor?, limit?)recommends specific source->target internal links from high-in-degree pages to GSC striking-distance pages (default position 8-20 with real impressions), with anchor text. Ranks sources by lexical relevance + internal authority, skips pages that already link the target, balances anchor text, and never suggests nofollow. Built on
internal_link_graph+ GSC. Free. (v0.9.0)
onpage_serp_gap(target_url, query?, competitor_urls?, max_competitors?)- the headings, entities, and schema the top SERP results have that a target page lacks, turned into on-page actions. FREE with caller-suppliedcompetitor_urls; optional DataForSEO SERP auto-fetch byquery, which also returns winnability signals (serp_compositionAI-Overview / UGC zero-click risk) and, with Open PageRank, competitor domain authority. Surfaces information gain, not just parity. Boilerplate/nav headings are filtered out (pattern-class chrome filter). (v0.9.0; F6 fix v0.9.1, F1 generalized v0.9.2)
Every tool's tools/list entry carries the MCP standard annotations
(readOnlyHint, destructiveHint, idempotentHint, openWorldHint) so MCP
hosts can decide what to auto-approve and what to confirm.
Workflow prompts
The server publishes thirteen named MCP prompts (via prompts/list /
prompts/get) that chain the granular tools into common SEO workflows. Hosts
that surface prompts (Claude Desktop's slash menu, Cursor's command palette,
Cline's prompt picker) advertise them automatically.
Prompt | Arguments | Chains |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| per-URL |
|
|
|
|
|
|
|
| outline with rules: >=5 H2, >=70% target-query coverage, H1 has the primary keyword |
|
| article with rules: word count within +/-15%, per-section minimum, internal links, inline JSON-LD hint, no em-dashes |
|
|
|
|
|
|
|
|
|
Why prompts and not megatools: composability. A failed step inside a megatool poisons the megatool's envelope and the host loses the ability to retry just the failing leg. Prompts hand the host a recipe; each step's envelope arrives intact at the LLM.
Install
SEOMonster ships two install paths, both fully local:
.mcpbbundle for Claude Desktop. One-click install, GUI form for credentials, secret-typed inputs stored in the OS keychain. Recommended for most users.uvxfor Cursor, Cline, Codex, and Claude Desktop power users who prefer to hand-edit MCP config files.
Both paths run the same Python package (seo_mcp) and expose the same
52-tool surface. The difference is only how the host launches the server
and how it collects credentials.
Claude Desktop (recommended): .mcpb bundle
Three short steps. The OAuth consent is run once from a terminal (the GUI flow inside Claude Desktop's MCP subprocess times out before a real user can finish; see Why pre-flight auth? below).
1. Install the bundle. Download
seo-monster-0.2.0.mcpb
from GitHub releases (or, when listed, from the Claude
Directory) and double-click it. Claude Desktop
verifies the bundle, runs uv to materialize the Python environment, and
shows a configuration form:
Field | Type | Required | Notes |
Google OAuth Client Secrets | file picker | yes | Desktop-app client-secrets JSON from Google Cloud Console. |
Google OAuth Token Cache Path | string | yes | Defaults to |
GSC Default Property | string | no | e.g. |
GA4 Default Property ID | string | no |
|
PageSpeed Insights API Key | string, secret | no | Stored in the OS keychain. Strongly recommended (why?). |
Cloudflare API Token | string, secret | no | Stored in the OS keychain. Required only for the Cloudflare tools. |
Cloudflare Default Zone | string | no | e.g. |
IndexNow Key | string, secret | no | Required only for IndexNow tools. Any 8-128 hex string you generate. |
IndexNow Key File URL | string | no | Override the default verification location ( |
Fill the fields, click Save, then toggle the extension on. Quit Claude Desktop completely (⌘Q on macOS) and reopen.
2. Run the one-time OAuth consent from a terminal. Before using any Google-backed tool, run:
uvx seo-monster authA browser opens. Approve the requested scopes. The command writes
token.json to the path you configured (default ~/.config/seo-monster/token.json)
with 0600 permissions, then exits. This step is the recommended pattern; it
sidesteps the timeout that Claude Desktop imposes on every tool call.
3. Start a new chat in Claude Desktop and use the tools. Click the 🔧
tools icon in the input box; you should see 52 SEOMonster tools. Try
system_status first to verify everything is configured.
Why pre-flight auth?
The OAuth installed-app flow opens a local browser and waits for the user to
finish the consent screen. Inside Claude Desktop, MCP servers are launched as
subprocesses whose tool calls have a ~30-60 second timeout. Real users do not
complete browser consent that fast, so the originating call times out, and
since every Google tool retries the flow until a token exists, every call
times out in turn. Running uvx seo-monster auth once from a terminal puts
the token on disk; from that point on, Claude Desktop's MCP server just reads
the cached token and silently refreshes it as needed.
uvx for Cursor, Cline, Codex (and Claude Desktop power users)
uvx runs the published PyPI package seo-monster in an ephemeral
environment. Add the snippet for your host below, using the absolute path
to uvx (find it with which uvx; GUI hosts do not read your shell profile).
Cursor (~/.cursor/mcp.json or project .cursor/mcp.json)
{
"mcpServers": {
"seomonster": {
"command": "/Users/me/.local/bin/uvx",
"args": ["seo-monster"],
"env": {
"SEO_MCP_GOOGLE_OAUTH_CLIENT": "/Users/me/.config/seo-monster/client_secret.json",
"SEO_MCP_GOOGLE_TOKEN": "/Users/me/.config/seo-monster/token.json",
"SEO_MCP_GA4_PROPERTY_ID": "properties/123456789",
"PSI_API_KEY": "AIza...",
"CF_API_TOKEN": "..."
}
}
}
}Cline (cline_mcp_settings.json)
{
"mcpServers": {
"seomonster": {
"command": "/Users/me/.local/bin/uvx",
"args": ["seo-monster"],
"env": {
"SEO_MCP_GOOGLE_OAUTH_CLIENT": "/Users/me/.config/seo-monster/client_secret.json",
"SEO_MCP_GOOGLE_TOKEN": "/Users/me/.config/seo-monster/token.json"
},
"alwaysAllow": ["system_status", "gsc_search_analytics", "ga4_run_report", "psi_analyze"]
}
}
}alwaysAllow lists read tools so Cline does not prompt on each call. Leave the
cache-purge tools off so they always prompt.
Codex (~/.codex/config.toml)
[mcp_servers.seomonster]
command = "/Users/me/.local/bin/uvx"
args = ["seo-monster"]
[mcp_servers.seomonster.env]
SEO_MCP_GOOGLE_OAUTH_CLIENT = "/Users/me/.config/seo-monster/client_secret.json"
SEO_MCP_GOOGLE_TOKEN = "/Users/me/.config/seo-monster/token.json"
SEO_MCP_GA4_PROPERTY_ID = "properties/123456789"Claude Desktop, direct uvx (advanced)
If you prefer to hand-edit claude_desktop_config.json instead of using the
.mcpb bundle, the same snippet shape as Cursor above works.
Auth
The four services authenticate independently. Configure only the ones you use;
a tool for an unconfigured service returns a clear AUTH_MISSING error rather
than failing the server.
Quick setup (recommended): seo-monster setup
Run seo-monster setup once from a terminal. It interactively collects your
Cloudflare token, PageSpeed Insights key, IndexNow key, and the default GSC and
GA4 properties, validates what it can against the live APIs, and writes them to
~/.config/seo-mcp/config.toml with 0600 permissions. Your MCP host config
then needs no secrets in it:
{ "command": "uvx", "args": ["seo-monster"] }Two things setup does not do, by design:
Google OAuth still uses the separate one-time browser step. After
setup, runseo-monster authto complete Google consent (see the next section).It never overrides environment variables. Anything set in your host's
envblock still wins over the config file, so CI and Docker keep using env vars.
setup is re-runnable: existing values are shown as defaults and kept when you
leave a field blank. The sections below document the per-service env vars, which
are what setup writes for you and what CI pipelines can set directly.
Google (Search Console + Analytics 4) - OAuth, recommended
This is the lower-friction path: no Cloud service account, no per-property email grants.
In the Google Cloud Console, create (or pick) a project and enable the APIs you will use:
Search Console API
Indexing API (for
gsc_request_indexing)Google Analytics Data API (for the GA4 tools)
PageSpeed Insights API (only if you want a PSI key; see below)
Create an OAuth client of type Desktop app and download the client-secrets JSON.
Point the server at it and at a writable token path:
SEO_MCP_GOOGLE_OAUTH_CLIENT= path to the client-secrets JSONSEO_MCP_GOOGLE_TOKEN= a writable path where the token will be cached
One-time: run
uvx seo-monster authfrom a terminal. A browser opens; approve the scopes. The command writestoken.json(0600) and exits.Subsequent runs (server-side) refresh the token silently. The server never opens a browser; if the cached token is missing, tools return
AUTH_MISSINGpointing back at theauthcommand.
The signed-in Google account must have access to the Search Console properties and GA4 properties you query.
Token-cache hardening. The cached token is refresh-capable and equivalent
to a long-lived credential for the requested scopes. The server writes it with
0600 and its parent directory with 0700. Keep SEO_MCP_GOOGLE_TOKEN under
a directory you control (e.g. ~/.config/seo-monster/) and do not put it on a
shared filesystem.
Google - service account (advanced, headless)
For fully headless or server deployments where a browser is not available:
Create a service account and download its JSON key.
Set
SEO_MCP_GOOGLE_CREDENTIALS(or the standardGOOGLE_APPLICATION_CREDENTIALS) to the key path.Grant the service-account email access on each property:
Search Console: add it as a user on the property.
GA4: add it as a Viewer on the property.
If both OAuth and a service account are configured, OAuth is used.
Coverage note. The OAuth installed-app path is exercised in our validation pass and in production-style smoke tests. The service-account path is documented but not independently validated against a live Cloud project. If you hit issues on the SA path, please open an issue.
Scopes (minimal vs full)
The default consent requests the scopes needed for every tool, including the two writes:
Capability | Scope |
GSC read |
|
GSC sitemap submit |
|
GSC indexing request |
|
GA4 reporting |
|
If you only want reads, you can consent to a narrower set
(webmasters.readonly + analytics.readonly) and simply not call
gsc_submit_sitemap / gsc_request_indexing; calling a write tool without its
scope returns SCOPE_INSUFFICIENT with remediation, never a crash.
PageSpeed Insights
PSI works without a key in principle, but in practice the anonymous quota is
shared across every caller without a key and is frequently exhausted: a
single psi_analyze call against the anonymous endpoint often returns
RATE_LIMITED. Treat the anonymous mode as a fallback, not the steady
state.
To get reliable PSI access:
In Cloud Console, enable the PageSpeed Insights API.
Create an API key (Credentials > Create credentials > API key). It takes a minute. The key is free.
Set
PSI_API_KEY(or use the field in the.mcpbconfiguration form).
The PSI API only accepts the key as a URL query parameter (not a header), so treat PSI keys as low-sensitivity. Scope the key to the PageSpeed Insights API only and attach no other GCP roles.
Cloudflare
Create an API token at
dash.cloudflare.com/profile/api-tokens
and set CF_API_TOKEN (and optionally CF_ZONE for a default zone). Grant only
the permissions you need:
Permission | Needed for |
Zone: |
|
Zone: |
|
Account: |
|
Zone: |
|
Zone: |
|
Zone: |
|
Account: |
|
IndexNow
IndexNow notifies Bing, Yandex, Naver, Seznam, and Yep when a URL is created
or updated. Google does not participate, so the IndexNow tools complement
rather than replace gsc_request_indexing.
One-time setup
Generate a key. Any 8-128 character string of letters, digits, or hyphens (
a-z,A-Z,0-9,-) per the IndexNow spec. Common patterns: a 32-char lowercase hex string (e.g.python -c "import secrets; print(secrets.token_hex(16))") or any random alphanumeric of similar length. Treat it like an API key; do not commit it.Configure SEOMonster by setting
SEO_MCP_INDEXNOW_KEYto that string (or use the.mcpbconfiguration form; the field is marked sensitive and lands in the OS keychain).Host the verification file at
https://<your-host>/<key>.txt. The file body MUST be exactly the key string with no trailing newline, no BOM, no extra whitespace, no HTML wrapper. The Content-Type should betext/plain. Confirm withcurl -i https://<your-host>/<key>.txtbefore moving on; the response body must be byte-identical to the key.(Optional) Set
SEO_MCP_INDEXNOW_KEY_LOCATIONif the verification file lives at a non-standard URL (some CDNs rewrite/key.txtpaths). The default location ishttps://<host>/<key>.txtderived from the URLs you submit, so you usually do not need this.
Same-host constraint
Every URL submitted in one indexnow_submit or indexnow_bulk_submit call
must share the same host as the verification file. Mixed-host batches are
rejected by IndexNow with HTTP 422; indexnow_bulk_submit enforces this
client-side and returns INVALID_INPUT before any network call when it
detects mixed hosts.
If you have multiple hosts, host a verification file per host and either
make separate calls per host or override SEO_MCP_INDEXNOW_KEY_LOCATION
per call (the tool does not currently expose per-call override; set
distinct env values per session).
Common errors
Symptom | Likely cause |
| Engines could not fetch |
| URL list spans multiple hosts; split into per-host batches |
| Hit IndexNow's per-host rate cap. Wait before retrying |
Verify your setup
After configuring, call system_status to see what is detected. Call it with
{"probe": true} to make one cheap live request per configured service and
confirm the credentials actually work (GSC lists properties, GA4 runs a 1-row
report against the default property, Cloudflare lists one zone, PSI pings the
endpoint). With probe off (the default) it does a config-only check and makes
no network calls.
Destructive mode
Cache purges affect every visitor, so they are off by default. Set
SEO_MCP_ALLOW_DESTRUCTIVE=true to enable cf_purge_cache and
cf_purge_cache_all. While off, those tools return DESTRUCTIVE_DISABLED and
make no network call.
cf_purge_cache_all (purge the whole zone) carries an extra safeguard: it
requires a confirm argument equal to the resolved zone hostname. A missing or
mismatched confirm returns CONFIRM_REQUIRED and issues no purge.
The two GSC writes (gsc_submit_sitemap, gsc_request_indexing) are not
gated; they are routine, low-blast-radius SEO tasks.
Configuration
Resolution is environment-first, with a TOML file fallback. Environment always
wins. The config file is normally written for you by seo-monster setup (with
0600 permissions); you can also write it by hand or set the env vars below.
Env var | Service | Purpose |
| OAuth client-secrets JSON path (recommended). | |
| Writable cached-token path (OAuth). | |
| Service-account key path (alternative). | |
| Standard service-account fallback. | |
| GSC | Default property, e.g. |
| GA4 | Default property, e.g. |
| GSC |
|
| PSI | PageSpeed Insights API key (optional). |
| CF | Cloudflare API token. |
| CF | Default zone hostname. |
| IndexNow | Shared key for the IndexNow tools (sensitive). |
| IndexNow | Override default key-file URL (optional). |
| all |
|
| all | Path to the TOML config file. |
| DataForSEO | Optional (v0.9): SERP/PAA, keyword volume/difficulty/intent, competitor gap, Google AIO. |
| Open PageRank | Optional (v0.9): free competitor domain authority. |
| AI engines | Optional (v0.9): engines for |
| Google Ads | Optional (v0.9): volume alt to DataForSEO (needs adwords-scope consent). |
Config file fallback at ~/.config/seo-mcp/config.toml (or SEO_MCP_CONFIG):
[google]
oauth_client = "/Users/me/.config/seo-mcp/client_secret.json"
token = "/Users/me/.config/seo-mcp/token.json"
# credentials = "/Users/me/.config/seo-mcp/sa.json" # service-account alternative
[gsc]
default_site = "sc-domain:example.com"
data_state = "all"
[ga4]
property_id = "properties/123456789"
[psi]
api_key = "AIza..."
[cloudflare]
api_token = "..."
zone = "example.com"
[server]
allow_destructive = false
# Optional v0.9 providers (discovery + AI/GEO). The free GSC/GA4/HTTP core
# works without any of these; each tool degrades gracefully when unset.
[dataforseo]
# login = "..."
# password = "..."
[openpagerank]
# api_key = "..."
[ai_engines]
# perplexity = "..."
# openai = "..."
# anthropic = "..."
# gemini = "..."
[google_ads]
# developer_token = "..." # volume alt to DataForSEO; needs adwords-scope OAuth
# customer_id = "..."Result envelope
Every tool returns the same shape. On success:
{ "ok": true, "data": { /* tool-specific */ }, "error": null }On failure:
{
"ok": false,
"data": null,
"error": {
"code": "AUTH_MISSING",
"service": "gsc",
"message": "No Google credentials found for Search Console.",
"remediation": "Configure OAuth ... or a service-account key. See README > Auth.",
"docs_url": "https://seomonster.avansaber.com#auth",
"details": null
}
}Error codes:
Code | Meaning |
| No credential configured for the service. |
| Credential present but rejected (401/403, bad key, expired). |
| Token lacks the scope this tool needs. |
| A cache-purge tool was called with destructive mode off. |
|
|
| Site / property / zone / record not found or not visible. |
| Argument failed validation (bad date, missing required arg). |
| Upstream 429. |
| A Google Cloud API is not enabled; |
| Any other non-2xx from an upstream API. |
Development
git clone https://github.com/avansaber/seo-monster
cd seo-monster
uv venv && uv pip install -e ".[dev]"
uv run pytest # offline test suite
uv run seo-monster # run the server over stdio
uv run seo-monster auth # one-time OAuth consent (or `uv run seo-mcp auth`)The package exposes two console-script aliases: seo-monster (canonical,
matches the PyPI distribution) and seo-mcp (a v0.1.x dev alias kept for
back-compat). Both invoke the same entry point. As of v0.2.0, invoking the
server via seo-mcp emits a one-line stderr deprecation notice; nothing on
stdout, so the MCP protocol channel is unaffected. Production configs should
use seo-monster; the alias will be removed in a future major release.
Tests are fully offline: they mock at the client layer, so no network and no credentials are needed to run them.
Server identity note. Some MCP host UIs display the server name as
seo-mcpand the version as themcpSDK version (e.g.1.27.1). The server-name string is the value we passed toServer("seo-mcp")and is kept stable for back-compat; the version readout is a quirk of the SDK (create_initialization_options()does not propagate the package version). The package's real version is inpyproject.tomlandseo_mcp.__version__.
Changelog
Release-by-release notes, including the validation checks each version's external testing pass should cover, live in CHANGELOG.md.
Privacy
SEOMonster runs entirely on your machine and talks only to the upstream APIs you configure. The maintainers do not see any of your data, credentials, queries, or tool calls. See PRIVACY.md for the full statement.
License
MIT. See LICENSE.
Available Tools
70 toolsai_citation_readinessARead-onlyIdempotent
Score whether a page is structured to be extracted and cited by LLM answer engines (ChatGPT, Perplexity, Claude, Google AI Overviews). Leads with a render-blindness check (AI crawlers do not run JS, so a client-rendered SPA is invisible to them), then scores evidence-backed signals: statistics, quotations, cited sources, no keyword stuffing. Reports schema.org / FAQ as informational only -- the 2026 evidence does NOT support them as AI-citation drivers, so they are not scored. Read-only HTTP GET; does not guarantee a citation.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute http(s) URL to assess. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations: it explains the render-blindness check, evidence-backed signals, and mentions that schema.org/FAQ are informational and not scored. This complements the annotations (readOnlyHint, openWorldHint) without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient and front-loaded with the core purpose. It is concise but could benefit from clearer sentence breaks or bullet points for readability. Currently, it reads as a single dense paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter and no output schema, the description adequately explains what the tool does and its limitations (no guarantee of citation). However, it does not describe the return format or score range, which might be needed for an agent to interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with a clear description for 'url'. The tool description does not add additional meaning or usage tips for the parameter, so it meets the baseline for full schema coverage without extra detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: scoring a page's readiness for LLM citation. It lists specific checks (render-blindness, statistics, etc.) and distinguishes itself from siblings like 'ai_citation_track' by focusing on readiness assessment rather than tracking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implicit usage context by explaining the methodology (leads with render-blindness check) and notes that it does not guarantee citation. However, it does not explicitly list scenarios when not to use or compare with alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_citation_trackARead-only
Track brand mention + citation share-of-voice across AI answer engines (Perplexity/OpenAI/Anthropic/Gemini via their APIs, Google AI Overviews via DataForSEO) for a managed prompt set, vs competitors. Samples each prompt N times (default 7) and reports visibility with a 95% confidence interval, share-of-voice, and run-to-run volatility -- NOT an 'AI rank' (single runs are statistically meaningless). Honest bound: developer-API output differs from the logged-in consumer UI, and AIO has no API. Paid + non-deterministic; results are directional and dated, not guaranteed.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | Yes | Your brand name to detect in answers. Required. | |
| engines | No | Subset of available engines; default all configured. | |
| prompts | Yes | Managed prompt set (freeze it across cycles). Required, 1-50. | |
| samples | No | Samples per prompt per engine. Default 7 (>=7 recommended). | |
| competitors | No | Competitor brand names for share-of-voice. | |
| brand_domains | No | Your domain(s) to detect in citations, e.g. ['example.com']. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly, openWorld, non-idempotent, non-destructive. Description adds 'Paid + non-deterministic', 'results are directional and dated', and warns about API-UX discrepancies, providing behavioral context beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single cohesive paragraph that front-loads the core function. It's dense with useful information but could be slightly improved with structured formatting. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description covers input (managed prompt set, brand, engines, samples, competitors, brand domains), process (sampling, confidence interval, share-of-voice, volatility), and limitations (directionality, datedness, API differences). With no output schema, it adequately explains expected results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and description adds valuable context for parameters: 'freeze it across cycles' for prompts, 'default 7 (>=7 recommended)' for samples, and 'Your domain(s) to detect in citations' for brand_domains, enhancing schema descriptions meaningfully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool tracks brand mention and citation share-of-voice across AI answer engines for a managed prompt set. It specifies the action (track), resource (brand mentions/citations), and scope (compared to competitors), distinguishing it from all sibling tools which focus on different domains like GSC, GA4, or Cloudflare.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description provides explicit context on when to use ('NOT an AI rank', 'single runs are statistically meaningless') and limitations (developer-API vs consumer UI, AIO has no API). It doesn't explicitly state when not to use or list alternatives, but the tool's uniqueness among siblings makes these implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_referral_overviewARead-onlyIdempotent
First-party view of AI traffic: (1) referral sessions from AI apps (ChatGPT, Perplexity, Gemini, Copilot, Claude, ...) via GA4, detected by both the native ai-assistant channel and a source-host regex; and (2) AI-crawler coverage -- whether robots.txt lets GPTBot, ClaudeBot, PerplexityBot, etc. reach the site. Needs a GA4 property (for referral) and/or a site_url (for crawl coverage). Honest bound: AI referrals undercount badly (~70% land as Direct), and AI-Overview clicks count as Organic, not here.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window for GA4 referral. Defaults to 28. | |
| site_url | No | Any URL on the target host, for the robots crawl-coverage check. Defaults to deriving from the GSC default site. | |
| property_id | No | GA4 property (e.g. 'properties/123' or '123'). Defaults to the configured property. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds valuable behavioral context: the undercount disclaimer (~70% land as Direct) and the fact that AI-Overview clicks are excluded. This goes beyond what annotations provide but does not cover all potential edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact at two sentences with a semicolon, covering all necessary points without fluff. It is front-loaded with the main purpose and ends with an important caveat. Minor improvement: could use structured bullets for the two components, but current structure is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, prerequisites, and limitations well, but lacks any mention of return values or output format. Since the tool has no output schema, the description should at least hint at what the agent can expect (e.g., a JSON object with referral stats and crawl status). Parameters and annotations are well-covered, but output is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions, but the tool description adds default behaviors (days defaults to 28, site_url defaults from GSC default site, property_id defaults to configured property) and functional grouping (days for GA4 referral, site_url for crawl coverage). This significantly enhances meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides a 'First-party view of AI traffic' with two specific components: AI referral sessions via GA4 and AI-crawler coverage via robots.txt. It names specific AI apps and bots, making the resource scope explicit. This verb+resource+scope structure distinguishes it from sibling tools like robots_ai_posture or ga4_organic_search_overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear prerequisites (GA4 property for referral, site_url for crawl coverage) and defaults for parameters. It includes an explicit honest bound about undercounting and AI-Overview clicks counting as Organic. However, it does not explicitly state when not to use this tool or mention alternative tools for similar tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cf_bulk_redirect_upsertADestructiveIdempotent
Create or append many redirects at once via an account-level Bulk Redirect List (for site migrations). Gated: requires SEO_MCP_ALLOW_DESTRUCTIVE=true AND a confirm value equal to list_name. Validates every item locally first and rejects the whole batch on any bad item (never half-applies); supports dry_run. Items are added asynchronously by Cloudflare.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Up to 1000 redirect mappings. | |
| confirm | No | Must equal list_name to proceed (the high-blast-radius gate). | |
| dry_run | No | Validate + report what would be written, without writing (default false). | |
| list_name | Yes | Name of the Bulk Redirect List to create/append (also the confirm value). Letters, numbers, and underscores only (no hyphens), e.g. site_migration_2026. | |
| description | No | Optional list description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses all-or-nothing validation, async addition, and dry_run support beyond what annotations provide. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no wasted words. Purpose upfront, followed by gating and behavior, then async note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, gating, validation, dry_run, async. Lacks description of return value or response structure, but overall adequate for a complex bulk operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description adds little beyond schema. It reinforces the confirm and list_name relationship but no new parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates or appends many redirects via a bulk redirect list for site migrations. It distinguishes from siblings like cf_create_redirect (single) and cf_delete_redirect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit gating conditions (destructive env variable and confirm value) and mentions dry_run. Does not explicitly list alternatives, but the context implies when to use single vs bulk tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cf_create_redirectADestructiveIdempotent
Create one single (dynamic) redirect at the Cloudflare edge (e.g. a 301 for a renamed/migrated URL). Gated: requires SEO_MCP_ALLOW_DESTRUCTIVE=true. Validates the target is reachable (no redirecting to a dead URL), refuses loops and duplicates, and supports dry_run to preview the rule first.
| Name | Required | Description | Default |
|---|---|---|---|
| zone | No | Zone hostname. Defaults to the configured CF_ZONE. | |
| source | Yes | Absolute source URL to redirect FROM (exact full-URI match). | |
| target | Yes | Absolute target URL to redirect TO. | |
| dry_run | No | Preview the rule that would be created without writing it (default false). | |
| status_code | No | 301 (default, permanent), 302/307 (temporary), or 308. | |
| skip_preflight | No | Bypass the target-reachability pre-flight (default false). | |
| preserve_query_string | No | Carry the original query string to the target (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true; description adds valuable context about preflight target validation, loop/duplicate checks, and dry_run capability. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no redundancy. Front-loaded with core purpose, then safety features. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, no output schema, the description explains key behaviors (validation, loop/duplicate prevention, dry_run) and gating. Could mention return value structure, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds minimal extra meaning beyond schema, primarily mentioning dry_run's purpose. Does not significantly enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a single dynamic redirect at the Cloudflare edge, with an example (301 for renamed/migrated URL). It distinguishes from siblings like cf_bulk_redirect_upsert (bulk) and cf_list_redirects (list).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit gating condition (requires SEO_MCP_ALLOW_DESTRUCTIVE=true) and mentions validation, loop/duplicate refusal, and dry_run support. However, no explicit when-not-to-use or comparison with alternative tools like cf_bulk_redirect_upsert.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cf_delete_redirectADestructiveIdempotent
Delete one single (dynamic) redirect rule by its id (the rollback path for cf_create_redirect). Gated: requires SEO_MCP_ALLOW_DESTRUCTIVE=true. Get the rule id from cf_list_redirects.
| Name | Required | Description | Default |
|---|---|---|---|
| zone | No | Zone hostname. Defaults to the configured CF_ZONE. | |
| rule_id | Yes | The redirect rule id (from cf_list_redirects). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, so description does not need to reiterate. However, description adds important behavioral context: the gating by an environment variable (SEO_MCP_ALLOW_DESTRUCTIVE), which is not in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that deliver all critical information without unnecessary words. Front-loads the purpose and includes key usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple deletion tool with well-defined parameters and annotations, the description covers purpose, input source, and access control. No output schema is needed, and sibling tools provide relevant context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers both parameters with good descriptions (100% coverage). The description adds value by clarifying that rule_id comes from the cf_list_redirects tool, aiding the agent in understanding the data flow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete one single (dynamic) redirect rule'), the resource ('redirect rule'), and the identifier ('by its id'). It also distinguishes itself from cf_create_redirect as the rollback path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use this tool (as the rollback path for cf_create_redirect) and where to obtain the required input ('Get the rule id from cf_list_redirects'). Also mentions the gating condition requiring SEO_MCP_ALLOW_DESTRUCTIVE=true.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cf_list_dnsARead-onlyIdempotent
List DNS records for a zone (read-only). Useful for verifying the canonical host, CNAME flattening, and TXT verification records during SEO migrations.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Optional record type filter, e.g. 'CNAME', 'TXT', 'A'. | |
| zone | No | Zone hostname. Defaults to the configured CF_ZONE. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering safety. The description adds behavioral context by specifying SEO migration use cases, which goes beyond the annotations and helps the agent understand the tool's role.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff: first sentence defines the operation, second lists practical use cases. Every word earns its place; it is as concise as possible without sacrificing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should compensate with details about the return format (e.g., fields like name, type, TTL, content). It omits this and does not mention pagination or limits, making it somewhat incomplete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes both parameters ('type', 'zone') adequately. The description does not add any additional meaning or examples beyond what is in the schema, meeting only the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'List DNS records for a zone (read-only)' – a specific verb and resource. It further clarifies use cases like verifying canonical host, CNAME flattening, and TXT records during SEO migrations, distinguishing it from sibling tools that manage zones or analytics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for verification tasks but does not explicitly state when to use this tool vs alternatives like cf_list_zones or cf_zone_info. No when-not-to-use or alternative naming is provided, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cf_list_redirectsARead-onlyIdempotent
List a zone's single (dynamic) redirect rules (source, target, status code, rule id) plus the account's Bulk Redirect lists (read-only). Call this before cf_create_redirect / cf_delete_redirect / cf_bulk_redirect_upsert so writes never clobber existing rules. Pairs with redirect_chain_audit and the migration_check prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| zone | No | Zone hostname. Defaults to the configured CF_ZONE. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructiveHint. The description adds context about safe usage before mutation tools and mentions the output fields. However, it does not elaborate on pagination or behavior for large accounts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: purpose, usage guidance, and pairing. No wasted words. Information is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with no output schema, the description adequately describes what is returned (specific fields of redirect rules and Bulk Redirect lists). It also mentions the default zone behavior, making it complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the description does not add information beyond the schema's parameter docs. The tool description does not elaborate on the zone parameter beyond what is in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists a zone's single redirect rules and the account's Bulk Redirect lists, specifying the fields returned (source, target, status code, rule id). This verb+resource combination is distinct and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to call this before cf_create_redirect, cf_delete_redirect, and cf_bulk_redirect_upsert to prevent clobbering, and mentions pairing with redirect_chain_audit and migration_check prompt. This provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cf_list_zonesARead-onlyIdempotent
List the Cloudflare zones the API token can see, with status, plan, and id.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows it's safe. The description adds that it returns specific fields (status, plan, id) but doesn't disclose potential rate limits or pagination. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the verb 'List'. No extraneous information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a parameterless read-only tool. It states the action, resource, and output fields. However, it lacks guidance on potential large result sets or limits, which could be relevant. Overall, it is mostly complete given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. The description adds value by specifying the output fields (status, plan, id) that go beyond the empty schema. This context helps the agent understand the return format without an output schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists Cloudflare zones with specific fields (status, plan, id). It uses a specific verb and resource, distinguishing it from sibling tools like cf_zone_info (which targets a single zone) and cf_list_dns (DNS records).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. The description implies it is for listing zones accessible by the API token, but lacks comparison to alternatives like cf_zone_info for detailed info. However, given the tool's simplicity, the omission is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cf_managed_robotsADestructiveIdempotent
Get / configure / disable Cloudflare's managed robots.txt and Content-Signals policy on a zone (rides on the Bot Management config). action='get' reads the current state (read-only, un-gated). action='configure' enables/sets the managed robots.txt (managed_robots), the Content-Signals variant (cf_robots_variant: off / policy_only), and the AI-bot blocking levers (ai_bots_protection, content_bots_protection, crawler_protection). action='disable' turns managed robots.txt and the Content-Signals policy back off. NOTE: managed robots.txt and the Content-Signals policy are MUTUALLY EXCLUSIVE in Cloudflare - valid combinations are managed_robots=true + cf_robots_variant='off' (managed robots.txt) OR managed_robots=false + cf_robots_variant='policy_only' (the policy); the tool rejects the invalid combo locally. Writes are gated (SEO_MCP_ALLOW_DESTRUCTIVE) and need confirm=; supports dry_run. Always returns a caveat distinguishing the stated-preference signals from the levers that actually enforce at the edge.
| Name | Required | Description | Default |
|---|---|---|---|
| zone | No | Zone hostname, e.g. 'example.com'. Defaults to the configured CF_ZONE. | |
| action | Yes | get (read), configure (write), or disable (write). | |
| confirm | No | For writes: must equal the resolved zone hostname. | |
| dry_run | No | Preview the change without writing. | |
| managed_robots | No | configure only: enable (true) or disable (false) Cloudflare managed robots.txt. | |
| cf_robots_variant | No | configure only: the Content-Signals / Robots Access Control License variant. | |
| ai_bots_protection | No | configure only: edge rule to block AI scrapers/crawlers (enforces). | |
| crawler_protection | No | configure only: link-maze punishment for AI crawlers (enforces). | |
| content_bots_protection | No | configure only: edge rule to block content bots (enforces). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits: the mutual exclusivity of managed robots.txt and Content-Signals policy, the local rejection of invalid combinations, the gating of writes via confirm, support for dry_run, and that the return always includes a caveat. Annotations indicate destructiveHint=true and readOnlyHint=false, which align with the description; the description adds significant context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but well-structured, starting with the overall purpose, then detailing actions, then constraints, and ending with return information. Every sentence contributes essential information. Minor redundancy could be trimmed, but it remains efficient for its complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 actions, 9 params, mutual exclusion, gates, no output schema), the description covers all necessary behavioral aspects: actions, parameter roles, constraints, gating, dry_run, and return caveat. Annotations complement but do not reduce the burden; the description is fully adequate for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for all 9 parameters. The description adds value by explaining the purpose of parameters in context (e.g., what 'configure only' means, the valid combinations, and the role of each protection lever). However, much of the parameter meaning is already clear from the schema, so the description provides incremental but meaningful depth.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages Cloudflare's managed robots.txt and Content-Signals policy, enumerating three distinct actions (get, configure, disable) with specific behaviors for each. It distinguishes the tool's scope from siblings, which are mostly unrelated (GSC, PSI, etc.), and provides a specific verb+resource combination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use each action (get for reading, configure for enabling/setting, disable for turning off), mentions that writes require confirm and support dry_run, and notes the mutual exclusivity constraint. It does not explicitly list when not to use the tool, but the actions are self-explanatory and no direct sibling alternatives exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cf_purge_cacheADestructiveIdempotent
Purge specific URLs from the Cloudflare cache so crawlers refetch updated content. Gated: requires SEO_MCP_ALLOW_DESTRUCTIVE=true.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Absolute URLs to purge. | |
| zone | No | Zone hostname. Defaults to the configured CF_ZONE. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true and readOnlyHint=false. The description adds the crucial gating requirement (SEO_MCP_ALLOW_DESTRUCTIVE) which is important behavioral context. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences: the first states the purpose and the second notes the gating requirement. No extraneous text; every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations and lack of output schema, the description covers the core purpose and access control. It does not detail success/error responses or rate limits, but for a simple cache purge tool, the completeness is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive parameter descriptions. The tool description does not add any additional semantic information about the parameters beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Purge' with the resource 'Cloudflare cache' and explains the purpose ('so crawlers refetch updated content'). It clearly distinguishes from the sibling tool 'cf_purge_cache_all' which purges all cache, making the scope explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use the tool ('gated: requires SEO_MCP_ALLOW_DESTRUCTIVE=true') and implies it is for specific URL purging after content updates. However, it does not explicitly state when not to use it or compare with 'cf_purge_cache_all', though the sibling name provides context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cf_purge_cache_allADestructiveIdempotent
Purge the entire Cloudflare cache for a zone (affects all visitors). Gated: requires SEO_MCP_ALLOW_DESTRUCTIVE=true AND a confirm value equal to the resolved zone hostname, so a full purge cannot fire ambiguously.
| Name | Required | Description | Default |
|---|---|---|---|
| zone | No | Zone hostname. Defaults to the configured CF_ZONE. | |
| confirm | Yes | Must equal the resolved zone hostname to proceed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and non-readonly nature. Description adds context: gating via environment variable and string confirmation, plus global impact. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: first states purpose and effect, second explains gating. No superfluous words. Front-loaded with key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, scope, and gating. Does not detail post-purge behavior (e.g., cache rebuild), but for a destructive tool with annotations, this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover both parameters (zone with default, confirm must equal hostname). The description reinforces the confirm requirement in the usage context, adding value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states specific verb ('Purge') and resource ('entire Cloudflare cache for a zone'), with scope ('affects all visitors'). Clearly distinguishes from sibling cf_purge_cache (likely partial purge).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes gating conditions (env var + confirm value) needed to invoke the tool. Does not mention alternatives or when not to use, but the safety mechanism is well communicated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cf_settings_auditARead-onlyIdempotent
Audit a Cloudflare zone's settings for SEO and crawl/index safety (read-only): SSL/TLS mode, Always Use HTTPS, HSTS, Automatic HTTPS Rewrites, Brotli, and browser cache TTL. Findings are severity-graded with the reason and a benign exception each. Cloudflare cannot see the origin, so the SSL and Always-HTTPS checks are phrased as 'verify,' not 'fail,' and HSTS is never hard-failed (premature HSTS is dangerous and hard to undo). Answers 'are my edge settings silently sabotaging crawl/index?' It grades the edge layer only, not origin behavior.
| Name | Required | Description | Default |
|---|---|---|---|
| zone | No | Zone hostname, e.g. 'example.com'. Defaults to the configured CF_ZONE. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, etc. The description adds value by explaining read-only nature, why checks are 'verify' not 'fail', and that it grades only edge layer. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly long but well-organized with front-loaded purpose. It includes bullet-like list and specific details. Could be slightly more concise, but no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, description is complete. It hints at return format (severity-graded findings with reason and benign exception) and answers the core question. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter `zone` with schema coverage 100%. Description adds context about defaulting to configured CF_ZONE, which is extra beyond schema. Baseline 3, so 4 for added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it audits Cloudflare zone settings for SEO and crawl/index safety, listing specific settings checked. It distinguishes itself from sibling tools like cf_settings_update and cf_zone_info by focusing on audit and safety grading.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use: to check edge settings for SEO safety. It provides context about HSTS danger and 'verify' phrasing, but does not explicitly state when not to use or compare directly to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cf_settings_updateADestructiveIdempotent
Write the SEO/crawl/security Cloudflare zone settings that cf_settings_audit grades, to close the audit -> remediate loop. Gated: requires SEO_MCP_ALLOW_DESTRUCTIVE=true. Changing ssl_mode, or any HSTS change that raises protection, additionally requires confirm= (HSTS also requires acknowledge_hsts_risk=true). Validates locally first and supports dry_run (before/after preview). Needs the Zone Settings:Edit token scope (the audit only needs Read).
| Name | Required | Description | Default |
|---|---|---|---|
| zone | No | Zone hostname. Defaults to the configured CF_ZONE. | |
| confirm | No | Must equal the resolved zone for ssl_mode or HSTS-raise changes. | |
| dry_run | No | Preview before/after without writing (default false). | |
| settings | Yes | Only the provided keys are changed. | |
| acknowledge_hsts_risk | No | Required true for any HSTS change that raises protection (HSTS is hard to undo). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show destructiveHint=true and readOnlyHint=false, matching description's 'Write' and 'Gated: requires...DESTRUCTIVE'. Description adds local validation, dry_run preview, and specific confirmation requirements for ssl_mode/HSTS, going well 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single, dense paragraph of four sentences. Every sentence adds value: purpose, gating, special confirmations, validation, and dry_run. No unnecessary words. Front-loaded with main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given moderate complexity (5 params, nested objects, interdependencies) and no output schema, description covers workflow, gating, and parameter constraints well. However, it lacks explicit mention of the response format for actual updates (only mentions dry_run preview). Minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions. Description adds critical context: 'Only the provided keys are changed' for settings object, explains confirm and acknowledge_hsts_risk conditions, and dry_run behavior. This meaningfully supplements schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool writes Cloudflare zone settings that cf_settings_audit grades, closing the audit-to-remediate loop. It uses a specific verb 'Write' and distinguishes from sibling tool cf_settings_audit which is read-only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (remediate audit findings) and provides multiple usage conditions: requires SEO_MCP_ALLOW_DESTRUCTIVE=true, confirm parameter for sensitive changes, acknowledge_hsts_risk for HSTS, and supports dry_run. No sibling confusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cf_web_analyticsARead-onlyIdempotent
Read-only Cloudflare Web Analytics (edge RUM). With no argument, lists the account's Web Analytics sites; with host_or_tag, returns one site's detail. Edge-measured traffic complements GA4 (it sees visits GA4's JS tag may miss). Create/delete are intentionally not exposed.
| Name | Required | Description | Default |
|---|---|---|---|
| host_or_tag | No | Optional. A hostname (contains a dot) resolves to its site; otherwise treated as a site_tag. Omit to list all sites. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds value by explaining the edge-measured traffic nature and how it complements GA4, providing behavioral context beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise—three short sentences that are well-structured. The first sentence states the tool's purpose, the second explains the two usage modes, and the third provides additional context and limitation. No superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description could be more explicit about return data structure (e.g., 'returns site details including metrics'). However, the tool is simple and the domain is well-known, making it adequate for an experienced agent. The openWorldHint annotation also helps set expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter host_or_tag is fully described in the schema. The description adds parsing logic (hostname vs. site_tag) that goes beyond the schema description, giving clear semantic meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is for Cloudflare Web Analytics (edge RUM), specifies two modes of operation (listing all sites or retrieving a site's detail), and distinguishes it from GA4 by mentioning edge measurement. The purpose is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use the tool without arguments (list all sites) and with the host_or_tag parameter (get one site's detail). It also notes that create/delete operations are intentionally not exposed, guiding the agent away from writing operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cf_zone_infoARead-onlyIdempotent
Zone overview for a hostname: status, plan, paused, name servers, created/modified.
| Name | Required | Description | Default |
|---|---|---|---|
| zone | No | Zone hostname, e.g. 'example.com'. Defaults to the configured CF_ZONE. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint. Description adds value by listing specific output fields (status, plan, paused, name servers, created/modified).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 12 words, front-loaded with purpose. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no output schema, description covers core functionality and output fields. Could mention output format (e.g., JSON), but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage for the single optional parameter 'zone', including example and default. Description adds no additional parameter details beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb+resource: 'Zone overview' for a hostname. Describes specific fields (status, plan, etc.), distinguishing it from sibling cf_list_zones which lists all zones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage when needing overview of a specific zone, but does not explicitly state when to use vs alternatives or provide preconditions. No exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_canonicalARead-onlyIdempotent
Fetch a URL and analyse its canonical link tag: report whether it is self-referential, cross-host, protocol-mismatched, or trailing-slash drift; flag missing canonical, and follow one canonical hop to confirm it itself returns 2xx.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute http(s) URL to inspect. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations confirm read-only, idempotent, non-destructive. The description adds that the tool fetches the URL, analyzes the canonical tag, and follows one 'canonical hop' to confirm 2xx, providing behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence covering all key actions and outputs without redundant words. It is front-loaded with the main action. However, it could be slightly more structured (e.g., listed items) for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single required parameter, no output schema, and comprehensive annotations, the description adequately explains the tool's functionality and expected output (reporting on canonical issues). It mentions following one hop, which is a key detail. Missing is explicit mention of return format or error handling, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'url' is fully described in the schema as 'Absolute http(s) URL to inspect.' The tool description adds that it fetches and analyzes, but no additional parameter meaning is needed. Schema coverage is 100%, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool fetches a URL and analyzes its canonical link tag, listing specific issues (self-referential, cross-host, protocol-mismatched, trailing-slash drift, missing canonical) and mentions following one hop. This uniquely identifies its function among many SEO analysis siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its purpose for canonical analysis but does not explicitly state when to use it versus alternatives like inspect_meta or mixed_content_check. No when-not-to-use or alternative names given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
content_brief_dataARead-onlyIdempotent
Gather the hard evidence for a content brief: fetch the competitor pages and return their heading union, median word count (a FLOOR, not a target), schema types, and entity coverage, plus the 2026 GEO writing directives and validation rules. Pass competitor_urls (e.g. the top SERP results) for a true brief; with none it falls back to your own ranking pages via GSC (refresh-vs-new, NOT the full SERP). The host writes the brief prose from this; SEOMonster supplies rules + evidence. Read-only; no ranking guarantee. Backs the content_brief prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | GSC window for the own-pages fallback. Default 28. | |
| topic | No | Optional working title / topic. | |
| site_url | No | GSC property for the own-pages fallback. Defaults to the configured default site. | |
| target_query | Yes | The primary query the content should win. Required. | |
| competitor_urls | No | URLs to analyze (e.g. top SERP results). Up to 8. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. The description adds 'Read-only; no ranking guarantee' and explains the fallback behavior (refresh-vs-new, not full SERP), providing context beyond the annotations. There is no contradiction between description and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose and outputs, then covers parameters and fallback behavior. It is dense but not overly long; every sentence adds value. Slightly verbose due to parenthetical clarifications, but overall well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description adequately explains the return value (heading union, median word count, schema types, entity coverage, GEO directives). It also covers the two operational modes and parameter nuances. For a tool with 5 parameters, it is reasonably complete, though it could briefly mention the format of the return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds context for how parameters interact (e.g., 'competitor_urls' vs fallback, 'days' as GSC window) but does not provide additional semantic meaning beyond the schema descriptions for individual parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Gather the hard evidence for a content brief' and lists specific outputs (heading union, median word count, schema types, entity coverage, directives). It uses specific verbs ('fetch', 'return') and distinguishes itself by focusing on content brief evidence, which differentiates it from sibling tools like gsc_search_analytics or content_opportunities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use each mode: 'Pass competitor_urls for a true brief; with none it falls back to your own ranking pages via GSC (refresh-vs-new, NOT the full SERP).' It also provides context about integration with other components ('The host writes the brief prose from this; SEOMonster supplies rules + evidence'). However, it does not explicitly state when not to use this tool or mention alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
content_opportunitiesARead-onlyIdempotent
Rank data-grounded content/blog topics from your own Search Console data. Fuses CTR-vs-expected gap, striking-distance position, demand volume, and momentum into a transparent opportunity score, flags cannibalization, and reports the click upside plus the score's components. Read-only. It prioritizes demand you already have; it does not do cold-start keyword research (that needs existing impressions) and does not write the content or guarantee a ranking.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Current window length. Momentum compares it to the equally long prior window. Defaults to 28. | |
| count | No | Max ranked candidates to return. Defaults to 15. | |
| site_url | No | Defaults to the configured default site. | |
| impressions_min | No | Drop low-volume noise. Defaults to 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, destructiveHint=false. The description adds behavioral context: it is read-only, fuses multiple signals into a transparent opportunity score, flags cannibalization, and reports click upside and score components. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The first sentence states the core purpose and output, the second clarifies limitations. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately describes the return value ('click upside plus the score's components'). It covers input parameters implicitly and explains the tool's scope and limitations, making it complete for an agent to decide usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The tool description provides no additional parameter-specific details beyond summarizing the overall purpose. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Rank') and resource ('data-grounded content/blog topics from your own Search Console data'), and clearly distinguishes itself by stating it 'does not do cold-start keyword research' and focuses on existing demand, differentiating from sibling tools like keyword_universe.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'prioritize demand you already have'. Also clearly states what it does not do: cold-start keyword research, writing content, or guaranteeing ranking. While it doesn't name specific alternatives, the context signals list many sibling tools, and the description implies when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crux_historyARead-onlyIdempotent
Return the last 25 weekly collection periods of Core Web Vitals at p75 (LCP, INP, CLS, etc.) for a URL or origin via the Chrome UX Report History API. Complements psi_analyze with the trend axis.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Page-level URL. Use this OR origin. | |
| origin | No | Origin (scheme + host). Use this OR url. | |
| metrics | No | Subset of CrUX metric names (snake_case). Omit for all defaults. | |
| form_factor | No | Form factor; omit for the combined view. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds that it returns data at p75 for specific metrics and a fixed number of periods (25), but does not elaborate on potential rate limits or data freshness. The value added beyond annotations is moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first states the core purpose and scope, the second connects it to a companion tool. Every word earns its place, with no redundancy. Highly efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description omits the return format (e.g., JSON structure) or pagination details. However, given the input schema is comprehensive and the tool has only 4 optional parameters, the description covers the primary usage scenario adequately. A small gap in output transparency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description's extra guidance on the mutual exclusivity of url and origin ('Use this OR origin.') adds practical value. It also clarifies that metrics are snake_case CrUX names, which is not fully explicit in the schema. This improves usability beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the last 25 weekly collection periods of Core Web Vitals at p75 for a URL or origin via the Chrome UX Report History API. It distinguishes itself from psi_analyze by adding the trend axis, making its purpose specific and distinct from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a direct usage context by stating it complements psi_analyze with a trend axis. It also implies when to use (historical trend) vs. snapshot tools. However, it could explicitly mention not to use it for single-point data or when other siblings like crux_snapshot are more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crux_snapshotARead-onlyIdempotent
Return the CURRENT (latest 28-day) p75 Core Web Vitals snapshot (LCP, INP, CLS, FCP, TTFB) for a URL or origin via the Chrome UX Report queryRecord API, with each metric's GOOD/NEEDS_IMPROVEMENT/POOR category and an overall verdict. Use crux_history for the 25-week trend. Small pages/origins legitimately have no field data; that returns no_data.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Page-level URL. Use this OR origin. | |
| origin | No | Origin (scheme + host). Use this OR url. | |
| form_factor | No | Form factor; omit for the combined view. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as readOnly, idempotent, and non-destructive. The description adds valuable behavioral context: it returns a specific 28-day snapshot, uses p75 percentiles, and outputs per-metric categories plus an overall verdict. It also clarifies that no_data is a legitimate response for small sites, which is helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff. Front-loads the core action and key details (metrics, time range, API). Every sentence adds value and the structure is highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the return value (metrics, categories, overall verdict) and the possibility of no_data. It also mentions the underlying API. For a simple read tool with 3 well-described params, this is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good descriptions on each parameter. The description adds that url and origin are mutually exclusive alternatives, which is already implied in the schema descriptions. It does not significantly enhance parameter understanding beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the current 28-day p75 Core Web Vitals snapshot for a URL or origin, listing exact metrics (LCP, INP, CLS, FCP, TTFB) and their categories. It distinguishes itself from the sibling tool crux_history by noting the difference between snapshot and trend.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs to use crux_history for 25-week trends and explains that small pages/origins may return no_data, setting appropriate expectations. This provides clear guidance on when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_landing_page_conversionsARead-onlyIdempotent
Landing pages with their conversions / key events over the last N days, broken down by channel group and sorted by conversions descending. Filtered to organic search by default (the SEO view) so you see which entry pages actually drive organic outcomes. Convenience wrapper over ga4_run_report.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window. Defaults to 28. | |
| limit | No | Max rows. Defaults to 50. | |
| property_id | No | Defaults to the configured property. | |
| organic_only | No | Limit to Organic Search traffic. Defaults to true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false; the description adds behavioral details (sort order, default filter) beyond those annotations, with no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste: first sentence delivers core function and key details, second adds wrapper context. Every part is essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the tool's output (landing pages with conversions, breakdown, sort) adequately for a simple read-only tool with 100% schema-covered params. No output schema exists, but the description covers the basics; minor gap in explicit column listing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all parameters. The description repeats default values that are also in schema, adding no new meaning beyond what the schema provides—baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists landing pages with conversions/key events, broken down by channel group, sorted descending, and defaults to organic search. It calls itself a 'convenience wrapper over ga4_run_report,' which distinguishes it from siblings like ga4_top_landing_pages or ga4_run_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for SEO analysis by stating 'the SEO view' and default organic filtering. It provides context but does not explicitly state when not to use or compare to alternatives, though siblings hint at differences.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_organic_search_overviewARead-onlyIdempotent
Organic-search health over the last N days: window totals (sessions, engaged sessions, engagement rate, average session duration, conversions) plus a day-by-day trend of the same metrics. Two GA4 reports under the hood.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window. Defaults to 28. | |
| property_id | No | Defaults to the configured property. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, etc. The description adds that it returns window totals and day-by-day trends, but doesn't disclose data freshness, rate limits, or auth requirements beyond annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with clear information: first sentence defines output, second adds context about underlying reports. No fluff, but could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple two-parameter, read-only tool with no output schema, the description covers the key aspects: metrics returned, aggregation type, and trend. Edge cases like empty results are not mentioned, but acceptable for this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The tool description reiterates the lookback window but adds no new semantic meaning 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides organic-search health metrics for a window plus daily trends, and specifies the metrics (sessions, engaged sessions, etc.). It distinguishes from sibling GA4 tools like ga4_traffic_by_channel by focusing on organic search overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., ga4_run_report, ga4_traffic_by_channel). Does not mention prerequisites or exclusions. The note 'Two GA4 reports under the hood' is vague.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_run_reportARead-onlyIdempotent
Run a GA4 report (Analytics Data API runReport) with arbitrary dimensions, metrics, a date range, an optional dimension filter, and ordering. The workhorse GA4 tool. Dates accept ISO (YYYY-MM-DD) or GA4 relatives like '28daysAgo' and 'today'.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Convenience alias: derives end='today', start='Ndaysago'. Ignored when start_date is set explicitly. | |
| limit | No | Alias for row_limit. row_limit wins when both are set. | |
| metrics | No | GA4 metric API names. Defaults to ["sessions"]. | |
| end_date | No | ISO date or 'today'. Defaults to today. | |
| order_by | No | Optional ordering: {"metric": "sessions", "desc": true} or {"dimension": "date", "desc": false}. | |
| row_limit | No | Defaults to 1000. | |
| dimensions | No | GA4 dimension API names. Defaults to ["date"]. | |
| start_date | No | ISO date or GA4 relative. Defaults to 28daysAgo. Wins over `days` when both are set. | |
| property_id | No | GA4 property ('properties/123' or '123'). Defaults to the configured property. | |
| dimension_filter | No | Optional filter. Simple form: {"field": "sessionDefaultChannelGroup", "value": "Organic Search", "match_type": "EXACT"} or {"field": ..., "in_list": [...]}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and idempotent. The description adds value by specifying date format support (ISO and GA4 relatives) and default values (dimensions, metrics, start_date), enhancing 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose. Efficient but could be slightly expanded to include more usage hints without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 parameters, no output schema, and annotations present, the description covers key behavioral aspects and parameter defaults. Lack of return value explanation is a minor gap, but overall fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds significant meaning: explains 'days' as convenience alias, 'limit' alias for row_limit, details on date formats, and structure for dimension_filter and order_by objects. This greatly assists parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it runs a GA4 report with arbitrary dimensions, metrics, date range, filter, and ordering. It is labeled as 'the workhorse GA4 tool', distinguishing it from specialized siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies general-purpose use but does not specify when to use alternatives or when not to use this tool. No explicit guidance on filtering to other GA4 tools like ga4_top_landing_pages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_setup_auditARead-onlyIdempotent
Audit a GA4 property's configuration for SEO-measurement readiness (read-only): is a web data stream present, are key events / conversions defined, is data retention long enough for year-over-year analysis, are content-group custom dimensions set, and (via v1alpha) is enhanced measurement on and what the Google Signals state is. Findings are severity-graded with the reason and the benign exception for each. Answers 'can this property actually measure my organic outcomes?' It checks hygiene, not whether your events are the right business events.
| Name | Required | Description | Default |
|---|---|---|---|
| property_id | No | GA4 property: 'properties/123456789' or bare '123456789'. Defaults to the configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds value by specifying that findings are severity-graded with reasons and benign exceptions, and explicitly states it is read-only. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and read-only nature, then concisely enumerates checks. It is somewhat verbose but every sentence provides useful detail. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity (multiple checks, severity output) and simple schema, the description adequately covers what the tool does and the nature of its output. It does not detail the exact return format but that is partially covered by mentioning severity-graded findings, which is sufficient for an audit tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with the parameter description already stating format and default behavior. The tool description does not add additional semantics beyond the schema, so no extra benefit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool audits a GA4 property's configuration for SEO-measurement readiness. It lists specific checks (web data stream, key events, data retention, custom dimensions, enhanced measurement, Google Signals) and clearly answers a specific question ('can this property actually measure my organic outcomes?'). This distinguishes it from sibling tools like ga4_run_report or gsc_coverage_audit, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for assessing GA4 property readiness for organic measurement, and clarifies it checks hygiene, not business events. It does not explicitly state when not to use it or provide alternatives, but the context of answering a specific question gives reasonable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_site_searchARead-onlyIdempotent
Internal site-search terms over the last N days: what visitors typed into the on-site search box (GA4 'searchTerm'), by event count and sessions. A direct content-gap signal. If the property has no site-search data (no search box, or enhanced-measurement site search is off), the tool says so honestly rather than implying zero demand. Convenience wrapper over ga4_run_report.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window. Defaults to 28. | |
| limit | No | Max rows. Defaults to 50. | |
| property_id | No | Defaults to the configured property. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds value by disclosing that the tool honestly reports absence of site-search data rather than implying zero demand, a behavioral trait beyond annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences front-load the core purpose, add context (content-gap signal), and note edge-case behavior. No wasted words; every sentence is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 3 optional parameters and no output schema, the description adequately covers return fields (event count, sessions) and error handling (no data). Could mention pagination or result ordering, but limit parameter mitigates this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are fully described in the schema (100% coverage). The description adds minimal additional meaning beyond 'last N days', providing no new details about parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves internal site-search terms, specifying the metric (searchTerm), dimensions (event count and sessions), and positions it as a content-gap signal. It also distinguishes itself from ga4_run_report as a convenience wrapper, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for site search data and mentions honest reporting when no data exists, but lacks explicit guidance on when to use this tool versus other GA4 tools (e.g., ga4_top_landing_pages). However, its specificity to site search and wrapper nature provide sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_top_landing_pagesARead-onlyIdempotent
Top landing pages by sessions over the last N days, with engagement rate and conversions. Filtered to organic search by default (the SEO view). Convenience wrapper over ga4_run_report.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window. Defaults to 28. | |
| limit | No | Max rows. Defaults to 50. | |
| property_id | No | Defaults to the configured property. | |
| organic_only | No | Limit to Organic Search traffic. Defaults to true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, not destructive. The description adds that it's a convenience wrapper but no additional behavioral traits (e.g., rate limits, pagination). With annotations covering safety, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. First sentence covers purpose and metrics; second adds the key filter and wrapper context. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with 100% schema coverage and annotations, the description is fairly complete. It mentions returned metrics. Without an output schema, more detail on results would be helpful but not critical for this straightforward tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter documented. Description reinforces the organic_only default and the wrapper nature. Baseline 3 is correct when schema does the heavy lifting, and description adds limited extra meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns top landing pages with sessions, engagement rate, and conversions over N days, defaulting to organic search. It distinguishes itself from ga4_run_report by being a convenience wrapper, and from other GA4 tools by its specific focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use (SEO view, organic default) and that it's a wrapper over ga4_run_report, implying ga4_run_report for more flexibility. However, it doesn't explicitly exclude other siblings like ga4_organic_search_overview, which could overlap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_traffic_by_channelARead-onlyIdempotent
Sessions, engaged sessions, and conversions broken down by default channel group over the last N days. Separates organic from paid / referral / direct at a glance. Convenience wrapper over ga4_run_report.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window. Defaults to 28. | |
| limit | No | Max rows. Defaults to 20. | |
| property_id | No | Defaults to the configured property. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds minimal behavioral context beyond being a convenience wrapper, such as potential limitations compared to ga4_run_report. With strong annotations, the description adds some but not substantial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loading the key metrics and purpose. Every sentence is essential, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (3 optional parameters, strong annotations, no output schema), the description covers the core purpose and relationship to a sibling. It could include more on output format or default channel groups, but overall it provides sufficient context for a quick analytics tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter (days, limit, property_id) having descriptions. The description mentions 'last N days' which aligns with the days parameter but adds no new semantic meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves sessions, engaged sessions, and conversions broken down by default channel group over a specified period. It also notes it separates organic from paid/referral/direct and positions itself as a convenience wrapper over ga4_run_report, distinguishing it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for quick channel breakdowns and mentions it's a convenience wrapper over ga4_run_report, but does not explicitly state when to use this tool vs alternatives like ga4_organic_search_overview or ga4_top_landing_pages. Lacks explicit when-not or alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_batch_inspect_urlsARead-onlyIdempotent
Inspect several URLs in one call (capped at 25). Returns a result per URL plus a list of per-URL failures. Rate-limit and transient errors are reported per URL without failing the whole batch.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | URLs to inspect (max 25). | |
| site_url | No | Owning property. Defaults to the configured default site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, idempotent), description adds specifics: cap of 25 URLs, per-URL results and failure lists, and graceful error handling. Does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-loading key info (cap, results, error handling) with no extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately covers return structure (results per URL, list of failures) for an agent to understand usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description does not add extra parameter-level meaning beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it inspects multiple URLs in one call with a cap of 25, distinguishing it from the single-URL sibling gsc_inspect_url.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage for batch inspection; mentions per-URL error handling which guides appropriate use, but lacks explicit when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_compare_periodsARead-onlyIdempotent
Compare two equal-length time windows (current vs prior) and return per-key deltas in clicks, impressions, CTR, and position, plus keys present in only one window. v0.2.0: optional sort_by / sort_dir / min_delta_* filters and an anomalies_only z-score gate so the same tool covers 'biggest gainers', 'biggest losers', 'meaningful movers', and 'statistical outliers' without needing separate tools. When anomalies_only=true, the response's filters_applied.sigma_used field reports the population-stdev (sigma) actually computed from the matched rows' sort_by metric distribution; the effective z-score cutoff applied is sigma_threshold * sigma_used.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Cap the returned rows. No cap by default. | |
| days | No | Alias for current_days. current_days wins when both are set. | |
| limit | No | Alias for row_limit. row_limit wins when both are set. | |
| sort_by | No | Metric to sort matched rows by. Defaults to delta_clicks. | |
| gap_days | No | Days between the two windows. Defaults to 0. | |
| site_url | No | Defaults to the configured default site. | |
| sort_dir | No | Sort direction. 'desc' for biggest gainers (default). 'asc' for biggest losers. Note: delta_position is reversed (negative = improvement), so use 'asc' to find rank gains. | |
| row_limit | No | Rows per window query. Defaults to 1000. | |
| dimensions | No | Defaults to ["query"]. | |
| current_days | No | Length of each window in days. Defaults to 28. | |
| anomalies_only | No | If true, keep only rows where the sort_by metric exceeds sigma_threshold standard deviations from the matched-rows mean (statistical outliers). Default false. | |
| sigma_threshold | No | Threshold for anomalies_only. Defaults to 2.0 (~95th percentile under normality). | |
| min_delta_clicks | No | Filter to rows with abs(delta_clicks) >= this. Defaults to 0 (no filter). | |
| min_delta_position | No | Filter to rows with abs(delta_position) >= this. Defaults to 0. | |
| min_delta_impressions | No | Filter to rows with abs(delta_impressions) >= this. Defaults to 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, not destructive. The description adds valuable behavioral details: returns per-key deltas, includes keys in only one window, and explains the anomalies_only output (sigma_used). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but well-structured: front-loads the core purpose then details. Every sentence provides value, though slightly dense. Could be broken into two sentences for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description explains return values (per-key deltas, keys in only one window, filters_applied.sigma_used). It covers the main behavioral aspects adequately, though it could mention the response structure more explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, baseline 3. The description adds context beyond the schema, such as the note about sort_dir for delta_position reversal and the z-score cutoff explanation for anomalies_only. This enhances parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: compare two equal-length time windows and return per-key deltas. It distinguishes itself from siblings by noting that it covers multiple comparison types (biggest gainers, losers, movers, outliers) without needing separate tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (comparing periods, finding gainers/losers/outliers) and describes optional filters and the anomalies_only feature. It does not explicitly state when not to use it, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_coverage_auditARead-onlyIdempotent
Heuristic coverage audit. The GSC Index Coverage report is NOT exposed in the public API, so this tool takes a user-supplied URL list (typically pulled from a sitemap) and bulk-inspects each, then rolls up the verdicts (PASS / PARTIAL / FAIL plus coverage_state frequencies). Honest substitute for the Coverage UI; the AI host can use the rollup to decide which URLs to deep-inspect.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Absolute URLs to audit (cap 200; chunks of 25 are inspected per GSC's URL Inspection batch limit). | |
| site_url | No | Defaults to the configured default site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnly, openWorld, idempotent, non-destructive) are consistent with description. Description adds behavioral details: chunking in batches of 25 (due to GSC limits), cap of 200 URLs, and heuristic nature. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is three concise sentences with no redundancy. Front-loaded with 'heuristic coverage audit', explains the gap, and ends with output utility. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, description adequately explains output (verdicts: PASS/PARTIAL/FAIL plus coverage_state frequencies) and how it can be used for further inspection. Covers input limits and purpose fully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage; both parameters (urls, site_url) are described in schema. Description does not add new semantic information beyond schema, but the schema coverage is high, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool performs a heuristic coverage audit of URLs, acting as a substitute for the GSC Index Coverage report which is not available via API. It specifies the input is a user-supplied URL list and output is a rollup of verdicts. Differentiates from sibling tools like gsc_inspect_url by focusing on bulk audit and rollup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context that the tool fills a gap (missing Coverage API) and mentions how the AI host can use the rollup to decide on deep-inspection. Does not explicitly state when not to use or compare with alternatives, but the context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_decaying_pagesARead-onlyIdempotent
Pages whose impressions fell most over the last N days vs the prior N days. Equivalent to gsc_compare_periods with dimensions=["page"], sort_by="delta_impressions", sort_dir="asc". Use this for lifecycle triage (find pages to invest in or rescue).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Length of each window. Defaults to 28. | |
| limit | No | Top-N to return. Defaults to 25. | |
| site_url | No | Defaults to the configured default site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, etc. Description adds that it returns declining pages, providing behavioral context beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first defines output, second gives use case and sibling equivalence. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters with full schema coverage and no output schema, the description is complete enough. It could mention return fields but sibling tools provide context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage, so baseline is 3. Description does not add extra meaning beyond what the schema already provides for each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns pages whose impressions fell over two periods, and explicitly equates it to a sibling tool with specific parameters, distinguishing it from similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the use case: 'lifecycle triage (find pages to invest in or rescue)'. Also notes equivalence to gsc_compare_periods, helping the agent choose between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_inspect_urlARead-onlyIdempotent
Inspect a single URL via the URL Inspection API: index verdict, coverage state, crawl info, canonicals, and mobile/rich-results summaries when present.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to inspect. Required. | |
| site_url | No | Owning property. Defaults to the configured default site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the description adds value by elaborating on the specific data returned (index verdict, coverage state, crawl info, canonicals, mobile/rich-results). No contradictory information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the purpose ('Inspect a single URL') and efficiently lists the returned data types. No waste or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description compensates by listing key return fields. However, it uses terms like 'index verdict' without explanation and omits prerequisites (e.g., valid property) or error conditions. Still fairly complete for a read tool with rich annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 both parameters. The description does not add any meaning beyond what the schema provides for the parameters themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool inspects a single URL via the URL Inspection API and lists the specific information it returns (index verdict, coverage state, crawl info, canonicals, mobile/rich-results). It distinguishes from the sibling tool gsc_batch_inspect_urls which operates on multiple URLs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for detailed inspection of a single URL, but does not explicitly state when to use this tool versus alternatives like gsc_search_analytics or gsc_batch_inspect_urls. No exclusion criteria or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_keyword_expandARead-onlyIdempotent
Ground LLM-brainstormed keyword candidates against your own Search Console data to find net-new terms you have no current footprint on. YOU (the host) supply candidates -- brainstorm them from the site's winning queries first (call gsc_top_queries). For each candidate this returns a footprint verdict (covered / thin / none) and a confidence band from sibling-strength (does it share tokens with queries that already win impressions). 'none' means no VISIBLE footprint, not no demand (GSC hides ~75% of impressions); net-new terms are scored hypotheses, not facts. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Window for owned-query footprint. Defaults to 90 (wider = more footprint visible). | |
| site_url | No | Defaults to the configured default site. | |
| candidates | Yes | Candidate keyword/topic strings the host brainstormed. Required, 1-300. | |
| impressions_min | No | Impressions at/above which an exact match counts as 'covered'. Defaults to 10. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint and idempotentHint. The description adds critical behavioral context: explains the 'footprint verdict' and confidence band, and crucially discloses that GSC hides ~75% of impressions, making results hypothetical. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise at 7 sentences, front-loaded with purpose, each sentence adds necessary detail without redundancy. Well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema, the description adequately explains the return (footprint verdict and confidence band) and addresses the hypothetical nature of results. Covers all key aspects of use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters, but the description adds value by explaining how to obtain candidates ('brainstorm from winning queries') and for 'days' adds 'wider = more footprint visible'. This enriches understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Ground... candidates to find net-new terms') and clearly distinguishes from sibling tools like gsc_top_queries by recommending it as a prerequisite. It leaves no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs the user to brainstorm candidates from gsc_top_queries first, providing clear context. However, it does not explicitly mention when to avoid this tool in favor of other siblings like gsc_query_gaps, though the workflow is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_list_propertiesARead-onlyIdempotent
List every Search Console property the configured credentials can see, with each property's permission level. Use this to discover valid site_url values.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds value by noting that permission levels are returned, offering behavioral context beyond what annotations convey. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is composed of two short, precise sentences that convey the purpose and a usage hint. There is no redundant or unnecessary information, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (zero parameters, no output schema), the description is fully adequate: it states what the tool does, what it returns (permission levels), and why to use it (discover site_url values). No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters (schema is empty), so schema description coverage is 100%. The description does not need to elaborate on parameters; a baseline of 4 is appropriate for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a clear resource ('every Search Console property') and adds context ('with each property's permission level'). It distinguishes this tool from siblings by its unique role of enumerating properties for discovery of valid site_url values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to 'Use this to discover valid site_url values', which provides clear context for when to invoke the tool. However, it does not mention when not to use it or provide alternatives, which slightly limits the guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_list_sitemapsARead-onlyIdempotent
List the sitemaps Google knows about for a property, with submission and indexing status.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | No | Defaults to the configured default site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is clear. Description adds value by specifying the output includes submission and indexing status. Does not mention pagination or limits, but for a simple list tool this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 15 words front-loads the action. Every word earns its place; no redundancy. Highly concise and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no required parameters, no output schema), the description covers the key purpose and output. Annotations provide safety context. Could mention whether multiple site_url calls are needed for different properties, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (site_url described as optional with default). Description adds no additional information beyond the schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb (list), resource (sitemaps), scope (for a property), and includes what is reported (submission and indexing status). It distinguishes from sibling tools like gsc_submit_sitemap and sitemap_validate by focusing on listing known sitemaps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description does not explicitly state when to use this tool versus alternatives (e.g., sitemap_validate, sitemap_health). It implies use for retrieving Google's view of sitemaps, but lacks explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_new_queriesARead-onlyIdempotent
Queries that have impressions in the current window but had no impressions in the prior comparison window. Useful for spotting emerging topics or pages that just started ranking.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Current window in days. Defaults to 7. | |
| limit | No | Defaults to 50. | |
| site_url | No | ||
| prior_days | No | Prior window in days. Defaults to 28 (so 7 vs 28 catches genuinely new entries). | |
| impressions_min | No | Minimum impressions in the current window to include. Defaults to 5. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior. The description adds the key behavior of comparing two windows and filtering for zero prior impressions, which is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence followed by a use-case statement, with no redundancy or filler. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description omits what the output contains (e.g., query strings, metrics like impressions/clicks). Since there is no output schema, the description should provide this context to help the agent use the results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema itself explains most parameters. The description does not add additional meaning beyond what's in the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns queries with impressions in the current window but none in the prior window, which is a specific verb+resource. It distinguishes from sibling tools like gsc_top_queries by focusing on new queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions utility for spotting emerging topics, which implies when to use. However, it lacks explicit exclusions or comparison to alternatives like gsc_compare_periods or gsc_query_opportunities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_portfolio_summaryARead-onlyIdempotent
Multi-property fleet view. Lists every property the credentials can see and returns a one-row summary per property (total clicks, impressions, average CTR, average position) for the last N days. The single fastest answer to 'how is the portfolio doing?' across agency or multi-brand setups. Honors the v0.2.0 alias convention (days) and applies the configured data_state.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window. Defaults to 28. | |
| exclude | No | Optional deny-list of site_url values to skip. | |
| include | No | Optional allow-list of site_url values to include. Defaults to all visible properties. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it's read-only and idempotent. The description adds value by detailing the output fields and mentioning the data state and alias convention, going beyond annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each purposeful. The first front-loads the core purpose, the second specifies output and use case, the third adds technical details. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and rich annotations, the description fully covers purpose, return format, filtering options, and behavioral details. No gaps for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions. The description adds the alias convention for the 'days' parameter, providing extra context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists every property and returns a one-row summary per property with specific metrics. It distinguishes itself from siblings like gsc_list_properties and gsc_search_analytics by positioning as a portfolio-level view.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states it's the fastest answer for portfolio performance across multi-property setups, providing clear context. However, it does not explicitly mention when not to use it or list alternative tools for deeper analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_query_gapsARead-onlyIdempotent
Queries that drive impressions but very few clicks. These are content opportunity signals: a page is being shown for the query, the click experience is not landing. Returns rows sorted by impressions desc.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Defaults to 28. | |
| limit | No | Defaults to 50. | |
| site_url | No | ||
| clicks_max | No | Drop queries that already convert. Defaults to 2. | |
| impressions_min | No | Floor for inclusion. Defaults to 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds sorting behavior (by impressions descending) and selection criteria beyond the readOnlyHint and other annotations. It does not contradict annotations and provides useful context without major gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted text. Directly states purpose, selection criteria, and sorting. Front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no output schema, and many sibling tools, the description is fairly complete. It explains what is returned and the sorting, though it could mention typical use cases for output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80% (4 of 5 parameters described). The description does not add significant extra meaning for parameters beyond what the schema provides, and it does not clarify the undocumented site_url parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool returns queries with high impressions but low clicks, identifying content opportunity signals. It uses a specific verb-resource combination and implicitly distinguishes from sibling tools like gsc_top_queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies when to use: to find content opportunities where impressions exist but clicks are lacking. However, it does not explicitly state when not to use or mention alternatives, though the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_query_opportunitiesARead-onlyIdempotent
Queries already ranking in the top N positions but with below-target CTR. These are title and meta-description optimization candidates. Returns rows sorted by impressions desc (the bigger the impression volume, the more clicks a CTR lift unlocks).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window. Defaults to 28. | |
| limit | No | Max rows to return. Defaults to 50. | |
| ctr_max | No | Only include queries with CTR <= this (e.g. 0.03 = 3%). Defaults to 0.03. | |
| site_url | No | Defaults to the configured default site. | |
| position_max | No | Only include queries with average position <= this. Defaults to 10. | |
| impressions_min | No | Drop low-volume noise. Defaults to 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly and idempotent. The description adds behavioral details: sorting by impressions descending and rationale for CTR lift, which is valuable beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste, front-loaded with purpose. Every word contributes value, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description explains return format (rows sorted by impressions) and rationale. It covers filtering criteria (position, CTR, impressions min) but omits mention of limit parameter or pagination. Overall fairly complete for the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. Tool description does not add new meaning beyond the schema, only references 'top N positions' and 'below-target CTR' which align with existing parameter descriptions. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool identifies queries ranking in top positions with below-target CTR for optimization, using specific verbs and resource. It distinguishes itself from siblings like gsc_query_gaps (queries not ranking) and gsc_top_queries (all top queries, no CTR filter).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for title/meta-description optimization candidates, providing clear context. However, it does not explicitly state when not to use or compare to alternatives, leaving some implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_request_indexingAIdempotent
Ask Google to (re)crawl one or more URLs via the Indexing API (URL_UPDATED). Requires the indexing scope. Available by default. Accepts a single url (string) or urls (array up to 100). A scope or disabled-API error stops the batch and is returned with remediation; per-URL errors are collected. notify_time: null on success is normal upstream behavior, not a failure.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Single URL convenience form. Either url or urls is required. | |
| urls | No | URLs to request indexing for (max 100). Either url or urls is required. | |
| site_url | No | Informational; the Indexing API is project-scoped, not property-scoped. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate write, idempotent, non-destructive. Description adds specific behavioral details: batch error handling, notify_time null being normal, scope error remediation. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no wasted words. Front-loaded with purpose then usage and edge cases. Each sentence adds necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description covers error behavior and expected null value. Could mention success response structure, but for a simple write tool it is adequate. Context of scope and availability is given.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds value beyond schema: clarifies that url or urls is required (schema lists no required), explains site_url as informational/project-scoped, and reinforces max 100. This is helpful for proper invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States clear action: 'Ask Google to (re)crawl one or more URLs via the Indexing API (URL_UPDATED)'. Verb+resource+method is specific and distinct from siblings like indexnow_submit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions required scope ('Requires the indexing scope') and availability ('Available by default'). Describes error handling for scope/per-URL errors. Lacks explicit mention of alternatives like indexnow_submit, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_search_analyticsARead-onlyIdempotent
Query Search Console search analytics (clicks, impressions, CTR, position) for a property, with dimensions, a date range, optional dimension filters, and data_state. The workhorse GSC tool.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window in days. Convenience alias: derives end=today, start=today-days. Ignored when start_date is set explicitly. | |
| limit | No | Alias for row_limit. row_limit wins when both are set. | |
| filters | No | Optional dimension filters, ANDed together. | |
| end_date | No | ISO date YYYY-MM-DD. Defaults to today. | |
| site_url | No | Property to query. Defaults to the configured default site. | |
| row_limit | No | Defaults to 1000. | |
| start_row | No | Pagination offset. Defaults to 0. | |
| data_state | No | all matches the dashboard (fresh, partial data); final lags 2-3 days. Defaults to the configured value. | |
| dimensions | No | Defaults to ["query"]. | |
| start_date | No | ISO date YYYY-MM-DD. Defaults to 28 days ago. Wins over `days` when both are set. | |
| search_type | No | Defaults to web. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint. The description adds minimal behavioral context beyond what is in the schema (e.g., mentioning data_state). It does not add new details about rate limits or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two clear, front-loaded sentences with no wasted words. The first sentence conveys the core action and output; the second adds a useful label. Efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters and no output schema, the description is brief but covers the essential purpose. It does not explain return format or pagination, but these are implied by the parameters. Adequate for a general query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds no additional parameter meaning beyond restating the dimensions, date range, and filters already documented in the schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it queries Search Console search analytics (clicks, impressions, CTR, position) for a property, with specific parameters. It brands itself as 'the workhorse GSC tool', distinguishing it from sibling tools that focus on specific subsets like top queries or pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description does not mention when not to use it or suggest sibling tools for specific needs, leaving the agent to infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_submit_sitemapAIdempotent
Submit a sitemap to Search Console. Requires the writable webmasters scope. Available by default (a routine SEO task; not gated). Accepts either sitemap_url (preferred, friendly name) or feedpath (the raw API field name; kept for back-compat).
| Name | Required | Description | Default |
|---|---|---|---|
| feedpath | No | Alias for sitemap_url (the raw Google API field name). Either works; sitemap_url wins when both are set. | |
| site_url | No | Owning property. Defaults to the configured default site. | |
| sitemap_url | No | Full sitemap URL, e.g. https://www.example.com/sitemap.xml. Preferred. | |
| skip_preflight | No | Bypass the reachability pre-flight on the sitemap URL (default false). Use only when the sitemap is valid but unreachable from this machine. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=true. The description adds the auth requirement and availability, but does not explain behavior like error handling or confirmation of submission. With rich annotations, the description provides adequate but not exceptional additional context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loading the core purpose and essential requirements. Every sentence adds crucial information without redundancy. It is efficiently structured and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description could mention what the user can expect after submission (e.g., success confirmation or asynchronous processing). It covers auth, availability, and parameter choice, but misses result transparency. This is a moderate gap for a write operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description's contribution is additive. It explains the relationship between sitemap_url and feedpath, recommending sitemap_url as the friendly name. This adds value beyond the schema descriptions, which already include the alias information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Submit a sitemap') and the target system ('Search Console'). The verb-submit is unique among sibling tools, and the description distinguishes it from read-only tools like gsc_list_sitemaps by implying a write operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful guidance: required scope ('writable webmasters'), availability ('routine SEO task; not gated'), and preferred parameter ('sitemap_url' vs. 'feedpath'). It does not explicitly contrast this tool with siblings, but the unique action makes context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_top_pagesARead-onlyIdempotent
Convenience wrapper: top pages for a property over the last N days by clicks. Equivalent to gsc_search_analytics with dimensions=["page"]. Uses the configured data_state (default 'all'; 'final' lags 2-3 days behind the dashboard).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window. Defaults to 28. | |
| limit | No | Max rows to return. Defaults to 50. | |
| site_url | No | Defaults to the configured default site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds valuable behavioral context: default data_state of 'all' and that 'final' lags 2-3 days behind the dashboard. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero wasted words, front-loaded with purpose and key equivalence. Efficiently conveys all essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple wrapper tool with no output schema, the description covers purpose, equivalent tool, data lag, and parameter defaults. It is fully adequate for an agent to understand invocation and behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. The description adds context that results are sorted 'by clicks' and mentions default values for days and limit, which are also in schema but reinforces usage. Adds meaning beyond schema by noting equivalence and data_state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a 'convenience wrapper' that returns top pages for a property by clicks over N days, and explicitly equates it to gsc_search_analytics with dimensions=['page']. This distinguishes it from siblings like gsc_search_analytics and gsc_top_queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for quick top-pages retrieval by calling it a 'convenience wrapper' and noting data_state behavior. It does not explicitly state when to use this vs. gsc_search_analytics or other tools, but the equivalence provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_top_pages_by_queryARead-onlyIdempotent
Which pages rank for a specific query. The classic cannibalization audit input: if multiple pages rank for the same query, you typically want to consolidate or differentiate them. Filters search_analytics by an exact query match and returns rows by page dimension.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Defaults to 28. | |
| limit | No | Defaults to 20. | |
| query | Yes | Exact query string. Required. | |
| site_url | No | Defaults to the configured default site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is clear. The description adds behavioral context: filtering by exact query match and returning rows by page dimension. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first provides clear purpose, second adds contextual relevance. No unnecessary words. Very concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given rich annotations (readOnlyHint, idempotentHint) and complete schema, the description provides sufficient context. The real-world cannibalization audit example adds completeness. No output schema, but standard rows are implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions for all parameters. The description adds minimal value beyond emphasizing 'exact query match', but schema already covers parameter semantics adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns pages ranking for a specific query with a specific use case (cannibalization audit). It uses a specific verb-resource combination and distinguishes itself from sibling tools like gsc_top_queries and gsc_top_pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly frames the tool as input for a decannibalization audit and explains the action to take if multiple pages rank for the same query. While it does not state when not to use it, the context is clear enough for appropriate selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_top_queriesARead-onlyIdempotent
Convenience wrapper: top queries for a property over the last N days by clicks. Equivalent to gsc_search_analytics with dimensions=["query"]. Uses the configured data_state (default 'all'; 'final' lags 2-3 days behind the dashboard).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window. Defaults to 28. | |
| limit | No | Max rows to return. Defaults to 50. | |
| site_url | No | Defaults to the configured default site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, etc. Description adds value by explaining data_state behavior and the equivalence to gsc_search_analytics, which provides deeper 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff, immediately states purpose. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple wrapper tool, description covers purpose, alternative, data_state nuance, and parameter defaults. Without output schema, it provides sufficient context for usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions. Description adds default values (days=28, limit=50, site_url defaults to configured) and explains the meaning of the equivalent query dimensions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly specifies it is a convenience wrapper for top queries by clicks over last N days, equivalent to gsc_search_analytics with dimension 'query'. It differentiates from siblings like gsc_search_analytics and gsc_top_pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context as a 'convenience wrapper', implying simpler alternative to gsc_search_analytics. Notes data_state behavior and default settings. Could be more explicit about when not to use, but sibling names guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_trending_pagesARead-onlyIdempotent
Pages whose impressions grew most over the last N days vs the prior N days. Equivalent to gsc_compare_periods with dimensions=["page"], sort_by="delta_impressions", sort_dir="desc". Use this for lifecycle triage (find pages to invest in or rescue).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Length of each window. Defaults to 28. | |
| limit | No | Top-N to return. Defaults to 25. | |
| site_url | No | Defaults to the configured default site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is clear. The description adds that the tool compares two time windows and sorts by delta impressions descending, providing behavioral context beyond annotations but not extensive details on rate limits or data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states the function concisely, second provides a use case. No extraneous words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 3 parameters, clear annotations, and an explicit equivalence hint, the description covers the purpose and usage well. It lacks explicit mention of return format, but the equivalence partially compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all parameters. The description adds no extra meaning beyond the schema, only implicitly relating 'days' to the window length. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns pages with the most impression growth over two windows, explicitly distinguishing itself by referencing equivalence to gsc_compare_periods with specific parameters. It differentiates from siblings like gsc_decaying_pages and gsc_top_pages by focusing on growth over time.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use this for lifecycle triage (find pages to invest in or rescue).' It also hints at an alternative (gsc_compare_periods) for more flexibility, though it does not list explicit when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hreflang_consistency_checkARead-onlyIdempotent
Validate hreflang link tags across a set of URLs. Checks: missing reciprocity, broken target URLs, duplicate hreflang on one page, missing self-link, missing x-default when there are 3+ language variants. Returns per-URL findings and a global findings list.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Absolute URLs to audit together (max 50). At least 2 needed for reciprocity to be meaningful. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds valuable behavioral details: the specific checks performed (missing reciprocity, broken URLs, etc.) and the return format (per-URL and global findings). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: three sentences. The first states the purpose, the second lists checks, the third describes return types. No redundant information; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one well-documented parameter and safety annotations, the description covers purpose, checks, and return format. It could explicitly state that the tool performs cross-URL validation (implied by 'across a set of URLs'). Overall, fairly complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single parameter 'urls' with 100% description coverage, including constraints (max 50, min 2, must be absolute URLs). The description does not add additional parameter semantics beyond what the schema provides, so baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Validate hreflang link tags across a set of URLs.' It lists specific checks (reciprocity, broken targets, duplicates, missing self-link, missing x-default), making the verb-resource combination distinct from sibling tools like check_canonical or redirect_chain_audit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for hreflang validation but provides no explicit guidance on when to use this tool versus alternatives (e.g., check_canonical, robots_txt_validate). It does not mention exclusions or prerequisites. The context of sibling tools is large, making this a gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
indexnow_bulk_submitAIdempotent
Submit multiple URLs to IndexNow in one batched request. All URLs must share the same host (IndexNow rejects mixed-host batches with HTTP 422). Cap: 10000 URLs per call (IndexNow's documented limit).
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Absolute URLs sharing one host (max 10000). | |
| skip_preflight | No | Bypass the key-file verification pre-flight (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotent and non-destructive, but the description adds critical constraints (host restriction, HTTP 422 rejection, cap at 10000) that annotations don't cover. This provides valuable behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with purpose, followed by critical constraints. No unnecessary words, highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with full schema coverage and no output schema, the description is complete. It covers purpose, constraints, and limits, leaving no obvious gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains both parameters. The description adds host constraint context but doesn't elaborate parameter semantics further, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool submits multiple URLs in one batched request. It distinguishes from sibling 'indexnow_submit' by emphasizing batching and host constraint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit constraints (same host, max 10000 URLs) and mentions IndexNow rejection behavior. Implicitly suggests use for bulk vs single, but lacks explicit alternatives or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
indexnow_submitAIdempotent
Submit a single URL to IndexNow (Bing + Yandex + Naver + Seznam + Yep). Complements gsc_request_indexing for the non-Google engines. Requires SEO_MCP_INDEXNOW_KEY plus a key-verification file at https:///.txt.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full absolute URL. Required. | |
| skip_preflight | No | Bypass the key-file verification pre-flight (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and destructiveHint=false, so the safety profile is clear. The description adds value by disclosing the need for an API key and a verification file, which is important context beyond what annotations provide. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core purpose and engines, followed by essential requirements. Every word adds value; no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool with no output schema and only two parameters, the description provides sufficient context: what it does, when to use it, and what is required. It could optionally mention success/error behavior, but that is not critical for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters ('url' and 'skip_preflight') are fully described in the schema. The description does not add new semantic information about the parameters; it merely reinforces that a single URL is submitted, which is already stated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('submit a single URL to IndexNow') and lists the target search engines (Bing, Yandex, Naver, Seznam, Yep). It also distinguishes itself from the sibling tool gsc_request_indexing by specifying it covers non-Google engines.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that this tool complements gsc_request_indexing for non-Google engines, providing clear guidance on when to use it versus the alternative. It also lists prerequisites (SEO_MCP_INDEXNOW_KEY and a key-verification file), aiding proper invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_metaARead-onlyIdempotent
Fetch a single URL and return its on-page SEO surface: title, meta description, meta robots, canonical, Open Graph + Twitter Card tags, hreflang list, and the H1 count. Read-only HTTP GET.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute http(s) URL to inspect. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds that it uses HTTP GET and returns specific fields, but does not disclose limitations like JavaScript rendering or authentication needs. With annotations covering safety, the description adds moderate behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the action and explicitly lists the returned fields. No extraneous information, every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is simple (one required parameter, no output schema, no nested objects), the description adequately covers its purpose and output. Annotations handle behavioral traits. It could mention limitations like no JS rendering, but overall it is complete enough for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the single parameter 'url' as an absolute http(s) URL. The description reinforces that it fetches a single URL and is HTTP GET, but does not add new semantics beyond the schema. Schema coverage is 100%, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a single URL and returns specific on-page SEO elements (title, meta description, meta robots, canonical, Open Graph + Twitter Card tags, hreflang list, H1 count). This differentiates it from sibling tools like gsc_inspect_url which are Google Search Console specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions it is a read-only HTTP GET and lists the returned SEO surface, implying use for general URL inspection. However, it does not explicitly state when to use versus alternatives like gsc_inspect_url or check_canonical, nor does it mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_schemaARead-onlyIdempotent
Extract every JSON-LD block from a page and report the schema.org @type counts plus a sample entity per type. Discovery tool: tells you what structured data exists. Pair with validate_schema to check required-field compliance.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute http(s) URL to inspect. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, openWorldHint, idempotentHint, destructiveHint=false) already indicate safe, read-only behavior. The description adds clarity about what it reports (counts and samples) without adding behavioral nuance 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action, and every word adds value. No wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with annotations, the description is complete. It describes input (URL), output (counts and sample), and references a sibling tool for next steps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema's parameter 'url' is described as 'Absolute http(s) URL to inspect.' With 100% schema description coverage, the description adds no additional meaning beyond what the schema provides, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool extracts all JSON-LD blocks from a page and reports schema.org @type counts plus a sample entity per type. It explicitly calls itself a discovery tool, distinguishing its purpose from validation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Discovery tool: tells you what structured data exists. Pair with validate_schema to check required-field compliance.' This tells when to use it and suggests a complementary tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
internal_link_graphARead-onlyIdempotent
Small BFS crawl from a starting URL within the same host. Returns per-page in-degree + out-degree, orphan pages (zero in-degree), broken internal links (4xx/5xx), and depth distribution. Hard caps: max_depth ≤ 4, max_pages ≤ 200. Not a replacement for a full crawler; sized for in-session triage.
| Name | Required | Description | Default |
|---|---|---|---|
| max_depth | No | Max BFS depth. Default 2, ceiling 4. | |
| max_pages | No | Max pages to fetch. Default 50, ceiling 200. | |
| start_url | Yes | Absolute http(s) URL to crawl from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive. Description adds valuable behavioral details: BFS algorithm, same-host constraint, hard caps (max_depth ≤4, max_pages ≤200), and exact outputs. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences packed with essential information: algorithm, scope, outputs, constraints, and usage caveat. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully explains what the tool returns (per-page metrics, orphans, broken links, depth distribution) and its constraints (max depth, max pages). Sufficient for an agent to understand behavior and expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented. Description repeats the hard caps but adds no new semantic meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it performs a small BFS crawl within the same host and returns specific link metrics (in-degree, out-degree, orphans, broken links, depth distribution). This distinguishes it from sibling tools like GSC, GA4, or SEO audit tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Not a replacement for a full crawler; sized for in-session triage,' providing clear context for appropriate use. Does not name alternative tools, but the sibling set is diverse enough that this guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
internal_link_recommendARead-onlyIdempotent
Recommend specific internal links (source page -> target page, with anchor text) from high-authority pages to striking-distance pages. Crawls from start_url for the internal link graph (authority + existing links) and uses GSC to find striking-distance targets (default position 8-20 with real impressions). Ranks sources by lexical relevance to the target query + internal in-degree, skips pages that already link the target, balances anchor text, and never suggests nofollow. Free; read-only; does not guarantee a ranking change.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | GSC window. Defaults to 28. | |
| limit | No | Max recommendations. Default 25. | |
| site_url | No | GSC property for target selection. Defaults to the configured default site. | |
| max_pages | No | Max pages to crawl. Default 50, ceiling 200. | |
| start_url | Yes | Absolute http(s) URL to crawl from for the link graph. | |
| position_max | No | Striking-distance upper bound (default 20). | |
| position_min | No | Striking-distance lower bound (default 8). | |
| impressions_min | No | Min impressions for a target query. Default 30. | |
| relevance_floor | No | Min source/target query lexical overlap (0-1). Default 0.34. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides extensive behavioral details beyond the annotations: it crawls from start_url, uses GSC for striking-distance targets, ranks by lexical relevance and internal in-degree, skips already linking pages, balances anchor text, and never suggests nofollow. This aligns with the readOnlyHint and indicates no destructive behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, front-loaded with the core purpose, and every sentence adds meaningful detail without redundancy. It efficiently covers the tool's functionality, constraints, and caveats.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description hints at the output format ('source page -> target page, with anchor text'). Given the complexity of the tool (9 parameters, custom algorithm) and rich annotations, the description is largely complete. However, it could briefly mention the response structure or further clarify the 'striking-distance' concept for total completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description adds value by explaining the algorithm context, e.g., 'default position 8-20' for position_min/max and 'default 28' for days. While the schema already describes each parameter, the description integrates them into the overall process, helping an agent interpret how parameters affect the recommendation logic.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Recommend specific internal links (source page -> target page, with anchor text) from high-authority pages to striking-distance pages.' This is a specific verb-resource combination that distinguishes it from sibling tools like gsc_search_analytics or internal_link_graph, which have different focuses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when you need internal linking recommendations based on authority and striking-distance targets. It states it is 'free; read-only' and does not guarantee ranking change, setting expectations. However, it does not explicitly compare to alternatives or state when not to use it, missing some guidance for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_universeARead-onlyIdempotent
External keyword data (optional, paid). Its core value is the COMPETITOR keyword GAP: keywords competitors rank for that you don't (DataForSEO Domain Intersection; no Google equivalent). Optionally returns search volume/difficulty/intent for a keyword list via a provider chain (DataForSEO, else Google Ads volume-only). Requires DataForSEO and/or Google Ads to be configured. External volume is a degraded directional signal in 2026 -- never let a low/missing volume drop a high-intent term.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max gap keywords to return. Default 100. | |
| keywords | No | Keywords to look up volume/difficulty/intent for. | |
| competitors | No | Competitor domains for the gap. Up to 5. | |
| target_domain | No | Your domain (for the competitor gap), e.g. 'example.com' or 'sc-domain:example.com'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, idempotent), the description adds significant behavioral context: it requires DataForSEO/Google Ads configuration, is paid/optional, explains the provider chain for volume data, and warns about 2026 signal degradation. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core value proposition. Every sentence serves a purpose, covering the main function, competitive advantage, optional features, prerequisites, and a future caveat. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (paid, external, gap analysis, optional volume, no output schema), the description covers essential aspects: what it does, prerequisites, limitations. It lacks explicit return format details, but the description sufficiently implies the outputs (list of gap keywords or volume metrics).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by explaining how parameters relate to the core gap analysis (competitors, target_domain) and optional volume lookup (keywords), and sets expectations for limit. This enriches understanding beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides external keyword data with a core value of competitor keyword gap analysis. It distinguishes itself from sibling tools by noting it uses DataForSEO and has no Google equivalent, making its purpose unique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool, highlighting its competitive gap functionality and optional volume data. It implicitly differentiates from Google-based tools by stating 'no Google equivalent' and warns about signal degradation, but could more explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lighthouse_budgetARead-onlyIdempotent
Run PageSpeed Insights on a URL and verdict the results against a performance budget. Valid budget keys: higher-is-better Lighthouse scores on a 0-100 scale ('performance', 'accessibility', 'best-practices', 'seo'); lower-is-better latency in milliseconds ('LCP_ms', 'FCP_ms', 'TBT_ms', 'TTI_ms', 'speed_index_ms'); lower-is-better unitless shift score ('CLS'). Unknown keys are surfaced as a non-fatal finding with a 'did you mean' hint; the metric is NOT silently ignored. Returns per-metric verdict and an overall pass/fail. Useful as a CI / pre-deploy gate.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Page URL to analyze. Required. | |
| budget | Yes | Budget dict. Lighthouse scores on the 0-100 scale (performance=80 means a score of 80, not 0.8); latency metrics in milliseconds (LCP_ms=2500 means 2.5 s); CLS is unitless (CLS=0.1 means a 0.1 layout-shift score). Example: {performance: 80, LCP_ms: 2500, CLS: 0.1}. | |
| strategy | No | Defaults to mobile. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by stating that unknown budget keys are surfaced as non-fatal findings with hints (not silently ignored), and it describes the return value (per-metric verdict and overall pass/fail). This supplements the readOnlyHint, openWorldHint, idempotentHint, and destructiveHint annotations, with no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary action, then systematically covers budget keys, return behavior, and usage hint. Every sentence adds value without redundancy. It is compact yet comprehensive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters (one nested object) and no output schema, the description is remarkably complete. It explains required and optional parameters, budget key validation, error handling for unknown keys, and the return format. Edge cases are addressed, making it self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the input schema has 100% coverage with descriptions, the description adds significant meaning: it explains the scale for scores (0-100, not decimal), latency units (milliseconds), CLS unitless, and provides an example. It also elaborates on the budget dictionary behavior. This enriches the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: run PageSpeed Insights on a URL and compare results against a performance budget. It specifies the verb ('run', 'verdict') and resource ('PageSpeed Insights', 'performance budget'), and differentiates from siblings by focusing on budget enforcement rather than general analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions the tool is useful as a CI/pre-deploy gate, providing clear when-to-use guidance. It also explains behavior for unknown keys. However, it does not directly contrast with sibling tools like 'psi_analyze' or mention when not to use, though the context is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mixed_content_checkARead-onlyIdempotent
Fetch an HTTPS page and report any sub-resource references that use plain http:// (img/script/iframe/form action/anchor href). Mixed content blocks browsers from running scripts and triggers warnings on user-facing pages. No-op for http:// pages (returns 'not_https').
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute https:// URL to inspect. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnly, openWorld, idempotent, non-destructive. Description adds context about mixed content blocking scripts and triggering warnings, and the no-op behavior, which helps the agent understand consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. First sentence explains the action, second adds context and edge case. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter tool with no output schema, the description covers the action, edge case, and behavioral implications adequately. No missing information for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter 'url' with schema description 'Absolute https:// URL to inspect.' Schema coverage is 100%, so description adds minimal value beyond stating 'HTTPS page' and handling of http://. Baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool 'fetch[es] an HTTPS page and report[s] any sub-resource references that use plain http://', listing specific element types. This distinguishes it from sibling tools like gsc_*, cf_*, or robots_txt_validate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explicitly says it's a no-op for HTTP pages (returns 'not_https'), implying usage on HTTPS pages. It does not explicitly state alternatives, but the purpose is distinct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onpage_serp_gapARead-onlyIdempotent
Find the headings, entities and schema the top SERP results have that a target page lacks, and turn them into on-page actions. Pass competitor_urls (free), or a query with DataForSEO configured to auto-fetch the SERP. When the SERP is auto-fetched, also returns winnability signals (AI-Overview presence, UGC/forum dominance = zero-click risk) and, with Open PageRank, competitor domain authority. Surfaces information-gain (add something novel), not just parity. Read-only; does not guarantee a ranking.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Query to auto-fetch the SERP for (needs DataForSEO) when competitor_urls is omitted. | |
| target_url | Yes | The page to analyze. Required. | |
| competitor_urls | No | Competitor URLs to compare against. Up to 6. | |
| max_competitors | No | Cap competitors analyzed. Default 5. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with annotations (readOnlyHint, non-destructive) and adds valuable behavioral context: winnability signals, zero-click risk, domain authority, and information-gain. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three clear sentences, front-loaded with purpose, no redundancy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description adequately explains what is returned (winability signals, domain authority). Lacks explicit output structure, but sufficient for understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and descriptions are provided. The description adds context beyond schema, such as 'free' for competitor_urls and DataForSEO requirement for query, enhancing parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool identifies SERP gaps ('headings, entities and schema') and turns them into actions. It distinguishes from siblings by its specific gap analysis focus, and no sibling tool has overlapping verb+resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly provides two usage paths (competitor_urls or query with DataForSEO) and notes read-only and no ranking guarantee. It doesn't explicitly mention alternatives among siblings, but the tool is unique in function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
psi_analyzeARead-onlyIdempotent
Run PageSpeed Insights on a URL and return Lighthouse category scores, lab Core Web Vitals (synthetic), and field Core Web Vitals (real-user CrUX) when available. Defaults to the mobile strategy (Google ranks on mobile).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Page URL to analyze. Required. | |
| strategy | No | Defaults to mobile. | |
| categories | No | Lighthouse categories to run. Defaults to all four. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it safe, idempotent, and non-destructive. The description adds the specific return types and default strategy, which is useful behavioral context beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with front-loaded action and outputs. No unnecessary words, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool returning multiple metrics with a default strategy, the description covers key aspects: what it returns, default behavior, and when field data is available. No output schema but description suffices.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds the rationale for the mobile default, improving understanding beyond the schema's enum description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs PageSpeed Insights and returns specific scores and vitals, distinguishing it from sibling tools like psi_opportunities which focus on optimization opportunities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly notes the default mobile strategy and why, providing clear context. No explicit alternatives or when-not-to-use cases are mentioned, but the scope is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
psi_opportunitiesARead-onlyIdempotent
Run PageSpeed Insights and return the actionable Lighthouse opportunity audits (estimated load-time savings) plus the Lighthouse SEO-category audits graded by severity (critical/high/medium/low). Lab data only; does not use field/CrUX data (use crux_snapshot / crux_history for real-user metrics). Defaults to the mobile strategy.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Page URL to analyze. Required. | |
| strategy | No | Defaults to mobile. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds behavioral context: uses lab-only data, returns specific audits, defaults to mobile. No contradictions. Could mention potential quota limits or output size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is efficient and front-loaded. Each clause adds distinct value (lab data, audit types, alternative tools, default strategy). Could be slightly restructured for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Purpose and parameters are well-covered. However, with no output schema, the description only vaguely describes return types ('estimated load-time savings', 'severity grades'). Lacks concrete output structure for an agent to parse programmatically.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both url and strategy. Description only adds that strategy defaults to mobile, confirming existing schema info. No additional semantic depth beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool runs PageSpeed Insights lab data and returns two specific audit types (opportunity savings, SEO severity). It distinguishes from siblings by emphasizing lab-only data and naming alternatives (crux_snapshot, crux_history) for field metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states that this tool uses lab data only and recommends field-data alternatives (crux_snapshot/crux_history). Also notes default mobile strategy. Could be more explicit about when to prefer this over sibling psi_analyze.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rank_change_attributionARead-onlyIdempotent
Estimate whether an on-site change moved a page's clicks, using difference-in-differences against a control group of untouched pages (never a naked before/after). Returns an estimated lift with a 95% confidence interval and a three-state verdict (likely_positive / likely_negative / inconclusive), plus a confounders block (algo-update proximity, GSC data-regime breaks, control quality, sample sizes). Clicks-based (position/CTR were corrupted by the 2025 GSC bugs). Observational, not proof of causation -- a server-side split test is the only true causal test.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The changed page URL (or use `urls`). | |
| urls | No | Multiple changed page URLs. | |
| query | No | Optional: restrict to one query. | |
| gap_days | No | Washout gap after the change for recrawl/re-rank. Default 7. | |
| pre_days | No | Pre-window length. Default 56 (>=2x post, per CausalImpact). | |
| site_url | No | Defaults to the configured default site. | |
| post_days | No | Post-window length. Default 28. | |
| change_date | Yes | Date the change shipped, ISO YYYY-MM-DD. Required. | |
| control_scope | No | Control pool: same path section, or whole site. Default section. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnly, idempotent, non-destructive. The description adds details: uses clicks data, returns lift with CI and verdict, includes confounders block. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that packs key information (method, return, caveats) efficiently. It is front-loaded but could be slightly more structured. No wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 parameters and no output schema, the description explains return values (lift, CI, verdict, confounders) and why clicks are used. It covers key context, though a note on example usage would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with per-parameter descriptions. The tool description adds methodological context but does not significantly enhance parameter semantics beyond what the schema already provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool estimates whether an on-site change moved a page's clicks using difference-in-differences. It specifies the exact purpose and distinguishes it from siblings, which are mainly data retrieval tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly notes that this is observational and not proof of causation, advising that a server-side split test is needed for true causal evidence. It also mentions data limitations (GSC bugs), guiding correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redirect_chain_auditARead-onlyIdempotent
Walk the redirect chain for a URL without auto-following 3xx. Returns every hop (status, location, elapsed_ms) and flags issues: chain longer than 1, mixed-protocol hops (https -> http), loops, or non-2xx terminus. Cap defaults to 10 hops.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute http(s) URL to audit. | |
| max_redirects | No | Maximum hops to follow before flagging the chain as too long. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safeness (readOnlyHint, idempotentHint), but the description adds valuable behavioral details: 'without auto-following 3xx', the type of issues flagged (loops, mixed-protocol, etc.), and the default hop cap. This goes 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each contributing distinct information: primary action, return data and flags, and default limit. No fluff, efficiently front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description sufficiently covers return fields and issue flags. It explains behavior (no auto-follow) and defaults. Minor gap: does not specify output format (e.g., array of objects) but still adequate for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both parameters. The description reiterates the default value for max_redirects and the URL type, adding minimal new meaning. Baseline score applies since no contradiction and schema handles most semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Walk the redirect chain') and specifies the resource ('a URL'). It lists exact return data (status, location, elapsed_ms) and issue flags, making it distinct from sibling tools that manage redirect rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for auditing redirect chains but does not explicitly contrast with alternative sibling tools like cf_list_redirects (listing existing redirect rules) or cf_create_redirect. No explicit 'when to use' or 'when not to use' guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
robots_ai_postureARead-onlyIdempotent
Recommend a Content-Signals posture (search / ai-input / ai-train) from a business goal and emit a ready-to-apply artifact: the Content-Signal directive line plus a full suggested robots.txt. Read-only, offline, deterministic - no network, no writes. Always returns the trade-off alternatives and the mandatory caveat that Content-Signal is honored only by adopting crawlers, is ignored by Googlebot, and is not a ranking factor.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | Business goal driving the recommendation. One of content_authority, maximize_visibility, protect_ip. Defaults to content_authority when omitted. | |
| sitemap_url | No | Optional sitemap URL embedded into the generated robots.txt artifact. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint), the description adds that it is offline, makes no network calls, performs no writes, and always includes trade-off alternatives and mandatory caveats about Content-Signal being honored by adopting crawlers and ignored by Googlebot.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two well-structured sentences that front-load the primary action and output, then list key behavioral properties and return characteristics. Every sentence adds essential information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only two optional parameters, rich annotations, and no output schema, the description is sufficiently complete. It explains the input (business goal), output (artifact and trade-offs), behavioral constraints, and important caveats about Content-Signal recognition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and describes both parameters clearly. The description adds context about the output (artifact, trade-offs) and ties the goal parameter to business goals, but does not elaborate on the sitemap_url parameter beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool recommends a Content-Signals posture and emits a ready-to-apply artifact including a directive line and robots.txt. This is specific and distinguishes from sibling tools like robots_txt_validate or cf_managed_robots which do different tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool is read-only, offline, deterministic, and always returns trade-offs and a caveat. It implies usage for generating a posture recommendation but does not explicitly contrast with other robots.txt tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
robots_txt_validateARead-onlyIdempotent
Fetch /robots.txt for a site, parse user-agent groups + Allow/Disallow + Crawl-delay + Sitemap, and return the structured ruleset. Optionally probe a list of (user_agent, url) pairs and return per-probe allow/deny verdicts using RFC 9309 longest-match.
| Name | Required | Description | Default |
|---|---|---|---|
| probes | No | Optional list of (user_agent, url) pairs to verdict against the rules. | |
| site_url | Yes | Any URL on the target host; /robots.txt is fetched relative to it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds significant behavioral context beyond annotations: fetching, parsing rules, using RFC 9309 longest-match for probing. Annotations already declare readOnly, idempotent, safe; description enriches with exact behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with main action, no redundancy. Every sentence is necessary and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 2 parameters, 100% schema coverage, no output schema but description explains outputs (structured ruleset, per-probe verdicts). Complete for a parsing/probing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage; description adds meaning: site_url is relative for fetching, probes return 'allow/deny verdicts using RFC 9309 longest-match'. This enriches parameter understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches /robots.txt, parses user-agent groups, Allow/Disallow, Crawl-delay, Sitemap, and optionally probes URL pairs. It distinguishes from siblings like robots_ai_posture which focuses on AI posture.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Purpose is clear: validate robots.txt and optionally probe URLs. While no explicit when-not or alternatives are given, the context among siblings (robots_ai_posture, cf_managed_robots) implies it's for parsing and verification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serp_adjacency_expandARead-onlyIdempotent
Expand seed terms into adjacent terms from SERP signals. FREE core: Google Autocomplete (no key). Optional PAA + related-searches via DataForSEO if configured. Pass your winning queries as seeds (seed from gsc_top_queries). Returns per-seed suggestions plus the aggregated net-new terms (suggestions you didn't seed). Degrades gracefully: autocomplete-only without a DataForSEO key. Read-only. Note: the autocomplete endpoint is undocumented and may change.
| Name | Required | Description | Default |
|---|---|---|---|
| seeds | Yes | Seed terms (your winning queries). Required, 1-15. | |
| include_paa | No | Also fetch People-Also-Ask + related searches via DataForSEO (if configured). Default true when DataForSEO is set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds valuable behavioral details: graceful degradation without a DataForSEO key, and the autocomplete endpoint being undocumented and subject to change. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with 5 sentences, each adding essential information. It is front-loaded with the main purpose and well-structured, with no redundant or unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no output schema), the description fully explains what it does, how to use it, what it returns (per-seed suggestions + net-new terms), and its limitations. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds meaning beyond the schema by specifying that 'seeds' should come from gsc_top_queries and that 'include_paa' defaults to true when DataForSEO is set. This helps the agent choose appropriate values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Expand' and the resource 'seed terms into adjacent terms from SERP signals'. It distinguishes from sibling tools like gsc_keyword_expand by specifying SERP signals (Google Autocomplete, PAA, related searches) rather than GSC data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage guidance: pass winning queries as seeds (seed from gsc_top_queries), notes the free core and optional DataForSEO features, and explains graceful degradation. It does not explicitly state when not to use it or list alternative tools, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sitemap_healthARead-onlyIdempotent
Sample N URLs from a sitemap (or one level deep in a sitemap index) and HEAD-check each. Aggregates a status-code histogram and lists the first few non-2xx URLs so you can triage broken entries fast.
| Name | Required | Description | Default |
|---|---|---|---|
| sample_size | No | Number of URLs to HEAD-check. | |
| sitemap_url | Yes | Absolute URL of the sitemap or sitemap index. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive. Description adds behavior: sampling, HEAD-checking, histogram generation, listing non-2xx. No contradictions. Could detail 'first few' but acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two precise sentences. Front-loaded with verb and resource. Every word adds value. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple sampling tool, the description sufficiently covers purpose and output (histogram, non-2xx list). No output schema, but description compensates. Could specify output format, but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. Description does not add significant meaning beyond the schema's parameter descriptions. Merely restates the sampling action.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (sample, HEAD-check, aggregate) and resource (sitemap URLs) are clearly stated. Distinguishes from sibling 'sitemap_validate' which likely validates sitemap structure, not URL health.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for triaging broken entries in sitemaps. Does not explicitly mention when not to use or compare to alternatives, but context with sibling tools makes it reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sitemap_validateARead-onlyIdempotent
Fetch a sitemap or sitemap-index URL, validate its XML structure, count entries, and flag oversize (>50,000 URLs or >50 MiB), missing , and entries whose host does not match the sitemap host. Handles .gz transparently.
| Name | Required | Description | Default |
|---|---|---|---|
| sitemap_url | Yes | Absolute URL of the sitemap or sitemap index. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides detailed behavioral information beyond annotations, including specific checks (oversize, missing lastmod, host mismatch) and handling of .gz. Annotations already confirm read-only and idempotent, so the description adds valuable transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with three sentences that front-load the core action and efficiently detail specific checks and .gz handling. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers input, actions, and specific validations. However, it lacks explicit information about the return value or response structure, which would be helpful given no output schema. Otherwise, it is comprehensive for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the single parameter. The description restates 'sitemap or sitemap-index URL' but does not add additional meaning or examples. With 100% schema coverage, baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (fetch and validate), the resource (sitemap URL), and specific checks (oversize, missing lastmod, host mismatch). It distinguishes from siblings like gsc_list_sitemaps and sitemap_health by focusing on XML structure validation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool (for validating sitemap XML) and indirectly distinguishes from siblings by specifying validation criteria. However, it does not explicitly state when not to use or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
system_statusARead-onlyIdempotent
Report which SEO services are configured and reachable, the Google auth method and scopes, whether destructive mode is enabled, and the full catalog of available tools grouped by service. Call this first if unsure what is set up. Pass probe=true to confirm credentials work via one cheap live call per configured service (default false: config-only).
| Name | Required | Description | Default |
|---|---|---|---|
| probe | No | If true, make one cheap live call per configured service to confirm the credentials actually work. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds valuable context about probe making live calls and config-only default, enhancing transparency 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, fully front-loaded with key info, no redundant words. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description covers all reported aspects sufficiently for an agent to understand what the tool returns. Lacks explicit return type but standard for such tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters. Description adds meaning by explaining default behavior (false: config-only) and what probe=true does, exceeding the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it reports which SEO services are configured, auth method, destructive mode, and tool catalog. It clearly distinguishes from sibling tools that perform specific actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Includes explicit guidance: 'Call this first if unsure what is set up.' Provides context for the probe parameter but lacks explicit when-not scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
topic_cluster_mapARead-onlyIdempotent
Map a content cluster from your own Search Console data and surface missing subtopics. Define the cluster by cluster_path (a URL path prefix) or pillar_url. For each query the cluster's pages show for, classifies it into defend / optimize / create / monitor by demand and best position, flags cannibalization, and lists the create-quadrant queries (high demand, weak position) as missing-subtopic candidates for you to group into named subtopics. Free, GSC-only. 'create' = no VISIBLE strong coverage (GSC hides ~47% of queries); no external volume.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Window. Default 90 (wider surfaces more). | |
| limit | No | Max queries listed per quadrant. Default 50. | |
| site_url | No | Defaults to the configured default site. | |
| pillar_url | No | Pillar page URL; the cluster path is derived from its directory if cluster_path is omitted. | |
| cluster_path | No | URL path prefix defining the cluster, e.g. '/blog/widgets/'. | |
| impressions_min | No | Demand threshold: at/above this is 'high demand'. Default 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond the annotations: classification into quadrants, cannibalization flagging, and the limitation that GSC hides ~47% of queries. This helps the agent understand the tool's constraints and outputs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is 4-5 sentences, front-loaded with the core purpose, and includes essential details without excessive fluff. Slightly verbose with 'Free, GSC-only' but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 params, no output schema) and rich annotations, the description covers input definition, processing logic, output content (quadrants, create queries), and limitations (GSC data gaps). It is fairly complete for a read-only analysis tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 6 parameters have schema descriptions covering 100%. The description does not add new per-parameter details but provides overall context on how parameters relate (e.g., cluster_path vs pillar_url). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool maps a content cluster and surfaces missing subtopics, with specific actions and outputs. It clearly distinguishes from siblings focused on general GSC analysis or performance measurement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (for mapping a content cluster using your own Search Console data) and how to define the cluster (via cluster_path or pillar_url). It lacks explicit exclusions or comparison to alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_schemaARead-onlyIdempotent
Validate every JSON-LD block on a page against the Google Rich Results required-field set. Per-entity verdict (pass/fail) and a list of missing required + recommended fields. Covers Article, NewsArticle, BlogPosting, Product, FAQPage, BreadcrumbList, Organization, LocalBusiness, Event, Review, Recipe.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute http(s) URL to validate. | |
| types | No | Optional: restrict checks to these schema.org @types. Default: validate every recognized type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, etc. The description adds useful behavioral context (per-entity verdict, list of missing fields) and covers a fixed set of types, but doesn't contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences that front-load the primary action, then list return details and coverage. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description adequately explains what the tool returns (per-entity pass/fail verdict and lists of missing fields) and covers a broad set of rich result types, making it complete for its expected use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning the schema already describes both parameters. The tool description adds no additional parameter information beyond what's in the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool validates JSON-LD blocks on a page against Google Rich Results required fields. It lists 10 specific schema.org types covered, which differentiates it from siblings like inspect_schema that may have a broader or different validation focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when checking structured data compliance and lists the supported types, but does not explicitly state when to avoid using it or mention alternative tools for other validation tasks.
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. Dates show when Glama detected each change.
70 tool updates
v0.9.2- First observed
ai_citation_readiness - First observed
ai_citation_track - First observed
ai_referral_overview - First observed
cf_bulk_redirect_upsert - First observed
cf_create_redirect - First observed
cf_delete_redirect - First observed
cf_list_dns - First observed
cf_list_redirects - First observed
cf_list_zones - First observed
cf_managed_robots - First observed
cf_purge_cache - First observed
cf_purge_cache_all - First observed
cf_settings_audit - First observed
cf_settings_update - First observed
cf_web_analytics - First observed
cf_zone_info - First observed
check_canonical - First observed
content_brief_data - First observed
content_opportunities - First observed
crux_history - First observed
crux_snapshot - First observed
ga4_landing_page_conversions - First observed
ga4_organic_search_overview - First observed
ga4_run_report - First observed
ga4_setup_audit - First observed
ga4_site_search - First observed
ga4_top_landing_pages - First observed
ga4_traffic_by_channel - First observed
gsc_batch_inspect_urls - First observed
gsc_compare_periods - First observed
gsc_coverage_audit - First observed
gsc_decaying_pages - First observed
gsc_inspect_url - First observed
gsc_keyword_expand - First observed
gsc_list_properties - First observed
gsc_list_sitemaps - First observed
gsc_new_queries - First observed
gsc_portfolio_summary - First observed
gsc_query_gaps - First observed
gsc_query_opportunities - First observed
gsc_request_indexing - First observed
gsc_search_analytics - First observed
gsc_submit_sitemap - First observed
gsc_top_pages - First observed
gsc_top_pages_by_query - First observed
gsc_top_queries - First observed
gsc_trending_pages - First observed
hreflang_consistency_check - First observed
indexnow_bulk_submit - First observed
indexnow_submit - First observed
inspect_meta - First observed
inspect_schema - First observed
internal_link_graph - First observed
internal_link_recommend - First observed
keyword_universe - First observed
lighthouse_budget - First observed
mixed_content_check - First observed
onpage_serp_gap - First observed
psi_analyze - First observed
psi_opportunities - First observed
rank_change_attribution - First observed
redirect_chain_audit - First observed
robots_ai_posture - First observed
robots_txt_validate - First observed
serp_adjacency_expand - First observed
sitemap_health - First observed
sitemap_validate - First observed
system_status - First observed
topic_cluster_map - First observed
validate_schema
TDQS
Each tool targets a specific SEO function, and the descriptions clearly differentiate them. However, with 70 tools, some overlap exists between convenience wrappers and their generic counterparts (e.g., gsc_top_queries vs gsc_search_analytics), which could cause minor confusion for an agent.
Tool names follow a consistent pattern: lowercase with underscores, mostly using a service prefix (gsc_, ga4_, cf_, etc.) or descriptive compound names for standalone tools. The naming is predictable and readable, though a few tools lack a clear prefix.
70 tools is high for a single server, but the broad SEO domain justifies the count through coverage of multiple services and specialized utilities. The number may be overwhelming for agents, but the tools are well-organized.
The tool surface covers major SEO areas: Search Console, Analytics, Cloudflare, PageSpeed, Core Web Vitals, redirects, robots, sitemaps, schema, internal links, content opportunities, and keyword research. Minor gaps include lack of Google Search Console sitemap deletion or GA4 property management, but these are outside typical scope.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Free technical-SEO audit MCP: crawl a site, run checks, return an LLM-ready shareable report.
- CalmSEOOAuthcom.calmseo
SEO MCP server for keyword research, SERP analysis, audits, and Search Console workflows.
Security, SEO and AI-visibility scanner for web apps · free scans and focused checks via MCP.
Site scores, audits, Search Console, keywords, competitors, authority and AI visibility tools.
1
Related MCP Servers
- AlicenseBqualityBmaintenanceSEO audit and Google Search Console MCP server with 23 tools. Search analytics, URL inspection, Indexing API, Core Web Vitals (CrUX), striking distance keywords, keyword cannibalization detection, branded query analysis, and automated site audits.302MIT
- AlicenseAqualityAmaintenanceMCP server for Google Search Console, URL Inspection & Indexing API — search analytics, sitemap management, and batch indexing132037MIT
- AlicenseAqualityAmaintenanceOAuth-protected Google Search Console MCP for analytics, URL inspection, sitemap management, indexing requests, and SEO diagnostics. Open-source Cloudflare Workers implementation with 17 tools.17105MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for Technical SEO DNS record auditing, SOA expiry health checks, SSL/TLS inspection, and HTTP security header analysis. Enables comprehensive security audits and scoring via 10 tools.MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/avansaber/seo-monster'
If you have feedback or need assistance with the MCP directory API, please join our Discord server