mcp-grpc-transport について
mcp-grpc-transport は、対応する 2 つの Go ライブラリで構築された MCP サーバーに gRPC 通信を追加します。既存の認証・認可基盤を再利用しながら、サーバーをリモートでホストする用途に向いています。
主な機能
- 01MCP 向け gRPC トランスポート
- 022 種類の Go MCP ライブラリに対応
- 03サーバーオプションの設定
- 04ローカルテスト用 CLI クライアント
活用シーン
- 01リモートインスタンスで MCP サーバーをホスト
- 02既存の gRPC 認証・認可プロセスを再利用
- 03コマンドラインから MCP リクエストをテスト
MCP 対応
MCP クライアントとサーバー間の gRPC トランスポートを提供し、metoro-io/mcp-golang と mark3labs/mcp-go に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mcp-grpc-transport
クライアントと MCP サーバー間の通信に gRPC を使用する MCP トランスポートです。これにより、ほかの Web サーバーと同様に、リモートインスタンス上で MCP サーバーをホストしやすくなります。
トランスポートとして gRPC を使用すると、認証と認可に既存のインフラストラクチャやプロセスを再利用できます。
メモ
現在、最も広く使われている次の 2 つのライブラリのみをサポートしています。
使い方
metoro-io ライブラリを使用する場合
ヒント
完全な例は
examples/metoro-io-server/main.goで確認できます。
metoro-io/mcp-golang のサーバー例で、次のようにトランスポートを置き換えてください。
+ import grpctransport "github.com/rustycl0ck/mcp-grpc-transport/pkg/metoro-io-transport/grpc"
func main() {
...
- server := mcp_golang.NewServer(stdio.NewStdioServerTransport())
+ server := mcp_golang.NewServer(grpctransport.NewGrpcServerTransport())
...
}
必要に応じて、さらにオプションを指定してサーバーをカスタマイズできます。
import (
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)
func main(){
serverTransport := grpctransport.NewGrpcServerTransport(
grpctransport.WithPort(10051),
grpctransport.WithGrpcOpts(
grpc.UnaryInterceptor(loggingInterceptor),
grpc.MaxRecvMsgSize(1024*1024), // 1MB
grpc.Creds(insecure.NewCredentials()), // TODO: Use TLS in production!
),
)
// Create a new server with the transport
server := mcp_golang.NewServer(serverTransport)
}
mark3labs ライブラリを使用する場合
ヒント
完全な例は
examples/mark3labs-server/main.goで確認できます。
mark3labs/mcp-go のサーバー例で、次のようにトランスポートを置き換えてください。
+ import grpctransport "github.com/rustycl0ck/mcp-grpc-transport/pkg/mark3labs-transport/grpc"
func main() {
...
// Start the server
- if err := server.ServeStdio(s); err != nil {
- fmt.Printf("Server error: %v\n", err)
- }
+ srv := grpctransport.NewGrpcServer(s)
+ if err := srv.Listen(context.Background()); err != nil {
+ fmt.Printf("Server error: %v\n", err)
+ }
...
}
必要に応じて、さらにオプションを指定してサーバーをカスタマイズできます。
import (
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)
func main(){
- srv := grpctransport.NewGrpcServer(s)
+ srv := grpctransport.NewGrpcServer(s,
grpctransport.WithPort(10051),
grpctransport.WithGrpcOpts(
grpc.UnaryInterceptor(loggingInterceptor),
grpc.MaxRecvMsgSize(1024*1024), // 1MB
grpc.Creds(insecure.NewCredentials()), // TODO: Use TLS in production!
),
)
}
例
サーバーを起動します。
$ go run examples/metoro-io-server.go
transport started...
Received message...
transport started...
Received message...
IDE クライアントを設定します(以下の設定は Cursor IDE の mcp.json 用です)。
{
"mcpServers": {
"my-mcp-server": {
"command": "go",
"args": [
"run",
"github.com/rustycl0ck/mcp-grpc-transport/cmd/client@latest",
"--address",
"localhost:50051" // Replace with actual server location if hosted remotely
]
}
}
}
または、CLI からクライアントを直接ローカルでテストします。
$ echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | go run github.com/rustycl0ck/mcp-grpc-transport/cmd/client@latest
{"id":1,"jsonrpc":"2.0","result":{"tools":[{"description":"Get the weather forecast for temperature, wind speed and relative humidity","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"latitude":{"description":"The latitude of the location to get the weather for","type":"number"},"longitude":{"description":"The longitude of the location to get the weather for","type":"number"}},"required":["longitude","latitude"],"type":"object"},"name":"get_weather"},{"description":"Says hello","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"name":{"description":"The name to say hello to","type":"string"}},"required":["name"],"type":"object"},"name":"hello"}]}}
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。