Skip to main content
Glama
seo-analytics-mcp

seo-analytics-mcp

by zainsive

Google Search Console、GA4 和 IndexNow —— 作为一个 MCP 服务器。

向 Claude 询问你自己的网站。哪些在排名、哪些有变化、哪些被收录、哪些在转化。

PyPI Python License: MIT MCP Tests


"Which pages lost the most clicks in the last 28 days versus the 28 before?"
"How is /pricing doing?"
"Is https://example.com/new-post indexed yet?"
"Which pages rank on page one but get almost no clicks?"
"Top 20 queries for the blog last month, and which of them convert in GA4."

你授权你自己的 Google 账户,使用你自己的 Google Cloud 项目中的 OAuth 客户端。你的访问不会经过任何其他人,此仓库不包含任何凭据,你消耗的每个 Google 配额都是你自己的。

目录

安装 · 设置 · 七天问题 · 工具 · 响应格式 · 配置 · 写入操作 · 配置文件 · 设计 · 故障排除 · 开发

Related MCP server: GSC Analyst Connector

安装

需要 Python 3.10+ 和 uv。

uvx seo-analytics-mcp doctor      # no install needed — prints your setup steps, in order

doctor 是整个上手体验的核心。它会准确告诉你每个阶段缺少什么、接下来该运行什么。如果你在这里什么都不读,那就运行它。

设置

在 Google Cloud 控制台点击六次,然后运行一条命令。一次完成,十分钟。

创建一个 Google Cloud 项目 —— 或复用现有项目。 console.cloud.google.com/projectcreate

启用 API。 Search Console 是必需的;GA4 两个 API 是可选的。

searchconsole · analyticsdata · analyticsadmin

配置同意屏幕,然后点击发布应用。 console.cloud.google.com/auth/overview

选择外部并发布。你是自己应用的唯一用户,因此 Google 的个人使用例外适用,无需验证。Workspace 用户可以选择内部。

不要跳过发布步骤 —— 参见下文。

创建一个类型为 Desktop app 的 OAuth 客户端并下载 JSON。 console.cloud.google.com/auth/clients

Web 应用客户端无法执行此服务器所需的回环重定向。doctor 会检查这个特定错误,因为这是最容易犯的错误。

在终端中授权一次:

uvx seo-analytics-mcp auth --client-secret ~/Downloads/client_secret_*.json

你的浏览器会打开。Google 会显示 "Google 尚未验证此应用" —— 对于你自己的客户端这是预期的:高级 → 继续。令牌会以 0600 权限模式保存在你的配置文件目录中。

检查,然后连接:

uvx seo-analytics-mcp doctor      # eleven checks; exit 0 means it will work

连接它

claude mcp add seo \
  -e GSC_DEFAULT_SITE=sc-domain:example.com \
  -e GA4_DEFAULT_PROPERTY=properties/123456789 \
  -- uvx seo-analytics-mcp
{
  "mcpServers": {
    "seo": {
      "command": "uvx",
      "args": ["seo-analytics-mcp"],
      "env": {
        "GSC_DEFAULT_SITE": "sc-domain:example.com",
        "GA4_DEFAULT_PROPERTY": "properties/123456789"
      }
    }
  }
}

然后完全退出 Claude Desktop(⌘Q —— 仅关闭窗口不够)并重新打开。

[!NOTE] 该配置中没有凭据路径。令牌位于 seo-mcp auth 写入的配置文件目录中,因此整个块可以安全地粘贴到 GitHub issue 中。

七天问题

[!WARNING] 如果服务器正常工作,然后大约一周后停止,原因就在这里。

对于任何发布状态仍为 Testing 的外部 OAuth 应用,Google 签发的刷新令牌在七天后过期。明显的设置路径 —— 创建项目、创建客户端、将自己添加为测试用户 —— 会让你停留在此状态。

修复方法只需一次点击:在同意屏幕上,将受众设置为外部,然后点击发布应用。然后运行 uvx seo-analytics-mcp auth --reauth。

doctor 会标记出仍然可能是 Testing 令牌的年轻令牌,并且服务器返回的每个 invalid_grant 错误都会完整解释这一点。这不是服务器的问题 —— 但这将是针对它提交的最常见问题。

工具

十三个工具:十个映射到上游操作,两个连接数据源,一个纯粹是为了让模型能告诉困惑的用户该做什么。

工具

功能

🔎

gsc_list_sites

此账户可以读取的属性,以及权限级别

🔎

gsc_search_analytics

点击、展示、点击率、排名,按任意维度组合

🔎

gsc_compare_periods

两个时间段对比 —— 最大变动,双向

🔎

gsc_inspect_url

索引状态、覆盖范围、规范 URL、上次抓取、富结果

🔎

gsc_list_sitemaps

已提交的站点地图,包含警告和错误计数

✍️

gsc_submit_sitemap

提交站点地图 —— 需要写入范围和明确确认

📊

ga4_list_properties

账户和属性,用于解析数字属性 ID

📊

ga4_run_report

任意 runReport —— 维度、指标、过滤器、排序

📊

ga4_landing_pages

按落地页统计的会话、互动、转化

⚡

indexnow_verify_key

