MCP(Model Context Protocol)学习笔记

一、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,适合远程部署的云端服务。

四、完整工作流程

启动阶段(只在客户端启动时执行一次)

  1. AI 客户端(如 Claude Desktop)启动时,读取本地配置文件,发现配置了哪些 MCP Server。
  2. 根据配置信息,依次启动每个 MCP Server 子进程(或连接远程 Server)。
  3. 客户端与每个 Server 完成初始化握手,向 Server 发送 tools/list 请求。
  4. 每个 Server 返回自己的完整工具清单(工具名、功能描述、参数定义)。
  5. 客户端将所有 Server 的工具清单汇总并缓存。

使用阶段(每次对话都会经历)

  1. 用户输入自然语言,如"帮我在 Unity 场景内创建一个名为 test 的 GameObject"。
  2. 客户端将用户消息 + 缓存的全部工具清单一起发送给 AI 大模型。
  3. AI 大模型理解用户意图后,在工具清单中匹配最合适的工具,组织好参数。
  4. 客户端收到模型的工具调用指令,按 MCP 协议格式化后,通过 stdin 写入对应 Server 子进程。
  5. MCP Server 读取 stdin,解析请求,调用实际的后端逻辑执行操作。
  6. 执行完成后,Server 将结果通过 stdout 返回给客户端。
  7. 客户端将结果传回 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_gameobjectadd_componentset_transform),每个工具有精确的描述和严格的参数类型定义。

用户侧(自然语言表达的清晰度):向 AI 表达需求时,关键信息应说明确。例如"在 Unity 场景中创建一个 Cube,命名为 RedBox,世界坐标 (0,5,0),添加 Rigidbody 组件,材质颜色设为红色"远比"帮我弄个方块"的效果好得多。

简单来说:把 AI 当成一个能力很强但不会读心术的同事,交代任务时把关键信息说清楚就好。

相关推荐
林姜泽樾2 小时前
腾讯workbuddy接入QQ,制作AI智能助手
人工智能·ai
阿拉斯攀登2 小时前
第八篇(终篇):选型指南——开源 vs 闭源、国内 vs 国外
人工智能·机器学习·ai·大模型·ollma
PPPPickup2 小时前
深信服公司---java实习生后端一二面询问
java·后端·ai
ZKNOW甄知科技2 小时前
深度对标ServiceNow:燕千云如何破解企业全球化运维难题?
大数据·运维·人工智能·科技·ai·自动化·运维开发
vv大人3 小时前
DeepSeek 接入微信项目全纪录:从踩坑到跑通
ai
b_q3 小时前
从零搭建 MCP Server:让 AI Agent 调用实盘量化信号
mcp
小阿鑫3 小时前
深度测评:在微信里直接操控 OpenClaw
ai·微信·openclaw
HoneyMoose3 小时前
抓只小龙虾来养养
ai
江不清丶3 小时前
Text-to-SQL实战:从自然语言到数据库查询的智能数据分析Agent设计
数据库·sql·ai·数据分析