grpcmcp について
grpcmcp は、protobuf の記述ファイルまたは gRPC リフレクションを使い、リクエストを gRPC バックエンドへ中継する MCP サーバーです。既存の gRPC サービスを AI アシスタントから呼び出したい開発者に向いています。
主な機能
- 01一元 gRPC メソッドを MCP ツールとして公開
- 02記述ファイルまたはリフレクションからスキーマを読み込み
- 03Streamable HTTP、SSE、STDIN のトランスポートに対応
- 04完全修飾サービス名によるフィルタリング
- 05Bearer トークンとカスタムヘッダーに対応
- 0664 ビット整数を文字列として出力可能
活用シーン
- 01AI アシスタントから社内の gRPC マイクロサービスを呼び出す
- 02開発中の gRPC インターフェースのテスト
- 03Go アプリケーションに gRPC から MCP への処理を組み込む
MCP 対応
grpcmcp は MCP サーバーとして、バックエンド gRPC サービスの一元メソッドを MCP ツールとして MCP クライアントに提供します。クライアントストリーミング、サーバーストリーミング、双方向ストリーミングのメソッドはスキップされます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
grpcmcp
指定したディスクリプターファイル、またはリフレクションを使用して、gRPC バックエンドにプロキシするシンプルな MCP サーバーです。
クイックスタート
-
バイナリをインストールします:
go install .またはgo install github.com/adiom-data/grpcmcp。Go の bin ディレクトリが PATH に含まれていることを確認してください。 -
ターミナルで、サンプルの gRPC サーバーを実行します
go run example/main.go。これにより、サーバーリフレクションが有効な gRPC ヘルスサービスがポート 8090 で起動します。これは grpcmcp が接続するデフォルトのポートであることに注意してください。 -
Streamable HTTP トランスポート 別のターミナルで、
grpcmcp --hostport=localhost:3000 --reflectを実行します。hostportを指定すると、デフォルトで Streamable HTTP が使用されます。MCP エンドポイントはhttp://localhost:3000/mcpで提供されます。 -
レガシー SSE トランスポート 古いクライアントの場合は、
grpcmcp --hostport=localhost:3000 --transport=sse --reflectを実行します。SSE エンドポイントはhttp://localhost:3000/sseで提供されます。 -
STDIN トランスポート MCP 設定をセットアップします。例:
"grpcmcp": {
"command": "grpcmcp",
"args": ["--reflect"]
}
オプション/機能
すべてのオプションについては、grpcmcp --help を参照してください。
-
hostportstring - 設定すると、MCP を HTTP 経由で提供し、これをサーバーの host:port として使用します。 -
transportstring -hostportが設定されている場合に使用するトランスポートです。デフォルトは/mcpでの Streamable HTTP のhttpです。レガシー SSE トランスポートを/sseで使用するには、sseを設定します。 -
descriptorsstring - gRPC リフレクションの代わりに、buf build -o protos.pbまたはprotoc --descriptor_set_out=protos.pbで生成した protobuf 定義のファイルの場所を指定します。 -
reflect- 設定すると、ディスクリプターファイルの代わりにリフレクションを使用して gRPC エンドポイントを取得します。 -
urlstring - バックエンドサーバーの URL を指定します。 -
servicesstring - フィルター対象とする、完全修飾された gRPC サービス名をカンマ区切りで指定します。 -
bearerstring -Authorization: Bearerヘッダーに付与するトークンです。 -
bearer-envstring -Authorization: Bearerヘッダーに付与するトークンの環境変数です。bearerより優先されます。 -
headerstring(繰り返し指定可能) -Key: Value形式で追加するヘッダーです。 -
string64- 設定すると、64 ビット protobuf 整数フィールド(int64、uint64、sint64、fixed64、sfixed64)を、MCP JSON スキーマで文字列としてのみ公開します。これにより、JavaScript ベースのクライアントやエージェントでの精度の曖昧さを回避できます。デフォルトでは、互換性を保つため、スキーマは引き続き JSON の数値または文字列のいずれも許可します。
grpcmcp は現在、単項 gRPC メソッドを MCP ツールとして公開します。バックエンドの gRPC クライアントストリーミング、サーバーストリーミング、双方向ストリーミングの各メソッドはスキップされます。これは MCP トランスポートとは別のもので、grpcmcp へのクライアント接続では Streamable HTTP とレガシー SSE の両方をサポートします。
ライブラリの使用
grpcmcp は Go ライブラリとして埋め込むこともできます。ライブラリはディスクリプターセットを直接受け取るため、アプリケーション側でディスクリプターの読み込み方法や MCP HTTP ハンドラーのラップ方法を決定できます。
descriptors, err := grpcmcp.LoadDescriptorsFromReflection(ctx, backendURL, headers, false)
if err != nil {
return err
}
srv, err := grpcmcp.NewServer(grpcmcp.Config{
ServerName: "gRPC MCP Server",
Version: "1.0.0",
BaseURL: backendURL,
Descriptors: descriptors,
Headers: grpcmcp.StaticHeaders(headers),
})
if err != nil {
return err
}
handler := server.NewStreamableHTTPServer(srv)
バックエンド呼び出しをカスタムトランスポート経由で行うには、HTTPClient を指定します。たとえば、埋め込みアプリケーションでは、インメモリーサーバーの URL とクライアントを渡して、go.akshayshah.org/memhttp などのインメモリー HTTP トランスポートを使用できます。
backend, err := memhttp.New(backendHandler)
if err != nil {
return err
}
defer backend.Close()
srv, err := grpcmcp.NewServer(grpcmcp.Config{
BaseURL: backend.URL(),
HTTPClient: backend.Client(),
Descriptors: descriptors,
})
バックエンド認証を動的に行うには、ToolHeaderProvider を指定します。サポートされている MCP トランスポートから渡された受信 HTTP ヘッダーを含め、完全な mcp.CallToolRequest を利用できます。
srv, err := grpcmcp.NewServer(grpcmcp.Config{
BaseURL: backendURL,
Descriptors: descriptors,
Headers: func(ctx context.Context, req mcp.CallToolRequest) (http.Header, error) {
h := make(http.Header)
h.Set("Authorization", req.Header.Get("Authorization"))
return h, nil
},
})
受信 MCP 認証は、標準の Go ミドルウェアで HTTP ハンドラーをラップして処理してください。送信バックエンド認証は、設定されたヘッダープロバイダーによって制御されます。
ヘルプ
https://discord.gg/hDjx3DehwG から Discord に参加してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。