检查密钥文件是否正确发布

⚡

indexnow_submit

批量提交 —— 默认干运行,令牌门控确认

🔗

page_report

单个 URL:GSC 趋势、热门查询、GA4 互动、索引状态

🩺

auth_status

活动配置文件、范围、哪些 API 可响应、下一步该做什么

响应格式

每个读取工具都返回相同的四个键。有界、自描述,并携带自身的注意事项。

{
  "summary": {
    "source": "gsc",
    "rows_returned": 10,        // what you see
    "rows_matched": 1847,       // what exists upstream
    "date_range": "2026-07-29..2026-08-25",   // resolved, always echoed
    "data_state": "final",
    "totals": { "clicks": 4730, "impressions": 512903, "ctr": 0.0092, "position": 12.4 }
  },
  "rows": [ /* capped at min(row_limit, 1000) */ ],
  "notes": [
    "Google anonymises rare queries: these rows do NOT sum to property totals.",
    "dataState=final excludes the most recent 2-3 days.",
    "1837 further rows were not included inline."
  ],
  "export": "~/.../exports/a1b2c3.csv"        // only when rows spilled
}

三个约定在所有地方都成立:

总计覆盖所有获取的行,而不仅仅是显示的行 —— 一个看到十行和十行总计的模型无法区分截断和现实。比率从不取平均值:ctr 根据点击 ÷ 展示重新计算,position 按展示加权,engagementRate 是互动 ÷ 会话。

注意事项随数据一起传递。 无论哪一层知道注意事项,都会附加它:客户端知道请求了 query 维度,shape() 知道它丢弃了多少行,GA4 知道响应被采样。当模型正在查看数字时,文档字符串单独就会丢失这些信息。

错误会指出修复方法。 403 会告诉你检查哪个授权以及在哪里 —— 绝不会是原始的 Google 错误正文。

The authorised Google account has no access to sc-domain:example.com. Confirm the
account you authorised is the one with access — Search Console grants are per-property
under Settings > Users and permissions, GA4 grants are per-property under Admin >
Property access management. If access was added recently, run `seo-mcp auth --reauth`.

配置

每个变量都是可选的。优先级:工具参数 → 环境变量 → 配置文件 config.json。

变量

用途

GSC_DEFAULT_SITE

默认属性,例如 sc-domain:example.com —— 这样提示中就不必指定它

GA4_DEFAULT_PROPERTY

默认 GA4 属性,例如 properties/123456789

SEO_MCP_PROFILE

使用哪个配置文件(默认:default)

SEO_MCP_HOME

覆盖配置文件根目录

INDEXNOW_HOST · INDEXNOW_KEY

仅 IndexNow 需要

SEO_MCP_LOG_LEVEL

DEBUG 用于详细日志 —— 始终在 stderr 上,绝不在 stdout 上

日期

每个日期参数都接受 YYYY-MM-DD、today、yesterday 或 NdaysAgo。响应会回显它们实际使用的绝对范围,因为如果模型猜错了今天的日期,会产生一个空结果,读起来就像 "流量降到了零"。

Search Console 有 2–3 天的延迟,并保留约 16 个月的数据;超出这些范围的范围会被标记或拒绝,而不是静默返回空结果。GA4 以属性自身的时区报告,因此其日期与 Search Console 的日期不完全对齐 —— 响应会在重要之处说明这一点。

写入操作

两个工具会对你机器之外的世界产生影响。两者都故意设计得比较麻烦。

gsc_submit_sitemap

需要写入范围(默认不授予)和 confirm=true。没有 confirm 就是干运行。

indexnow_submit

验证你的密钥文件,然后返回一个 submission_token,该令牌通过哈希绑定到确切的 URL 列表。提交需要 confirm=true 和该令牌。

[!IMPORTANT] 单独的 confirm 标志不是安全机制 —— 它是模型填写的参数,而同样的误读导致错误的 URL 时,也会在旁边产生 confirm=true。

没有干运行就无法伪造令牌,而且更改一个 URL 就会导致不匹配。两个工具还带有 destructiveHint 注解,因此如果客户端将破坏性工具置于自己的批准提示之后,它会这样做。

默认是只读范围。一个陌生人安装一个 SEO 工具,立即要求修改其 Search Console 属性的权限,会合理地拒绝。

配置文件

一台机器上有多个 Google 账户 —— 适用于同时持有客户属性的代理机构。

uvx seo-analytics-mcp auth --profile client-a --client-secret ./client-a.json
uvx seo-analytics-mcp auth --profile client-b --client-secret ./client-b.json
uvx seo-analytics-mcp profiles list

为每个 MCP 服务器条目设置 SEO_MCP_PROFILE。缓存键包含配置文件,因此两个账户永远不会互相提供数据。

一个配置文件就是一个目录 —— 你首先会要求用户删除的东西:

uvx seo-analytics-mcp profiles rm client-a --yes

它们位于 ~/Library/Application Support/seo-mcp/(macOS)、$XDG_CONFIG_HOME/seo-mcp/(Linux)或 %APPDATA%\seo-mcp\(Windows)。

设计

四层,严格向下。如果搞错了,认证流程就会进入工具调用内部,而这正是整个设计要防止的失败。

