powered by TechFeed
表示モード
Deep Dive

ローカルとリモートのMCPサーバー、何が違うのか — AIエージェントがツールにアクセスする仕組みをCircleCIが解説

7月25日、CircleCIが「What is a remote MCP server? Local vs. remote MCP explained」と題した記事を公開した。この記事では、ローカルMCPサーバーとリモートMCPサーバーの違いと使い分けについて詳しく紹介されている。

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を参照していただきたい。