为 AI 模型赋予「三头六臂」:MCP 服务实用指南

借助 MCP,AI 模型可以真正完成我们想要它做的事情,而不仅仅局限于你问我答的单一对话场景。


如果用机器人来比喻市面上的 AI 产品——

不断迭代更新的 AI 模型,比如 DeepSeek-R1、GTP4o、Claude 3.5 sonnet,就像是机器人的大脑,处理任务,返回结果;

面向用户推出的 app,比如 ChatGPT、DeepSeek、Claude,让我们得以与 AI 模型沟通,就好像是机器人的耳与口;

能够调用 AI 模型的 API,则像是脑机接口,直接将信息传输给大脑,并接收大脑返回的信息。

但如何调动机器人的躯干和四肢,让它直接为我们做事呢?本文接下来要介绍的 MCP 就能实现。MCP 的全称是 Model Context Protocal,是由 Anthropic 发起的开放协议,提供了一种将 AI 模型连接到不同数据源和工具的标准化方法。基于这种协议搭建的 MCP 服务能让 AI 获得「三头六臂」。

目前,Anthropic 和第三方已经提供了不少 MCP 服务,比如:

  • Anthropic 自己推出的服务:
    • Filesystem ,AI 可以读写、创建或是移动本地文件
    • Slack ,查看和回复 Slack 频道消息
    • Brave Search ,使用 Brave 的 Search API 进行 Web 和本地搜索
    • Fetch ,网页内容的获取和转换
    • Sequential Thinking ,帮助大模型「deep think」,将任务细分成多个步骤依次完成
    • Google Maps ,从谷歌地图获取定位、路线和地点详细信息
  • 第三方提供的官方服务:
  • 用户贡献的开源服务:
    • MySQL MCP ,读写 MySQL 数据库数据,以及执行 SQL 查询
    • Notion MCP ,通过 Notion API 与 Notion 工作区交互

更多 MCP 服务可以查看 Anthropic 官方文档

这些服务为 AI 模型处理任务的能力带来的提升,我认为可以总结为以下三点:

  • 指定信源:如果直接与训练好的 AI 模型对话,它回答问题依据的要么是训练模型时使用的语料,要么是在网上搜索的信息。这些数据缺乏可信度,具体到工作生活中的某个场景,又因为缺乏针对性而导致 AI 模型的回复只能是泛泛而谈。借助 MCP 服务,我们可以让 AI 模型从本地文件、数据库、第三方平台(如Google Drive、Google Maps、Notion)来获取数据,根据问题指定数据源,来得到可采纳度更高的答案。
  • 任务执行:很多时候提问只是第一步,在现有的 AI app 中得到答案后,我们往往需要根据 AI 模型的回答再去完成其他的操作,或是将 AI 模型的回答粘贴到他处。借助 MCP 服务,我们可以让 AI 模型直接完成后续的动作。比如在 Todoist 中创建待办,在 Obsidian 和 Notion 中创建笔记,在 Slack 中回复消息,在 GitHub 上提交文件。
  • 模型无关:MCP 是一个公开标准,并不依附于特定的模型或提供商(尽管目前事实上是由 Anthropic 主导)。比如 Memory 这个服务可以在本地保存你和 AI 聊天过程中与你有关的信息,后续即便你切换成其他模型,也不会损失已有的信息。又比如 Brave Search 提供的网页搜索能力,Fetch 提供的网页信息抓取能力,Sequential Thinking 提供的任务规划能力等等,与任何模型搭配都能起到提升效果。

如何配置 MCP 服务

基于 Anthropic 官方文档的说明,要使用 MCP 服务,首先你需要有一个支持 MCP 协议的客户端,目前主要包括:

  • Claude 客户端;
  • IDE 软件,如 Cursor(需要调整配置文件)、Windsurf;
  • 插件,比如 VS Code 插件 Cline、Continue,Emacs 插件 mcp.el;
  • 自己搭建客户端(官方文档有完整教程,适合喜欢折腾的同学)。

其次你需要在客户端的 MCP 配置文件中添加配置代码。比如我使用 Windsurf 作为 MCP 客户端,配置了 Brave Searchfetchfilesystemmysqlsequential-thinking 这五个 MCP 服务,则需在mcp_config.json文件中配置如下:

{
  "mcpServers": {
    "sequential-thinking": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-sequential-thinking"
      ]
    },
    "mysql": {
      "command": "uv",
      "args": [
        "--directory",
        "/opt/homebrew/lib/python3.11/site-packages/mysql_mcp_server",
        "run",
        "mysql_mcp_server"
      ],
      "env": {
        "MYSQL_HOST": "localhost",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "root",
        "MYSQL_PASSWORD": "...", // 数据库密码
        "MYSQL_DATABASE": "..." // database 名称
      }
    },
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "..." // 允许访问的文件夹路径
      ]
    },
    "brave-search": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-brave-search"
      ],
      "env": {
        "BRAVE_API_KEY": "..." // brave-search 创建的 API Key
      }
    },
    "fetch": {
      "command": "uvx",
      "args": [
        "mcp-server-fetch"
      ]
    }
  }
}

