使用说明
grpcmcp
一个简单的MCP服务器,它将根据提供的描述符文件或使用反射代理到grpc后端。
快速开始
-
安装二进制文件:
go install .或go install github.com/adiom-data/grpcmcp确保go-bin目录在您的PATH中。 -
在终端中,运行示例grpc服务器
go run example/main.go。这将在启用服务器反射的情况下在端口8090上启动grpc健康服务。请注意,这将在grpcmcp将连接到的默认端口上运行。 -
可流式HTTP传输 在另一个终端中,运行
grpcmcp --hostport=localhost:3000 --reflect.指定hostport默认情况下将使用Streamable HTTP。MCP端点将在http://localhost:3000/mcp. -
传统苏格兰和南方能源公司运输 对于老客户,运行
grpcmcp --hostport=localhost:3000 --transport=sse --reflectSSE端点将在http://localhost:3000/sse. -
STDIN运输 设置MCP配置。例如
"grpcmcp": {
"command": "grpcmcp",
"args": ["--reflect"]
}
选项/功能
grpcmcp --help 查看完整的选项列表。
-
hostportstring-设置后,通过HTTP为MCP提供服务,并将其用作服务器主机端口。 -
transportstring-传输时使用hostport已设置。默认为http对于流式HTTP,请访问/mcp。设置为sse对于传统的SSE传输/sse. -
descriptorsstring-指定从生成的protobuf定义的文件位置buf build -o protos.pb或protoc --descriptor_set_out=protos.pb而不是使用gRPC反射。 -
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的客户端连接支持流式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例如,嵌入式应用程序可以使用内存中的HTTP传输,例如 go.akshayshah.org/memhttp 通过传递内存中服务器的URL和客户端:
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.CallToolRequest 可用,包括由支持的MCP传输提供的入站HTTP标头。
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处理程序来处理。出站后端身份验证由配置的标头提供程序控制。
帮助
加入我们的Discordhttps://discord.gg/hDjx3DehwG
