gRPC上的MCP(企业PoC)
此存储库是 概念验证(PoC) 这表明 模型上下文协议(MCP) 可以实施 直接通过gRPC 作为原生传输,遵循Google Cloud博客文章中描述的想法:
https://cloud.google.com/blog/products/networking/grpc-as-a-native-transport-for-mcp
这个项目的目标是 使用运行代码验证博客文章声明, 表明MCP可以是:
- 无需JSON-RPC或转码网关即可实现
- 基于现有的企业gRPC基础架构构建
- 使用安全 mTLS+JWT(零信任)
- 用于 实时流媒体代理-工具交互
______________________________________________________________________
此PoC从博客文章中验证了什么
该博客认为,gRPC可以用作 本地MCP传输 而不是 JSON-RPC。本项目通过演示验证了这一点:
- 本机gRPC MCP服务\
MCP概念(ListTools, CallTool, Chat)直接实施 作为使用协议缓冲区的gRPC RPC RPC。
- 双向流媒体\
这 Chat RPC使用gRPC双向流来支持实时, 增量代理-工具工作流,很难用 JSON-RPC。
- 企业级安全
- 弹药库鱼雷发射系统 用于传输级别标识(机器对机器信任) - JWT身份验证 用于应用程序级授权 - 传输安全和应用程序逻辑之间的明确分离
- 无网关或协议转换\
没有JSON-RPC层,没有转码代理,也没有协议适配器。 MCP语义直接在gRPC上表达。
______________________________________________________________________
高层体系结构
┌─────────────┐ gRPC ┌────────────────┐
│ MCP Client │ ───────────────▶ │ MCP Server │
│ (Agent) │ ◀─────────────── │ (Tools) │
└─────────────┘ Streaming └────────────────┘- 这 客户端 表示AI代理(CLI、LLM代理或服务)。
- 这 服务器 通过MCP语义公开企业工具。
- 通信结束 支持流媒体的gRPC.
______________________________________________________________________
身份验证和安全模型
该项目遵循 零信任 通过分层控制实现安全方法。
传输层:mTLS
- 客户端和服务器都使用证书进行身份验证。
- 只有受信任的客户端才能建立gRPC连接。
- 在双方都使用gRPC TLS凭据实现。
应用层:JWT
JWT身份验证是使用gRPC服务器拦截器强制执行的。
Client (agent)
│
│ gRPC request + metadata (Authorization: Bearer )
▼
┌────────────────────────────┐
│ JwtAuthInterceptor │
│ - Extracts JWT │
│ - Validates signature │
│ - Enforces allowlist │
└────────────────────────────┘
│ (only if valid)
▼
┌────────────────────────────┐
│ MCPServicer │
│ - ListTools │
│ - CallTool │
│ - Chat (streaming) │
└────────────────────────────┘ListTools是允许列出的,可以在没有JWT的情况下调用。CallTool和Chat需要有效的JWT。- JWT验证发生 之后 mTLS已建立传输信任。
______________________________________________________________________
Python环境设置
建议在Python虚拟环境中运行此项目 以避免依赖冲突。
该项目已经过测试 Python 3.11+.
创建并激活虚拟环境
python3 -m venv .venv
source .venv/bin/activate安装依赖项
pip install -r requirements.txt现在,您应该已经准备好运行该项目了。
______________________________________________________________________
项目结构(简化)
mcp_grpc/
├── proto/ # MCP protobuf definitions (source of truth)
├── server/ # MCP gRPC server + JWT interceptor
├── client/ # MCP gRPC client (agent)
├── mcp_pb2.py # Generated protobuf code (committed for DX)
├── mcp_pb2_grpc.py # Generated gRPC code (committed for DX)
scripts/
└── gen-certs.sh # Local mTLS certificate generation
certs/ # Generated locally (ignored by git)生成的protobuf文件被提交以确保 克隆和运行体验. 这 .proto 文件仍然是真理的权威来源。
______________________________________________________________________
在本地运行项目
生成mTLS证书(每个克隆一次)
证书是 未承诺 到存储库。
./scripts/gen-certs.sh这将产生:
- 本地证书颁发机构(CA)
- 服务器证书
- 客户端证书
这些是为 仅限于本地开发.
______________________________________________________________________
启动MCP gRPC服务器(启用mTLS+JWT)
export MCP_JWT_SECRET='super-secret'
python -m mcp_grpc.server.server保持此终端运行。
您应该看到:
MCP gRPC server running on 0.0.0.0:50051 (mTLS + JWT enabled)______________________________________________________________________
生成用于测试的JWT(客户端身份)
在新终端中:(“确保虚拟环境已激活”)
export MCP_JWT_SECRET='super-secret'
python -m mcp_grpc.client.make_token这将把一个签名的JWT打印到stdout。
______________________________________________________________________
使用生成的JWT运行客户端
export MCP_JWT="$(python -m mcp_grpc.client.make_token)"
python -m mcp_grpc.client.client______________________________________________________________________
预期结果
如果一切正常,您应该看到:
- 成功发现工具(
ListTools) - 成功调用受JWT保护的工具(
CallTool) - 通过实时流式传输进度和最终结果
Chat - 没有不安全的回退(强制执行mTLS和JWT)
这证实了MCP可以直接在gRPC上运行 企业级安全,如参考博客文章中所述。
______________________________________________________________________
摘要
此存储库是 实际验证 使用gRPC作为本机 MCP运输,演示:
- 流媒体第一代理-工具通信
- mTLS+JWT的零信任安全
- 标准企业gRPC模式的重用
它旨在作为 参考PoC,不是完整的生产实施。
