SerpApi MCP

公式

SerpApi MCP サーバー:Googleおよびその他の検索エンジンの結果を取得するためのサーバー

SerpApi MCPで何ができますか?

  • 複数エンジンでの検索 — 1回の search 呼び出しで、エンジンと場所を選択して、Google、Bing、YouTube、eBayなどの複数の検索エンジンを横断して検索できます。
  • Markdownまたはコンパクトな出力 — 大規模またはネストされたレスポンスでのトークン使用量を抑えるため、結果をMarkdownまたはコンパクトなJSONで取得できます。
  • ページの抽出 — extract を使って、単一ページの内容を読み取ったり、サイトのURLを一覧化したり、ページ数の上限を指定して複数のページをクロールしたりできます。
  • インタラクティブな結果表示 — search_table または search_dashboard を選ぶと、対応するホストで結果を並べ替え可能なテーブルまたはダッシュボードとして表示できます。

ドキュメント

SerpApi MCP Server

SerpApi と連携し、包括的な検索エンジンの検索結果とデータ抽出を提供する Model Context Protocol (MCP) サーバーの実装です。

Python 3.13+ MIT License Install in VS Code Install in Cursor

機能

  • 複数エンジン検索: Google、Bing、Yahoo、DuckDuckGo、YouTube、eBay、その他多数
  • エンジンリソース: MCP リソースからエンジンごとのパラメータスキーマを利用可能(Search Tool を参照)
  • リアルタイムの天気情報: 検索クエリを使った、場所に基づく天気情報と予報
  • 株式市場データ: 検索連携による企業の財務情報と市場データ
  • 動的な結果処理: さまざまな結果タイプを自動検出して整形
  • 柔軟な応答モード: 完全またはコンパクトな JSON 応答
  • JSON 応答(デフォルト): 完全モードまたはコンパクトモードの構造化 JSON 出力
  • Markdown 応答: トークン使用量を平均 50% 削減。複雑なネストされた JSON を返す API では 90% 以上削減できます。
  • インタラクティブ UI(MCP Apps): オプトインで利用できる search_table と search_dashboard のツールは、対応ホストで結果をインタラクティブ UI として表示します
  • Claude Desktop Extension: MCP Bundle(.mcpb)からワンクリックでローカルにインストールできます。詳細は以下を参照してください

クイックスタート

SerpApi MCP Server は、ホスト型サービスとして mcp.serpapi.com で利用できます。接続するには API キーが必要です。API キーは SerpApi ダッシュボードで確認できます。

ホスト型サーバーを使用するように Claude Desktop を設定できます。

{
  "mcpServers": {
    "serpapi": {
      "type": "http",
      "url": "https://mcp.serpapi.com/YOUR_SERPAPI_API_KEY/mcp"
    }
  }
}

次の MCP クライアントにもホスト型サーバーを追加できます。

OpenClaw

openclaw mcp add serpapi --url https://mcp.serpapi.com/YOUR_SERPAPI_API_KEY/mcp --transport streamable-http

Claude Code

claude mcp add --transport http serpapi https://mcp.serpapi.com/mcp --header "Authorization: Bearer YOUR_SERPAPI_API_KEY"

Hermes

hermes mcp add serpapi --url https://mcp.serpapi.com/YOUR_SERPAPI_API_KEY/mcp

Codex(シェルの SERPAPI_API_KEY からキーを読み込みます)

codex mcp add serpapi --url https://mcp.serpapi.com/mcp --bearer-token-env-var SERPAPI_API_KEY

セルフホスティング

git clone https://github.com/serpapi/serpapi-mcp.git
cd serpapi-mcp
uv sync && uv run src/server.py

Claude Desktop を設定します。

{
  "mcpServers": {
    "serpapi": {
      "type": "http",
      "url": "http://localhost:8000/YOUR_SERPAPI_API_KEY/mcp"
    }
  }
}

API キーを取得します: serpapi.com/manage-api-key

