mcpField
S
seo-monster

seo-monster

ローカル
avansaber.comビジネス・マーケティング5568 週間前に更新

seo-monster について

SEOMonster は、AI アシスタント内で SEO 分析を行いたいユーザー向けのローカルファーストな SEO 用 MCP サーバーです。ユーザー自身の Search Console、GA4、PageSpeed のデータを基に動作し、認証情報は実行時に読み込まれます。

主な機能

  1. 01複数の SEO データソースを対象とする 70 のツール
  2. 02すべてのツールで共通の JSON 結果形式
  3. 03Search Console によるクエリ機会とギャップの分析
  4. 04AI 引用のシェア・オブ・ボイス追跡
  5. 05設定で制御される Cloudflare と IndexNow の書き込み操作

活用シーン

  1. 01Search Console のデータから順位改善が見込めるトピックを特定
  2. 02公開前のテクニカル SEO と構造化データのチェック
  3. 03AI 回答エンジンにおけるブランド言及の追跡

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 の場合、設定済みの各サービスに対して低コストのライブ呼び出しを 1 回行い、認証情報が実際に機能することを確認します。デフォルトは false です。

詳細

SEOMonster
新しい SEO ダッシュボードの使い方を覚える必要はありません。ただ聞くだけです。

すでにお使いの AI アシスタント内で動作するオープンソースの SEO アナリストです。
ご自身の Search Console、Analytics、PageSpeed のデータを使って、お使いのマシン上で動作します。

PyPI のバージョン Python のバージョン ダウンロード数 テスト ライセンス:MIT GitHub のスター数

Cursor に追加   VS Code にインストール   ウェブサイト


新しいツールを開く必要はありません。Claude(または Cursor / Cline / Codex)で、普段の言葉で尋ねるだけです。

あなた   「次は何について書けばいいですか?」

🦖 SEOMonster   Search Console を調べ、ランキングがあと一歩のトピックを3つ提示します。実際の需要があり、掲載順位が8~20位のトピックを、機会の大きさ順に並べます。ひと言伝えれば、概要も作成します。

あなたの質問 …… SEOMonster が行うこと
「次は何について書けばいいですか?」ご自身の Search Console の需要データから、ランキングがあと一歩のトピックを提示します
「このページは公開できる状態ですか?」公開前にテクニカル SEO と構造化データをチェックします
「これをインデックスに登録してください。」Google(Indexing API)と Bing / Yandex(IndexNow)に登録を促します
「変更によって本当にランキングは変わりましたか?」対照群とのマッチングによる変更前後の効果測定を、推測ではなく信頼区間とともに行います
「ChatGPT は競合ではなく、私たちを推奨していますか?」AI の回答エンジン全体で、ブランドのシェア・オブ・ボイスを追跡します

Search Console、GA4、PageSpeed、Cloudflare、AI 引用の追跡、キーワード発見、テクニカル SEO にわたる70 個のツールを利用できます。すべてが同じ 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 バンドルを使用する場合(Claude Desktop):macOS または Windows 上の Claude Desktop のみが必要です。バンドルは Python 3.11 以降を ランタイムとして宣言しており、Claude Desktop が環境を準備します。事前に uv を インストールする必要はありません。

uvx を使用する場合(Cursor、Cline、Codex、上級者向けの Claude Desktop):Python 3.11 以降と uv(uvx を提供します)が必要です。 which uvx で uvx の絶対パスを確認してください。GUI ホストはシェルの プロファイルを読み込まないため、MCP の設定にはフルパスが必要です。

ツール

サービスごとにグループ化された 70 個のツールがあります。すべて同じ結果エンベロープを返します(結果エンベロープを参照)。設定内容が不明な場合は、まず system_status を呼び出してください。また、サーバーは名前付きのワークフロープロンプトを 13 個公開します。

サービス横断

  • system_status - 設定済み/到達可能なサービス、Google の認証方式とスコープ、破壊的操作モードの有効状態、ツールカタログ全体、登録済みプロンプトの一覧を確認します。
