seo-monster について
SEOMonster は、AI アシスタント内で SEO 分析を行いたいユーザー向けのローカルファーストな SEO 用 MCP サーバーです。ユーザー自身の Search Console、GA4、PageSpeed のデータを基に動作し、認証情報は実行時に読み込まれます。
主な機能
- 01複数の SEO データソースを対象とする 70 のツール
- 02すべてのツールで共通の JSON 結果形式
- 03Search Console によるクエリ機会とギャップの分析
- 04AI 引用のシェア・オブ・ボイス追跡
- 05設定で制御される Cloudflare と IndexNow の書き込み操作
活用シーン
- 01Search Console のデータから順位改善が見込めるトピックを特定
- 02公開前のテクニカル SEO と構造化データのチェック
- 03AI 回答エンジンにおけるブランド言及の追跡
MCP 対応
SEOMonster は stdio 方式の MCP サーバーで、Claude、Cursor、Cline、Codex などのホストから起動され、70 のツールを公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx seo-monsterSEO_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.jsonSEO_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
70掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| probe | boolean | いいえ | true の場合、設定済みの各サービスに対して低コストのライブ呼び出しを 1 回行い、認証情報が実際に機能することを確認します。デフォルトは false です。 |
詳細
新しい SEO ダッシュボードの使い方を覚える必要はありません。ただ聞くだけです。
すでにお使いの AI アシスタント内で動作するオープンソースの SEO アナリストです。
ご自身の Search Console、Analytics、PageSpeed のデータを使って、お使いのマシン上で動作します。
新しいツールを開く必要はありません。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トークンも必要です。 - 軽量です。 標準ライブラリ、
mcpSDK、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 · 技術 · スキーマ)。クリックして展開します。
主要ツール
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)を通じて検索ボリューム/難易度/検索意図を取得します。外部の検索ボリュームは精度が低い参考値です。比較時の補助としてのみ使用し、判断基準にはしないでください。
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)
- 監査で評価される SEO/クロール/セキュリティ設定(SSL モード、Always-Use-HTTPS、Automatic HTTPS Rewrites、Brotli、ブラウザーキャッシュ TTL、HSTS)を書き込み、監査から修正までの流れを完結させます。ゲートあり。ssl_mode または HSTS を引き上げる場合は
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)
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)
- 被リンク数の多いページから、GSC の検索順位があと一歩のページ(デフォルトでは実際の表示回数がある順位 8~20)への
具体的な内部リンクを、アンカーテキストとともに提案します。関連性の高さと内部オーソリティでソースを順位付けし、
ターゲットにすでにリンクしているページは除外し、アンカーテキストのバランスを取り、nofollow の提案は行いません。
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_verify | urls、zone?、skip_psi? | cf_purge_cache -> gsc_request_indexing -> indexnow_bulk_submit -> psi_analyze |
weekly_review | days?、site_url? | gsc_compare_periods(sort_dir による増加 + 減少)-> gsc_query_opportunities -> gsc_query_gaps -> ga4_organic_search_overview |
content_audit | site_url?、days?、top_n_queries? | gsc_top_queries -> クエリごとの gsc_top_pages_by_query -> カニバリゼーションの推奨 |
migration_check | urls、site_url? | gsc_batch_inspect_urls -> gsc_list_sitemaps -> canonical 一致表 -> 対応策一覧 |
technical_seo_audit | url | inspect_meta -> check_canonical -> redirect_chain_audit -> mixed_content_check -> robots_txt_validate -> sitemap_health -> 重大度順の優先対応リスト |
structured_data_audit | urls | URL ごとの inspect_schema -> validate_schema ->(URL が 2 件以上の場合)hreflang_consistency_check -> URL ごと + URL 間のレポート |
pre_deploy_check | urls | robots_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 サービスアカウントや、プロパティごとのメールアドレスへの権限付与は必要ありません。
- Google Cloud Console でプロジェクトを作成する(または既存のプロジェクトを選択する)とともに、使用する API を有効にします。
- Search Console API
- Indexing API(
gsc_request_indexing用) - Google Analytics Data API(GA4 ツール用)
- PageSpeed Insights API(PSI キーが必要な場合のみ。下記を参照)
- デスクトップアプリ タイプの OAuth クライアントを作成し、クライアントシークレット JSON をダウンロードします。
- サーバーにそのファイルのパスと書き込み可能なトークンの保存先を指定します。
SEO_MCP_GOOGLE_OAUTH_CLIENT= クライアントシークレット JSON のパスSEO_MCP_GOOGLE_TOKEN= トークンをキャッシュする書き込み可能なパス
- 一度だけ: ターミナルから
uvx seo-monster authを実行します。ブラウザーが開くので、スコープを承認してください。このコマンドはtoken.json(0600)を書き込み、終了します。 - 以降の実行では、サーバー側でトークンが自動的に更新されます。サーバーがブラウザーを開くことはありません。キャッシュされたトークンがない場合、ツールは
authコマンドを案内するAUTH_MISSINGを返します。
サインインに使用する Google アカウントには、クエリ対象の Search Console プロパティと GA4 プロパティへのアクセス権が必要です。
トークンキャッシュのセキュリティ強化。 キャッシュされたトークンは更新可能であり、要求されたスコープに対する長期有効な認証情報と同等です。サーバーはトークンを 0600、親ディレクトリを 0700 のアクセス許可で書き込みます。SEO_MCP_GOOGLE_TOKEN は自分で管理できるディレクトリ(例:~/.config/seo-monster/)に置き、共有ファイルシステムには保存しないでください。
Google - サービスアカウント(高度な設定、ヘッドレス環境)
ブラウザーを使用できない完全なヘッドレス環境やサーバー環境では、次の手順を実行します。
- サービスアカウントを作成し、その JSON キーをダウンロードします。
SEO_MCP_GOOGLE_CREDENTIALS(または標準のGOOGLE_APPLICATION_CREDENTIALS)にキーのパスを設定します。- 各プロパティでサービスアカウントのメールアドレスにアクセス権を付与します。
- 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 アクセスを得るには、次の手順を実行します。
- Cloud Console で PageSpeed Insights API を有効にします。
- API キーを作成します(Credentials > Create credentials > API key)。作成には 1 分ほどかかります。キーは無料です。
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:Read | cf_list_zones、cf_zone_info |
Zone: DNS:Read | cf_list_dns |
Account: Account Analytics:Read | cf_web_analytics |
Zone: Cache Purge:Purge | cf_purge_cache、cf_purge_cache_all(破壊的モードを有効にする場合のみ) |
Zone: Single Redirect:Edit | cf_create_redirect、cf_delete_redirect(破壊的モードを有効にする場合のみ)。cf_list_redirects ではこの権限で読み取りを行います |
Zone: Zone Settings:Edit | cf_settings_update(破壊的モードを有効にする場合のみ)。cf_settings_audit に必要なのは Zone Settings Read のみです |
Account: Account Rulesets:Edit + Account Filter Lists:Edit | cf_bulk_redirect_upsert(破壊的モードを有効にする場合のみ) |
IndexNow
IndexNow は、URL が作成または更新されたときに、Bing、Yandex、Naver、Seznam、Yep に通知します。Google は参加していないため、IndexNow ツールは gsc_request_indexing を置き換えるのではなく、補完するものです。
初回セットアップ
- キーを生成します。 IndexNow 仕様に従い、英字、数字、ハイフン(
a-z、A-Z、0-9、-)からなる 8~128 文字の任意の文字列を使用します。一般的なパターンとしては、32 文字の小文字 16 進文字列(例:python -c "import secrets; print(secrets.token_hex(16))")や、同程度の長さのランダムな英数字があります。これは API キーと同様に扱い、コミットしないでください。 - SEOMonster を設定します。
SEO_MCP_INDEXNOW_KEYにその文字列を設定します(または.mcpbの設定フォームを使用します。このフィールドは機密としてマークされ、OS のキーチェーンに保存されます)。 - 検証ファイルをホストします。
https://<your-host>/<key>.txtに配置します。ファイルの内容は、末尾の改行、BOM、余分な空白、HTML ラッパーを一切含まない、キー文字列そのものでなければなりません。Content-Type はtext/plainにしてください。先に進む前にcurl -i https://<your-host>/<key>.txtで確認してください。レスポンスボディはキーとバイト単位で同一でなければなりません。 - (任意) 検証ファイルが標準以外の 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_INPUT | URL リストが複数のホストにまたがっています。ホストごとのバッチに分割してください |
RATE_LIMITED | IndexNow のホストごとのレート上限に達しました。再試行する前に待機してください |
セットアップを検証する
設定後、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_CLIENT | OAuth クライアントシークレット JSON のパス(推奨)。 | |
SEO_MCP_GOOGLE_TOKEN | 書き込み可能なキャッシュ済みトークンのパス(OAuth)。 | |
SEO_MCP_GOOGLE_CREDENTIALS | サービスアカウントキーのパス(代替)。 | |
GOOGLE_APPLICATION_CREDENTIALS | 標準のサービスアカウント用フォールバック。 | |
SEO_MCP_GSC_DEFAULT_SITE | GSC | デフォルトのプロパティ。例:sc-domain:example.com。 |
SEO_MCP_GA4_PROPERTY_ID | GA4 | デフォルトのプロパティ。例:properties/123456789。 |
SEO_MCP_DATA_STATE | GSC | all(デフォルト)または final。 |
PSI_API_KEY | PSI | PageSpeed Insights API キー(任意)。 |
CF_API_TOKEN | CF | Cloudflare API トークン。 |
CF_ZONE | CF | デフォルトのゾーンホスト名。 |
SEO_MCP_INDEXNOW_KEY | IndexNow | IndexNow ツール用の共有キー(機密情報)。 |
SEO_MCP_INDEXNOW_KEY_LOCATION | IndexNow | デフォルトのキーファイル URL を上書きします(任意)。 |
SEO_MCP_ALLOW_DESTRUCTIVE | all | true にするとキャッシュ削除ツールが有効になります。デフォルトでは無効です。 |
SEO_MCP_CONFIG | all | TOML 設定ファイルのパス。 |
DATAFORSEO_LOGIN / DATAFORSEO_PASSWORD | DataForSEO | 任意(v0.9):SERP/PAA、キーワードの検索ボリューム・難易度・検索意図、競合ギャップ、Google AIO。 |
OPENPAGERANK_API_KEY | Open PageRank | 任意(v0.9):無料の競合ドメインオーソリティ。 |
PERPLEXITY_API_KEY / OPENAI_API_KEY / ANTHROPIC_API_KEY / GEMINI_API_KEY | AI エンジン | 任意(v0.9):ai_citation_track 用のエンジン(任意の組み合わせ)。 |
GOOGLE_ADS_DEVELOPER_TOKEN / GOOGLE_ADS_CUSTOMER_ID | Google 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_DISABLED | Google 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、バージョンがmcpSDK のバージョン(例:1.27.1)として表示されます。 サーバー名の文字列は、Server("seo-mcp")に渡した値であり、後方互換性のために 変更せずに維持されています。バージョン表示は SDK の仕様によるものです (create_initialization_options()はパッケージのバージョンを引き継ぎません)。 パッケージの実際のバージョンはpyproject.tomlとseo_mcp.__version__に記載されています。
変更履歴
各リリースの記録と、各バージョンの外部テストで実施すべき検証チェックは、 CHANGELOG.md に記載されています。
プライバシー
SEOMonster はすべてお使いのマシン上で動作し、設定した上流 API とのみ通信します。 メンテナーがお客様のデータ、認証情報、クエリ、ツール呼び出しを見ることはありません。 詳細は PRIVACY.md をご覧ください。
ライセンス
MIT です。詳しくは LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。