首页 / 文章 / Blender MCP揭示了关于构建实用MCP服务器的要点。

Blender MCP揭示了关于构建实用MCP服务器的要点。

探讨MCP服务器的运作原理、Blender MCP在工具设计方面的体现,以及为何衡量实际使用情况对于构建可信赖的集成系统至关重要。

2498 词

大多数工程工作都是从熟悉的场景开始的:有人打开你开发的应用程序。

你需要设计控制面板,决定按钮的位置,并努力让重要操作一目了然。用户只需使用界面中的部分功能即可完成任务。

越来越有趣的问题是,当同一个人已经打开了人工智能助手并直接要求其处理任务时会发生什么。

用户真的还需要打开你的控制面板吗?

有时答案仍然是肯定的。用三段来回对话来替代一个可用的按钮并不能带来改进。但对于许多工作流程而言,强制用户通过你的应用程序进行导航只会增加无价值的繁琐步骤。

这就是MCP服务器可能变得愈发重要的核心原因。Blender MCP很好地展示了其在实际应用中的样子,同时也引出了一些关于如何长期构建、维护和评估这些集成方案的较为棘手的问题。

正是这些棘手的问题推动了Pulse项目的开发。

什么是MCP,MCP服务器是如何工作的?

MCP是Model Context Protocol的缩写,是一种用于将AI应用与外部工具及数据源相连的开放标准。基于该标准构建的服务器可以提供能够执行操作的工具、提供上下文的资源以及可重复使用的提示语。本文将重点讨论这些工具。

该架构将被称为主机的 AI 应用程序与它所通信的 MCP 客户端及服务器分开。主机负责协调这些组件之间的交互。客户端通过调用 tools/list 来了解可用的工具,然后使用 tools/call 触发选定的工具。服务器则执行实际逻辑并返回结果。服务器可以本地部署,也可以远程访问。

对于简单的产品集成,其流程可能如下所示:

User asks for something
 → AI application selects an available tool
 → MCP client sends the call
 → Your MCP server checks access and runs the operation
 → Result returns to the AI application

MCP 本身无法决定模型是否需要调用工具、用户的请求是否有意义,或是最终响应的质量如何。该协议仅负责连接各个组件,但整个应用仍需管理它们之间的协同工作。

即便发送了服务器,也不能保证每个AI助手都会自动识别并使用它。例如,VS Code需要经过明确的步骤来安装、配置服务器,并建立对MCP服务器的信任。在集成与权限方面仍然存在必须跨越的实际障碍。

Blender MCP究竟展现了什么

由社区开发的项目ahujasid/blender-mcp通过基于Python的MCP服务器与Blender插件相结合,将AI客户端与Blender连接起来。该系统能够查看场景、操作对象和材质,还能在Blender内部运行Python代码。需要注意的是,这属于第三方集成,并非Blender官方提供的功能。

它的架构大致如下:

AI application / MCP client
  ↕ MCP
Python MCP server
  ↕ Project-specific socket connection
Blender add-on
  ↕
Blender scene and operations

这种分离非常重要。MCP负责管理客户端与服务器之间的接口,而服务器与Blender之间的操作则完全由具体实现方式决定。任何MCP服务器仍需拥有自己的机制来实际驱动底层软件。

可以想象让助手查看一个场景,重新定位若干对象并调整它们的材质。通过这样的集成方式,助手可以直接对场景进行操作,而无需仅仅指示要点击哪些菜单。至于最终效果是否理想则是另一回事。

值得注意的一点是,所有实际的工作仍然在Blender内部完成。该应用程序、其现有的功能集以及你查看更改内容的能力依然是核心所在。

这种模式似乎也可能出现在其他类型的软件中:有人提出具体的修改需求,在熟悉的界面中查看结果,而当手动操作更快时则转回手动处理。

相比要求人们放弃现有工具,全部通过聊天窗口来完成工作,这种方式显然更为现实。

MCP与API:究竟有什么变化?

MCP服务器可以自由地建立在现有的API之上。它既可以封装数据库、本地库,也可以像Blender MCP中使用的那样封装专用桥接组件。即便现在是由人工智能应用来调用它,采用MCP也并不要求你必须重新构建后端系统。

真正发生的变化是,现在有了一个统一的接口,可用于向任何兼容的客户端展示功能。这些工具通过定义来描述,列明可执行的操作及其所需输入,因此各个客户端在集成时无需再各自设计独立的发现机制和调用规范。

