mcpField
S
seo-monster

seo-monster

本地服务
avansaber.com商业与营销5568 周前更新

关于 seo-monster

SEOMonster 是本地优先的 SEO MCP 服务,面向希望在 AI 助手内完成 SEO 分析的用户。它基于用户自有的 Search Console、GA4 与 PageSpeed 数据运行,凭据由用户自行提供。

主要功能

  1. 0170 个工具,覆盖多个 SEO 数据源
  2. 02统一的 JSON 结果结构
  3. 03Search Console 查询机会与内容缺口分析
  4. 04AI 引用份额追踪
  5. 05Cloudflare 与 IndexNow 写入工具受开关控制

适用场景

  1. 01从 Search Console 数据中找出可优化的近排名主题
  2. 02发布前检查技术 SEO 与结构化数据
  3. 03追踪品牌在 AI 回答引擎中的提及情况

MCP 相关

SEOMonster 是 stdio 方式的 MCP 服务,由 Claude、Cursor、Cline 或 Codex 等客户端启动,向客户端暴露 70 个工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"avansaber-seo-monster": {
"command": "uvx",
"args": [
"seo-monster"
],
"env": {
"SEO_MCP_GOOGLE_OAUTH_CLIENT": "<SEO_MCP_GOOGLE_OAUTH_CLIENT>",
"SEO_MCP_GOOGLE_TOKEN": "<SEO_MCP_GOOGLE_TOKEN>",
"SEO_MCP_GSC_DEFAULT_SITE": "<SEO_MCP_GSC_DEFAULT_SITE>",
"SEO_MCP_GA4_PROPERTY_ID": "<SEO_MCP_GA4_PROPERTY_ID>",
"PSI_API_KEY": "<PSI_API_KEY>",
"CF_API_TOKEN": "<CF_API_TOKEN>",
"CF_ZONE": "<CF_ZONE>",
"SEO_MCP_INDEXNOW_KEY": "<SEO_MCP_INDEXNOW_KEY>",
"SEO_MCP_INDEXNOW_KEY_LOCATION": "<SEO_MCP_INDEXNOW_KEY_LOCATION>",
"SEO_MCP_ALLOW_DESTRUCTIVE": "<SEO_MCP_ALLOW_DESTRUCTIVE>",
"DATAFORSEO_LOGIN": "<DATAFORSEO_LOGIN>",
"DATAFORSEO_PASSWORD": "<DATAFORSEO_PASSWORD>",
"OPENPAGERANK_API_KEY": "<OPENPAGERANK_API_KEY>",
"PERPLEXITY_API_KEY": "<PERPLEXITY_API_KEY>",
"OPENAI_API_KEY": "<OPENAI_API_KEY>",
"ANTHROPIC_API_KEY": "<ANTHROPIC_API_KEY>",
"GEMINI_API_KEY": "<GEMINI_API_KEY>",
"GOOGLE_ADS_DEVELOPER_TOKEN": "<GOOGLE_ADS_DEVELOPER_TOKEN>",
"GOOGLE_ADS_CUSTOMER_ID": "<GOOGLE_ADS_CUSTOMER_ID>"
}
}
}
}
启动命令uvx seo-monster
需要配置的环境变量
SEO_MCP_GOOGLE_OAUTH_CLIENT密钥Path to your Desktop-app OAuth client-secrets JSON, downloaded from Google Cloud Console. Required for Search Console, Indexing, and GA4 tools.
SEO_MCP_GOOGLE_TOKEN密钥Writable path where the cached OAuth token is stored. On first use, a browser opens for one-time consent and the token is written here. Default: ${HOME}/.config/seo-monster/token.json
SEO_MCP_GSC_DEFAULT_SITEDefault Search Console property, e.g. 'sc-domain:example.com' or 'https://www.example.com/'.
SEO_MCP_GA4_PROPERTY_IDDefault GA4 property, e.g. 'properties/123456789' or bare '123456789'.
PSI_API_KEY密钥Google API key shared by PageSpeed Insights and Chrome UX Report History tools. Optional; both work anonymously at a tighter rate limit when unset.
CF_API_TOKEN密钥Cloudflare API token. Optional; needed only for the Cloudflare tools. Scopes: Zone:Read, DNS:Read, Account Analytics:Read, and (only when destructive mode is on) Cache Purge:Purge, Single Redirect:Edit, Zone Settings:Edit, and (for bulk redirects) Account Rulesets:Edit + Account Filter Lists:Edit.
CF_ZONEDefault Cloudflare zone hostname, e.g. 'example.com'.
SEO_MCP_INDEXNOW_KEY密钥IndexNow shared key (any 8-128 hex string you generate). Required only for the IndexNow tools. Host the key file at https://<your-host>/<key>.txt for engine verification.
SEO_MCP_INDEXNOW_KEY_LOCATION密钥Override the default IndexNow key-file URL (https://<host>/<key>.txt). Set only if you host the key file at a non-standard path.
SEO_MCP_ALLOW_DESTRUCTIVESet to 'true' to enable the Cloudflare cache-purge tools. Default false: all destructive tools refuse to run.
DATAFORSEO_LOGIN密钥DataForSEO Basic-auth login. Optional (v0.9). Unlocks SERP/PAA/related, keyword volume+difficulty+intent, competitor keyword-gap, and Google AI Overview citations for keyword_universe / serp_adjacency_expand / onpage_serp_gap auto-fetch / ai_citation_track.
DATAFORSEO_PASSWORD密钥DataForSEO Basic-auth password. Optional (v0.9). Required alongside DATAFORSEO_LOGIN.
OPENPAGERANK_API_KEY密钥Open PageRank (DomCop) free API key. Optional (v0.9). Free competitor domain-authority proxy for onpage_serp_gap.
PERPLEXITY_API_KEY密钥Perplexity Sonar API key. Optional (v0.9). One of the AI answer-engines for ai_citation_track.
OPENAI_API_KEY密钥OpenAI API key (Responses web_search). Optional (v0.9). One of the AI answer-engines for ai_citation_track.
ANTHROPIC_API_KEY密钥Anthropic API key (web_search tool). Optional (v0.9). One of the AI answer-engines for ai_citation_track.
GEMINI_API_KEY密钥Google Gemini API key (Search grounding). Optional (v0.9). One of the AI answer-engines for ai_citation_track.
GOOGLE_ADS_DEVELOPER_TOKEN密钥Google Ads API developer token. Optional (v0.9). Volume-only alternative to DataForSEO for keyword_universe; live use also needs an adwords-scope OAuth re-consent.
GOOGLE_ADS_CUSTOMER_IDGoogle Ads customer id (digits). Optional (v0.9). Required alongside GOOGLE_ADS_DEVELOPER_TOKEN.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiseo-monster0.9.3

工具

70

收录的工具列表 · 更新于 2 周前

参数类型必填说明
probeboolean否如果为 true,则对每个已配置的服务进行一次低成本实时调用,以确认凭据确实有效。默认值为 false。

详细介绍

SEOMonster
不用学习另一套 SEO 仪表板,直接提问即可。

开源 SEO 分析师,驻留在你已经在用的 AI 助手中——
在你的设备上,使用你自己的 Search Console、Analytics 和 PageSpeed 数据进行分析。

PyPI 版本 Python 版本 下载量 测试 许可证:MIT GitHub 星标

添加到 Cursor   在 VS Code 中安装   网站


你不需要打开新的工具,只需在Claude(或 Cursor / Cline / Codex)中用日常语言提问:

你   “我接下来应该写什么?”

🦖 SEOMonster   获取你的 Search Console 数据,找出三个你几乎已经获得排名、且确有需求的主题(排名第 8–20 位),并按机会大小排序。只要你开口,它就会起草内容简报。

你提问…………SEOMonster 会
“我接下来应该写什么?”从你自己的 Search Console 需求数据中找出即将获得排名的主题
“这个页面可以发布了吗?”在发布前运行技术 SEO 和结构化数据检查
“帮我将它编入索引。”通知 Google(Indexing API)以及 Bing / Yandex(IndexNow)
“我的改动真的提升排名了吗?”与匹配的对照组进行改动前后归因分析——提供置信区间,而非猜测
“ChatGPT 推荐的是我们,还是竞争对手?”追踪你的品牌在各 AI 答案引擎中的声量份额

70 种工具涵盖 Search Console、GA4、PageSpeed、Cloudflare、AI 引用追踪、关键词发现和技术 SEO——每种工具都返回相同的 JSON 结果封装,并由你自己的凭据驱动。无需学习新的仪表板;直接与已经在用的助手聊天即可。

说明

在 PyPI 上发布的包名为 seo-monster(因此命令是 uvx seo-monster)。导入包名为 seo_mcp;seo-mcp 是开发环境/本地别名。该包不包含任何密钥——所有凭据都在运行时从你自己的环境或配置文件中读取。

  • 你的数据,只在你的设备上。 由用户凭据驱动;不会向任何第三方发送数据。
  • 优先读取,默认安全。 读取操作始终可用;两种常规写入操作(提交站点地图、请求编入索引)默认开启;Cloudflare 写入工具(清除缓存、重定向、设置、托管的 robots.txt)受 SEO_MCP_ALLOW_DESTRUCTIVE 控制,其中风险较高的工具还需要在每次调用时提供 confirm 令牌。
  • 轻量。 使用标准库、mcp SDK 和 Google 客户端库;PageSpeed 和 Cloudflare 通过 urllib 运行,无需额外的 HTTP 依赖。

快速开始

提示

最快的方式:使用上方的一键安装按钮。也可以手动将其添加到任意 MCP 客户端:

{
  "mcpServers": {
    "seomonster": { "command": "uvx", "args": ["seo-monster"] }
  }
}

运行一次性 Google 登录 — uvx --from seo-monster seo-monster auth — 然后让你的助手调用 system_status,确认已连接的服务。各客户端的完整设置和凭据说明见安装和身份验证。

工作原理

flowchart LR
  U["You — plain English"] --> H["Claude · Cursor · Cline · Codex"]
  H -- "MCP · stdio" --> S["SEOMonster<br/>70 tools"]
  S --> GSC["Search Console · GA4"]
  S --> PSI["PageSpeed · CrUX"]
  S --> CF["Cloudflare · IndexNow"]
  S --> AI["AI engines · SERP<br/>(optional)"]
  S -. "your creds · your machine" .-> U

SEOMonster 是一个 stdio MCP 服务:你的 AI 宿主会启动它,它使用你的凭据调用 Google / Cloudflare / AI 引擎,并返回统一的 JSON 封装,供助手读取后以通俗易懂的语言告知你。

要求

对于 .mcpb bundle 方式(Claude Desktop):只需在 macOS 或 Windows 上安装 Claude Desktop。bundle 将 Python 3.11+ 声明为运行时;Claude Desktop 会为你准备好环境。无需预先安装 uv。

对于 uvx 方式(Cursor、Cline、Codex、高级 Claude Desktop 用户):需要 Python 3.11 或更新版本,以及 uv(它提供 uvx)。 使用 which uvx 查找 uvx 的绝对路径;图形界面宿主不会读取你的 shell 配置文件,因此 MCP 配置中需要填写完整路径。

工具

共 70 个工具,按服务分组。所有工具都返回相同的结果封装(见 结果封装)。不确定配置情况时,先调用 system_status。服务还提供十三个命名的工作流提示词。

跨服务

  • system_status - 显示已配置 / 可访问的服务、Google 身份验证方法和作用域、破坏性模式是否开启、完整工具目录,以及已注册提示词列表。
📂 浏览全部 70 个工具 — 按服务分组(GSC · GA4 · AI/GEO · 关键词发现 · 内容 · PageSpeed/CrUX · Cloudflare · IndexNow · 技术 · schema)。点击展开。

Google Search Console(18)

常用工具

  • gsc_list_properties - 凭据可查看的资源,包含权限级别和派生出的 writable 标志(siteOwner / siteFullUser 时为 true)。
  • gsc_search_analytics - 常用工具:按维度、日期范围、筛选条件和 data_state 查询点击次数 / 展示次数 / 点击率 / 排名。
  • gsc_top_queries / gsc_top_pages - 便于获取排名前 N 项的封装工具。
  • gsc_compare_periods - 对比当前时段与之前时段,并提供各项差异。 v0.2.0 新增了 sort_by、sort_dir、min_delta_clicks / _impressions / _position、anomalies_only + sigma_threshold,以及用于一次调用报告上升项 / 下降项 / 异常值的 top。
  • gsc_inspect_url - URL 检查(索引判定、覆盖范围、规范网址)。
  • gsc_batch_inspect_urls - 检查最多 25 个 URL,并收集各 URL 的失败信息。
  • gsc_list_sitemaps - 已注册的站点地图及其状态。
  • gsc_submit_sitemap - 提交站点地图(写入,不受限制;需要可写作用域)。接受 sitemap_url(便捷字段)或 feedpath(原始 API 字段)。
  • gsc_request_indexing - 通过 Indexing API 请求重新抓取(写入,不受限制)。接受单个 url 或多个 urls。 查询智能(v0.2.0)
  • gsc_query_opportunities - 已排名在前 N 位、但点击率低于目标的查询。可作为标题和元描述优化的候选项。
  • gsc_query_gaps - 有展示但几乎没有点击的查询。内容机会信号。
  • gsc_new_queries - 当前时间段出现、此前没有展示的查询。新兴主题。
  • gsc_top_pages_by_query - 针对特定查询排名的页面。用于蚕食审查的输入。

多属性 + 生命周期(v0.5.0)

  • gsc_portfolio_summary(days, include?, exclude?) - 多属性全局视图。提供最近 N 天每个属性的一行摘要(点击、展示、点击率、排名),以及整个组合的汇总数据。支持可选的 include / exclude 筛选条件。在代理机构或多品牌设置中,这是回答“整个组合表现如何?”最快的方式。
  • gsc_trending_pages(days, limit) - 与前 N 天相比,最近 N 天展示量增长最多的页面。对 gsc_compare_periods 的封装,参数为 dimensions=["page"], sort_by="delta_impressions", sort_dir="desc"。
  • gsc_decaying_pages(days, limit) - 同一封装,按升序排序。需要挽救的页面。
  • gsc_coverage_audit(urls, site_url?) - 启发式覆盖率审计。GSC 的索引覆盖率报告未通过 API 提供;此工具接收用户提供的 URL 列表(通常从站点地图中提取),批量检查每个 URL,然后汇总判定结果(PASS / PARTIAL / FAIL)和 coverage_state 的频次。 内容智能(4)
  • content_opportunities(site_url?, days?, count?, impressions_min?) - 基于你自己的 Search Console 数据,为内容主题排序:融合 CTR 与预期值之间的差距(根据你自己的各排名位置 CTR 自动校准曲线)、有望提升的排名位置、需求和趋势,计算出透明的机会评分;并标记关键词蚕食。如果已配置 GA4 媒体资源,还会根据每个主题的排名最高页面已带来的自然转化量进行加权(最高 +50%),因此能带来转化的主题排名更高;filters_applied.ga4_value_status 会报告是否已执行加权及原因(applied / no_ga4_property / ga4_unreachable / no_conversions)。优先挖掘你已有的需求;不进行从零开始的关键词研究,也不撰写内容。可与下方的内容工作流提示词搭配使用。(GA4 加权 v0.7.3)v0.9.0 为每个候选项新增一个附加的 winnability 区块(分档:有望提升的排名位置 + 主题相关度、GSC 个性化层级);现有字段保持不变。
  • content_brief_data(target_query, competitor_urls?, topic?, site_url?, days?) - 为内容简报提供数据支持:抓取竞争对手页面(或在无竞争对手页面时,回退到你自己的 GSC 排名页面),并返回标题集合、最低中位字数、Schema 类型和实体覆盖情况,以及 2026 年 GEO 写作指引和验证规则。宿主负责撰写文案;SEOMonster 提供规则和证据。为 content_brief 提示词提供支持。(v0.9.0)
  • topic_cluster_map(cluster_path | pillar_url, site_url?, days?, impressions_min?)
    • 根据你自己的 GSC 数据绘制内容主题集群图,并显示缺失的子主题。根据需求和最佳排名位置,将每个集群查询分类为 defend / optimize / create / monitor;create 象限即为缺失子主题列表。标记关键词蚕食。仅使用 GSC 数据;如实说明约 47% 的查询会被匿名化。(v0.9.0)
  • rank_change_attribution(url | urls, change_date, query?, site_url?, pre_days?, post_days?, gap_days?, control_scope?)
    • 通过与匹配的对照组进行双重差分,估算网站变更是否影响了页面点击量(绝不只做简单的前后对比)。返回估算的提升幅度及 95% 置信区间、三态判定(likely_positive / likely_negative / inconclusive),以及一个混杂因素区块,用于自动检测 2025 年 GSC 数据机制的中断(展示次数错误、num=100),并降低排名可靠性。此方法基于观察而非因果关系——服务器端拆分测试才是真正的因果测试。仅使用 GSC 数据。(v0.9.0) AI / GEO 引用(3,v0.9.0) - 查看 AI 答案是否会触达并引用你。
  • ai_citation_readiness(url) - 页面是否采用适合大模型答案引擎提取和引用的结构?首先检查渲染盲区(GPTBot / ClaudeBot / PerplexityBot 会抓取页面,但不会运行 JS,因此对它们来说,客户端渲染的 SPA 不可见),然后根据有证据支撑的信号评分(统计数据、引述、引用来源、不堆砌关键词)。schema.org / FAQ / llms.txt 仅作为信息报告——2026 年的证据并不支持它们是 AI 引用的驱动因素,因此不纳入评分。免费,仅使用 HTTP。
  • ai_referral_overview(property_id?, site_url?, days?) - 第一方 AI 流量: 来自 AI 应用的 GA4 引荐会话(包括原生 ai-assistant 渠道和可配置的来源主机正则表达式),以及 AI 爬虫 robots 覆盖情况(GPTBot、 ClaudeBot、PerplexityBot 等)。展示约 70% 的暗流量低估情况,并将 AI Overview 点击(计入自然流量)单独统计。免费。
  • ai_citation_track(prompts, brand, brand_domains?, competitors?, engines?, samples?)
    • 针对一组托管提示词,抽样统计品牌提及率和引用声量份额,并与竞争对手对比,覆盖多个 AI 引擎 (Perplexity / OpenAI / Anthropic / Gemini API,以及通过 DataForSEO 获取的 Google AI Overviews)。每个提示词抽取 N 个样本(默认为 7),提供 95% 置信区间、声量份额和运行间波动性——不是“AI 排名” (单次运行在统计上毫无意义)。说明开发者 API 的输出与登录后的消费者 UI 不同,且 AIO 没有 API。付费 + 非确定性。至少需要一个引擎密钥和/或 DataForSEO。

关键词发现(3,v0.9.0) - 查找你尚未获得排名的词。

  • gsc_keyword_expand(candidates, site_url?, days?, impressions_min?) - 你 (主机)根据表现最佳的查询构思候选词;此工具会用你自己的 Search Console 数据验证每个词(覆盖 / 较少 / 无),并提供同类词强度置信区间。“无”表示没有可见的覆盖情况(GSC 会隐藏约 75% 的展示次数),因此全新词项的评分属于假设。免费。
  • serp_adjacency_expand(seeds, include_paa?) - 将种子词扩展为相关词。免费核心功能:Google Autocomplete(无需密钥)。可通过 DataForSEO 获取 People-Also-Ask + 相关搜索。返回每个种子的建议,以及汇总后的全新词项;没有密钥也能正常提供有限功能。
  • keyword_universe(target_domain?, competitors?, keywords?, limit?) - 可选,付费。核心价值:竞争对手关键词差距(DataForSEO Domain Intersection;Google 没有对应功能)。可选通过供应商链获取搜索量 / 难度 / 意图(DataForSEO,否则仅通过 Google Ads 获取搜索量)。外部搜索量是精度较低的方向性信号——仅用于平局时决胜,绝不作为门槛。

Google Analytics 4(7)

  • ga4_run_report - 核心工具:支持任意维度 / 指标 / 日期范围,以及可选的维度筛选和排序。
  • ga4_top_landing_pages - 热门着陆页,默认仅包含自然流量。
  • ga4_traffic_by_channel - 按渠道组统计会话 / 互动 / 转化。
  • ga4_organic_search_overview - 自然流量总计以及逐日趋势。
  • ga4_setup_audit(property_id?) - 只读的 SEO 衡量就绪情况审计: Web 数据流、关键事件、数据保留期限、内容组维度,以及 (v0.7.4)增强型衡量、站内搜索和 Google Signals。 按严重程度分级,并为每个发现提供合理的例外情况。通过 REST 调用 GA4 Admin API (analytics.readonly;无需额外依赖)。(v0.7.0)
  • ga4_site_search(days?, limit?) - 站内搜索查询报告(直接反映内容缺口的信号);没有真实搜索词时会如实返回空结果。(v0.7.1)
  • ga4_landing_page_conversions(days?, organic_only?, limit?) - 按转化次数排名的自然流量 着陆页。(v0.7.1) PageSpeed Insights(2 项)
  • psi_analyze - 针对 URL 的 Lighthouse 评分、实验室 Core Web Vitals 和现场(CrUX)Core Web Vitals。默认采用移动设备策略。现场数据附带 field_data_note:Google 正在弃用 PSI 现场数据,因此请使用 crux_snapshot / crux_history 获取持久的现场指标。
  • psi_opportunities(url, strategy?) - 可执行的 Lighthouse“机会”审计(含预估收益),以及按严重程度分级的 SEO 类别审计。仅限实验室数据。这是一份页面基础检查清单,不是排名预测工具。(v0.7.1) Cloudflare(13)
  • cf_list_zones - 列出令牌可查看的区域。
  • cf_zone_info - 查看区域的状态、套餐和名称服务器。
  • cf_list_dns - DNS 记录(只读);在迁移期间可用于验证规范主机和 TXT 验证记录。
  • cf_web_analytics - 只读边缘 Web Analytics(RUM),可与 GA4 对比。对于某些站点,Cloudflare 返回的 host: null;传入 site_tag 可显式查找这些站点。
  • cf_purge_cache - 清除指定 URL 的缓存(受限)。
  • cf_purge_cache_all - 清除整个区域的缓存(受限 + 确认令牌)。
  • cf_settings_audit(zone?) - 只读审计与 SEO 相关的 Cloudflare 区域设置(SSL 模式、Always-Use-HTTPS、HSTS、Automatic HTTPS Rewrites、Brotli、缓存 TTL)。按严重程度分级,并遵循“验证而非判定失败”的原则,因为 CF 无法查看源站;HSTS 永远不会被判定为硬性失败。令牌需要具有 Zone Settings Read 权限。每条发现都附带机器可读的 fix 提示(准确的 cf_settings_update 设置 + 推荐值),以便串联审计 -> 修复。(v0.7.1)
  • cf_settings_update(settings, zone?, confirm?, acknowledge_hsts_risk?, dry_run?)
    • 写入审计评级涉及的 SEO/爬取/安全设置(SSL 模式、Always-Use-HTTPS、Automatic HTTPS Rewrites、Brotli、浏览器缓存 TTL、HSTS),形成审计 -> 修复闭环。受限。ssl_mode 或任何提高 HSTS 的操作都需要 confirm=<zone>(提高 HSTS 还需要 acknowledge_hsts_risk=true);会在本地验证,支持 dry_run,并重新运行审计,以便查看发现是否已消除。需要 Zone Settings:Edit 权限(而审计只需 Read)。(v0.7.10)
  • cf_list_redirects(zone?) - 列出区域的单条(动态)重定向规则,以及账户的 Bulk Redirect 列表(只读)。进行任何重定向写入前请先调用,以免覆盖现有内容。(v0.7.8;v0.7.9 添加了 Bulk 列表)
  • cf_create_redirect(source, target, status_code?, ...) - 创建一条边缘重定向(例如,为更名后的 URL 创建 301 重定向)。受限。会预先检查目标(不会重定向到失效 URL),拒绝循环/重复项,支持 dry_run。(v0.7.8)
  • cf_delete_redirect(rule_id, zone?) - 按 id 删除单条重定向规则(用于回滚 cf_create_redirect)。受限。(v0.7.8)
  • cf_bulk_redirect_upsert(items, list_name, confirm, ...) - 通过账户级 Bulk Redirect List 一次创建/追加多条重定向(用于迁移)。 受限 + 需要与 list_name 相同的确认令牌。会先在本地验证每一项,任何项目无效都会拒绝整个批次(绝不会只应用一部分);支持 dry_run。(v0.7.9)
  • cf_managed_robots(action, zone?, ...) - 获取 / 配置 / 禁用 Cloudflare 托管的 robots.txt 和 Content-Signals 策略(这些功能依托于区域的 Bot Management 配置)。action="get" 会读取当前状态(只读、不受限)。action="configure" 会设置托管 robots.txt(managed_robots)、Content-Signals 变体(cf_robots_variant:off / policy_only)以及 AI 爬虫屏蔽开关(ai_bots_protection、content_bots_protection、crawler_protection)。action="disable" 会关闭托管 robots.txt 和策略。在 Cloudflare 中,托管 robots.txt 和 Content-Signals 策略互斥,因此有效组合为 managed_robots=true + cf_robots_variant="off"(托管 robots.txt)或 managed_robots=false + cf_robots_variant="policy_only"(策略);工具会在本地拒绝无效组合,并返回 INVALID_INPUT。自定义 Content-Signal 行(例如来自 robots_ai_posture)不是托管选项,应将其写入源站 robots.txt。写入操作受限,需要 confirm=<zone>,并支持 dry_run;读取操作是安全的(GET -> overlay -> PUT,因此不会覆盖配置中的其他内容)。每个响应都会附带说明,区分声明偏好的信号(Content-Signals,仅被选择遵循的爬虫采纳,Googlebot 会忽略)与实际在边缘执行管控的开关。写入需要 Bot Management:Edit 权限(get 需要 Read)。(v0.8.2) IndexNow(2,v0.2.0)
  • indexnow_submit(url) - 向 Bing、Yandex、Naver、Seznam、Yep 提交单个 URL。它与 gsc_request_indexing 互为补充(而非替代),后者只与 Google 通信。需要设置 SEO_MCP_INDEXNOW_KEY,并在 https://<your-host>/<key>.txt 提供验证文件(完整密钥、文件格式和同主机规则请参阅 IndexNow 设置)。
  • indexnow_bulk_submit(urls) - 通过单个 POST 提交最多 10,000 个属于同一主机的 URL。客户端会在任何网络调用发生前拒绝混合主机的批次,并返回 INVALID_INPUT。如果 CDN 会重写 /key.txt 路径,环境变量 SEO_MCP_INDEXNOW_KEY_LOCATION 可覆盖默认的验证文件 URL。

技术 SEO(8,v0.3.0) - 无需凭据;内置 HTTP 客户端。

  • inspect_meta(url) - 一次调用检查页面表层信息:标题、meta 描述、meta robots、canonical、Open Graph 和 Twitter Card 标签、hreflang、H1 数量。
  • check_canonical(url) - canonical 链接审计:自引用/跨主机/协议不匹配/尾部斜杠不一致/canonical 目标是否可访问。
  • mixed_content_check(url) - 解析 HTTPS 页面并标记所有 http:// 引用(img/script/iframe/表单 action/srcset)。对 http:// 不执行任何操作。
  • redirect_chain_audit(url, max_redirects=10) - 逐跳遍历重定向链。标记过长的链、协议降级、循环和非 2xx 终点。
  • robots_txt_validate(site_url, probes?) - 解析 robots.txt(按组划分的规则、站点地图和 Content-Signals);可选地根据 RFC 9309 最长匹配规则判定(user_agent、url)探测项(与 Google 和 Bing 的实际行为一致,而非标准库的首匹配规则)。还会检测边缘缓存过期的 robots.txt(通过缓存破坏进行比较,并从最新内容重新解析),以及覆盖源站策略的 Cloudflare 托管 robots.txt/Content-Signals,从而发现迁移站点或由 Cloudflare 前置的站点上看似正常的 robots。(v0.8.0)
  • sitemap_validate(sitemap_url) - 验证站点地图或站点地图索引 XML,统计条目数,并标记超大文件、跨主机条目和缺少 lastmod 的情况。自动处理 .gz。
  • sitemap_health(sitemap_url, sample_size=25) - 对抽样 URL 进行 HEAD 审计。提供状态码直方图和首批非 2xx 示例。
  • robots_ai_posture(goal?, sitemap_url?) - 针对 Content-Signals 调节项(search/ai-input/ai-train)提供确定性的离线建议工具。接受业务目标(默认为 content_authority,也可选 maximize_visibility/protect_ip),推荐一种策略并给出通俗易懂的理由,列出权衡后的备选方案,并生成可直接应用的产物:Content-Signal: 指令行及完整的建议 robots.txt。不访问网络,也不写入任何内容。每个响应都包含强制说明:只有采用该机制的爬虫才会遵循 Content-Signal;Googlebot 会忽略它;它也不是排名因素。(v0.8.1)

Chrome UX Report(2)

  • crux_history(url? | origin?, form_factor?, metrics?) - 通过 CrUX History API 获取 25 周的 p75 Core Web Vitals。复用 PSI_API_KEY;未配置密钥时可匿名使用,但速率限制更严格。
  • crux_snapshot(url? | origin?, form_factor?) - 获取当前的 p75 Core Web Vitals(时间点快照,与历史数据相对)。每项指标都会报告一个类别(GOOD/NEEDS_IMPROVEMENT/POOR);汇总评分为 overall_category。时间指标使用 p75_ms;无单位的 CLS 使用 p75。数据量较少的来源会返回 no_data 封装对象。(v0.7.1) 结构化数据 + 跨站点 + 页面内(7)——无需新凭据(v0.9 的 SERP 自动获取为可选项)。
  • inspect_schema(url)——提取页面中的所有 JSON-LD 块;报告各 schema.org @type 的数量及每种类型的一个示例实体。
  • validate_schema(url, types?)——根据 Google Rich Results 必需字段集,对每个 JSON-LD 实体给出判定。涵盖 Article、NewsArticle、BlogPosting、Product、FAQPage、BreadcrumbList、Organization、LocalBusiness、Event、Review、Recipe。提供每个实体的判定,以及 missing_required 和 missing_recommended 列表。
  • hreflang_consistency_check(urls)——对用户提供的一组 URL 进行跨页面 hreflang 审核。标记缺少互相指向、hreflang 目标失效、单个页面上的 hreflang 重复、缺少自链接,以及有 3 种以上语言变体时缺少 x-default 的情况。
  • internal_link_graph(start_url, max_depth=2, max_pages=50)——在同一主机内进行小规模 BFS 抓取。提供每个页面的入度和出度、孤立页面、失效的站内链接及深度分布。设有硬性上限(max_depth <= 4、max_pages <= 200),确保误用时不会压垮主机。
  • lighthouse_budget(url, budget)——封装 psi_analyze,并根据预算字典对结果作出判定,例如 {performance: 80, LCP_ms: 2500, CLS: 0.1}。提供各项指标的通过/失败结果及总体判定。适用于 LLM 会话中的 CI / 部署前检查。复用 PSI_API_KEY。
  • internal_link_recommend(start_url, site_url?, days?, position_min?, position_max?, relevance_floor?, limit?)
    • 根据高入度页面,向 GSC 中排名接近首页的页面(默认排名 8-20 且有实际展示量)推荐具体的来源页面 -> 目标页面站内链接,并提供锚文本。按词汇相关性 + 站内权威性对来源页面排序,跳过已链接到目标页面的页面,平衡锚文本,且绝不推荐 nofollow 链接。基于 internal_link_graph + GSC 构建。免费。(v0.9.0)
  • onpage_serp_gap(target_url, query?, competitor_urls?, max_competitors?)——找出顶级 SERP 结果中存在、而目标页面缺少的标题、实体和结构化数据,并将其转化为页面内优化操作。调用方提供 competitor_urls 时可免费使用;也可通过 query 选择 DataForSEO SERP 自动获取,该模式还会返回可争取排名的信号(serp_composition 中的 AI-Overview / UGC 零点击风险),并在搭配 Open PageRank 时返回竞争对手域名权威度。突出信息增益,而不只是达到同等水平。会过滤掉模板/导航标题(基于模式的页面框架过滤器)。(v0.9.0;v0.9.1 修复 F6,v0.9.2 泛化 F1)

每个工具的 tools/list 条目都包含 MCP 标准注解 (readOnlyHint、destructiveHint、idempotentHint、openWorldHint),方便 MCP 宿主决定自动批准哪些操作,以及哪些操作需要确认。

## 工作流提示词

服务端通过 prompts/list / prompts/get 发布 13 个命名 MCP 提示词,将细粒度工具串联为常见的 SEO 工作流。能够展示提示词的宿主(Claude Desktop 的斜杠菜单、Cursor 的命令面板、Cline 的提示词选择器)会自动显示这些提示词。

提示词参数调用链
post_deploy_verifyurls、zone?、skip_psi?cf_purge_cache -> gsc_request_indexing -> indexnow_bulk_submit -> psi_analyze
weekly_reviewdays?、site_url?gsc_compare_periods(通过 sort_dir 获取增长项 + 下滑项)-> gsc_query_opportunities -> gsc_query_gaps -> ga4_organic_search_overview
content_auditsite_url?、days?、top_n_queries?gsc_top_queries -> 针对每个查询调用 gsc_top_pages_by_query -> 蚕食问题建议
migration_checkurls、site_url?gsc_batch_inspect_urls -> gsc_list_sitemaps -> 规范 URL 一致性表 -> 修复清单
technical_seo_auditurlinspect_meta -> check_canonical -> redirect_chain_audit -> mixed_content_check -> robots_txt_validate -> sitemap_health -> 按严重程度排序的分流清单
structured_data_auditurls针对每个 URL 调用 inspect_schema -> validate_schema ->(如果有 2 个或更多 URL)hreflang_consistency_check -> 按 URL 及跨 URL 生成报告
pre_deploy_checkurlsrobots_txt_validate -> 针对每个 URL 调用 inspect_meta -> check_canonical -> validate_schema -> redirect_chain_audit -> mixed_content_check -> 部署门禁结论(出现严重问题时阻止部署,否则批准)
content_brief (v0.7.1)topic、target_query、site_url?gsc_top_pages_by_query -> 对排名靠前的页面调用 inspect_meta / inspect_schema -> 包含必需章节和验证规则的内容简报
content_outline (v0.7.1)brief按以下规则生成大纲:至少 5 个 H2、目标查询覆盖率至少 70%、H1 包含主要关键词
content_article (v0.7.1)outline、brief按以下规则撰写文章:字数在目标范围的 +/-15% 以内、每个章节满足最低字数要求、包含内部链接、提供行内 JSON-LD 提示、不使用 em-dash
content_workflow (v0.7.1)site_url?、days?content_opportunities -> 简报 -> 大纲 -> 文章 -> pre_deploy_check -> gsc_request_indexing + indexnow_submit -> 定期执行 content_performance
content_performance (v0.7.1)url、target_queries?、site_url?在发布窗口前后调用 gsc_compare_periods + gsc_search_analytics
seo_setup_audit (v0.7.1)site_url?、property_id?ga4_setup_audit -> cf_settings_audit -> psi_opportunities -> robots_txt_validate -> 汇总的技术栈配置报告

为何使用提示词,而不是巨型工具:可组合性。巨型工具中的某个步骤失败,会导致整个巨型工具的封装结果出错,宿主也就无法只重试失败的环节。提示词会向宿主提供操作步骤;每个步骤的封装结果都能完整地传递给大模型。

安装

SEOMonster 提供 两种安装方式,两者都完全在本地运行:

  • .mcpb bundle,适用于 Claude Desktop。一键安装,通过图形界面填写凭据,密钥类型的输入项存储在操作系统的钥匙串中。推荐大多数用户使用。
  • uvx,适用于 Cursor、Cline、Codex,以及偏好手动编辑 MCP 配置文件的 Claude Desktop 高级用户。

两种方式运行相同的 Python 包(seo_mcp),并提供相同的 52 个工具。两者的区别仅在于宿主如何启动服务端,以及如何收集凭据。

Claude Desktop(推荐):.mcpb 捆绑包

只需三个简单步骤。OAuth 授权需在终端中运行一次(Claude Desktop 的 MCP 子进程内的 GUI 流程会超时,用户来不及完成;请参阅下文的为什么要预先完成身份验证?)。

1. 安装捆绑包。 从 GitHub 发布页面下载 seo-monster-0.2.0.mcpb(或在列出时从 Claude 目录下载),然后双击。Claude Desktop 会验证捆绑包,运行 uv 来准备 Python 环境,并显示配置表单:

字段类型必填说明
Google OAuth 客户端密钥文件选择器是来自 Google Cloud Console 的桌面应用客户端密钥 JSON 文件。
Google OAuth 令牌缓存路径字符串是默认为 ~/.config/seo-monster/token.json。授权时写入。
GSC 默认资源字符串否例如 sc-domain:example.com 或 https://www.example.com/。
GA4 默认资源 ID字符串否properties/123456789 或纯数字 123456789。
PageSpeed Insights API 密钥字符串,机密否存储在操作系统钥匙串中。强烈建议填写(原因?)。
Cloudflare API 令牌字符串,机密否存储在操作系统钥匙串中。仅 Cloudflare 工具需要。
Cloudflare 默认区域字符串否例如 example.com。
IndexNow 密钥字符串,机密否仅 IndexNow 工具需要。可使用你生成的任意 8-128 位十六进制字符串。
IndexNow 密钥文件 URL字符串否覆盖默认验证位置(https://<host>/<key>.txt)。

填写字段,点击 Save,然后启用扩展。完全退出 Claude Desktop(macOS 上按 ⌘Q)并重新打开。

2. 在终端中运行一次性 OAuth 授权。 使用任何由 Google 提供支持的工具前,请运行:

uvx seo-monster auth

浏览器会打开。批准请求的权限范围。该命令会以 0600 权限将 token.json 写入你配置的路径(默认为 ~/.config/seo-monster/token.json),然后退出。这是推荐的做法;它可以绕过 Claude Desktop 对每次工具调用施加的超时限制。

3. 在 Claude Desktop 中开始新聊天并使用工具。 点击输入框中的 🔧 工具图标;你应该会看到 52 个 SEOMonster 工具。先试用 system_status,确认所有配置都已就绪。

为什么要预先完成身份验证?

OAuth 已安装应用流程会打开本地浏览器,并等待用户完成授权页面。在 Claude Desktop 中,MCP 服务以子进程形式启动,其工具调用的超时时间约为 30-60 秒。用户无法这么快完成浏览器授权,因此发起调用会超时;而且由于每个 Google 工具都会不断重试此流程,直到令牌存在为止,因此每次调用都会依次超时。在终端中运行一次 uvx seo-monster auth 会将令牌写入磁盘;之后,Claude Desktop 的 MCP 服务只需读取缓存的令牌,并在需要时静默刷新。

使用 uvx 配置 Cursor、Cline、Codex(以及 Claude Desktop 高级用户)

uvx 会在临时环境中运行已发布到 PyPI 的软件包 seo-monster。添加下方适用于你所用宿主的代码片段,并使用 uvx 的绝对路径(运行 which uvx 查找;GUI 宿主不会读取你的 shell 配置文件)。

Cursor(~/.cursor/mcp.json 或项目中的 .cursor/mcp.json)
{
  "mcpServers": {
    "seomonster": {
      "command": "/Users/me/.local/bin/uvx",
      "args": ["seo-monster"],
      "env": {
        "SEO_MCP_GOOGLE_OAUTH_CLIENT": "/Users/me/.config/seo-monster/client_secret.json",
        "SEO_MCP_GOOGLE_TOKEN": "/Users/me/.config/seo-monster/token.json",
        "SEO_MCP_GA4_PROPERTY_ID": "properties/123456789",
        "PSI_API_KEY": "AIza...",
        "CF_API_TOKEN": "..."
      }
    }
  }
}
Cline(cline_mcp_settings.json)
{
  "mcpServers": {
    "seomonster": {
      "command": "/Users/me/.local/bin/uvx",
      "args": ["seo-monster"],
      "env": {
        "SEO_MCP_GOOGLE_OAUTH_CLIENT": "/Users/me/.config/seo-monster/client_secret.json",
        "SEO_MCP_GOOGLE_TOKEN": "/Users/me/.config/seo-monster/token.json"
      },
      "alwaysAllow": ["system_status", "gsc_search_analytics", "ga4_run_report", "psi_analyze"]
    }
  }
}

alwaysAllow 列出了读取工具,因此 Cline 不会在每次调用时都提示。请勿将清除缓存工具加入其中,以便每次调用时都提示。

Codex(~/.codex/config.toml)
[mcp_servers.seomonster]
command = "/Users/me/.local/bin/uvx"
args = ["seo-monster"]

[mcp_servers.seomonster.env]
SEO_MCP_GOOGLE_OAUTH_CLIENT = "/Users/me/.config/seo-monster/client_secret.json"
SEO_MCP_GOOGLE_TOKEN = "/Users/me/.config/seo-monster/token.json"
SEO_MCP_GA4_PROPERTY_ID = "properties/123456789"
Claude Desktop,直接使用 uvx(高级)

如果你更愿意手动编辑 claude_desktop_config.json,而不是使用 .mcpb 捆绑包,可以使用与上方 Cursor 相同的配置片段格式。

身份验证

四项服务分别进行身份验证。只配置你要使用的服务; 未配置的服务对应的工具会返回清晰的 AUTH_MISSING 错误, 而不会导致服务端失败。

快速设置(推荐):seo-monster setup

在终端中运行一次 seo-monster setup。它会以交互方式收集你的 Cloudflare 令牌、PageSpeed Insights 密钥、IndexNow 密钥,以及默认的 GSC 和 GA4 媒体资源;能通过实时 API 验证的内容也会进行验证,然后将配置写入 ~/.config/seo-mcp/config.toml,权限设为 0600。之后,MCP 主机配置 中无需包含任何密钥:

{ "command": "uvx", "args": ["seo-monster"] }

出于设计考虑,setup 不会执行以下两项操作:

  • Google OAuth 仍需单独进行一次浏览器操作。运行 setup 后, 执行 seo-monster auth 以完成 Google 授权(请参阅下一节)。
  • 它绝不会覆盖环境变量。主机 env 块中设置的任何内容仍优先于配置文件,因此 CI 和 Docker 会继续使用环境变量。

setup 可以重复运行:现有值会显示为默认值,留空字段时会保留原值。 下文介绍各项服务对应的环境变量;setup 会为你写入这些变量,CI 流水线也可以直接设置它们。

Google(Search Console + Analytics 4)— OAuth,推荐

这是更简便的方式:无需 Cloud 服务账号,也无需按媒体资源授予电子邮件权限。

  1. 在 Google Cloud Console 中创建(或 选择)一个项目,并启用你要使用的 API:
    • Search Console API
    • Indexing API(用于 gsc_request_indexing)
    • Google Analytics Data API(用于 GA4 工具)
    • PageSpeed Insights API(仅当你需要 PSI 密钥时;见下文)
  2. 创建一个类型为 Desktop app 的 OAuth 客户端,并下载客户端密钥 JSON 文件。
  3. 将服务端指向该文件和一个可写的令牌路径:
    • SEO_MCP_GOOGLE_OAUTH_CLIENT = 客户端密钥 JSON 文件的路径
    • SEO_MCP_GOOGLE_TOKEN = 用于缓存令牌的可写路径
  4. **仅需一次:**在终端中运行 uvx seo-monster auth。浏览器会打开; 请批准所需权限。该命令会写入 token.json(权限为 0600)并退出。
  5. 后续运行时(服务端)会静默刷新令牌。服务端 绝不会打开浏览器;如果缓存令牌缺失,工具会返回 AUTH_MISSING,并提示使用 auth 命令。

登录的 Google 账号必须有权访问你要查询的 Search Console 媒体资源和 GA4 媒体资源。

**令牌缓存加固。**缓存的令牌可以刷新,对所请求的权限而言,相当于 长期有效的凭据。服务端会将令牌权限设为 0600,其父目录权限设为 0700。请将 SEO_MCP_GOOGLE_TOKEN 放在你能控制的目录下(例如 ~/.config/seo-monster/), 不要将其放在共享文件系统中。

Google - 服务账号(高级,无头)

适用于完全无头环境或无法使用浏览器的服务器部署:

  1. 创建服务账号并下载其 JSON 密钥。
  2. 将 SEO_MCP_GOOGLE_CREDENTIALS(或标准环境变量 GOOGLE_APPLICATION_CREDENTIALS)设为密钥路径。
  3. 授予服务账号电子邮件地址对每个资源的访问权限:
    • Search Console:将其添加为该资源的用户。
    • GA4:将其添加为该资源的 Viewer。

如果同时配置了 OAuth 和服务账号,将使用 OAuth。

覆盖范围说明。 OAuth 已安装应用流程已纳入我们的验证环节和生产环境风格的冒烟测试。服务账号流程虽有文档说明,但尚未针对实时 Cloud 项目进行独立验证。如果在使用 SA 流程时遇到问题,请提交 issue。

Scope(最小与完整)

默认授权请求包含所有工具所需的 scope,包括两项写入操作:

功能Scope
GSC 读取webmasters(包含 readonly)
GSC 站点地图提交webmasters
GSC 索引请求indexing
GA4 报告analytics.readonly

如果你只需要读取权限,可以授权更精简的 scope 集合 (webmasters.readonly + analytics.readonly),并且不调用 gsc_submit_sitemap / gsc_request_indexing;如果调用写入工具时缺少相应的 scope,将返回 SCOPE_INSUFFICIENT 并提供补救措施,不会导致崩溃。

PageSpeed Insights

原则上,PSI 无需密钥即可使用,但实际上,所有未使用密钥的调用者共享匿名配额,而且配额经常耗尽:针对匿名端点的单次 psi_analyze 调用通常会返回 RATE_LIMITED。请将匿名模式视为备用方案,而非常规使用方式。

要可靠地访问 PSI:

  1. 在 Cloud Console 中启用 PageSpeed Insights API。
  2. 创建一个 API 密钥(Credentials > Create credentials > API key)。只需一分钟。密钥免费。
  3. 设置 PSI_API_KEY(或在 .mcpb 配置表单中填写)。

PSI API 只接受通过 URL 查询参数传递的密钥(不接受通过请求头传递),因此 PSI 密钥的敏感级别较低。将密钥的使用范围限制为仅限 PageSpeed Insights API,并且不要为其分配其他 GCP 角色。

Cloudflare

在 dash.cloudflare.com/profile/api-tokens 创建 API 令牌,并设置 CF_API_TOKEN(还可选择设置 CF_ZONE 作为默认区域)。仅授予所需权限:

权限用途
Zone: Zone:Readcf_list_zones、cf_zone_info
Zone: DNS:Readcf_list_dns
Account: Account Analytics:Readcf_web_analytics
Zone: Cache Purge:Purgecf_purge_cache、cf_purge_cache_all(仅在启用破坏性模式时需要)
Zone: Single Redirect:Editcf_create_redirect、cf_delete_redirect(仅在启用破坏性模式时需要);使用此权限读取 cf_list_redirects
Zone: Zone Settings:Editcf_settings_update(仅在启用破坏性模式时需要);cf_settings_audit 只需要 Zone Settings Read
Account: Account Rulesets:Edit + Account Filter Lists:Editcf_bulk_redirect_upsert(仅在启用破坏性模式时需要)
IndexNow

当 URL 新建或更新时,IndexNow 会通知 Bing、Yandex、Naver、Seznam 和 Yep。Google 不参与,因此 IndexNow 工具是对 gsc_request_indexing 的补充,而非替代。

一次性设置
  1. 生成密钥。 根据 IndexNow 规范,密钥可以是任意由字母、数字或连字符(a-z、A-Z、0-9、-)组成的 8-128 个字符的字符串。常见做法包括使用 32 位小写十六进制字符串(例如 python -c "import secrets; print(secrets.token_hex(16))"),或使用长度相近的随机字母数字字符串。请像对待 API 密钥一样保管,不要将其提交到代码库。
  2. 配置 SEOMonster:将 SEO_MCP_INDEXNOW_KEY 设置为该字符串(也可以使用 .mcpb 配置表单;该字段标记为敏感信息,并会保存到操作系统密钥链中)。
  3. 托管验证文件,路径为 https://<your-host>/<key>.txt。文件内容必须与密钥字符串完全一致,末尾不得有换行符,不得有 BOM、额外空白或 HTML 包装。Content-Type 应为 text/plain。继续操作前,请使用 curl -i https://<your-host>/<key>.txt 确认;响应正文必须与密钥逐字节一致。
  4. (可选) 如果验证文件位于非标准 URL(某些 CDN 会重写 /key.txt 路径),请设置 SEO_MCP_INDEXNOW_KEY_LOCATION。默认位置为根据你提交的 URL 推导出的 https://<host>/<key>.txt,因此通常无需设置此项。
同一主机限制

在一次 indexnow_submit 或 indexnow_bulk_submit 调用中提交的所有 URL,必须与验证文件位于同一主机。IndexNow 会通过 HTTP 422 拒绝包含多个主机的批次;indexnow_bulk_submit 会在客户端强制执行此限制,检测到多个主机时会在发起任何网络调用前返回 INVALID_INPUT。

如果有多个主机,请为每个主机托管一个验证文件,并按主机分别调用,或者为每次调用覆盖 SEO_MCP_INDEXNOW_KEY_LOCATION(该工具目前不支持按调用覆盖;请为每个会话设置不同的环境变量值)。

常见错误
现象可能原因
indexnow_submit 返回 AUTH_INVALID搜索引擎无法获取 https://<host>/<key>.txt。请确认该文件返回 HTTP 200,且正文与密钥完全一致
indexnow_bulk_submit 返回 INVALID_INPUT 并提示存在多个主机URL 列表包含多个主机;请按主机拆分批次
RATE_LIMITED达到 IndexNow 的单主机速率上限。请等待后重试
验证设置

完成配置后,调用 system_status 查看检测到的配置。传入 {"probe": true} 可针对每个已配置的服务各发起一次开销较低的实时请求,以确认凭据确实有效(GSC 会列出资源,GA4 会针对默认资源运行一行报告,Cloudflare 会列出一个区域,PSI 会 ping 该端点)。关闭 probe(默认值)时,只会检查配置,不会发起网络调用。

破坏性模式

清除缓存会影响所有访客,因此默认关闭。将 SEO_MCP_ALLOW_DESTRUCTIVE=true 设置为启用 cf_purge_cache 和 cf_purge_cache_all。关闭时,这些工具会返回 DESTRUCTIVE_DISABLED,且不会发起网络调用。

cf_purge_cache_all(清除整个区域的缓存)还有一项额外保护:其 confirm 参数必须与解析出的区域主机名相同。缺少 confirm 或其值不匹配时,会返回 CONFIRM_REQUIRED,且不会执行清除操作。

两项 GSC 写入操作(gsc_submit_sitemap、gsc_request_indexing)不受此限制;它们属于常规且影响范围较小的 SEO 任务。

配置

配置优先读取环境变量,TOML 文件作为回退。环境变量始终优先。配置文件通常由 seo-monster setup 为你写入(权限为 0600);你也可以手动编写,或设置以下环境变量。

环境变量服务用途
SEO_MCP_GOOGLE_OAUTH_CLIENTGoogleOAuth 客户端密钥 JSON 路径(推荐)。
SEO_MCP_GOOGLE_TOKENGoogle可写的缓存令牌路径(OAuth)。
SEO_MCP_GOOGLE_CREDENTIALSGoogle服务账号密钥路径(替代方式)。
GOOGLE_APPLICATION_CREDENTIALSGoogle标准服务账号回退选项。
SEO_MCP_GSC_DEFAULT_SITEGSC默认资源,例如 sc-domain:example.com。
SEO_MCP_GA4_PROPERTY_IDGA4默认资源,例如 properties/123456789。
SEO_MCP_DATA_STATEGSCall(默认)或 final。
PSI_API_KEYPSIPageSpeed Insights API 密钥(可选)。
CF_API_TOKENCFCloudflare API 令牌。
CF_ZONECF默认区域主机名。
SEO_MCP_INDEXNOW_KEYIndexNowIndexNow 工具的共享密钥(敏感信息)。
SEO_MCP_INDEXNOW_KEY_LOCATIONIndexNow覆盖默认密钥文件 URL(可选)。
SEO_MCP_ALLOW_DESTRUCTIVEall设为 true 可启用缓存清除工具。默认关闭。
SEO_MCP_CONFIGallTOML 配置文件的路径。
DATAFORSEO_LOGIN / DATAFORSEO_PASSWORDDataForSEO可选(v0.9):SERP/PAA、关键词搜索量/难度/意图、竞争对手差距、Google AIO。
OPENPAGERANK_API_KEYOpen PageRank可选(v0.9):免费的竞争对手域名权威度数据。
PERPLEXITY_API_KEY / OPENAI_API_KEY / ANTHROPIC_API_KEY / GEMINI_API_KEYAI engines可选(v0.9):供 ai_citation_track 使用的引擎(可任选其一或多个)。
GOOGLE_ADS_DEVELOPER_TOKEN / GOOGLE_ADS_CUSTOMER_IDGoogle Ads可选(v0.9):作为 DataForSEO 的搜索量替代方案(需要同意 adwords-scope)。

配置文件回退路径为 ~/.config/seo-mcp/config.toml(或 SEO_MCP_CONFIG):

[google]
oauth_client = "/Users/me/.config/seo-mcp/client_secret.json"
token        = "/Users/me/.config/seo-mcp/token.json"
# credentials = "/Users/me/.config/seo-mcp/sa.json"   # service-account alternative

[gsc]
default_site = "sc-domain:example.com"
data_state   = "all"

[ga4]
property_id  = "properties/123456789"

[psi]
api_key = "AIza..."

[cloudflare]
api_token = "..."
zone      = "example.com"

[server]
allow_destructive = false

# Optional v0.9 providers (discovery + AI/GEO). The free GSC/GA4/HTTP core
# works without any of these; each tool degrades gracefully when unset.
[dataforseo]
# login    = "..."
# password = "..."

[openpagerank]
# api_key = "..."

[ai_engines]
# perplexity = "..."
# openai     = "..."
# anthropic  = "..."
# gemini     = "..."

[google_ads]
# developer_token = "..."   # volume alt to DataForSEO; needs adwords-scope OAuth
# customer_id     = "..."

结果封装

每个工具都返回相同的结构。成功时:

{ "ok": true, "data": { /* tool-specific */ }, "error": null }

失败时:

{
  "ok": false,
  "data": null,
  "error": {
    "code": "AUTH_MISSING",
    "service": "gsc",
    "message": "No Google credentials found for Search Console.",
    "remediation": "Configure OAuth ... or a service-account key. See README > Auth.",
    "docs_url": "https://seomonster.avansaber.com#auth",
    "details": null
  }
}

错误代码:

代码含义
AUTH_MISSING未为该服务配置凭据。
AUTH_INVALID凭据已配置,但遭到拒绝(401/403、密钥错误或已过期)。
SCOPE_INSUFFICIENT令牌缺少此工具所需的权限范围。
DESTRUCTIVE_DISABLED在破坏性模式关闭时调用了缓存清除工具。
CONFIRM_REQUIRED调用 cf_purge_cache_all 时未提供匹配的 confirm。
NOT_FOUND未找到站点/资源/区域/记录,或无权查看。
INVALID_INPUT参数未通过验证(日期错误、缺少必需参数)。
RATE_LIMITED上游返回 429。
SERVICE_DISABLEDGoogle Cloud API 未启用;details 中包含启用 URL。
UPSTREAM_ERROR上游 API 返回的任何其他非 2xx 响应。

开发

git clone https://github.com/avansaber/seo-monster
cd seo-monster
uv venv && uv pip install -e ".[dev]"
uv run pytest               # offline test suite
uv run seo-monster          # run the server over stdio
uv run seo-monster auth     # one-time OAuth consent (or `uv run seo-mcp auth`)

该软件包提供两个控制台脚本别名:seo-monster(规范名称,与 PyPI 发行版一致)和 seo-mcp(为保持向后兼容而保留的 v0.1.x 开发别名)。两者调用同一个入口点。从 v0.2.0 起,通过 seo-mcp 调用服务时,会向 stderr 输出一行弃用提示;stdout 不受影响,因此 MCP 协议通道不受影响。生产环境配置应使用 seo-monster;该别名将在未来的主要版本中移除。

测试完全离线:测试会在客户端层进行模拟,因此运行测试无需网络连接或凭据。

服务身份说明。 部分 MCP 主机 UI 会将服务名称显示为 seo-mcp,并将版本显示为 mcp SDK 的版本(例如 1.27.1)。服务名称字符串是我们传入 Server("seo-mcp") 的值,为保持向后兼容而维持不变;版本显示则是 SDK 的特性 (create_initialization_options() 不会传递软件包版本)。 软件包的实际版本位于 pyproject.toml 和 seo_mcp.__version__ 中。

更新日志

各版本的发布说明(包括每个版本的外部测试应涵盖的验证检查)见 CHANGELOG.md。

隐私

SEOMonster 完全在你的设备上运行,只会与您配置的上游 API 通信。维护者无法看到你的任何数据、凭据、查询或工具调用。完整说明请参阅 PRIVACY.md。

许可证

MIT。请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。