現状のModel Context Protocol(MCP)はサーバーをローカルで実行する前提の仕様になっている
はじめに
この記事では、Claude DesktopでMCPを利用する視点から、MCPの仕組みや設計思想について解説するものです。MCPがローカル実行前提で動作する現状について整理し、なぜそうなっているのか考察してみました。
Model Context Protocol(MCP)は、AIエージェントと外部データソースをつなぐプロトコルです。
MCPの主な用途は、AIモデルが直接アクセスできないツールやデータへの橋渡しをすることです(公式: https://modelcontextprotocol.io/docs/concepts/overview#why-use-mcp)。具体的には次のようなケースがあります:
- ローカル環境のファイルアクセス
- シェルコマンドの実行
- プライベートまたは独自データへのアクセス
MCPサーバーの基本的な動かし方
MCP公式で紹介されているClaude Desktopの設定例を見てみましょう
{
"mcpServers": {
"my-stdin-mcp": {
"command": "python3",
"args": ["./your_mcp_server.py"]
}
}
}
コマンドと引数の組み合わせで呼び出す設計になっているため、例えばローカルにある任意のサーバーへ接続するような構成にはなっていないことがわかります。
MCPの通信方式は2つ用意されています
- HTTP with SSE(Server-Sent Events)
- stdin/stdout
公式の説明はこちら:
https://modelcontextprotocol.io/docs/concepts/architecture#transport-layer
HTTP with SSEは、一見するとリモートサーバー向けの方式に見えますが、公式ではローカル実行前提のMCPサーバーに対して標準的に使用される方式とされています。これはTCPやUnix Domain Socketと異なり、プラットフォームを問わず実装しやすい利点があるためです。
現状のMCPはサーバーをローカルで実行する前提の仕様なのか?
公式の明言
https://modelcontextprotocol.io/quickstart/user
ここに以下のように書かれています:
"Because servers are locally run, MCP currently only supports desktop hosts. Remote hosts are in active development."
ローカル実行前提の設計思想
- ファイルアクセス
- 環境変数やCLI実行
- プライベートデータの保護
- 外部APIとの違い: MCPはAIモデル自身が直接外部APIを呼べない制約があるため、その代替手段として設計されている。MCPサーバーを経由することで、モデルが安全かつ制御された形で外部の情報にアクセスできる。詳細は公式ドキュメント https://modelcontextprotocol.io/docs/concepts/overview#why-use-mcp に記載されている。
なぜサーバークライアント構成なのか
MCPはローカル実行前提でありながら、わざわざサーバークライアント構成を取っています。これには理由があります。
公式ドキュメントでは次のように説明されています:
https://modelcontextprotocol.io/docs/concepts/overview#why-use-mcp
Since language models can't access tools and data directly, MCP allows models to access them via a server in a structured and secure way.
言語モデルは直接外部ツールやデータにアクセスできない制約があります。そのため、MCPではサーバーが仲介する形で、モデルが安全に、かつ一貫した方法でツールやデータにアクセスできるように設計されています。
この構造を採用することで、クライアント(AIモデル側)とサーバー(外部ツールやデータ側)の役割が明確に分離されます。ここでいう外部環境とは、ローカルのファイルシステム、シェルコマンド実行、プライベートなデータベース、APIなど、モデルの実行環境ごとに異なる外部リソースのことです。これにより、モデル側はサーバーが提供する統一されたインターフェースだけを意識すればよくなり、外部環境に依存しない柔軟な設計が可能になります。また、サーバー側を差し替えたり環境ごとに異なる実装に対応したりすることが容易になる利点があります。
外部MCPサーバーはどうなるのか
MCPの設定では、「server_url」のようにリモートサーバーを指定する方法は用意されていません。
どうしてもリモートの外部APIと連携したい場合は、次のような方法をとることになります。
- ローカルにProxy MCP Serverを立てて、その中で外部APIとの通信を行う
- MCPサーバーのコマンド内で外部APIを利用する処理を実装する
まとめ
MCPの概要を聞いて真っ先に思い浮かべるのがWebサービスのserver-client構成なので、それに引っ張られてしまいがちですが、実際にはローカルが前提となっています。
MCPサーバーのリポジトリからそれぞれのMCPサーバーの使用方法を見ていってもそのことがわかりやすいので、参考にしてみてください。
Discussion