flowchart TD
    subgraph L4["Entry points"]
        S[server.py<br/><i>MCPServer, stdio</i>]
        C[cli.py<br/><i>auth · doctor · profiles · serve</i>]
    end
    subgraph L3["Tools — argument surface, docstrings, cache policy"]
        T[13 handlers<br/><i>no HTTP, no credentials, no row shaping</i>]
    end
    subgraph L2["Clients — the only modules that speak HTTP"]
        G[gsc.py]
        A[ga4.py]
        I[indexnow.py]
    end
    subgraph L1["Leaves — importable by anyone, import nobody"]
        LV[shaping · errors · config · cache · auth/store · auth/scopes]
    end
    F[auth/flow.py<br/><i>loopback + PKCE · opens a browser</i>]

    S --> T
    C --> T
    C -.->|only reachable from here| F
    T --> G & A & I
    G & A & I --> LV

浏览器流程绝不能运行在工具调用内部。 一个在 stdio 上阻塞等待人类完成同意屏幕的 MCP 工具看起来像挂起的服务器,而模型无法提供帮助。一条 CLI 命令,运行一次,就是全部区别 —— 并且一个测试会遍历每个模块的 AST 来强制执行这一点。

测试还机械地执行其他规则:shaping.py 不导入任何 Google 库(这就是为什么行逻辑可以在没有凭据的情况下完全单元测试),工具不导入任何 HTTP 库,服务器路径上的任何东西都不调用 print() —— 在 stdio 传输上,stdout 承载 JSON-RPC,一个多余的 print 就会破坏流。

故障排除

症状

原因

运行一周后停止工作

OAuth 应用仍处于 测试 状态 — 见上文

client type: FAIL … this is a Web client

请改用 桌面应用 OAuth 客户端

no access to sc-domain:…

Google 账号错误,或该资源未获得授权

…API is not enabled

在签发 OAuth 客户端的项目中启用它,然后等待一分钟

GA4 返回 400

维度/指标组合不兼容 — 并非每个 GA4 维度都能与每个指标搭配使用

服务器从未出现在客户端中

先运行 doctor,然后检查客户端的 MCP 日志

每份问题报告都应包含 seo-mcp doctor --json。 它不包含任何凭据 — 只有路径、版本、哪些检查通过以及哪些 API 有响应。

开发

uv sync --extra dev
uv run pytest -q                    # 147 tests · no credentials · no network
uv run python scripts/smoke.py      # drives the server over real stdio JSON-RPC
uv run ruff check src tests
python3 -m venv .venv && ./.venv/bin/pip install -e ".[dev]"
./.venv/bin/python -m pytest -q
./.venv/bin/python scripts/smoke.py ./.venv/bin/seo-mcp

scripts/smoke.py 以子进程方式启动服务器,完成 MCP 握手,列出工具并调用其中几个 — 使用一次性配置文件目录,因此您的真实令牌不会受到影响。这是在创建任何 Google 凭据之前确认协议端正常工作的最快方式。

若要手动调试,MCP Inspector 只需要 Node 即可:

npx @modelcontextprotocol/inspector ./.venv/bin/seo-mcp            # web UI
npx @modelcontextprotocol/inspector --cli ./.venv/bin/seo-mcp \
    --method tools/call --tool-name auth_status                    # scriptable

自动化测试未覆盖的内容: OAuth 流程本身和真实的 IndexNow 提交。两者都需要人工操作和真实域名,而模拟它们只会测试模拟本身。它们属于一份简短的手动发布检查清单。

它不会做的两件事

[!NOTE] IndexNow 不会触达 Google。 参与者包括 Bing、Yandex、Naver、Seznam.cz、Yep 和 Amazon — 一个端点会向所有这些平台传播。Google 不参与其中,而且 Google 自己的 Indexing API 只接受带有 JobPosting 或 BroadcastEvent 结构化数据的页面。如果您安装此工具是期望 Google 索引更快,那您会失望的。

[!NOTE] 查询行永远不会合计为总数。 Google 会对罕见查询进行匿名化处理,因此任何按 query 维度进行的细分都会少计。每个包含该维度的响应都会重复这一警告,因为如果没有这一警告,模型拿到这些行后会自信地计算出错误的百分比。

贡献

欢迎提交 Issue 和 Pull Request。无凭据测试套件会在每次推送时在 Linux、macOS 和 Windows 上的 Python 3.10 和 3.13 中运行 — 如果本地通过,CI 中也会通过。

重命名工具或更改参数会破坏用户保存的所有提示词。这些更改会记录在 CHANGELOG.md 中,并且在 1.0 之前是次要版本升级,之后是主要版本升级。

许可证

MIT。

Available Tools

13 tools
auth_statusA
Read-only

Report which profile is active, which scopes its token holds, and which Google APIs actually answer. Call this first whenever another tool returns a permission error: the response names the exact command the user should run in their terminal.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds useful behavioral context beyond annotations: the tool proactively names a command for the user to run, and it should be invoked as a first-line diagnostic after permission failures.

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

Conciseness5/5

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

Two crisp sentences, front-loading the tool's outputs and then giving a concrete usage directive. Every word serves a purpose; no redundancy or filler.

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

