mcpField
G
grpcmcp

grpcmcp

本地服务
github.com/adiom-data开发工具2921 周前更新

关于 grpcmcp

grpcmcp 是一个 MCP 服务,可根据 protobuf 描述文件或 gRPC 反射将请求代理到 gRPC 后端。适合希望让 AI 助手调用现有 gRPC 服务的开发者。

主要功能

  1. 01将一元 gRPC 方法暴露为 MCP 工具
  2. 02支持描述文件或 gRPC 反射两种方式
  3. 03支持 Streamable HTTP、SSE 与 STDIN 传输
  4. 04可按完全限定服务名过滤
  5. 05支持 Bearer 令牌与自定义请求头
  6. 06可将 64 位整数字段以字符串形式输出

适用场景

  1. 01让 AI 助手调用内部 gRPC 微服务
  2. 02在开发环境中测试 gRPC 接口
  3. 03将 gRPC 服务嵌入 Go 应用作为 MCP 处理器

MCP 相关

grpcmcp 是 MCP 服务,将后端 gRPC 的一元方法以 MCP 工具形式提供给 MCP 客户端。客户端流、服务端流和双向流方法会被跳过。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

grpcmcp

一个简单的 MCP 服务,可根据提供的描述符文件或使用反射,将请求代理到 gRPC 后端。

快速开始

  1. 安装二进制文件:go install . 或 go install github.com/adiom-data/grpcmcp。确保 Go 二进制文件目录已添加到 PATH 中。

  2. 在终端中运行示例 gRPC 服务 go run example/main.go。这会在端口 8090 上启动一个启用了服务反射的 gRPC 健康检查服务。请注意,该服务使用 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 字符串 — 设置后,通过 HTTP 提供 MCP 服务,并将其用作服务端的主机:端口。

  • transport 字符串 — 设置 hostport 时使用的传输方式。默认使用 http,通过 /mcp 提供 Streamable HTTP。设置为 sse 可使用旧版 SSE 传输,通过 /sse 提供服务。

  • descriptors 字符串 — 指定由 buf build -o protos.pb 或 protoc --descriptor_set_out=protos.pb 生成的 protobuf 定义文件的位置,以替代 gRPC 反射。

  • reflect — 设置后,使用反射获取 gRPC 端点,而不是使用描述符文件。

  • url 字符串 — 指定后端服务的 URL。

  • services 字符串 — 以逗号分隔的完整限定 gRPC 服务名称列表,用于筛选。

  • bearer 字符串 — 要添加到 Authorization: Bearer 标头中的令牌。

  • bearer-env 字符串 — 用于获取要添加到 Authorization: Bearer 标头中的令牌的环境变量。优先级高于 bearer。

  • header 字符串(可重复)— 要添加的标头,格式为 Key: Value。

  • string64 — 设置后,仅在 MCP JSON 架构中将 64 位 protobuf 整数字段(int64、uint64、sint64、fixed64、sfixed64)作为字符串公开。这样可避免基于 JavaScript 的客户端和 Agent 遇到精度歧义。默认情况下,为保持兼容性,架构仍允许使用 JSON 数字或字符串。

grpcmcp 当前会将一元 gRPC 方法公开为 MCP 工具。后端 gRPC 客户端流式、服务端流式和双向流式方法会被跳过。这与 MCP 传输方式无关:支持客户端通过 Streamable HTTP 和旧版 SSE 连接到 grpcmcp。

库用法

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 处理器来处理。出站后端身份验证由配置的标头提供器控制。

帮助

加入我们的 Discord:https://discord.gg/hDjx3DehwG

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。