最近了解到今年新出了一个 MCP 协议的概念。该协议最早是去年 11 月提出的,全程 Model Control Protocol。在今年 3 月份,OpenAI 官方提出支持 MCP 协议。现在已经有了很多支持 MCP 的服务了。

实际感受上,MCP 感觉类似于之前公司比赛平台中的 Copilot API 选择与参数提取榜单。之前这个榜单,会提供一个 OpenAPI Specification 格式的服务接口,然后针对每个问题,询问打榜人员的服务,这个问题是否有对应的 API 去执行,如果有的话,这个 API 对应的参数的值应该填写什么呢。

MCP 就类似于这样的,要求 MCP Server 提供标准化接口,由 MCP Client 去选择调用哪个 API,再加上上下文感知能力,将 API 调用结合到一起,进行协作处理。

Function Call vs MCP,其实这两者区别还是很大的。Function Call 是工具箱形式,需要继承到项目中,由模型选择项目中可用工具去执行。而 MCP 不需要继承到项目中,有点类似于“服务发现”?,将可用的 MCP Server 注册到当前的 MCP Client 中。这样使得 Client 不会那么臃肿,只需要专注于推理、执行、调用 Server 等就可以。

使用 VScode 插件 Cline 来尝试 MCP

本来是打算使用 Cursor 的,但是 Cursor 账号被拉黑了,需要升级 pro 才能用 chat 了,还没来得及重新再注册个新的账号…

安装、登陆 Cline 后,插件右上角可以配置 MCP Servers。看着 Notion 挺靠前,就选它了。点击后就可以跳转到 Notion 官方的 MCP Server GitHub 仓库

配置挺简单的,Notion 和插件的 mcpServers 都配置好后,就可以参考 ReadMe 中的提示,问问题了。

我问了“can you get the notion page of “Home””。

根据下图可以看到,MCP 首先去检索 Home 页面对应的 page 信息。

image.png|300

再检索到 page 信息后,自动进行补充输出,请求调用 API-retrieve-a-page 接口,去获得 page 内容。

image.png|300

不过,不得不说,这个挺耗费 token 的。最开始使用的是默认的 Claude-3.7-sonnet,没配置好,处理失败就 0.1 刀了。

写一个简单的 MCP Server

参考 MCP 官方的 Python SDK 写了一个简单的 Server,成功调用。

{
  "mcpServers": {
    "mcp-server-test": {
      "command": "python",
      "args": [
        "/Users/4paradigm/Projects/scripts/mcp-server.py"
      ],
      "env": {}
    }
  }
}

image.png

总结

感觉挺不错的,以前各个服务内置 AI 需要各自花钱,现在有了 MCP,可以一个顶多个了,就是 Token 消耗还挺高的。就上面一个问天气情况的,上传 32.3K token。怀疑将当前目录下的文件信息都上传了 = =。