Completeness5/5

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

The tool is simple, has no parameters, has an output schema, and is well-annotated. The description covers what it reports, when to call it, and what value the response provides, leaving no practical gap for an agent deciding to invoke it.

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

Parameters4/5

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

The tool has zero parameters and 100% schema coverage, so parameter documentation is irrelevant. Per the rubric, a zero-parameter tool gets a baseline of 4; the description correctly implies no inputs are needed.

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

Purpose5/5

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

The description uses a specific verb ('Report') and identifies the exact diagnostic resource: active profile, token scopes, and reachable Google APIs. This clearly differentiates it from the reporting and analytics sibling tools, which focus on data, not authentication state.

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

Usage Guidelines5/5

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

It explicitly instructs the agent to call this tool first after a permission error and notes that the response names the exact terminal command. This provides an unambiguous trigger condition and practical guidance, which is more than enough for a zero-parameter diagnostic tool.

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

ga4_landing_pagesA
Read-only

Sessions, engagement rate, conversions and revenue by landing page - the preset that joins to Search Console. Every row gains a normalised 'path' key ('/pricing', no host, no trailing slash, no query string) which is directly comparable to the 'path' key added by gsc_search_analytics rows grouped by page.

NameRequiredDescriptionDefault
top_nNo
end_dateNoyesterday
start_dateNo28daysAgo
property_idNo
path_containsNo

Output Schema

NameRequiredDescription
rowsYes
notesYes
exportNo
summaryYes
export_rowsNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already mark the tool read-only, so the description correctly focuses on added behavioral detail: the join to Search Console and the path normalization rules (no host, no trailing slash, no query string). This goes beyond what the schema or annotations provide, though it does not discuss sampling or property selection.

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

Conciseness5/5

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

Two dense, efficient sentences with no redundancy. The metric set and identity come first, and the path-normalization behavior earns its place as the key differentiator.

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

Completeness3/5

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

With an output schema and read-only annotations, the description covers core identity and join behavior well. However, with five undocumented optional parameters, the agent is left guessing about filtering, date handling, and property selection, and the description does not guide away from siblings like ga4_run_report.

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

Parameters1/5

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

Schema description coverage is 0% and all five parameters are undocumented. The description only mentions the output path key and never explains top_n, start_date, end_date, property_id, or path_contains, so it fails to add meaning beyond the schema.

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

Purpose5/5

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

The description names a concrete report — sessions, engagement rate, conversions, and revenue by landing page — and identifies it as the preset that joins to Search Console. It also distinguishes itself from gsc_search_analytics by explaining the shared normalized path key.

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

Usage Guidelines4/5

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

The description clearly implies this tool is for GA4 data joined with Search Console and that its path key is directly comparable to gsc_search_analytics rows. It stops short of explicitly naming sibling alternatives or saying when not to use it, but the join context is strong guidance.

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

ga4_list_propertiesA
Read-only

List the GA4 accounts and properties this Google account can read, so a property name can be resolved to the numeric ID every other GA4 tool needs. Universal Analytics properties are not returned - they no longer exist in this API.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
rowsYes
notesYes
exportNo
summaryYes
export_rowsNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds useful behavioral context: results are limited to what the Google account can read, and Universal Analytics properties will not appear because they are absent from the API.

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

Conciseness5/5

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

Two tightly written sentences. The first states purpose and value; the second removes a common misunderstanding. No filler or repetition.

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

Completeness5/5

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

Complete for a parameterless list tool: it explains what is returned, the authorization scope, the ID-resolution purpose, and the exclusion of Universal Analytics. The existing output schema covers return structure.

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

Parameters4/5

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

The tool has zero parameters and schema coverage is 100% by default, so the description need not explain parameters. Baseline 4 applies for parameterless tools.

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

Purpose5/5

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

States a specific verb ('List') and resource ('GA4 accounts and properties'), and clarifies the purpose: resolving a property name to the numeric ID required by other GA4 tools. It also distinguishes itself from GA4 reporting tools and from Universal Analytics, which is explicitly excluded.

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

Usage Guidelines4/5

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

Clear context: use this when you need to discover readable GA4 properties and map names to IDs. It does not explicitly name alternative tools or say when not to use it, but the purpose and scope strongly imply the correct usage.

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

ga4_run_reportA
Read-only

Run an arbitrary GA4 report (the runReport method).

metrics and dimensions are GA4 API names, not UI labels: 'sessions', 'activeUsers', 'screenPageViews', 'conversions', 'totalRevenue'; 'landingPage', 'pagePath', 'sessionDefaultChannelGroup', 'country', 'date'. Not every dimension is compatible with every metric - a 400 error means the pair is not queryable together, not that the names are wrong. dimension_filter and order_by take GA4 FilterExpression and OrderBy objects as plain dicts. Dates accept YYYY-MM-DD, 'today', 'yesterday' or 'NdaysAgo'. GA4 reports in the property's own timezone, so its dates do not line up exactly with Search Console's.

NameRequiredDescriptionDefault
limitNo
metricsYes
end_dateNoyesterday
order_byNo
dimensionsNo
start_dateNo28daysAgo
property_idNo
dimension_filterNo

