mcpField
G
grpcmcp

grpcmcp

ローカル
github.com/adiom-data開発ツール2921 週間前に更新

grpcmcp について

grpcmcp は、protobuf の記述ファイルまたは gRPC リフレクションを使い、リクエストを gRPC バックエンドへ中継する MCP サーバーです。既存の gRPC サービスを AI アシスタントから呼び出したい開発者に向いています。

主な機能

  1. 01一元 gRPC メソッドを MCP ツールとして公開
  2. 02記述ファイルまたはリフレクションからスキーマを読み込み
  3. 03Streamable HTTP、SSE、STDIN のトランスポートに対応
  4. 04完全修飾サービス名によるフィルタリング
  5. 05Bearer トークンとカスタムヘッダーに対応
  6. 0664 ビット整数を文字列として出力可能

活用シーン

  1. 01AI アシスタントから社内の gRPC マイクロサービスを呼び出す
  2. 02開発中の gRPC インターフェースのテスト
  3. 03Go アプリケーションに gRPC から MCP への処理を組み込む

MCP 対応

grpcmcp は MCP サーバーとして、バックエンド gRPC サービスの一元メソッドを MCP ツールとして MCP クライアントに提供します。クライアントストリーミング、サーバーストリーミング、双方向ストリーミングのメソッドはスキップされます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

grpcmcp

指定したディスクリプターファイル、またはリフレクションを使用して、gRPC バックエンドにプロキシするシンプルな MCP サーバーです。

クイックスタート

  1. バイナリをインストールします:go install . または go install github.com/adiom-data/grpcmcp。Go の bin ディレクトリが PATH に含まれていることを確認してください。

  2. ターミナルで、サンプルの gRPC サーバーを実行します go run example/main.go。これにより、サーバーリフレクションが有効な gRPC ヘルスサービスがポート 8090 で起動します。これは grpcmcp が接続するデフォルトのポートであることに注意してください。

  3. Streamable HTTP トランスポート 別のターミナルで、grpcmcp --hostport=localhost:3000 --reflect を実行します。hostport を指定すると、デフォルトで Streamable HTTP が使用されます。MCP エンドポイントは http://localhost:3000/mcp で提供されます。

  4. レガシー SSE トランスポート 古いクライアントの場合は、grpcmcp --hostport=localhost:3000 --transport=sse --reflect を実行します。SSE エンドポイントは http://localhost:3000/sse で提供されます。

  5. STDIN トランスポート MCP 設定をセットアップします。例:

"grpcmcp": {
    "command": "grpcmcp",
    "args": ["--reflect"]
}

オプション/機能

すべてのオプションについては、grpcmcp --help を参照してください。

  • hostport string - 設定すると、MCP を HTTP 経由で提供し、これをサーバーの host:port として使用します。

  • transport string - hostport が設定されている場合に使用するトランスポートです。デフォルトは /mcp での Streamable HTTP の http です。レガシー SSE トランスポートを /sse で使用するには、sse を設定します。

  • descriptors string - gRPC リフレクションの代わりに、buf build -o protos.pb または protoc --descriptor_set_out=protos.pb で生成した protobuf 定義のファイルの場所を指定します。

  • reflect - 設定すると、ディスクリプターファイルの代わりにリフレクションを使用して gRPC エンドポイントを取得します。

  • url string - バックエンドサーバーの URL を指定します。

  • services string - フィルター対象とする、完全修飾された gRPC サービス名をカンマ区切りで指定します。

  • bearer string - Authorization: Bearer ヘッダーに付与するトークンです。

  • bearer-env string - Authorization: Bearer ヘッダーに付与するトークンの環境変数です。bearer より優先されます。

  • header string(繰り返し指定可能) - 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 に参加してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

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