dotTide
OfficialRetrieves live public statistics for Firefox Add-ons, enabling agents to check extension store numbers alongside other site and product metrics.
Retrieves public GitHub repository statistics such as stars, with support for a read-only token to avoid anonymous rate limits.
Reads GA4 traffic data across multiple Google accounts and properties, reporting sessions by source and medium and separately counting referrals from AI assistants such as ChatGPT, Perplexity, Copilot, Gemini, and Claude.
Reads Search Console performance data across multiple Google accounts and properties, including clicks, impressions, CTR, and average position by query or page for arbitrary date ranges, with period-over-period comparisons.
Retrieves live public statistics for WordPress.org plugins, such as active installs and other store metrics, without requiring an API key.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@dotTidecompare last week's search clicks to the week before"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
dotTide
dotTide is a read-only MCP server and command-line tool that gives Claude, Cursor, Codex and other AI agents the numbers for every site you run. It reads Google Search Console and Google Analytics 4 (GA4) across multiple Google accounts, plus WordPress.org, Firefox Add-ons and GitHub stats, and writes a weekly snapshot for scripts and agents.
Nothing gets added to your sites. dotTide only reads numbers you already have, and your keys stay on your computer.
Why
If your sites sit under different Google accounts, checking them means logging in and out of each one. The weekly check slips to monthly, and any AI agent you ask works from stale numbers. Store numbers for plugins, extensions and repos live in yet more places.
dotTide reads all of it with one read-only key, and answers the same way in Claude, on the command line, and in a weekly JSON file.
Related MCP server: SEOAnalytics Read MCP
What it does
sites: every configured site, which key covers it, and whether Search Console, GA4 and Bing access works when you ask.search_queries: clicks, impressions, CTR and average position by query or page, for any date range, with an optional comparison to the previous period and filters for country, device and search type.traffic: GA4 sessions by source and medium, with AI assistant referrals (ChatGPT, Perplexity, Copilot, Gemini, Claude and others) counted separately, with the landing pages each assistant sent visits to (landing_pages). Only for sites that have GA4.store_stats: live public numbers that need no key: WordPress.org plugins, Firefox Add-ons, GitHub stars.opportunities: what to work on next: queries in striking distance, pages and queries losing clicks, pages and queries slipping in position (slipping_pages,slipping_queries), and page-one queries with a low click-through rate for their position. When that last list is empty because too few queries rank on page one,low_ctr_notesays so and gives each position band's count. List your brand names asbrand_termsin the profile and searches for them stay out of the low click-through check, since they get far more clicks at the top.page_queries: the queries that bring people to one page, and how much of the page's traffic Google hides behind anonymized queries.competing_pages: queries where two or more of your pages split the impressions, biggest overlaps first.index_health: every sitemap's state, and whether the top pages are in Google's index, with a plain list of problems to fix.core_web_vitals: real-user LCP, INP and CLS with Google's ratings when there's enough data, plus a lab run, from PageSpeed Insights.bing_queries: Bing Webmaster Tools clicks, impressions and position by query. Bing feeds Copilot.discover: finds every Search Console property and GA4 property the key can read, and writes the profile entries for you, with abrand_termssuggestion from each domain name, commented out until you check it.Ready-made prompts: a weekly review, what to work on, and an index check, shown as commands in Claude and other MCP clients.
Weekly snapshot: last full week against the week before, one JSON file per profile, for scripts and agents that read files.
How access works
No site moves to a new Google account. You create one Google service account, and whichever Google account owns a site invites that service account's email:
Search Console: as a Restricted user.
GA4: as a Viewer.
The service account can only read, and you can remove it from any site in one click. Bing is optional and uses one API key from Bing Webmaster Tools that covers all your sites there. Its key lives in your system's secret store: the macOS keychain, Windows Credential Manager or the Linux Secret Service.
Quick start
You need macOS, Windows or Linux, and uv. There is nothing to clone: uvx downloads dotTide the first time you run it.
Write a starter profile, then add a plugin slug, an add-on slug or a GitHub user under
[stores]in it:
uvx dottide initCheck that it runs. Store numbers need no Google setup at all:
uvx dottide store_statsSet up Google access by following Google setup. It takes about ten minutes, plus a minute per site.
Store the key, let dotTide find your sites, and check access:
uvx dottide import-key dottide-main ~/Downloads/<downloaded-key>.json
uvx dottide discover --write
uvx dottide sitesOptional: add Bing numbers by following Bing setup. It takes about five minutes.
Connect it to Claude Code:
claude mcp add --scope user dottide -- uvx dottideTo update later, run uvx dottide@latest sites once; after that uvx dottide uses the new version.
Documentation
Google setup: the service account, click by click, and sharing each site.
Bing setup: optional Bing Webmaster Tools numbers with one API key.
Configuration: profiles, every field, keys and environment variables.
Using dotTide: each tool and its options, MCP clients, the weekly snapshot and its format, and fixes for common errors.
Asking an AI agent for your numbers: example prompts for weekly checks, content to refresh, AI referrals and store numbers, plus a saved Claude Code command.
Connecting AI clients: Claude Code, Claude Desktop, Cursor, Windsurf, VS Code, Codex, Gemini CLI, Grok, and agents without MCP.
Good to know
Search Console data settles about three days after the fact, so default ranges end three days ago.
Every Google scope dotTide asks for is read-only, and no tool can change anything.
GitHub allows 60 anonymous requests an hour per IP. Set
DOTTIDE_GITHUB_TOKENto a read-only token if you hit the limit.
Contributing
See CONTRIBUTING.md. Security reports go through SECURITY.md.
License
The code is released under the MIT License. The dotTide name and icon are not covered by the license, so please use your own name and icon if you ship a copy.
Available Tools
11 toolsbing_queriesBRead-only
Bing Webmaster Tools clicks, impressions and average position by query, plus site totals, for a range. Bing feeds Copilot. Needs a [bing] key in the site's profile. Bing updates these numbers about once a week.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| days | No | ||
| site | Yes | ||
| limit | No | ||
| start | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and open-world, but the description adds real context beyond them: an auth prerequisite (a [bing] key configured in the site profile) and a freshness expectation (numbers update roughly weekly). Both materially affect whether an agent should call this and how to interpret stale results.
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?
Four short sentences, front-loaded with what data is returned; the auth and freshness notes follow logically. 'Bing feeds Copilot' is the only line of marginal value, but it does justify the tool's existence.
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 and 0% parameter coverage, an agent still lacks the essentials to invoke this correctly: date format, the days-vs-start/end precedence, and what limit controls. The description covers prerequisites and freshness well but leaves the calling contract underspecified.
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 0%, so the description carries the full burden for five parameters, yet it only vaguely gestures at 'for a range' and 'by query'. It never explains site format, how days interacts with start/end, what limit bounds, or the date format expected.
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 the specific resource (Bing Webmaster Tools query-level clicks, impressions, average position) and the aggregation (site totals) over a range. The 'Bing' qualifier implicitly separates it from the Google-oriented search_queries/page_queries siblings, though it never says so outright.
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?
'Needs a [bing] key in the site's profile' gives a concrete prerequisite, and 'Bing feeds Copilot' hints at why the data matters. However, there is no guidance on when to pick this over search_queries or page_queries, and no exclusions or caveats about when the data is unusable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
competing_pagesARead-only
Queries where two or more pages of the site each get at least min_impressions, so they
split the clicks (cannibalization). For each query: every page with its clicks, impressions
and position, the page with most clicks and its share. Biggest overlaps first. Same dates
and filters as search_queries.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| days | No | ||
| site | Yes | ||
| limit | No | ||
| start | No | ||
| device | No | ||
| country | No | ||
| search_type | No | web | |
| min_impressions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds meaningful behavioral context: it explains the per-query return shape, includes click/impression/position details, identifies the top page and its share, and states results are ordered by biggest overlap first.
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 and front-loaded: purpose first, then output structure, ordering, and parameter reuse. Every sentence contributes useful information without 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?
The description compensates well for the lack of an output schema by explaining returned fields and ordering. However, for a 9-parameter tool with zero schema descriptions, it is incomplete on parameter semantics, especially site and limit.
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 9 parameters and 0% schema description coverage, the description must carry the burden. It explains min_impressions and delegates date/filter parameters to search_queries, but leaves site, limit, and the exact semantics of start/end/days/device/country/search_type unclear.
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 a specific analytical purpose: finding queries where multiple pages compete and split clicks (cannibalization). It is clear what the tool does, though it does not explicitly distinguish itself from siblings like page_queries or search_queries beyond the cannibalization framing.
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?
Usage is implied by the cannibalization definition, and it notes that dates and filters behave like search_queries. However, it gives no explicit when-to-use guidance, no exclusions, and no clear alternative selection criteria versus search_queries or page_queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
core_web_vitalsARead-only
Core Web Vitals for a page (default: the site's home page) from PageSpeed Insights. page_field and site_field hold real-user 75th-percentile LCP, INP and CLS with Google's good / needs improvement / poor rating, when Google has enough visits; lab holds one Lighthouse run (performance score, LCP, CLS, TBT, FCP, Speed Index). strategy is "mobile" or "desktop". One run takes 10 to 30 seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| site | Yes | ||
| strategy | No | mobile |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/open-world safety profile, and the description layers on genuinely new behavior: a 10–30 second runtime per run, and the caveat that real-user field data only appears "when Google has enough visits." It does not cover failure modes (e.g., what happens for an unindexed or invalid page), which keeps it below a 5.
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?
Four tight sentences, front-loaded with what the tool returns and then the page/site/strategy semantics. Every clause earns its place — even the runtime note is actionable scheduling information rather than filler.
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 usefully maps the response shape (page_field and site_field with LCP/INP/CLS and Google's rating; lab with performance score, LCP, CLS, TBT, FCP, Speed Index). What remains thin is input formatting guidance for `site`/`page` and any error 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 description coverage is 0%, so the description must carry the load — and it largely does, giving the default for `page`, the meaning of `page` vs. `site` scoping, and the allowed values for `strategy` ("mobile" or "desktop") that the schema does not enumerate. The `site` parameter's expected format (domain vs. full URL) is left unexplained.
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 a specific verb+resource: fetches Core Web Vitals for a page from PageSpeed Insights, with an explicit default (the site's home page). It also enumerates the two result families (real-user field data vs. a single Lighthouse lab run), so an agent knows precisely what it gets back. No sibling tool overlaps this performance-metric niche.
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 the usage context (auditing page performance, choosing mobile vs. desktop) and discloses a 10–30 second cost, but never states when to call this instead of something else or when-not to call it. The disambiguation between field and lab data is implicit rather than framed as a selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discoverBRead-only
Every Search Console property and GA4 web stream the key can read, matched by domain,
with ready-to-paste [[sites]] blocks for any site not in a profile yet. Each block has a
commented-out brand_terms suggestion from the domain name. Reads only; the user adds the
blocks with dottide discover --write.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Consistent with readOnlyHint=true and openWorldHint=true, and adds real context annotations don't carry: the output is pasteable config, brand_terms suggestions are commented out, and persistence happens only via a separate CLI flag. Auth scope is gestured at ('the key can read') but rate limits and failure modes on unauthorized keys are not described.
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 tight sentences, front-loaded with the resource enumeration and followed by output shape and the read-only caveat. Domain jargon ([[sites]], brand_terms) is justified because those are the literal artifacts produced.
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, and the description does cover the return shape well enough to act on. However a 1-param tool whose sole parameter is entirely undocumented leaves the agent guessing about `profile`'s effect on 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 0% and the description never mentions the single `profile` parameter, so the agent cannot tell whether it narrows the scan, names the target config file, or both. With only one optional param the damage is limited, but the description does nothing to compensate for the coverage gap.
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 a specific verb+resource: enumerates Search Console properties and GA4 web streams, matched by domain, plus the shape of what it emits ([[sites]] blocks). 'For any site not in a profile yet' implicitly contrasts with the profile-oriented sibling `sites`, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: you call it to gather config blocks for unprofiled sites. It does clarify the read/write split ('Reads only; the user adds the blocks with `dottide discover --write`'), which tells the agent this tool will not persist anything. No explicit comparison to siblings like `sites` or `traffic`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
index_healthARead-only
Is the site healthy in Google's index? Every sitemap Search Console knows (errors,
warnings, when Google last read it, URLs submitted) and the index status of the top pages
pages by clicks over the last days days (verdict, coverage, last crawl, Google's chosen
canonical). problems lists anything to fix in plain words. Reads only: it never submits a
sitemap or requests indexing. Each page checked uses one URL Inspection call.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| site | Yes | ||
| pages | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description reinforces rather than contradicts them by spelling out what 'read only' means here (never submits a sitemap or requests indexing). It also adds genuinely non-obvious operational context the annotations cannot convey: per-page URL Inspection call consumption, which is a real quota consideration when choosing `pages`.
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?
Front-loaded with the guiding question, then the scope, then the safety/cost caveats — a sensible order with no filler. The long parenthetical enumerations of returned fields add bulk but each item is informative, so trimming would cost real signal.
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 does its job by naming the return payloads (sitemap list, per-page index verdict, and a plain-language `problems` list) and disclosing the Vision-style cost of URL Inspection calls. Only real gap is the required `site` parameter's accepted format, which an agent needs before it can call 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?
Schema coverage is 0%, so the description must carry the load, and it partially does: `pages` is explained as 'top pages by clicks' and `days` as the lookback window, and the cost note ties `pages` to quota. But `site` — the one required parameter — gets no format guidance (property identifier vs URL, sc-domain syntax), and defaults for `days`/`pages` are left to 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?
States a specific diagnostic question plus the two concrete resources it returns: Search Console sitemap entries (errors, warnings, last read, URLs submitted) and index status per page (verdict, coverage, last crawl, canonical). The 'healthy in Google's index' framing plus sitemap/index-status detail clearly separates it from siblings like core_web_vitals, traffic, or search_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?
Usage is implied rather than stated: the opening question frames it as a diagnostic check, and the cost note ('each page checked uses one URL Inspection call') hints at a scoped/sampled run. But no sibling is named and there is no explicit when-to-use / when-not-to-use routing, so the agent must infer that this is the index-diagnosis entry point rather than a metrics or vitals tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opportunitiesARead-only
What to work on next for a site, from Search Console: queries in striking distance (position 8 to 20, by impressions), pages and queries that lost the most clicks against the previous period, pages and queries whose average position dropped the most (slipping_pages, slipping_queries, with min_impressions in both periods), and page-one queries whose CTR is under half the site's own median for that position. When low_ctr is empty because no position band has three queries, low_ctr_note says so and low_ctr_band_counts gives each band's count. Every item carries its numbers. Same date rules and filters as search_queries, except Discover and Google News, which have no query rows.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| days | No | ||
| site | Yes | ||
| limit | No | ||
| start | No | ||
| device | No | ||
| country | No | ||
| search_type | No | web | |
| min_impressions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, but the description adds real behavioral substance beyond them: the exact position band (8–20), ranking by impressions, the min_impressions constraint applying to both periods, and the edge-case behavior when low_ctr is empty (low_ctr_note and low_ctr_band_counts). It doesn't cover limits, pagination, or performance.
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?
Front-loaded with the core purpose, then each category and its caveat in dense but purposeful clauses; every sentence carries information. The single run-on sentence structure makes it slightly harder to scan than a bulleted form would be.
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 does well to enumerate the returned item categories and the low_ctr edge-case fields. However, for a nine-parameter tool with zero schema coverage, it leaves the agent guessing about limit semantics, device/country filtering, and default values.
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 0%, so the description must compensate for nine parameters. It explains min_impressions (both periods), search_type limitations (Discover/News), and defers date params to search_queries' rules, but leaves limit, device, and country completely unexplained.
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 a specific verb+resource with full detail: it returns prioritized 'what to work on next' items across four named opportunity categories (striking distance, lost clicks, position drops, low CTR). This is clearly distinct from sibling tools like search_queries, which return raw rows rather than curated 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?
'What to work on next for a site' frames the prioritization use case, and the note that Discover and Google News have no query rows tells the agent when this tool won't help. It does not explicitly say when to prefer search_queries or page_queries instead, so alternatives are implied rather than named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_queriesARead-only
The queries that bring people to one page (full URL), with the page's own totals and
hidden: the clicks and impressions Search Console counts for the page but leaves out of
its query rows, because Google anonymizes rare queries. Same dates, compare and filters as
search_queries.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| days | No | ||
| page | Yes | ||
| site | Yes | ||
| limit | No | ||
| start | No | ||
| device | No | ||
| compare | No | ||
| country | No | ||
| search_type | No | web |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the read-only and open-world profile, and the description goes beyond them by explaining the `hidden` field: clicks/impressions Search Console counts for the page but excludes from query rows due to query anonymization. That is a real reconciliation caveat an agent would otherwise miss.
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 compact sentences that lead with what is returned before explaining the `hidden` nuance. Dense but every clause carries information; nothing is padding.
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, and while the description sketches the return shape (query rows plus page-level totals and `hidden`), it leaves limit/pagination behavior and the site/search_type parameters undocumented. Adequate for a lookup tool but not fully 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?
Schema description coverage is 0% across 10 parameters, so the description carries the burden. It usefully clarifies the page argument takes a full URL and that dates/compare/filters mirror search_queries, but says nothing about site, limit, search_type, or device/country 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?
States a specific resource and scope: the queries that bring traffic to ONE page (full URL), with the page's own totals. The contrast with search_queries is implied via shared parameters rather than stated outright, so the sibling boundary is slightly blurry.
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?
Says it takes 'same dates, compare and filters as search_queries', which tells the agent the two tools are parameter-compatible, but never says when to pick this over search_queries or competing_pages. Usage is inferable from the resource description only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_queriesARead-only
Search Console clicks, impressions, CTR (percent) and average position, by "query" or
"page". Dates are YYYY-MM-DD; without them the range is the last days days ending three
days ago. compare=true adds the previous period of the same length and the change.
Optional filters: country (three-letter ISO code like "usa"), device ("desktop", "mobile"
or "tablet") and search_type ("web", "image", "video", "news", "discover" or
"googleNews"; default "web"). Discover and Google News have page rows only. The result
echoes the filters it used.
| Name | Required | Description | Default |
|---|---|---|---|
| by | No | query | |
| end | No | ||
| days | No | ||
| site | Yes | ||
| limit | No | ||
| start | No | ||
| device | No | ||
| compare | No | ||
| country | No | ||
| search_type | No | web |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, open-world profile, so the description rightly focuses on behavior. It discloses the non-obvious default window (last `days` days ending three days ago), what compare=true computes, allowed filter values, and that the result echoes the filters used — genuinely useful 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?
Dense but front-loaded: metrics first, then date semantics, then compare, then filters. Every sentence carries information; the only cost is that it reads as a single run-on paragraph rather than separated concerns.
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 10-parameter tool with no schema descriptions and no output schema, the description covers metrics, dimensions, date logic, comparison, and three of the filter parameters well. Missing coverage of `limit` and `site` keeps it from being fully 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 description coverage is 0%, so the description carries the full burden and does most of it: exact date format, the days fallback rule, the compare semantics, country as three-letter ISO, and enumerated device/search_type values (default 'web'). It leaves `site` and `limit` (default 25) unexplained, which is the main gap.
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?
Names a specific resource (Search Console clicks, impressions, CTR, average position) and the two dimensions it can be grouped by, which implicitly separates it from page_queries. It stops short of naming the sibling, so the differentiation is inferred rather than stated.
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?
Usage is implied through the 'by query or page' framing and the note that Discover and Google News have page rows only, which steers an agent toward `by=page` for those search types. There is no explicit when-to-use/when-not statement and no reference to page_queries or other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sitesARead-only
Every configured site, which key covers it, and whether Search Console and GA4 access works at the moment of the call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag readOnlyHint and openWorldHint, and the description usefully adds that the access check is a live, point-in-time probe made during the call — meaningful context for an agent diagnosing auth failures. It does not describe the response shape, but for a read-only inventory tool this is a modest omission.
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 front-loaded sentence that states scope, per-site credential mapping, and access status with zero filler. Every clause carries 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 no-parameter, no-output-schema inventory tool this covers what an agent needs: what is returned and that access status is checked live. It could go one step further by hinting at the return structure (e.g. a list with key names and boolean access flags).
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?
Zero parameters, so the baseline of 4 applies; the description correctly implies no inputs are needed to enumerate all sites. It adds nothing more because there is nothing more to add.
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 names the resource concretely (every configured site) and specifies the payload: key coverage per site plus live Search Console/GA4 access status. That clearly separates it from siblings like traffic or search_queries, though the verb is implicit (enumerate/list) and no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the phrase 'at the moment of the call' suggests a discovery/preflight role (find sites, check credential health before pulling data), but the description never states when to prefer it or what to do when access fails. No alternatives are referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
store_statsCRead-only
Live public store numbers that need no keys: WordPress.org plugins (installs, rating, downloads last 7 days), Firefox Add-ons (daily users, ratings), GitHub stars.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and network reach are covered. The description adds one genuinely useful behavioral fact beyond that — these are live public numbers requiring no API keys — but says nothing about rate limits, freshness, or failure behavior for external stores that may 404.
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 compact clauses with no filler, and the key capability ('no keys required') is placed up front. The parenthetical metric lists are dense but readable.
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 undocumented parameter and no output schema, the description leaves too much open: what 'profile' selects, whether results cover all three stores at once or one at a time, and what the returned shape looks like. It reads as a capability blurb rather than a usable invocation spec.
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 0%, and the single 'profile' parameter is completely unexplained in both schema and description. The name is ambiguous — it could mean a store profile, a user profile, or a preset — and since it defaults to null, the agent cannot tell what omitting it does. The description should compensate here and does not.
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 names the exact data resources (WordPress.org plugins, Firefox Add-ons, GitHub stars) and the metrics returned, so the subject matter is clear. But it never states the action — no verb like 'fetch' or 'retrieve' — and the name 'store_stats' alone would not tell an agent what is produced. Sibling differentiation is only implicit, since the sibling tools are all SEO/traffic tools and this one is clearly off-topic.
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?
There is no statement of when to call this tool, when not to, or what alternatives exist. An agent has to infer usage purely from the list of data sources. The 'need no keys' note hints at a prerequisite but is not framed as guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trafficBRead-only
GA4 sessions by source and medium, plus AI assistant referrals (ChatGPT, Perplexity, Copilot, Gemini, Claude and others) totalled separately. Each assistant lists the landing_pages its visits started on, most sessions first. Only for sites with GA4.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| days | No | ||
| site | Yes | ||
| limit | No | ||
| start | No | ||
| compare | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds useful behavior: aggregation by source/medium, separate AI-referral totals, per-assistant landing pages ordered 'most sessions first', and the GA4-only constraint. It says nothing about date window handling, compare behavior, or truncation via limit.
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 tight sentences, front-loaded with the primary output and followed by the AI-referral nuance and the eligibility caveat. No filler, though the landing-page ordering detail could be trimmed.
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, 6 undocumented parameters, and a compare flag, the description is too thin to call the tool correctly. Return shape is sketched but the request-side semantics, the most important gap, are entirely absent.
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 0% across 6 parameters, so the description carries the full burden and fails it: site is only implied, and days/start/end/limit/compare are never mentioned. An agent cannot learn the default 28-day window or what limit and compare do from this text.
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 a concrete verb+resource: GA4 sessions broken out by source/medium, plus AI assistant referral totals with landing pages per assistant. That is specific enough to separate it from search_queries/bing_queries/page_queries, though it never names a sibling to contrast with.
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 only guidance is the eligibility gate 'Only for sites with GA4.' There is no statement of when to pick this over the query tools, no mention of date-range expectations, and no exclusions beyond the GA4 prerequisite.
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.
11 tool updates
v0.4.1- First observed
bing_queries - First observed
competing_pages - First observed
core_web_vitals - First observed
discover - First observed
index_health - First observed
opportunities - First observed
page_queries - First observed
search_queries - First observed
sites - First observed
store_stats - First observed
traffic
TDQS
Scored across 11 tools
Most tools target distinct resources, but search_queries (which accepts a 'page' dimension) and page_queries overlap significantly—an agent could reasonably reach for either when asked for a page's queries. bing_queries vs search_queries is clearer due to the source distinction, and the analytic tools (opportunities, competing_pages, index_health, core_web_vitals) are well separated.
Nearly all names are lowercase snake_case noun phrases (bing_queries, search_queries, core_web_vitals, index_health, competing_pages). Minor deviation: several single-word nouns (sites, traffic, opportunities) and one verb (discover) break the compound pattern slightly, but the set remains readable and predictable.
Eleven tools sit squarely in the well-scoped range, and each covers a distinct slice (per-source queries, GA4 traffic, discovery, store stats, opportunity analysis, cannibalization, index health, CWV). No obvious padding or redundancy.
The surface covers the core read-only SEO analytics lifecycle: discovery, traffic sources, keyword/query performance across GSC and Bing, index/sitemap health, and Core Web Vitals, plus derived opportunity analysis. Gaps exist (no backlink analysis, no sitemap submission—explicitly read-only by design), but these are minor workarounds.
Maintenance
Related MCP Connectors
Read-only Google Search Console MCP server for AI assistants.
Read-only Google Analytics 4 MCP server for AI assistants.
Hosted MCP server for GA4, Google Ads and Search Console. Google OAuth, nothing to install.
Hosted MCP server for marketing agencies: connect Google Ads, GA4, Search Console, Meta, LinkedIn and more to Claude or ChatGPT. Pull reports and make changes via OAuth login, no setup.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for querying Google Search Console data — search analytics, URL inspection, sitemap monitoring, and more — read-only tools for any MCP-compatible AI client.758 PyPIApache 2.0
- FlicenseNot gradedqualityDmaintenanceRead-only MCP server that retrieves SEO analytics data from WordPress, Google Search Console, and Google Analytics 4, enabling users to fetch posts, search performance, page metrics, and more via natural language.-
- AlicenseNot gradedqualityDmaintenanceA powerful Model Context Protocol (MCP) server that provides comprehensive Google Analytics 4 (GA4), Google Search Console (GSC), and Google Merchant Center (GMC) integration for Claude Desktop and other MCP clients.Apache 2.0
- AlicenseNot gradedqualityDmaintenanceRead-only MCP server that gives AI clients access to Google Search Console data, enabling natural language queries about traffic, rankings, and SEO opportunities.125 npmMIT