Claude Desktop Extension(MCP bundle)

ローカルにワンクリックでインストールするには、最新リリースから .mcpb bundle をダウンロードし、Claude Desktop で開きます(または Settings → Extensions にドロップします)。Claude Desktop はインストール時に SerpApi API キーを求め、機密設定として保存し、stdio 経由でサーバーをローカル実行します。インストール時に uv を使って Python と依存関係を用意します。同じ bundle は macOS、Windows、Linux で使用できます。

同じ stdio エントリポイントは、サーバーをサブプロセスとして起動する任意のローカル MCP ホストで使用できます。

{
  "mcpServers": {
    "serpapi": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/serpapi-mcp", "--frozen", "--no-dev", "src/stdio.py"],
      "env": { "SERPAPI_API_KEY": "YOUR_SERPAPI_API_KEY" }
    }
  }
}

認証

次の 2 つの方法をサポートしています。

  • ヘッダーベース: Authorization: Bearer YOUR_API_KEY(推奨: キーが URL やログに含まれません)
  • パスベース: /YOUR_API_KEY/mcp(ヘッダーを設定できないクライアント向け)

例:

# Header-based
curl "https://mcp.serpapi.com/mcp" -H "Authorization: Bearer your_key" -d '...'

# Path-based
curl "https://mcp.serpapi.com/your_key/mcp" -d '...'

接続、ツールの一覧表示、リソースの読み取りにはキーは不要です。search と App ツールにはキーが必要で、キーがない場合はエラーを返します。

Search tool

MCP サーバーには、すべての SerpApi エンジンと結果タイプに対応するメインの検索ツールが 1 つあります。利用可能なすべてのパラメータは SerpApi API リファレンスで確認できます。 エンジンのパラメータスキーマは MCP リソースとしても公開されています: serpapi://engines(インデックス)と serpapi://engines/<engine>。 引数補完に対応するクライアントは、serpapi://engines/{engine_name} に対するエンジン名の候補を要求できます。たとえば、プレフィックス google_f を指定すると、一致するエンジン識別子が候補として表示されます。これはリソース URI のパラメータを補完するものであり、任意の検索クエリを補完するものではありません。

指定できるパラメータは API エンジンごとに異なります。以下にパラメータの例を示します。

  • params.q(必須): 検索クエリ
  • params.engine: 検索エンジン(デフォルト: "google_light")
  • params.location: 地理的フィルター
  • params.output: 応答形式。JSON(デフォルト)の場合は省略し、Markdown の場合は "md" を指定
  • mode: 応答モード。"compact" は JSON からメタデータを削除しますが、Markdown は変更せずに返します
  • ...その他のパラメータは SerpApi API リファレンスを参照してください

例:

{"name": "search", "arguments": {"params": {"q": "coffee shops", "location": "Austin, TX"}}}
{"name": "search", "arguments": {"params": {"q": "weather in London"}}}
{"name": "search", "arguments": {"params": {"q": "AAPL stock"}}}
{"name": "search", "arguments": {"params": {"q": "news"}, "mode": "compact"}}
{"name": "search", "arguments": {"params": {"q": "detailed search"}, "mode": "complete"}}
{"name": "search", "arguments": {"params": {"q": "news", "output": "md"}}}
{"name": "search", "arguments": {"params": {"engine": "amazon", "k": "mechanical keyboards", "amazon_domain": "amazon.com", "output": "md"}}}
{"name": "search", "arguments": {"params": {"engine": "google_scholar", "q": "retrieval augmented generation"}}}
{"name": "search", "arguments": {"params": {"engine": "youtube", "search_query": "how to make espresso"}}}
{"name": "search", "arguments": {"params": {"engine": "apple_app_store", "term": "habit tracker"}}}
{"name": "search", "arguments": {"params": {"engine": "ebay", "_nkw": "vintage mechanical keyboard"}}}