如果你使用的是 Claude 客户端,部分服务也提供了命令行来快速添加。

应用场景举例

接下来我以两个场景演示 MCP 对 AI 模型的提升效果。使用的 MCP 客户端是 Windsurf,AI 模型是 Windsurf 软件提供的 Cascade Base(这个模型肯定远不如 Claude sonnet 3.5 或是 GPT-4o,但是它免费😊。所以下面展示的生成质量可能不是特别好,重点看方法)。

抓取网页信息并总结

场景介绍

这个例子我希望 AI 模型完成以下任务:

  1. 从「有知有行」网站的「保险保障」专题页面上抓取链接,并将每个链接的正文信息保存为单独的文件;
  2. 总结全部保存文件的内容,形成专门的总结文档。

我提交给 AI 模型的 prompt 如下:

使用 sequential-thinking 思考并完成下面的工作:
使用 fetch 工具查询网址:https://youzhiyouxing.cn/topics/skeleton/nodes/32,并获取网页正文中的每个链接的内容,使用 filesystem 工具将每个网页的内容保存为一个单独的文件,保存在 MCPtest-文档 文件夹中

使用 sequential-thinking 思考并完成下面的工作: 
使用 filesystem 工具读取 MCPtest-document 文件夹中全部文件的内容,形成条理清晰的总结,为每一条总结注释来源,并保存在 MCPtest-文档 文件夹中

写 prompt 的要点有二:

  1. 所有要用到 MCP 服务的地方,要列出该服务的名称,提示 AI 模型使用;
  2. 每次任务的开头,都提示 AI 模型使用 sequential-thinking 将任务拆解为多个步骤执行,提升任务完成度。

执行过程

在我提交第一个 prompt 后,可以看到 AI 模型使用 sequential-thinking 工具将这个任务分成了5个步骤,并使用 Fetch 工具开始获取网页内容:

第二步,AI 模型从网页中提取了 28 个链接,对应原网页中的不同文章标题:

左侧为 AI 模型使用 Fetch 工具抓取的链接,右侧为目标网页内容

第三步,AI 模型想要在桌面创建文件夹以保存文件,但是我在 fetch 工具中限定了可访问的路径,因此它改为使用我指定文件夹的路径。

第四步,AI 模型开始逐个将链接正文保存到文件夹中。它在这一步保存了一篇文章,并总结处理方式。

第五步,AI 模型开始分批保存剩余的链接,第一批保存任务结束后,我终止了它后续的任务。

为了不影响阅读体验,这里我省略了中间获取多个链接正文的过程

第二个 prompt 的执行过程较为简单,不作详细说明,直接将过程和结果的截图贴在下面:

结果评估

在这个场景中,AI 模型正确地理解了我的意图,使用 MCP 工具将目标页面中的文章保存到我本地的文件夹中,并总结全部的文档内容,形成独立的总结文件。

美中不足的两点,一是存在没能抓取网页全部内容的情况,不确定是模型能力不足还是 fetch 工具的问题。二是总结效果一般;这与模型能力应该有直接关系。

数据分析

场景介绍

在这个场景中,我提前下载了美国房地产市场销售数据(共 220 多万条),导入到本地的 MySQL 数据库中,并根据数据结构列出了以下的大纲。我要求 AI 模型根据我列出的大纲,查询数据库,将数据补充到文档中。

我提交给 AI 模型的 prompt 如下:

使用 sequential-thinking 思考并完成下面的工作:
使用 filesystem 工具读取 @california_housing_price_trends.md 文档中第二节的标题,根据标题内容使用 MySQL 工具依次查询数据库,并将查询结果添加到文档中

执行过程

可以看到 AI 模型根据我列出的 7 个标题,将任务拆分成了 7 步,依次根据每一步的标题来查询数据库。

完成查询后,修改了原文档的内容,将结果插入到对应的标题下:

作为检查,我将 AI 模型输出的 SQL 语句转化成标准的 SQL 语句(形如 { "query": "SELECT state, ROUND(AVG(price), 2) as avg_price\nFROM realtor-data\nGROUP BY state\nORDER BY avg_price DESC\nLIMIT 15;" }),自行执行数据库查询,得到的结果与它返回的结果一致。这表明结果并不是 AI 模型自己杜撰的。

结果评估

在这个场景中,AI 模型同样准确理解了我的指令,根据我在文档中列出的标题,使用 MySQL 工具从数据库获取了我想要的数据,并将结果插入到原文档正确的标题下。

 

小结

从上述两个场景实例中可以看出,借助 MCP,AI 模型可以真正完成我们想要它做的事情,而不仅仅局限于你问我答的单一对话场景。

MCP 服务还有很多,我在文中列出的场景尚显单薄,欢迎各位读友在评论区集思广益,将 AI模型 + MCP 的组合融入到自己的工作流中。


目录关闭