Output Schema

NameRequiredDescription
rowsYes
notesYes
exportNo
summaryYes
export_rowsNo

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint and openWorldHint annotations, the description adds valuable non-obvious behavioral context: 400 errors mean incompatible metric/dimension pairs, dimension_filter and order_by require GA4 object dicts, and reports are generated in the property's timezone. This is precisely the kind of information an agent needs to interpret results correctly.

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

Conciseness5/5

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

Six sentences each carry distinct, necessary information: purpose, API-name caveat, compatibility error semantics, object formats, date formats, and timezone behavior. The description is front-loaded with the purpose and contains no repetition or filler.

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

Completeness4/5

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

The description covers the main non-obvious failure modes and formatting requirements, and the output schema means return values need no explanation. It could be more complete by addressing pagination and property_id selection, but these are minor given the schema defaults and the presence of an output schema.

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

Parameters4/5

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

With zero schema description coverage, the description compensates well by explaining GA4 API-name conventions, listing valid metric and dimension examples, specifying date formats, and clarifying filter/order_by object formats. It does not mention the limit or property_id parameters, but those are either self-evident or have schema defaults, so the compensation is strong but not complete.

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

Purpose5/5

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

The opening sentence uses a specific verb ('Run') and resource ('GA4 report'), explicitly names the underlying runReport method, and the word 'arbitrary' distinguishes it from more targeted sibling tools like ga4_landing_pages. An agent can immediately tell what this tool does and roughly how it differs from specialized report tools.

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

Usage Guidelines4/5

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

The description clearly frames this as the general-purpose/custom GA4 reporting tool, and the timezone note contrasts it with Search Console tools. It does not explicitly name sibling alternatives or provide a 'when not to use' statement, so it stops short of full routing guidance.

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

gsc_compare_periodsA
Read-only

Compare two consecutive Search Console periods and return the biggest movers in both directions - the 'what changed' question in one call.

period_days is the length of each window; the current window ends offset_days before the freshest available data, and the comparison window is the period_days immediately before it. metric is clicks, impressions, ctr or position. For position, a DECREASE is an improvement, and the response says so. dimension is usually page or query; query rows are anonymised by Google and will not sum to totals.

NameRequiredDescriptionDefault
top_nNo
metricNoclicks
site_urlNo
dimensionNopage
offset_daysNo
period_daysNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint and openWorldHint annotations, the description discloses concrete behavioral details: window anchoring via offset_days, the direction caveat for position, and the fact that query rows are anonymized and will not sum to totals. This materially helps the agent interpret results correctly.

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

Conciseness5/5

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

Three focused sentences convey purpose, window mechanics, and the key metric/dimension caveats without repetition or filler. The most important behavioral details are front-loaded.

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

Completeness5/5

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

Given the annotations, existing output schema, and the description's coverage of window semantics and special cases, an agent has enough information to select and invoke the tool correctly. The remaining implicit parameters are minor and inferable.

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

Parameters4/5

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

With 0% schema coverage, the description compensates well by explaining period_days, offset_days, metric values, and dimension caveats. top_n and site_url are left implicit, but their titles and defaults make them reasonably self-explanatory.

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

Purpose5/5

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

The description states a specific verb and resource: compare two consecutive Search Console periods and return the biggest movers in both directions. The 'what changed' framing clearly distinguishes it from siblings like gsc_search_analytics, which does not compare periods.

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

Usage Guidelines4/5

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

The description explicitly frames this tool as answering the 'what changed' question, giving a clear use case. It does not name specific alternatives or exclusions, but the intended context is clear relative to the sibling tools.

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

gsc_inspect_urlA
Read-only

Inspect one URL's index status in Google: coverage verdict, last crawl time, Google's chosen canonical versus the declared one, robots.txt state, mobile usability and rich-result verdicts. inspection_url must be a full URL that belongs to site_url. This is the tightest Google quota in the set (2,000 calls per day per property), so results are cached for an hour.

NameRequiredDescriptionDefault
site_urlNo
inspection_urlYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnlyHint and openWorldHint annotations, the description discloses quota limits (2,000 calls/day/property), caching behavior (1 hour), and input validation constraints. This is meaningful behavioral context that materially affects when and how an agent should call the tool.

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

Conciseness5/5

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

Two compact sentences front-load the tool's purpose and output, then provide constraints and quota/caching context. No filler or redundant restating of schema fields.

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

Completeness4/5

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

The description is largely complete given the output schema and annotations: it covers input constraints, expected output categories, rate limits, and caching. The main small gap is the undocumented site_url parameter, which prevents a perfect score.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It explains that inspection_url must be a full URL belonging to site_url, but it leaves site_url's format, meaning, and optional/default behavior ambiguous. Partial compensation, with a clear gap on the site_url parameter.

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

Purpose5/5

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