対応エンジン: Google、Bing、Yahoo、DuckDuckGo、YouTube、eBay など(serpapi://engines を参照)。

結果タイプ: アンサーボックス、オーガニック検索結果、ニュース、画像、ショッピングなどを自動検出して整形します。

検索応答では既存の MCP structuredContent.result 文字列が保持され、テキストコンテンツにも同じ文字列が含まれます。JSON 出力では、result にシリアライズされた JSON が含まれます。既存のクライアントは引き続き JSON.parse(response.structuredContent.result) で解析できます。Markdown 出力では、変更されていない Markdown が含まれます。エラーとキャンセルにも同じラッパーが使用されます。検索の実行に失敗すると isError: true が設定されます。FastMCP の高レベルな call_tool() を使用するクライアントは ToolError を処理するか、call_tool_mcp() を使って結果フラグを確認してください。MCP ツールの結果を参照してください。

search はエンジンカタログとエンジン固有のルールを使って、不足しているパラメータを特定します。MCP 2026-07-28 に対応するクライアントには、検索の実行前にフォームが表示されます。入力された回答は検証されます。拒否またはキャンセルした場合、検索は実行されません。従来のクライアントやフォームによる入力要求に対応していないクライアントには、不足しているパラメータを列挙したエラーが返されるため、エージェントは会話内で質問できます。MCP 入力リクエストを参照してください。

  • Google Flights: 出発地と到着地の識別子、出発日、往復の場合は帰着日が必要です。日付と空港識別子は検証されます。トークンベースの検索、複数都市の旅程、selected_flights_json は従来どおり動作します。
  • Google Hotels: 目的地またはホテルのクエリ、チェックイン日、チェックアウト日が必要です。チェックアウト日はチェックイン日より後でなければなりません。宿泊人数やその他の任意フィルターには、呼び出し元の値または API のデフォルト値が引き続き使用されます。
  • Google Maps Directions: 出発地と目的地の住所が不足している場合に必要です。座標または指定済みの場所データ ID が、対応する地点の情報として使用されます。
  • その他のカタログ内のエンジンでは、YouTube の search_query、Yelp の find_loc、Amazon の k など、必須フィールドが使用されます。エンジンのルールでは、Amazon のカテゴリノード、eBay のカテゴリ、Google Scholar の引用検索など、既知のデフォルト値や代替手段が考慮されます。

回答によって別の必須項目が判明した場合、ツールは残りのフィールドを一覧表示します。エージェントは新たな呼び出しでそれらを指定できます。フォームでは文字列、数値、ブール値、単一選択フィールドがサポートされます。サポートされていない複雑なフィールドには、不足パラメータのエラーが返されます。不明なエンジンは SerpApi にそのまま渡されます。

Extract tool

extract ツールはウェブページを読み取り、その内容を構造化 JSON または Markdown として返します。単一ページの抽出、ウェブサイトの URL の検出、複数ページのクロールができます。利用可能なすべてのパラメータは Extract API リファレンスまたは serpapi://engines/extract リソースで確認できます。

指定できるパラメータの例:

  • params.url(必須): ページまたはウェブサイトの URL
  • params.mode: 抽出モード。"scrape"(デフォルト)は 1 ページを読み取り、"map" は URL を検出し、"crawl" は複数ページを抽出します
  • params.include_markdown: ページの内容を Markdown として含めます。スクレイプとクロールではデフォルトで true が設定されます。無効にするには false を指定します
  • params.output: 応答形式。完全モードではデフォルトで "json"、コンパクトモードでは "md" が設定されます。形式を上書きするには明示的に指定します。
  • params.max_pages: クロールする最大ページ数(開始ページを含む。デフォルト: 10、最大: 100)
  • params.json_restrictor: 返すフィールドを選択します(例: "markdown,error")
  • mode: 応答モード。"complete"(デフォルト)は完全な応答を返します。"compact" はデフォルトでネイティブ Markdown を返します。params.output="json" を明示的に指定すると、単一ページのコンパクトな抽出では、存在する場合にトップレベルの markdown フィールドが保持され、API エラーも保持されます。別のエンジンにリダイレクトされた結果など、Markdown を含まない応答では、メタデータを削除したうえでデータが保持されます。JSON を使用する場合、明示的に指定した params.json_restrictor の値と params.include_markdown=false が優先されます。マップとクロールでは、コンパクト JSON からメタデータが削除されます。Markdown 出力は変更せずに返されます。

例:

{"name": "extract", "arguments": {"params": {"url": "https://example.com"}}}
{"name": "extract", "arguments": {"params": {"url": "https://example.com"}, "mode": "compact"}}
{"name": "extract", "arguments": {"params": {"url": "https://example.com", "output": "md"}}}
{"name": "extract", "arguments": {"params": {"url": "https://example.com", "mode": "map"}}}
{"name": "extract", "arguments": {"params": {"url": "https://example.com", "mode": "crawl", "max_pages": 2}}}

単一ページの内容をネイティブ Markdown として取得するには、mode="compact" を使用します。params.output="json" を追加すると、markdown フィールドを含む JSON が返されます。完全な JSON ではこのフィールドがデフォルトで含まれます。クロールの JSON では、各 pages エントリに含まれます。params.output="json" と params.include_markdown=false を設定すると、Markdown を除いた残りの構造化フィールドが保持されます。

キャッシュされていないリクエストでクロールを行う場合、抽出に成功したページごとに検索クレジットを 1 つ消費します。抽出するページ数を制限するには params.max_pages を使用してください。

インタラクティブ UI(MCP apps)

search ツールはデフォルトで JSON を返します。MCP Apps 拡張機能(SEP-1865)に対応するホストでは、オプトインで利用できる 2 つのツールが会話内に結果をインタラクティブ UI として直接表示します。そのため、大量の SERP JSON がモデルのコンテキストウィンドウに入ることはありません。

  • search_table: オーガニック検索結果を、並べ替えと検索が可能なテーブルとして表示します。
  • search_dashboard: 概要指標、ソース別の内訳グラフ、クリックして詳細パネルを展開できる結果テーブルを表示します。

どちらも search と同じ params を受け取ります。MCP Apps に対応していないホストは、これらのツールを無視します。

トラブルシューティング

  • 「Missing API key」: URL パス /{YOUR_KEY}/mcp またはヘッダー Bearer YOUR_KEY にキーを含めてください
  • 「Invalid key」: serpapi.com/dashboard で確認してください
  • 「Rate limit exceeded」: しばらく待つか、SerpApi のプランをアップグレードしてください
  • 「No results」: 別のクエリまたはエンジンを試してください

プライバシーポリシー

  • 送信される情報: MCP ホストがツール呼び出しに渡すパラメータのみです。サーバーがホスト上の会話の残りの部分、ファイル、メモリ、履歴を見ることはありません。
  • 転送される情報: 各検索は API キーとともに serpapi.com に送信され、結果は変更されずに返されます。SerpApi による検索とアカウントの取り扱いについては、SerpApi プライバシーポリシーを参照してください。
  • 保持される情報: mcp.serpapi.com はリクエストのメトリクス(メソッド、ステータスコード、所要時間)を記録しますが、クエリや結果は保存しません。URL パス内のキーはリクエストログに記録される可能性があるため、ヘッダーの使用を推奨します。
  • ローカル bundle: Claude Desktop extension はお使いのマシン上で実行され、キーを Claude Desktop の設定に保存し、serpapi.com を直接呼び出します。mcp.serpapi.com を経由するデータはありません。
  • お問い合わせ: privacy@serpapi.com、またはissueを作成してください。

貢献

開発環境のセットアップ、スキーマ更新コマンド、テスト、Docker と MCP Bundle のビルド、リリースについては CONTRIBUTING.md を参照してください。

ライセンス

MIT License。詳細は LICENSE ファイルを参照してください。