📂 70 個すべてのツールを見る — サービス別(GSC · GA4 · AI/GEO · キーワード探索 · コンテンツ · PageSpeed/CrUX · Cloudflare · IndexNow · 技術 · スキーマ)。クリックして展開します。

Google Search Console(18)

主要ツール

  • gsc_list_properties - 認証情報でアクセスできるプロパティを、権限レベルと算出された writable フラグ(siteOwner/siteFullUser の場合は true)とともに一覧表示します。
  • gsc_search_analytics - 主力ツールです。ディメンション、期間、フィルター、data_state に基づいてクリック数/表示回数/CTR/掲載順位を取得します。
  • 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 が追加され、 1 回の呼び出しで増加項目/減少項目/外れ値を報告できるようになりました。
  • gsc_inspect_url - 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 位にランクインしているものの、CTR が目標を下回るクエリです。タイトルとメタデータの最適化候補です。
  • gsc_query_gaps - インプレッションは獲得しているものの、クリックがほとんどないクエリです。コンテンツの機会を示すシグナルです。
  • gsc_new_queries - 過去のインプレッションがなく、現在の期間に初めて現れたクエリです。新たなトピックを把握できます。
  • gsc_top_pages_by_query - 特定のクエリでランクインしているページを確認できます。カニバリゼーション監査の入力情報です。