The description states a specific verb and resource ('Inspect one URL's index status in Google') and enumerates the exact verdicts returned. This clearly distinguishes it from aggregate tools like gsc_search_analytics or sitemap tools.

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

Usage Guidelines4/5

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

The description provides clear usage context by warning that this tool has the tightest quota in the set and that results are cached, signaling it should be used judiciously. It does not explicitly name alternatives or state when not to use it, but context is sufficient.

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

gsc_list_sitemapsA
Read-only

List the sitemaps submitted for a property, with when each was last downloaded by Google and how many warnings and errors it carries. A sitemap Google has never downloaded, or one with errors, is usually the answer to 'why isn't this indexed'.

NameRequiredDescriptionDefault
site_urlNo

Output Schema

NameRequiredDescription
rowsYes
notesYes
exportNo
summaryYes
export_rowsNo

TDQS

A4/5.0
Behavior4/5

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

The readOnlyHint annotation already establishes this is a safe read operation. The description adds behavioral detail beyond that by revealing that the tool surfaces undownloaded sitemaps and reports warning/error counts, which helps the agent interpret the results. 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.

Conciseness5/5

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

Two sentences, each earning its place. The first identifies the tool's core action and result fields; the second adds practical diagnostic value. Information is front-loaded and there is no wasted text.

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

Completeness3/5

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

The tool is simple and the output schema exists, so return-value documentation is not the description's burden. However, the one input parameter is undocumented in both the schema and the description, leaving an agent unsure how to specify the property. This is a clear completeness gap for a tool with a single important argument.

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

Parameters2/5

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

The schema has one parameter, site_url, with no description and 0% schema description coverage. The description only says 'for a property' and never explains that site_url is the property identifier, what format it should take, or whether it is required. The description fails to compensate for the schema's complete lack of parameter documentation.

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

Purpose5/5

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

The description names a specific verb and resource: 'List the sitemaps submitted for a property.' It further specifies the output content (last downloaded date, warnings, errors), which makes the tool's purpose unambiguous and distinguishes it from siblings like gsc_list_sites or gsc_submit_sitemap.

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

Usage Guidelines4/5

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

The description provides clear diagnostic context: a sitemap never downloaded by Google or one with errors is likely the answer to 'why isn't this indexed.' This tells the agent when the tool is useful, though it does not explicitly name alternatives 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.

gsc_list_sitesA
Read-only

List the Search Console properties this Google account can read, with the permission level held on each. Call this first in any session: the exact string returned here is what every other Search Console tool needs as site_url. Domain properties look like 'sc-domain:example.com'; URL-prefix properties are full URLs with a trailing slash.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
rowsYes
notesYes
exportNo
summaryYes
export_rowsNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and openWorldHint=true. The description adds useful behavioral context beyond annotations: it lists the permission-level-inclusive return, the need to pass the returned string to sibling tools, and the distinct string formats for domain versus URL-prefix properties.

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

Conciseness5/5

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

The description is three purposeful sentences with no filler. It front-loads the core action, then the critical 'call this first' guidance, then the property format details. Every sentence contributes directly to correct invocation and downstream use.

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

Completeness5/5

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

Given the tool has no parameters, a read-only annotation, and an output schema, the description is complete. It covers what the tool does, why it must be called first, how its output feeds other tools, and how to recognize the two property types.

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

Parameters4/5

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

The tool has zero parameters, so the schema makes parameter semantics moot. The description still adds relevant semantic detail about what will be returned and how those return values will be used as site_url parameters elsewhere, which compensates well for the empty schema.

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

Purpose5/5

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

The description names a specific verb and resource: 'List the Search Console properties this Google account can read, with the permission level held on each.' It clearly differentiates this tool from siblings like gsc_list_sitemaps and gsc_search_analytics by focusing on property enumeration and access level.

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

Usage Guidelines5/5

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

The description explicitly instructs agents to 'Call this first in any session' and explains that the exact string returned is required by every other Search Console tool as site_url. This is strong, practical guidance on when and why to use the tool before alternatives.

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

gsc_search_analyticsA
Read-only

Query Search Console performance data: clicks, impressions, CTR, position.

Dates are YYYY-MM-DD, or 'today' / 'yesterday' / 'NdaysAgo'; the absolute range actually used is echoed in summary.date_range. dimensions may include query, page, country, device, date (default ["query"]). filters are "dimension operator value", e.g. "page contains /blog/". search_type is web, image, video, news or discover. data_state "final" excludes the most recent 2-3 incomplete days; "all" is fresher but unstable. Rows carrying the 'query' dimension are anonymised by Google and will NOT sum to property totals - never compute shares or percentages from them.

NameRequiredDescriptionDefault
filtersNo
end_dateNoyesterday
site_urlNo
row_limitNo
data_stateNofinal
dimensionsNo
start_dateNo28daysAgo
search_typeNoweb

Output Schema

NameRequiredDescription
rowsYes
notesYes
exportNo
summaryYes
export_rowsNo

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses important behavioral details: date range echoing in summary.date_range, data_state 'all' being fresher but unstable, and the critical anonymization caveat that query-dimension rows do not sum to property totals. This last warning prevents a real misuse of the data and adds significant value 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.

Conciseness5/5

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

The description is dense but every sentence contributes: metrics, date handling, dimensions, filters, search_type, data_state, and the aggregation caveat. It is front-loaded with the core purpose and avoids filler or repetition.

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

Completeness5/5

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

Given the tool's 8 optional parameters and existing output schema, the description covers all critical usage aspects: date formats, dimension values, filter syntax, search_type options, data freshness semantics, and a non-obvious data-caveat. The only lightly covered parameters are row_limit and site_url, but they are self-evident or covered by sibling tools like gsc_list_sites.

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

Parameters5/5

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

With 0% schema description coverage, the description carries the full explanatory burden and succeeds. It explains date formats, default dimensions, filter syntax with an example, valid search_type values, and the meaning of data_state values. These semantics go far beyond the bare property titles in the schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Query Search Console performance data: clicks, impressions, CTR, position.' It clearly identifies what the tool returns and the metrics involved, making it easy to distinguish from siblings like gsc_list_sites or gsc_inspect_url. The mention of dimensions and search types further sharpens the tool's identity.

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

Usage Guidelines4/5

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

The description clearly establishes the context for using this tool: querying Search Console performance data with configurable dates, dimensions, filters, search types, and data states. It does not explicitly name alternatives or state when not to use it, but the intended use is unambiguous given the detailed parameter guidance.

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

gsc_submit_sitemapA
Destructive

Submit or re-ping a sitemap to Search Console. THIS WRITES TO THE USER'S LIVE PROPERTY. It needs the write scope, which is not granted by default, and it is a dry run unless confirm=true. Show the dry run to the user and get their explicit agreement before calling it again with confirm=true. feedpath must be the full sitemap URL, e.g. https://example.com/sitemap.xml.

NameRequiredDescriptionDefault
confirmNo
feedpathYes
site_urlNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

The description goes well beyond the annotations by disclosing that it writes to the user's live property, requires a non-default write scope, performs a dry run unless confirm=true, and must be preceded by user agreement. These are critical behavioral details that annotations alone do not provide.

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

Conciseness5/5

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

Every sentence earns its place: the action, the live-write warning, the scope prerequisite, the dry-run confirmation flow, and the feedpath format requirement. The most important warning is front-loaded in all caps, and there is no filler.

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

Completeness4/5

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

The description covers the destructive nature, auth requirement, dry-run behavior, confirmation process, and feedpath format, which is strong for a write operation. It only omits guidance on the optional site_url parameter, but the output schema likely clarifies return shape and the tool remains safely usable without that detail.

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

Parameters3/5

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

With 0% schema description coverage, the description adds meaning for feedpath by requiring it to be the full sitemap URL, and it clarifies confirm's role in gating the real write. However, site_url is not explained, leaving one parameter undocumented.

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

Purpose4/5

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

The description clearly states the verb and resource: submit or re-ping a sitemap to Search Console. It does not explicitly contrast with sibling tools like gsc_list_sitemaps, but the action and target are unambiguous.

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

Usage Guidelines4/5

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

The description gives clear context and a concrete usage workflow: run as a dry run first, show the user, then call again with confirm=true after explicit agreement. It also warns that the write scope is not granted by default, though it does not list alternatives or when-not-to-use conditions.

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

indexnow_submitA
Destructive

Submit URLs to IndexNow so participating search engines recrawl them. THIS ACTS ON THE LIVE WEB and cannot be undone.

Called without confirm it is a DRY RUN: it validates the key file and the URL list and returns a submission_token. Show that dry run to the user, then call again with confirm=true AND the exact submission_token you were given. The token is bound to that precise URL list, so if the list changes you must dry-run again.

IndexNow notifies Bing, Yandex, Naver, Seznam.cz, Yep and Amazon. Google does NOT participate - this will not speed up Google indexing. Per-endpoint HTTP status is returned verbatim, because 200, 202, 400, 403, 422 and 429 all mean different things.

NameRequiredDescriptionDefault
hostNo
urlsYes
confirmNo
endpointNohttps://api.indexnow.org/indexnow
submission_tokenNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses critical behavior beyond annotations: it 'ACTS ON THE LIVE WEB and cannot be undone,' the token is bound to a precise URL list, and per-endpoint HTTP statuses are returned verbatim because different statuses have different meanings. This complements the destructiveHint annotation rather than contradicting it.

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

Conciseness5/5

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

Every sentence earns its place: live-web danger, dry-run flow, token binding, engine coverage, and status-code semantics. The most important operational constraint is front-loaded.

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

Completeness4/5

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

Given the complexity and the presence of an output schema, the description covers the main invocation path well. The only notable gap is the lack of guidance for host and endpoint, but these have defaults and are not required, so the overall definition is still highly usable.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It explains confirm, submission_token, and urls through the dry-run/confirmed workflow, but host and endpoint are left undocumented in both schema and description. This is partial compensation for a five-parameter tool.

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

Purpose5/5

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

The description states a specific verb and resource: 'Submit URLs to IndexNow so participating search engines recrawl them.' It also distinguishes this from siblings like indexnow_verify_key by describing the actual submission action and live-web effect.

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

Usage Guidelines5/5

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

It gives explicit workflow instructions: call without confirm for a dry run, show the dry run to the user, then call with confirm=true and the exact submission_token. It also warns that Google does not participate, clarifying when this tool will not help.

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

indexnow_verify_keyA
Read-only

Check that this host's IndexNow key file is correctly published: reachable, HTTP 200, served as text, and containing exactly the configured key. Every submission runs this check itself and aborts if it fails, so use this tool to diagnose a rejected submission. The key is read from configuration, never passed in.

NameRequiredDescriptionDefault
hostNo
key_locationNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, and the description adds useful non-obvious behavior: the key comes from configuration, is never passed in, and the tool verifies several specific HTTP/content conditions. It does not overstate behavior or 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.

Conciseness5/5

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

Three tightly packed sentences with no filler. The purpose is front-loaded, followed by usage guidance and a valuable parameter-related clarification.

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

Completeness3/5

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

For a two-parameter read-only diagnostic tool with an output schema, the description covers purpose, behavior, and usage context well. However, the semantics of host and key_location remain undocumented, which leaves ambiguity for an agent deciding whether to pass them.

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

Parameters2/5

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. The only useful clue is that the key is read from configuration, but the two parameters host and key_location are never explained, including whether they override the configured defaults or how they interact with each other.

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

Purpose5/5

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

States a specific verb ('Check') and resource ('this host's IndexNow key file'), plus concrete success criteria (reachable, HTTP 200, served as text, exactly configured key). This clearly differentiates it from the submission-oriented sibling indexnow_submit.

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

Usage Guidelines4/5

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

Explicitly says to use this tool to diagnose a rejected submission and notes that submissions already run this check and abort on failure. It gives clear context but does not name an alternative tool 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.

page_reportA
Read-only

Everything known about one page in a single call: its Search Console clicks and impressions trend, its top queries, its GA4 engagement, and its current index status. Use this for 'how is /pricing doing?'.

GA4 and index status are included on a best-effort basis - if GA4 is not authorised or the property is unknown, the Search Console half is still returned, with a note saying what was left out.

NameRequiredDescriptionDefault
urlYes
daysNo
site_urlNo
property_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and openWorldHint=true, and the description adds valuable behavioral detail beyond that: GA4 and index status are best-effort, and if GA4 is unauthorized or the property is unknown, the Search Console half is still returned with a note. This partial-failure behavior is not present in 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.

Conciseness5/5

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

The description is compact and front-loaded: the first sentence summarizes what the tool returns, the second gives a concrete use case, and the second paragraph explains the only important caveat. Every sentence earns its place.

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

Completeness3/5

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

An output schema exists, so return values are covered, and the description explains fallback behavior. However, with four parameters and zero schema descriptions, the lack of any parameter semantics is a clear gap: an agent cannot confidently know why site_url and property_id are needed or how days affects the report.

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

Parameters1/5

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, but it does not define any of the parameters: url, days, site_url, or property_id. The only indirect clue is 'one page,' which does not meaningfully explain the required url param or the optional disambiguation params.

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

Purpose5/5

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

The description states exactly what the tool does: aggregates Search Console clicks/impressions trend, top queries, GA4 engagement, and index status into one call. It also gives a concrete trigger example ('how is /pricing doing?'), which clearly distinguishes it from narrower siblings like gsc_search_analytics 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.

Usage Guidelines4/5

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

The description explicitly says when to use this tool ('Use this for...'), providing clear context. However, it does not explicitly say when not to use it or name alternative sibling tools, leaving some routing decisions to inference.

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

Tool Schema Changelog

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

  1. 13 tool updatesv0.1.0
    • First observedauth_status
    • First observedga4_landing_pages
    • First observedga4_list_properties
    • First observedga4_run_report
    • First observedgsc_compare_periods
    • First observedgsc_inspect_url
    • First observedgsc_list_sitemaps
    • First observedgsc_list_sites
    • First observedgsc_search_analytics
    • First observedgsc_submit_sitemap
    • First observedindexnow_submit
    • First observedindexnow_verify_key
    • First observedpage_report

TDQS

A4.2/5.0

Scored across 13 tools

Disambiguation4/5

Most tools target a distinct API and resource, but a few reporting tools overlap: page_report and gsc_inspect_url both report index status, and gsc_search_analytics/gsc_compare_periods both query performance. Descriptions are detailed enough to usually disambiguate, but an agent could still misselect on a quick read.

Naming Consistency4/5

The dominant pattern is prefix_verb_noun (gsc_list_sites, ga4_run_report, indexnow_verify_key), but some tools deviate: page_report, auth_status, ga4_landing_pages, and indexnow_submit. The naming is consistent enough to be predictable, though not fully uniform.

Tool Count5/5

13 tools is well within the sweet spot for a multi-API SEO server. Each tool covers a distinct operation or preset, and none feels redundant or gratuitous given the GSC, GA4, and IndexNow surface.

Completeness4/5

The surface covers GSC property discovery, performance queries, URL inspection, sitemap submission, GA4 reporting, and IndexNow submission. Minor gaps exist—notably no sitemap deletion and no GA4 metadata discovery—but core SEO workflows are fully usable.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables querying Google Search Console and Google Analytics 4 through natural language, with tools for SEO analysis like anomaly detection, cannibalization detection, and opportunity scoring.
    10 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables querying Google Search Console data, including search analytics with advanced filtering, quick wins detection, and rich dimensions, through natural language.
    9,829 npm
    MIT