7月25日、CircleCIが「What is a remote MCP server? Local vs. remote MCP explained」と題した記事を公開した。この記事では、ローカルMCPサーバーとリモートMCPサーバーの違いと使い分けについて詳しく紹介されている。
AIエージェントが開発ワークフローに組み込まれるにつれ、「エージェントがどのツールにどうやってアクセスするか」という問いが現実的な設計課題になってきた。その文脈で注目されているのがModel Context Protocol(MCP)だ。Anthropicが2024年末に公開したオープン標準で、AIアプリケーションと外部ツール・データを接続するための共通インターフェースとして機能する。仕様の詳細はMCP公式仕様書、背景についてはAnthropic公式ブログの発表記事も参照されたい。
MCPにはクライアント(IDEアシスタントやチャットUI、自律エージェントなどAI側)とサーバー(GitHub、CI基盤などのシステム手前に立ち、モデルが呼べる操作を公開する側)の2つの役割がある。サーバーが公開する能力は3種類——ツール(「このビルドのログを取得する」などモデルが呼び出せるアクション)、リソース(読み取り可能なデータ)、プロンプト(再利用可能なテンプレート)だ。
ローカルとリモート、何が違うか
MCPサーバーの「ローカル」「リモート(ホスト型)」の違いは、サーバーがどこで動いてクライアントがどう接続するか、この1点に集約される。
ローカルMCPサーバーはクライアントが自分のマシン上で子プロセスとして起動し、標準入出力(stdio)でやり取りする。CursorなどのIDEや、ターミナルのCLIエージェントがこの形式で動く。
リモート(ホスト型)MCPサーバーはHTTP経由でアクセスするネットワーク上のサービスとして動作する。ブラウザベースのAIエージェントや、CIランナー、バックエンドサービスからも到達できる。
| 観点 | ローカルMCPサーバー | リモートMCPサーバー |
|---|---|---|
| 動作場所 | 開発者のマシン(子プロセス) | クラウドなどのホスト環境 |
| トランスポート | stdio | Streamable HTTP(POST + SSE) |
| セットアップ | 開発者ごとにインストール | URLを指定するだけ |
| 認証 | ローカルの環境変数・シークレット | 集中管理されたOAuth 2.1 |
| 更新 | ユーザーが各自で更新 | オペレーターが1回更新すれば全員に即反映 |
| 接続可能なクライアント | ローカルIDEやCLI | ブラウザ含む全クライアント |
| スケーリング | プロセス1つにつき1ユーザー | 1デプロイでチーム全体をカバー |
ローカルサーバーが適するのは、ローカルファイルシステムや端末固有の環境変数、マシンローカルのスクリプトにアクセスする必要がある場合だ。ネットワークオーバーヘッドがなく、オフライン環境でも動く。
リモートサーバーが適するのは、チームで共有したい場合やブラウザベースのエージェントと連携する場合だ。stdioのサブプロセスを起動できないブラウザ環境では、リモートサーバー一択になる。
リモートサーバーの内部構造
トランスポート:Streamable HTTP
ローカルのstdioに対し、リモートサーバーはStreamable HTTPを使う。クライアントはHTTP POSTでリクエストを送り、サーバーはSSE(Server-Sent Events)でストリーミング応答を返す単一エンドポイント設計だ。旧来の2エンドポイント型HTTP+SSEは現在非推奨となっている。ステートレスな設計なので、通常のロードバランサーやプロキシの背後に置いて水平スケールできる。
認証:OAuthによる集中管理
ローカルサーバーは環境変数のAPIトークンをそのまま流用できるが、リモートサーバーはOAuth 2.1(PKCEが必須)を標準とする。クライアントが認可サーバーにリダイレクト→サインインとコンセント→トークン発行→以降のリクエストにAuthorization: Bearer <token>ヘッダーを付与、という一般的なOAuthフローだ。多くのサーバーはOAuth discoveryと動的クライアント登録をサポートしており、「接続」ボタンを押してサインインするだけでセットアップが完了する。
設定ファイルでの見た目の違い
ローカルかリモートかは設定ファイルを見れば一目瞭然だ。
{
"mcpServers": {
"local-example": {
"command": "npx",
"args": ["-y", "example-mcp-server"]
},
"remote-example": {
"url": "https://mcp.example.com/mcp"
}
}
}
commandがあればstdio(ローカル)、urlがあればHTTP(リモート)だ。
CircleCIのホスト型MCPサーバー
CircleCIはホスト型リモートMCPサーバー(https://mcp.circleci.com/v1/mcp)を提供している。ビルドのログ、フレイキーなテスト、デプロイ結果などのパイプライン情報に、MCP対応のAIアプリケーションから直接アクセスできる実装例として紹介されている。Claude Codeからは以下のコマンド1行で追加できる。
claude mcp add --transport http circleci https://mcp.circleci.com/v1/mcp -s user
接続後、エージェントは次のような問いに自律的に答えられるようになる。
- 「このブランチの最新パイプラインはなぜ失敗したか?」
- 「今週フレイキーだったテストはどれか?」
- 「ジョブXの失敗ログを要約してほしい」
ローカル環境のCLIベースのワークフローには、CircleCI CLIがstdioのローカルMCPサーバーとしても機能するため、こちらを使うこともできる。
詳細はWhat is a remote MCP server? Local vs. remote MCP explainedを参照していただきたい。