MCP 深入
MCP Host/Server、本地与远程部署。
35 分钟
MCP 深入
agt-mcp 介绍了 tools / resources / prompts;本课聚焦 Host 与 Server 职责、本地 stdio 与远程 SSE 部署、网关映射——在 ai-agents 路线图 里把 MCP 当 生产级工具总线 而非仅 Cursor 插件。
学习目标
- 分清 MCP Host、Client、Server 与 LLM 应用的关系
- 会设计本地 dev 与远程生产的连接方式
- 把 MCP tools 映射到各厂商 function calling 格式
Host / Server 模型
LLM 应用(你的 Agent 服务)= MCP Host
内嵌 MCP Client(s) ──stdio/SSE──► MCP Server A(检索)
└► MCP Server B(Git/DB)
| 组件 | 做什么 |
|---|---|
| Host | 聚合能力、鉴权、把 tools 交给模型 |
| Client | 协议会话:list_tools、call_tool、read_resource |
| Server | 暴露领域能力;持有 secrets |
模型 只 看到 Host 转发的 tool 列表;不 直连 Server 网络端口。
本地与远程部署
本地(stdio)
// 客户端配置示意
{"command": "node", "args": ["./servers/search/dist/index.js"], "env": {"INDEX_PATH": "./data"}}
- 适合:本机文件、dev 索引、无公网暴露
- 注意:pin 版本;CI 勿随意拉未审计包
远程(SSE + HTTP)
Agent 网关 ──HTTPS + Bearer──► MCP Server(K8s / VM)
└── 后面接 ES、Postgres、内部 API
- 适合:团队共享检索、多 Host 复用
- 必须:TLS、最小 scope token、审计 call_tool
映射到 function calling
def to_openai_tools(mcp):
return [{"type":"function","function":{
"name":t.name,"description":t.description,"parameters":t.input_schema
}} for t in mcp.list_tools()]
def dispatch(name, args):
return mcp.call_tool(name, args) # 统一出口:日志、限流、allowlist
Resources 由 Host 按需 read_resource 注入,避免全量拉取。进阶重点:Server 拆分、网关 allowlist、多 Server 组合(安全见 aga-safety)。
练习
- 画 Host / 两个 Server / secrets 存放位置