nikkie-ftnextの日記

イベントレポートや読書メモを発信

Model Context Protocol 素振りの記:Brave Search serverをstdio(docker run)で動かす

はじめに

ふしゅ〜 nikkieです

これまでのMCPの素振りを元に、今回はやりたかったことに取り組みます。
なるか、節約!?

目次

前回のMCP! stdioだけでなくsseでも動かす

ここまでの一連の素振りで、繰り返しQuickstartに取り組んできました。

  • クライアントにClaudeだけでなく、GPTやGeminiも使う
  • サーバ・クライアント間のtransportをstdioだけでなく、sseも使う

MCPまわりの手札を増やしたので、いよいよ月200ドル節約の可能性に取り組みます1

Brave Searchは、MCP公式のサーバです。

Brave Search - Web and local search using Brave’s Search API (Web and browser automation (Example Servers))

実装はこちら。
TypeScriptで書かれています。

Brave Search MCP ServerはDockerで動かし、サーバ・クライアント間をstdioでtransportします。

Brave Search serverをstdioで動かす

Brave SearchのAPIを使えるようにする

https://github.com/modelcontextprotocol/servers/tree/e65ec2d55114ac9f6a58251e93f2b41e5f0bc067/src/brave-search#getting-an-api-key

  • Brave Search APIのアカウント登録
  • Free plan(無料だがクレジットカードの登録が必要)
  • APIキーの取得(環境変数BRAVE_API_KEY

api-dashboard.search.brave.com

Dockerイメージをビルド

READMEに沿ってビルドします。
https://github.com/modelcontextprotocol/servers/tree/e65ec2d55114ac9f6a58251e93f2b41e5f0bc067/src/brave-search#build

% git clone git@github.com:modelcontextprotocol/servers.git mcp-servers
% cd mcp-servers
% docker build -t mcp/brave-search:latest -f src/brave-search/Dockerfile .

環境変数BRAVE_API_KEYを設定したシェルで、このイメージは動かせます。

% docker run -i --rm -e BRAVE_API_KEY mcp/brave-search
Brave Search MCP Server running on stdio

(なお、Ctrl+Cが効かなかったので、別のシェルでdocker stopして止めました)

クライアントでdocker runする

StdioServerParametersdocker runします。
Claude Desktopの設定と同じということに気づきました。
https://github.com/modelcontextprotocol/servers/tree/e65ec2d55114ac9f6a58251e93f2b41e5f0bc067/src/brave-search#docker

環境変数PATHを渡しているのは、私のdockerコマンドが~/.rd/bin/dockerにあるためです。
指定しないと(subprocessで)dockerコマンドが見つかりませんでした。

LLMにBrave Searchを使ってもらう

gemini-2.0-flash

2025-03-12 20:06:51,602 | INFO | __main__:process_query:91 - [Calling tool brave_web_search with args {'count': 5, 'query': '色づく世界の明日から 聖地'}]

GPT-4o

2025-03-12 20:10:22,194 | INFO | __main__:process_query:89 - [Calling tool brave_web_search with args {'query': '色づく世界の明日から 聖地 長崎', 'count': 5}]

検索クエリの組み立てや応答内容を比べると、GPT-4oの方が勝っているように感じます。
またGeminiは検索してくれないことがありました2

Claudeは未評価です(宿題として、LLMという依存を注入するようにしたい)

終わりに

MCPでBrave SearchをGeminiとGPTに使ってもらいました。
MCPstdio transportでdocker runすることで、TypeScript実装のサーバもPython実装のクライアントから使えています!

ChatGPT deep researchの費用の節約は道半ば、実装の宿題が残りました。

MCPのtransportは私の想像に反してstdioが前提なのかもしれません(Claude Desktopを見た感じ)

ソースコードの全容はこちらです


  1. MCPの優先度を上げた理由が節約でした。
  2. 調べてよ