一、MCP 是什么
MCP(Model Context Protocol,模型上下文协议)是 Anthropic 于 2024 年底推出的开放标准协议。它的作用是让 AI 模型能够以统一的方式连接外部工具、数据和服务。
可以把它理解为 AI 世界的"USB-C 接口"。在 MCP 出现之前,每个 AI 模型要对接每个外部工具都需要单独写一套适配代码。MCP 将这件事标准化了------工具方按规范实现一个 Server,AI 方实现一个 Client,任意组合都能互通。
二、核心架构
MCP 协议包含三个角色:
- MCP Host:AI 应用本身(如 Claude Desktop、Cursor 等),是发起请求的一方。
- MCP Client:运行在 Host 内部,负责与 Server 建立一对一连接,处理协议层面的通信。
- MCP Server:对外暴露具体能力的一端,包装了工具、数据源或服务。
MCP Server 可以暴露三类能力:
- Tools(工具):让 AI 执行操作,如发邮件、创建任务、操作编辑器。
- Resources(资源):让 AI 读取数据,如文件内容、数据库记录。
- Prompts(提示模板):预定义的交互模板,帮助 AI 更好地使用该服务。
三、通信方式
MCP 支持两种传输方式:
- Stdio:通过标准输入输出(stdin/stdout)管道通信,适合本地运行的场景。AI 客户端将 MCP Server 作为子进程启动,两者通过管道收发 JSON 消息。
- HTTP SSE:基于 HTTP 的 Server-Sent Events,适合远程部署的云端服务。
四、完整工作流程
启动阶段(只在客户端启动时执行一次)
- AI 客户端(如 Claude Desktop)启动时,读取本地配置文件,发现配置了哪些 MCP Server。
- 根据配置信息,依次启动每个 MCP Server 子进程(或连接远程 Server)。
- 客户端与每个 Server 完成初始化握手,向 Server 发送
tools/list请求。 - 每个 Server 返回自己的完整工具清单(工具名、功能描述、参数定义)。
- 客户端将所有 Server 的工具清单汇总并缓存。
使用阶段(每次对话都会经历)
- 用户输入自然语言,如"帮我在 Unity 场景内创建一个名为 test 的 GameObject"。
- 客户端将用户消息 + 缓存的全部工具清单一起发送给 AI 大模型。
- AI 大模型理解用户意图后,在工具清单中匹配最合适的工具,组织好参数。
- 客户端收到模型的工具调用指令,按 MCP 协议格式化后,通过 stdin 写入对应 Server 子进程。
- MCP Server 读取 stdin,解析请求,调用实际的后端逻辑执行操作。
- 执行完成后,Server 将结果通过 stdout 返回给客户端。
- 客户端将结果传回 AI 大模型,模型用自然语言向用户反馈结果。
AI 如何选择工具
当安装了多个 MCP Server 时,所有工具的描述会汇总在一起传给 AI 模型。模型根据每个工具的 name 和 description 来判断哪个工具最匹配当前需求。这和模型平时理解自然语言的能力一致------工具描述相当于一份菜单,模型读完后根据用户需求"点菜"。
五、Unity 使用案例(unity-mcp)
项目简介
unity-mcp(如 CoplayDev/unity-mcp)是一个 Unity Editor 插件,在 Unity 编辑器内部运行一个 MCP Server,让 AI 可以直接操作 Unity 编辑器。
架构细节
这个方案实际上有两段通信链路:
- 第一段:AI 客户端 ↔ Python MCP Server 进程(通过 stdin/stdout 管道通信)
- 第二段:Python MCP Server 进程 ↔ Unity 编辑器插件(通过本地 TCP/WebSocket 通信)
Python MCP Server 是一个中间桥梁,它对上接收 AI 的 MCP 请求,对下连接 Unity 编辑器里的插件去执行实际操作。
配置文件示例
json
{
"mcpServers": {
"coplay-mcp": {
"autoApprove": [],
"disabled": false,
"timeout": 720,
"type": "stdio",
"command": "uvx",
"args": [
"--python",
">=3.11",
"coplay-mcp-server@latest"
]
}
}
}
各字段含义:
- mcpServers:可配置多个 Server 的字典,key 是 Server 名称。
- type: "stdio":通信方式为标准输入输出管道。
- command + args :启动命令。
uvx类似于 Node.js 的npx,可以直接运行 Python 包而不需要手动安装。完整命令等同于uvx --python ">=3.11" coplay-mcp-server@latest。 - timeout: 720:工具调用超时时间为 720 秒(12 分钟)。
- disabled: false:Server 启用状态,改为 true 可临时禁用。
- autoApprove: []:自动批准的工具列表,为空表示每次调用都需要用户手动确认。
完整调用链路
以"帮我在 Unity 场景内创建一个名为 test 的 GameObject"为例:
用户输入自然语言
↓
Anthropic 云端 Claude 模型分析意图,匹配工具 create_gameobject,参数 name:"test"
↓
Claude Desktop 客户端将调用请求写入 Python MCP Server 的 stdin
↓
Python MCP Server 解析请求,通过本地网络发送给 Unity 编辑器插件
↓
Unity 插件在编辑器主线程执行 C# 代码:new GameObject("test")
↓
执行结果原路返回:Unity 插件 → Python Server stdout → 客户端 → Claude 模型
↓
Claude 用自然语言回复:"已在场景中创建了名为 test 的 GameObject"
六、影响效果的两个关键因素
最终效果取决于两方面的配合:
工具侧(MCP Server 的质量) :工具划分是否合理、描述是否清晰、参数定义是否严谨。好的工具会把功能拆分成职责明确的小工具(如 create_gameobject、add_component、set_transform),每个工具有精确的描述和严格的参数类型定义。
用户侧(自然语言表达的清晰度):向 AI 表达需求时,关键信息应说明确。例如"在 Unity 场景中创建一个 Cube,命名为 RedBox,世界坐标 (0,5,0),添加 Rigidbody 组件,材质颜色设为红色"远比"帮我弄个方块"的效果好得多。
简单来说:把 AI 当成一个能力很强但不会读心术的同事,交代任务时把关键信息说清楚就好。