可以将这视为产品的第三个入口,与现有的用户界面及API并列存在。

以库存系统为例,业务逻辑已经知道如何查询产品、检查是否有货以及预留相应数量的产品。重用现有逻辑远比仅仅为服务人工智能助手而编写新的实现方式更为合理。

话虽如此,采用MCP并非毫无条件。如果你处理的只是单个内部脚本与一个已知的API交互,直接调用该API可能仍是最简单的办法。只有当你确实需要在多个AI客户端之间实现兼容性,或者某个可复用的工具接口能解决你面临的实际问题时,MCP才显得有价值。仅仅因为某种协议当前很流行就强行使用它,只会增加你需要维护的协议数量。

构建MCP工具也是一种界面设计

这是值得放慢速度处理的环节。

智能体需要确定哪个工具适用于特定任务以及如何正确调用它。Anthropic自身的工程指导建议围绕有意义的工作单元来设计工具,为每个工具设定明确的边界,并评估其在实际使用中的表现,而非原封不动地暴露所有现有的接口端点。

对于一个假设的目录管理应用,一个合理的初始定义可能如下所示:

{
  "name": "search_catalog",
  "description": "Find products in the authorized catalog by name or SKU. Returns product IDs, names, and availability. Read-only; does not reserve stock.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "query": { "type": "string", "minLength": 1 },
      "limit": { "type": "integer", "minimum": 1, "maximum": 20 }
    },
    "required": ["query", "limit"],
    "additionalProperties": false
  }
}

这仅用于说明工具的定义方式,并非完整的服务器实现或真正的 Blender MCP 工具。此处显示的名称、描述以及 JSON Schema 输入规范均遵循 MCP 所规定的格式。

描述中会明确说明该工具可以搜索什么、返回什么内容,以及它故意不执行哪些操作。其输入范围较为有限。将“预留库存”单独列为一个操作,是因为它与简单的查询具有不同的后果。

即便在描述中将某事物标记为“已授权”,也并不意味着它真的获得了授权。访问控制与输入验证的实际执行必须在代码实现中完成。任何会带来实际后果的操作都需要相应的确认步骤。MCP为各类工具提供的安全指南直接针对这些责任进行了说明。

Blender MCP清楚地展示了这种权衡:其Python执行工具确实功能强大,而该项目本身也明确警告了让助手运行任意代码所带来的风险。

对于你自己的生产工具,建议从最基本且实用的权限集开始,只有在有明确必要时再逐步扩展权限。此外,还应对工具进行实际请求测试——对你来说表述清晰的描述,并不能保证智能体能够正确理解并使用它。

如何判断一个MCP服务器是否有用?

一个能运行的演示只能回答一个狭隘的问题:这个工作流程到底能不能正常运行?

它无法告诉你人们是否会持续使用该工具、他们依赖哪些具体功能,或者当实际请求超出预设场景时会出现什么问题。

以目录服务器为例,你需要了解search_catalog是否真的被调用、发布新版本是否会拖慢其处理速度,以及故障是集中在某项特定操作上还是均匀分布的。

在此情况下,解读时也需要谨慎。工具调用次数的增加可能反映出确实有有价值的工作正在被完成,也可能意味着智能体在重复尝试本应一次就成功的事务。仅凭原始的调用次数无法区分这两种截然不同的情况。

在监控方面,这些都是相互独立的问题,应当分别进行跟踪。运营指标涉及延迟和错误率等内容;产品分析则能揭示使用模式以及在具备适当身份信息的情况下的重复访问情况;而任务级评估则能判断端到端的流程是否真正满足了用户的需求。

这一区别很重要,因为处理程序成功返回并不等同于用户任务已完成。从技术层面看,处理程序调用可能已经成功,但在输出验证或传输层仍可能出现故障。即便结果在技术上是有效的,也可能对请求者毫无帮助。

所有这些情况都不应被简化为一个单一的绿色状态指示器来掩盖其中的差异。

我为何要为MCP分析功能开发Pulse

正是这些问题促使我创建了Pulse——一个开源SDK,还配有可选的、独立托管的云服务。

该项目的公共仓库地址为github.com/selimeneserd/pulse-sdk,将其添加星标有助于他人发现它。

它采用 MIT 许可证发布。该库会监控 MCP 工具处理程序的完成情况,并能将相关元数据发送到本地目标、您控制的收集器,或通过可选的 OpenTelemetry 导出器发送。使用它无需注册 Pulse Cloud,且该集成中也未默认嵌入任何云端端点。

