Model Context Protocol(MCP)工具/上下文协议指南 · Dylan AI Agent Nexus
Standardize Tooling, Context and Streams for AI Applications
定位与价值
MCP 是一种面向 AI 应用的通用协议,规范了“客户端(App/IDE/Agent 平台)”与“服务端(工具/资源提供者)”之间的交互:如何发现可用工具、如何安全调用、如何获取外部资源与上下文,并以统一的事件/流式机制返回结果。采用 MCP 有助于我们将本地工具、企业系统与智能体无缝编排,并保持安全、可审计与可扩展。
核心概念
- Client:发起请求的应用侧(本平台、IDE 插件、对话前端)。
- Server:提供能力的服务侧(文件系统、网页检索、数据库、企业 API、脚本运行器等)。
- Transport:常见为 WebSocket 或标准输入输出(stdio),承载 JSON-RPC 2.0 消息。
- Capabilities:服务端在握手阶段声明的能力集,如工具目录、资源目录、提示模板、采样与流式等。
- Tools:可调用的函数/动作,通常带有 JSON Schema 描述输入/输出。
- Resources:可读取的上下文资源(文件、网页、知识库切片、配置项等)。
- Prompts:可复用的提示模板目录,以规范化快速复用。
- Streaming:长任务或生成式输出通过事件流持续推送增量结果。
连接与握手(简述)
- 握手:客户端发起 initialize,服务端返回自身名称、版本、支持的能力与会话 ID。
- 能力发现:客户端调用 list_tools、list_resources、list_prompts 获取可用目录。
- 会话:会话内维持状态(如授权、上下文缓存、速率限制窗口)。
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {"client": {"name": "dylanai", "version": "1.0"}}
}
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"server": {"name": "mcp-fs", "version": "0.4.0"},
"capabilities": {"tools": true, "resources": true, "prompts": true, "streaming": true},
"sessionId": "abc-123"
}
}
能力目录与工具调用
客户端通常先拉取目录,再按需调用工具;对于可流式的任务,客户端订阅并拼接增量事件。
{
"jsonrpc": "2.0",
"id": 2,
"method": "list_tools"
}
{
"jsonrpc": "2.0",
"id": 3,
"method": "call_tool",
"params": {
"name": "web.search",
"arguments": {"q": "数据主权 本地化 部署 价值", "top_k": 5},
"stream": true
}
}
服务端可能通过 result
一次性返回或以 notification
事件流返回增量片段,末尾发送完成标记。
资源与提示模板
- list_resources:返回可读取的资源列表(路径、类型、权限)。
- read_resource:按标识读取具体内容,支持分页/片段化以控制体量。
- list_prompts:返回标准化提示模板,包含占位符与默认值。
- render_prompt:根据入参渲染 Prompt,供后续模型调用复用。
安全与合规设计
- 最小权限:Server 仅暴露必要工具/资源;Client 侧建立调用白名单与参数校验。
- 沙箱与隔离:高风险工具(执行命令、外网访问)应在受控沙箱与私网边界内运行。
- 审计与配额:记录请求 ID、调用方、耗时、I/O 规模;限流与配额避免滥用。
- 机密管理:敏感凭据通过外部密钥管理;严禁在资源目录中明文暴露。
与本平台的集成建议
- 作为 Client:本平台可作为 MCP 客户端,统一接入企业内部 MCP Server(文件、数据库、搜索、工单系统等)。
- 作为 Server:也可把平台内功能(知识检索、文档生成、工作流编排)以 MCP 工具对外暴露,便于 IDE/自动化平台复用。
- 多模型协作:与 LLM/向量检索/OCR/ASR 等服务通过 MCP 工具化连接,形成端到端链路。
最佳实践
- 清晰的工具契约:为每个工具提供 JSON Schema 与错误语义;版本化变更。
- 幂等性与重试:对写操作提供请求幂等键;客户端采用指数退避与抖动。
- 可观测:统一日志、指标与追踪 ID;对流式事件进行分段标记。
- 数据最小化:仅在必要时读取资源,避免无关上下文进入模型提示。
故障排查(思路)
- 连接失败:确认传输层(WS/stdio)配置、端口与防火墙;核对 JSON-RPC 版本与握手流程。
- 目录为空:检查 Server 能力声明与权限配置,确认工具/资源已启用。
- 流式异常:客户端正确处理增量事件与结束标记;注意超时与断线重连。
- 权限被拒:检查白名单、令牌与沙箱策略;最小权限原则下逐项放通。