mcp-server-proxy について
mcp-server-proxyは、MCPのSSEトランスポートを標準的なHTTPリクエスト/レスポンスに変換します。SSEの詳細を実装せずに、MCPクライアントをHTTPベースのサーバー実装へ接続したい開発者や、通信内容を調べたい開発者向けです。
主な機能
- 01MCP SSEとHTTPリクエストの中継
- 02リクエストとレスポンスの内容確認
- 03initialize、tools/list、tools/callに対応
- 04inspectとserveコマンド
活用シーン
- 01MCPクライアントからHTTP実装へ接続
- 02MCPクライアントとサーバー間の通信を調査
- 03対応する3つのMCPメソッドをテスト
MCP 対応
SSEを使うMCPクライアントと、標準的なHTTPリクエスト/レスポンスで処理するサーバーの間でプロキシとして動作します。現在、`initialize`、`tools/list`、`tools/call`に対応しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mcp-server-proxy
MCP プロトコルの SSE トランスポート層を標準的な HTTP リクエスト/レスポンスに変換するプロキシサーバーです。MCP サーバーの開発と利用を簡素化します。
このツールが必要な理由
MCP(Model Context Protocol)は、AI アプリケーションに標準化されたデータソースとツールの統合方法を提供するオープンプロトコルです。現在、MCP は主に次の 2 種類のトランスポートプロトコルをサポートしています。
-
Stdio トランスポートプロトコル:
- 😫 ユーザーのローカル環境にコマンドラインツールをインストールする必要があり、実行環境に特定の要件があります
- 😫 ユーザーは環境を適切に設定する必要があります
-
SSE(Server-Sent Events)トランスポートプロトコル:
- 👍 HTTP の長時間接続に基づいているため、ユーザーの設定は比較的簡単で、主にサービスアドレスを設定するだけです
- 😫 現時点では、関連する開発ツールやサンプルが比較的少ないです
このツールは、次の方法で MCP サーバーの開発と利用を簡素化します。
- SSE トランスポートプロトコルを使用して MCP クライアントと通信するため、ユーザーはサービスアドレスを設定するだけで利用できます
- MCP ツールの呼び出しを標準的な HTTP リクエスト/レスポンスに変換するため、開発者は SSE プロトコルの詳細を気にせず、任意のプログラミング言語で実装できます
機能
- MCP プロトコルの SSE トランスポート層を標準的な HTTP リクエスト/レスポンスに変換できます
- リクエストとレスポンスを検査する機能を備えています。主に MCP クライアントとサーバーのやり取りを調査するために使用します
- 現在、
initialize、tools/list、tools/callの 3 つのメソッドをサポートしています
インストール
go install github.com/leizongmin/mcp-server-proxy@latest
使い方
このツールには、主に 2 つのコマンドがあります。
1. inspect コマンド
リクエストとレスポンスの内容を検査するために使用します。主に MCP クライアントとサーバーのやり取りを調査するために使用します。
mcp-server-proxy inspect <local_url> <target_url>
例:
mcp-server-proxy inspect http://localhost:8080 http://example.com
2. serve コマンド
プロキシサーバーを起動し、MCP クライアントからの呼び出しを標準的な HTTP リクエスト/レスポンスに変換します。
mcp-server-proxy serve <local_url> <target_url>
例:
mcp-server-proxy serve http://localhost:8080 http://example.com
サンプル
プロジェクトには JavaScript のサンプル(example/js-echo ディレクトリ内)が含まれています。シンプルな echo 機能を実装しており、MCP 関連の SDK に依存せず、いくつかの簡単な HTTP リクエストを処理するだけで動作します。
- サンプルディレクトリに移動します。
cd example/js-echo
このサンプルは Hono フレームワークを使用して実装されています。主なコードは次のとおりです。
import { Hono } from "hono";
import { logger } from "hono/logger";
const app = new Hono();
app.use("*", logger());
app.post("/initialize", async (c) => {
const sessionId = c.req.query("sessionId");
const params = await c.req.json();
console.log("initialize: sessionId=%s, params=%j", sessionId, params);
return c.json({
protocolVersion: "2024-11-05",
capabilities: {
tools: {},
},
serverInfo: { name: "example-mcp-server", version: "1.0.0" },
});
});
app.post("/tools/list", async (c) => {
const sessionId = c.req.query("sessionId");
const params = await c.req.json();
console.log("tools/list: sessionId=%s, params=%j", sessionId, params);
return c.json({
tools: [
{
name: "echo",
description: "Echoes back the input",
inputSchema: {
type: "object",
properties: {
message: { type: "string", description: "Message to echo" },
},
required: ["message"],
additionalProperties: false,
$schema: "http://json-schema.org/draft-07/schema#",
},
},
],
});
});
app.post("/tools/call/:name", async (c) => {
const sessionId = c.req.query("sessionId");
const name = c.req.param("name");
const params = await c.req.json();
console.log(
"tools/call: sessionId=%s, name=%s, params=%j",
sessionId,
name,
params
);
return c.json({
content: [
{ type: "text", text: `SESSION ID: ${sessionId}` },
{ type: "text", text: `ECHO: ${params.arguments?.message}` },
],
});
});
export default app;
- 依存関係をインストールします。
npm install
- サーバーを起動します。
node server.js
- プロキシサーバーを起動します。
# 代理服务器监听 http://localhost:3002
# 代理服务器将请求转发到 http://localhost:3001
mcp-server-proxy serve http://localhost:3002 http://localhost:3001
- MCP クライアントを設定します。
- 種類:
sse - サーバー URL:
http://localhost:3002/sse
- ツールを呼び出します。
Cursor を例にすると、echo message "hello"という内容を送信すると、echo ツールを呼び出す必要があると認識されます。このとき【Call Tool】ボタンが表示されるので、クリックして確定するとツールの呼び出し結果を確認できます。

ライセンス
MIT
貢献
問題や Pull Request の提出を歓迎します!
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。