理解 MCP:从配置到本地服务集成的完整探索

以下是一篇在复现一些Agent项目时提出的 MCP(Modular Compute Protocol)相关问题与背景的总结文章,如果对你有帮助或者有想法碰撞,欢迎随时和我交流 :)


理解 MCP:从配置到本地服务集成的完整探索

在本次探索过程中,我深入研究了 Modular Compute Protocol(MCP) 的客户端、服务端架构、插件运行机制以及实际使用场景,尤其聚焦在 Blender 插件与前端系统的对接原理上。以下是我的完整理解和总结。


一、MCP 是什么?

Modular Compute Protocol (MCP) 是一种用于连接前端与后端模块的通用通信协议,适用于本地或远程服务之间的调用。它的设计理念是模块化、解耦、进程隔离,广泛用于如图形渲染、地图服务、AI 推理等异步任务。

MCP 的两大角色:

  • Client:发起任务(通常是前端或中间层)
  • Server:提供功能的进程(比如 blender 渲染器、地图计算模块等)

二、MCP 配置理解

在项目中通常使用如下格式来定义 MCP 服务:

json 复制代码
"mcpServers": {
  "blender": {
    "isActive": true,
    "command": "uvx",
    "args": ["blender-mcp"],
    "name": "blender"
  },
  "amap-maps": {
    "isActive": true,
    "command": "npx",
    "args": ["-y", "@amap/amap-maps-mcp-server"],
    "name": "amap-maps"
  }
}

参数说明:

  • command: 启动 MCP 服务的主命令(如 uvx, npx
  • args: 参数列表,通常指定模块名称或包名
  • isActive: 启动时是否激活该服务
  • env: 服务运行时的环境变量(如 API key)

三、npxuvx 的角色

npx

  • Node.js 官方工具,用于临时运行 NPM 包。
  • 例:npx -y @amap/amap-maps-mcp-server 启动地图服务。
  • -y 表示无需确认,自动安装运行。

uvx

  • 类似于 npx,但通常是 MCP 专用的运行器(可能是内部实现)。
  • 启动本地 MCP 模块如 blender-mcp
  • 实际行为可能是运行某个带 CLI 的 Python/NPM 模块,或直接调用 Blender 打开插件。

四、Blender 插件的 MCP Server 启动原理

通过对 Blender 插件源码分析(addon.py),核心机制如下:

🌐 启动一个本地 Socket Server:

  • 地址:localhost
  • 默认端口:9876(可配置)
  • 协议:TCP + JSON

🔁 工作流程:

  1. 插件启动后,通过按钮或 bpy.ops.blendermcp.start_server() 开启服务。
  2. 使用 Python 原生 socket 监听端口。
  3. 每个 client 连接在独立线程中处理。
  4. 支持命令包括:获取场景信息、导入模型、执行 Python 脚本等。

⚙️ MCP Client 如何连接?

  • 客户端通过配置自动运行 Blender 插件服务。

  • 监听插件输出:

    vbscript 复制代码
    BlenderMCP server started on localhost:9876

    并据此连接 socket。


五、Blender MCP 插件支持的能力

插件暴露了丰富的功能接口,包括但不限于:

  • get_scene_info: 获取当前场景简要数据
  • get_object_info: 查询指定对象详情
  • execute_code: 执行任意 Blender Python 代码(调试神器)
  • get_polyhaven_assets, download_polyhaven_asset: 联网获取 HDRI/材质/模型
  • create_rodin_job, import_generated_asset: 与 Hyper3D Rodin 模型生成服务对接

这些功能通过 JSON 命令触发,并保证在主线程执行,以防 Blender 崩溃。


六、端口/IP 的确定机制

端口由插件 BlenderMCPServer 构造时绑定,一般为用户可配置项(默认9876):

objectivec 复制代码
self.socket.bind((self.host, self.port))  # host=localhost

客户端并不需要手动配置连接地址,而是通过 MCP 框架监听插件 stdout 日志,自动抓取服务地址。


七、整体链路回顾(启动→连接→通信)

🌐 MCP 客户端从配置启动、插件加载到服务连接与数据交互的完整流程,实现了前端与本地模块的高效解耦通信。

markdown 复制代码
mcpClient (前端) 
   ↓ 配置 command
uvx blender-mcp
   ↓ 启动 Blender + 插件
Blender 插件:
   - 监听 localhost:9876
   - 输出服务地址日志
   - 等待 socket 请求
mcpClient 捕捉地址 → 建立连接 → 发指令 → 接收结果

简洁版

详细参考版:


八、总结

通过 MCP,我们可以将如 Blender、地图服务、AI 推理等后端模块抽象成「可插拔服务」,用统一接口管理调度。MCP 配置中的 commandargs 控制了模块的启动方式,插件或服务本身则实现了协议通信与功能暴露。对接成功后,前端只需发 JSON 指令即可远程控制复杂应用。


如果你后续还想做更复杂的多模块集成,比如让多个 MCP 服务之间联动、链式调用,也可以继续扩展这套架构。

相关推荐
带刺的坐椅1 小时前
(对标 Spring IA 和 LangChain4j)Solon AI & MCP v3.7.0, v3.6.4, v3.5.8 发布(支持 LTS)
java·spring·ai·solon·mcp·langchain4j
方圆想当图灵2 小时前
Cursor 无法跨项目读取源码怎么办?MCP Easy Code Reader 帮你解决!
后端·cursor·mcp
大千AI助手13 小时前
HotpotQA:推动多跳推理问答发展的标杆数据集
人工智能·神经网络·llm·qa·大千ai助手·hotpotqa·多跳推理能力
記億揺晃着的那天14 小时前
API设计中的幂等性详解
api·后端开发·幂等性
Kratos开源社区17 小时前
跟 Blades 学 Agent 设计 - 01 用“提示词链”让你的 AI 助手变身超级特工
llm·go·agent
山顶夕景19 小时前
【RLVR】GRPO中奖励函数的设计逻辑
llm·强化学习·rl·奖励函数·reward
在未来等你20 小时前
AI Agent设计模式 Day 2:Plan-and-Execute模式:先规划后执行的智能策略
设计模式·llm·react·ai agent·plan-and-execute
有意义21 小时前
从零搭建:json-server+Bootstrap+OpenAI 全栈 AI 小项目
前端·后端·llm
数据智能老司机1 天前
构建多智能体系统——使用工具
llm·agent·mcp
数据智能老司机1 天前
构建一个 DeepSeek 模型——通过键值缓存(Key-Value Cache, KV Cache)解决推理瓶颈
架构·llm·deepseek