最简单的本地配置大致如下:

import { McpServer } from '@modelcontextprotocol/server';
import { createPulse } from '@reviseflow/pulse';
import { createJsonlExporter } from '@reviseflow/pulse-core/jsonl';

const analytics = createPulse({
  environment: 'development',
  exporter: createJsonlExporter({
    path: './catalog-events.jsonl',
  }),
});

const server = analytics.wrapServer(
  new McpServer({ name: 'catalog-server', version: '1.0.0' }),
);

// Register tools on `server`, then connect your existing MCP transport.

此代码片段旨在演示工具集成功能,而非完整的服务器实现。它是针对 Pulse 0.2.1 以及 @modelcontextprotocol/server 的 2.0.0 版本编写的,支持的运行时包括 Node.js 24.20.0。仅注册工具本身不会产生任何分析事件,只有实际调用处理函数时才会生成此类事件。在所有正在处理的请求都完成后,若要优雅地关闭服务器,则需调用 await analytics.shutdown({ timeoutMs: 2_000 })

这个示例针对的是基于 TypeScript 的 MCP 服务器。目前 SDK 中还没有可用于处理类似 Blender MCP 这类场景的 Python 适配器。

Pulse Cloud 在这些元数据之上提供了托管存储层与控制面板:包括工具使用模式、处理时长、结果状态,以及按环境或版本进行筛选的功能。它通过独立的遥测数据流运行,因此您的实际工具流量不会经过该系统。

向 Cloud 发送数据是可选的且需明确操作,通过 HTTP 导出工具结合收集器 URL 以及服务器端写入密钥来实现。Cloud 产品本身为闭源,但其底层的监控层则完全开放,可独立使用。

明确区分这两者非常重要。那些更喜欢将数据写入本地 JSONL 文件,或已拥有现有监控体系的开发者,完全有理由直接采用开源层,而无需先成为 Cloud 的客户。

真实的分析需要明确的边界

Pulse的遥测数据刻意排除了原始提示、工具参数、工具输出、错误信息、堆栈跟踪以及请求头等内容。即便是工具名称或技术标签这类简单的信息也需要仔细审查,因为元数据本身就可能泄露敏感细节。所有可选的账户标识符均为设计上的假名形式,并不能保证完全匿名。

遥测数据的采集范围与边界同样重要。Pulse能够知道某个处理程序是否被调用以及耗时多少,但却无法了解模型为何选择特定工具、用户实际想要实现的目标是什么,或是最终的业务结果是否理想。此外,它也无法记录那些在到达处理程序之前就被拦截的调用过程。

遥测数据的传输采用尽力而为的方式:存在队列限制且会进行重试,但无法保证每个事件都会送达。丢失的遥测事件不会影响用户收到的实际工具结果,但会导致数据出现缺失。该系统旨在用于分析,而非作为防篡改的审计追踪手段。

鉴于此,直接说明这些限制比给该功能贴上“可观测性”标签、让人们对实际被追踪的内容产生猜测更为坦诚。

未来展望

一个真正实用的MCP集成很可能会成为人们在评估产品时除常规标准之外的又一评判依据。

助手真的能够实现用户所需的功能吗?它的操作步骤是否易于理解和执行?是否有人能在关键事项发生前介入审查?而且当最初的新鲜感消退后,这种集成还能正常运行吗?

Blender MCP 的优势在于它提供了一个实实在在的案例,展示助手如何操作现有的真实软件,而不仅仅是谈论它们。相比那些主要任务就是指导用户在其他地方自行完成操作的聊天机器人,这种发展方向显得更有前景。

这并不意味着现在每个产品都需要 MCP 服务器,也不代表传统的图形界面即将过时。它只是表明某些工作流程可以先在助手中启动,然后再在实际应用程序中继续进行,从而减少中间繁琐的手动操作。

Pulse本身或许是个值得尽早尝试的方向,但目前尚不清楚这种模式多久能成为标准做法。不过,那些底层的工程问题现在就值得去解决:设计真正有用的工具、设定合理的权限边界、确保执行过程的可靠性,以及如实反映这些工具在实际使用中的情况。

仅仅部署一个MCP服务器是远远不够的。真正值得开发的服务器,应该是那些在人们最初的兴趣消退后仍会反复使用的那种。

如果你正在自己开发这样的服务器,你是如何决定哪些工具才真正值得保留的?

相关阅读