複数プロパティとライフサイクル(v0.5.0)

  • gsc_portfolio_summary(days, include?, exclude?) - 複数プロパティの全体像を確認できます。過去 N 日間について、プロパティごとに 1 行で表示する概要(クリック数、インプレッション数、CTR、掲載順位)と、ポートフォリオ全体の集計を表示します。任意の include / exclude フィルターが適用されます。代理店や複数ブランドの構成において、「ポートフォリオ全体の状況はどうか?」という問いに最もすばやく答える方法です。
  • gsc_trending_pages(days, limit) - 過去 N 日間のインプレッション数が、その直前の N 日間と比べて最も増加したページです。dimensions=["page"], sort_by="delta_impressions", sort_dir="desc" を指定した gsc_compare_periods のラッパーです。
  • gsc_decaying_pages(days, limit) - 同じラッパーで、昇順に並べ替えます。テコ入れが必要なページを確認できます。
  • gsc_coverage_audit(urls, site_url?) - ヒューリスティックなカバレッジ監査です。GSC のインデックス カバレッジ レポートは API で公開されていません。このツールはユーザーが指定した 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 ランキングページ)を取得し、見出しの統合リスト、単語数の中央値に基づく下限、スキーマの種類、エンティティの網羅状況に加え、2026 年版の GEO 執筆指針と検証ルールを返します。文章はホスト側が執筆し、SEOMonster はルールと根拠を提供します。content_brief プロンプトを支えます。(v0.9.0)
  • topic_cluster_map(cluster_path | pillar_url, site_url?, days?, impressions_min?)
    • 独自の GSC データからコンテンツクラスターをマッピングし、不足しているサブトピックを提示します。需要と最上位の掲載順位に基づき、クラスター内の各クエリを「守る」「最適化する」「作成する」「監視する」に分類します。「作成する」区分が、不足しているサブトピックのリストです。カニバリゼーションにフラグを立てます。GSC のみを使用し、クエリの約 47% が匿名化されていることを明示します。(v0.9.0)
  • rank_change_attribution(url | urls, change_date, query?, site_url?, pre_days?, post_days?, gap_days?, control_scope?)
    • マッチしたコントロールグループとの比較差分法を用いて、サイト上の変更によってページのクリック数が変化したかどうかを推定します(単純な変更前後の比較は行いません)。推定リフトと 95% 信頼区間、3 状態の判定(likely_positive / likely_negative / inconclusive)、さらに 2025 年の GSC データレジームの変化(インプレッションのバグ、num=100)を自動検出し、掲載順位の信頼性を引き下げる交絡要因ブロックを返します。これは観察に基づくもので、因果関係を示すものではありません。真の因果関係を検証できるのはサーバーサイドの分割テストだけです。GSC のみを使用します。(v0.9.0) AI / GEO 引用(3、v0.9.0) - AI の回答に表示され、引用されるかどうかを確認します。
  • ai_citation_readiness(url) - LLM の回答エンジンがページを抽出・引用できる構造になっているかを確認します。まず、レンダリングによる不可視性をチェックします(GPTBot / ClaudeBot / PerplexityBot は取得しても JavaScript を実行しないため、クライアント側でレンダリングされる 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 からのクリック(Organic として計上)を分けて表示します。無料。
  • ai_citation_track(prompts, brand, brand_domains?, competitors?, engines?, samples?)
    • AI エンジン(Perplexity / OpenAI / Anthropic / Gemini API + DataForSEO 経由の Google AI Overviews)における、指定したプロンプトセットを対象とするブランドの言及・引用のシェア・オブ・ボイスを、競合と比較してサンプリングします。各プロンプトにつき N 件をサンプリング(デフォルト 7 件)し、95% CI、シェア・オブ・ボイス、実行ごとの変動性を算出します。「AI ランク」ではありません(単発の実行に統計的な意味はありません)。開発者 API の出力はログイン済みのコンシューマー UI と異なること、AIO に API がないことを明示します。有料+非決定的です。少なくとも 1 つのエンジンキー、または 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 計測の準備状況を読み取り専用で監査します。ウェブデータストリーム、キーイベント、データ保持期間、コンテンツグループのディメンション、および(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 の「opportunity」 監査(推定削減量付き)と、重大度別に評価された 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、Bulk Redirect リストは v0.7.9 で追加)
  • cf_create_redirect(source, target, status_code?, ...) - エッジリダイレクトを 1 つ作成します(例:名前を変更した 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 と一致する確認トークンが必要です。すべての項目を先にローカルで検証し、不正な項目が 1 つでもあればバッチ全体を拒否します(途中まで適用されることはありません)。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 を返します。robots_ai_posture などのカスタム Content-Signal 行は管理対象のオプションではありません。オリジンの 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 を送信します。Google のみに対応する gsc_request_indexing を補完するものであり、置き換えるものではありません。 SEO_MCP_INDEXNOW_KEY と、検証ファイル https://<your-host>/<key>.txt が必要です(キー、ファイル形式、同一ホストのルールについては IndexNow のセットアップを参照してください)。
  • indexnow_bulk_submit(urls) - 同一ホストの URL を最大 10,000 件、 1 回の POST で送信します。ホストが混在するバッチは、ネットワーク呼び出しの前に クライアント側で INVALID_INPUT として拒否されます。CDN が /key.txt パスを書き換える場合、環境変数 SEO_MCP_INDEXNOW_KEY_LOCATION でデフォルトの検証ファイル URL を上書きできます。

テクニカル SEO(8、v0.3.0) - 認証情報は不要です。HTTP クライアントを内蔵しています。

  • inspect_meta(url) - 1 回の呼び出しでページ上の情報を確認します:タイトル、メタディスクリプション、meta robots、canonical、Open Graph と Twitter Card のタグ、hreflang、H1 の数。
  • check_canonical(url) - canonical リンクを監査します:自己参照、クロスホスト、プロトコルの不一致、末尾スラッシュのずれ、canonical の参照先に到達できるかを確認します。
  • mixed_content_check(url) - HTTPS ページを解析し、http:// 参照(img / script / iframe / form action / srcset)を検出します。http:// の場合は何もしません。
  • redirect_chain_audit(url, max_redirects=10) - リダイレクトチェーンを 1 ホップずつたどります。長いチェーン、プロトコルのダウングレード、ループ、最終応答が 2xx 以外の場合を検出します。
  • robots_txt_validate(site_url, probes?) - robots.txt(グループごとのルール、サイトマップ、Content-Signals)を解析し、任意で RFC 9309 の最長一致方式を使って (user_agent, url) プローブの判定を行います(標準ライブラリの最初の一致方式ではなく、Google と Bing の実際の挙動に一致します)。また、エッジにキャッシュされた古い robots.txt(キャッシュバスターで比較し、新しいコンテンツを再解析)や、オリジンの設定を上書きする Cloudflare Managed 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 レポート(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?) - 各 JSON-LD エンティティを、Google リッチリザルトの必須フィールドセットに照らして判定します。 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 の自動取得を任意で利用できます。これにより、勝ちやすさのシグナル (AI Overview や UGC によるゼロクリックリスクを示す serp_composition)と、Open PageRank を利用した競合ドメインのオーソリティも返します。単なる同等性ではなく、情報利得を明らかにします。 定型文やナビゲーションの見出しは除外されます(パターン分類によるクロームフィルター)。(v0.9.0、F6 修正 v0.9.1、F1 汎用化 v0.9.2)

各ツールの tools/list エントリーには、MCP 標準アノテーション (readOnlyHint、destructiveHint、idempotentHint、openWorldHint)が付与されているため、MCP ホストは自動承認するものと確認を求めるものを判断できます。

## ワークフロープロンプト

サーバーは、細分化されたツールを一般的な SEO ワークフローに連結する、13 個の名前付き MCP プロンプト(prompts/list / prompts/get 経由)を公開します。プロンプトを表示するホスト(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 -> canonical 一致表 -> 対応策一覧
technical_seo_auditurlinspect_meta -> check_canonical -> redirect_chain_audit -> mixed_content_check -> robots_txt_validate -> sitemap_health -> 重大度順の優先対応リスト
structured_data_auditurlsURL ごとの inspect_schema -> validate_schema ->(URL が 2 件以上の場合)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ルールに沿ったアウトライン:H2 が 5 個以上、ターゲットクエリのカバー率が 70% 以上、H1 に主要キーワードを含める
content_article (v0.7.1)outline、briefルールに沿った記事:単語数が +/-15% 以内、セクションごとの最小量、内部リンク、インライン JSON-LD のヒント、em ダッシュなし
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 -> 構成全体の統合レポート

メガツールではなくプロンプトを使う理由は、組み合わせやすさです。メガツール内のステップが失敗すると、そのメガツールのエンベロープが損なわれ、ホストは失敗した部分だけを再試行できなくなります。プロンプトはホストに手順を渡し、各ステップのエンベロープはそのまま LLM に届きます。

インストール

SEOMonster には、完全にローカルで動作する 2 つのインストール方法があります。

  • Claude Desktop 用の .mcpb バンドル。ワンクリックでインストールでき、認証情報を入力する GUI フォームを備えています。シークレット型の入力は OS のキーチェーンに保存されます。ほとんどのユーザーにおすすめです。
  • Cursor、Cline、Codex、および MCP 設定ファイルを手動で編集したい Claude Desktop の上級ユーザー向けの uvx。

どちらの方法でも同じ Python パッケージ(seo_mcp)を実行し、同じ 52 個のツールを利用できます。違いは、ホストがサーバーを起動する方法と、認証情報の取得方法だけです。

Claude Desktop(推奨):.mcpb バンドル

短い手順は3つです。OAuth の同意はターミナルから一度だけ実行します(Claude Desktop の MCP サブプロセス内の GUI フローは、実際のユーザーが完了する前にタイムアウトします。下記の事前認証が必要な理由をご覧ください)。

1. バンドルをインストールします。 GitHub のリリース(または掲載されている場合は Claude Directory)から seo-monster-0.2.0.mcpb をダウンロードし、ダブルクリックします。Claude Desktop がバンドルを検証し、uv を実行して Python 環境を構築した後、設定フォームが表示されます。

フィールド種類必須備考
Google OAuth Client Secretsファイル選択はいGoogle Cloud Console のデスクトップアプリ用クライアントシークレット JSON です。
Google OAuth Token Cache Path文字列はいデフォルトは ~/.config/seo-monster/token.json です。同意後に書き込まれます。
GSC Default Property文字列いいえ例:sc-domain:example.com または https://www.example.com/。
GA4 Default Property ID文字列いいえproperties/123456789 または 123456789 のみです。
PageSpeed Insights API Key文字列、シークレットいいえOS のキーチェーンに保存されます。強く推奨します(理由)。
Cloudflare API Token文字列、シークレットいいえOS のキーチェーンに保存されます。Cloudflare ツールを使用する場合のみ必要です。
Cloudflare Default Zone文字列いいえ例:example.com。
IndexNow Key文字列、シークレットいいえIndexNow ツールを使用する場合のみ必要です。生成した8〜128文字の16進数文字列を指定します。
IndexNow Key File URL文字列いいえデフォルトの検証場所(https://<host>/<key>.txt)を上書きします。

各フィールドに入力して保存をクリックし、拡張機能をオンに切り替えます。Claude Desktop を完全に終了し(macOS では ⌘Q)、再度開きます。

2. ターミナルから OAuth の同意を一度だけ実行します。 Google を利用するツールを使う前に、次を実行します。

uvx seo-monster auth

ブラウザーが開きます。要求されたスコープを承認してください。コマンドは、設定したパス(デフォルトは ~/.config/seo-monster/token.json)に 0600 の権限で 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 サーバーはキャッシュされたトークンを読み込み、必要に応じてサイレントに更新するだけです。

Cursor、Cline、Codex(および Claude Desktop の上級ユーザー)向けの uvx

uvx は、一時的な環境で公開済みの PyPI パッケージ seo-monster を実行します。使用するホストに対応するスニペットを、uvx の絶対パスを使って追加してください(which uvx で確認できます。GUI ホストはシェルのプロファイルを読み込みません)。

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 を使用(上級者向け)

.mcpb バンドルを使わずに claude_desktop_config.json を手動で編集する場合は、上記の Cursor と同じ形式のスニペットを使用できます。

認証

4 つのサービスはそれぞれ独立して認証されます。使用するサービスだけを設定してください。未設定のサービス用ツールを使うと、サーバーが失敗するのではなく、明確な AUTH_MISSING エラーが返されます。

クイックセットアップ(推奨):seo-monster setup

ターミナルから seo-monster setup を一度実行してください。Cloudflare トークン、PageSpeed Insights キー、IndexNow キー、デフォルトの GSC と GA4 のプロパティを対話形式で収集し、可能な項目を実際の API で検証して、0600 のアクセス許可で ~/.config/seo-mcp/config.toml に書き込みます。MCP ホストの設定にシークレットを含める必要はありません。

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

設計上、setup が行わないことが 2 つあります。

  • 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. デスクトップアプリ タイプの OAuth クライアントを作成し、クライアントシークレット JSON をダウンロードします。
  3. サーバーにそのファイルのパスと書き込み可能なトークンの保存先を指定します。
    • SEO_MCP_GOOGLE_OAUTH_CLIENT = クライアントシークレット JSON のパス
    • SEO_MCP_GOOGLE_TOKEN = トークンをキャッシュする書き込み可能なパス
  4. 一度だけ: ターミナルから uvx seo-monster auth を実行します。ブラウザーが開くので、スコープを承認してください。このコマンドは token.json(0600)を書き込み、終了します。
  5. 以降の実行では、サーバー側でトークンが自動的に更新されます。サーバーがブラウザーを開くことはありません。キャッシュされたトークンがない場合、ツールは auth コマンドを案内する AUTH_MISSING を返します。

サインインに使用する 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:プロパティの閲覧者として追加します。

OAuth とサービスアカウントの両方が設定されている場合は、OAuth が使用されます。

対応状況に関する注記。 OAuth のインストール型アプリの経路は、検証工程および本番環境を想定したスモークテストで確認しています。サービスアカウントの経路は文書化されていますが、実際の Cloud プロジェクトに対する個別検証は行っていません。SA の経路で問題が発生した場合は、issue を作成してください。

スコープ(最小構成と完全構成)

デフォルトでは、2 つの書き込み操作を含むすべてのツールに必要なスコープを要求します。

機能スコープ
GSC の読み取りwebmasters(読み取り専用を含む)
GSC サイトマップの送信webmasters
GSC インデックス登録リクエストindexing
GA4 レポートanalytics.readonly

読み取り操作だけを使用する場合は、より限定されたスコープ(webmasters.readonly + analytics.readonly)に同意し、gsc_submit_sitemap / gsc_request_indexing を呼び出さないようにできます。スコープがない状態で書き込みツールを呼び出すと、クラッシュするのではなく、対処方法とともに SCOPE_INSUFFICIENT が返されます。

PageSpeed Insights

PSI は原理上、キーなしでも動作しますが、実際には キーなしのすべての呼び出し元で匿名クォータが共有され、頻繁に使い切られます。匿名エンドポイントに対する単一の psi_analyze 呼び出しでも、多くの場合 RATE_LIMITED が返されます。匿名モードは通常運用ではなく、フォールバックとして扱ってください。

安定した PSI アクセスを得るには、次の手順を実行します。

  1. Cloud Console で PageSpeed Insights API を有効にします。
  2. API キーを作成します(Credentials > Create credentials > API key)。作成には 1 分ほどかかります。キーは無料です。
  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

IndexNow は、URL が作成または更新されたときに、Bing、Yandex、Naver、Seznam、Yep に通知します。Google は参加していないため、IndexNow ツールは gsc_request_indexing を置き換えるのではなく、補完するものです。

初回セットアップ
  1. キーを生成します。 IndexNow 仕様に従い、英字、数字、ハイフン(a-z、A-Z、0-9、-)からなる 8~128 文字の任意の文字列を使用します。一般的なパターンとしては、32 文字の小文字 16 進文字列(例: python -c "import secrets; print(secrets.token_hex(16))")や、同程度の長さのランダムな英数字があります。これは API キーと同様に扱い、コミットしないでください。
  2. SEOMonster を設定します。 SEO_MCP_INDEXNOW_KEY にその文字列を設定します(または .mcpb の設定フォームを使用します。このフィールドは機密としてマークされ、OS のキーチェーンに保存されます)。
  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 なので、通常はこれを設定する必要はありません。
同一ホストの制約

1 回の 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_INPUTURL リストが複数のホストにまたがっています。ホストごとのバッチに分割してください
RATE_LIMITEDIndexNow のホストごとのレート上限に達しました。再試行する前に待機してください
セットアップを検証する

設定後、system_status を呼び出して何が検出されるかを確認します。{"probe": true} を付けて呼び出すと、設定されたサービスごとに 1 回の低コストなライブリクエストを行い、認証情報が実際に機能することを確認します(GSC はプロパティを一覧表示し、GA4 はデフォルトプロパティに対して 1 行のレポートを実行し、Cloudflare は 1 つのゾーンを一覧表示し、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 を返し、パージは実行されません。

2 つの 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_DESTRUCTIVEalltrue にするとキャッシュ削除ツールが有効になります。デフォルトでは無効です。
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 エンジン任意(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_REQUIREDcf_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`)

このパッケージは、2 つのコンソールスクリプトエイリアスを公開しています。seo-monster(正規のエイリアスで、PyPI のディストリビューション名と一致します)と、seo-mcp(後方互換性のために残されている v0.1.x の開発用エイリアス)です。どちらも同じエントリーポイントを呼び出します。v0.2.0 以降、seo-mcp でサーバーを起動すると、標準エラー出力に 1 行の非推奨通知が出力されます。標準出力には何も出力されないため、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 をご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。