给AI装上“万能双手”的协议,小白也能玩转智能工具-一文搞懂MCP

给AI装上"万能双手"的协议,小白也能玩转智能工具-一文搞懂MCP

最近AI圈最火的就是MCP了,MCP是什么呢?MCP要解决什么问题?MCP优势有哪些?MCP如何使用?MCP可以给我们带来哪些机会?本文带你解答这些疑惑。

大模型通俗的解释就是人的大脑,可以思考、创造,但是光有大脑没有耳鼻嘴眼手脚光有大脑思考一点用都没有,所以大家不遗余力的去给它造外设,包括Function Call、 LangChain Tools,、LlamaIndex 、 Vercel AI SDK,以及前段时间很火的manus,本质都是为了给大脑做配套,去最大程度的发挥它的能力。而且这两年AI 应用层的开发并没有多少新的东西,Prompt、RAG、Agent,大家都在围绕这些去做事情,结合自己的领域做垂域,但本质还是围绕LLM的外围扩展。

那么MCP是什么,它是如何实现这些东西呢?

MCP(Model Context Protocol 模型上下文协议), 是24年11 月底 Claude(Anthropic) 主导发布一个开放的、通用的、有共识的协议标准。Claude 发布了 MCP 后,官方的 Claude Desktop 就开放了 MCP 功能,并且推动了开源组织 Model Context Protocol,由不同的公司和社区进行参与。

MCP原理介绍

首先我们看看MCP的官方架构图:

从图上可以看到,MCP总共分为了以下五个部分:

  • MCP Hosts: Hosts 是指 LLM 启动连接的应用程序,像 Cursor, Claude Desktop、Cline 这样的应用程序。
  • MCP Clients: 客户端是用来在 Hosts 应用程序内维护与 Server 之间 1:1 连接,可以理解为是Host的一部分。
  • MCP Servers: 通过标准化的协议,为 Client 端提供上下文、工具和提示。
  • Local Data Sources: 本地的文件、数据库和 API。
  • Remote Services: 外部的文件、数据库和 API。

整个 MCP 协议核心的在于 Server,因为 Server是最终的能力提供方。看看 Cursor 的 AI Agent 发展过程,我们会发现整个 AI 自动化的过程发展会是从 Chat 到 Composer 再进化到完整的 AI Agent。

AI Chat 只是提供建议,如何将 AI 的 response 转化为行为和最终的结果,全部依靠人类,例如手动复制粘贴,或者进行某些修改。

AI Composer 是可以自动修改代码,但是需要人类参与和确认,并且无法做到除了修改代码之外的其它操作。

AI Agent 是一个完全的自动化程序,未来完全可以做到自动读取 Figma 的图片,自动生产代码,自动读取日志,自动调试代码,自动 push 代码到 GitHub。

而 MCP Server 就是为了实现 AI Agent 的自动化而存在的,它是一个中间层,告诉 AI Agent 目前存在哪些服务,哪些 API,哪些数据源,AI Agent 可以根据 Server 提供的信息来决定是否调用某个服务,然后通过 Function Calling 来执行函数。

MCP、Function Calling、Agent区别

在阅读至此的内容时,您或许会心生疑问:2023 年 OpenAI 发布 GPT function calling 之时,不就已经能够达成类似功能了吗?我们此前博客中所介绍的 AI Agent,其核心作用本就是集成各类不同服务,那为何如今又出现了 MCP 呢?

function calling、AI Agent 以及 MCP 这三者之间,究竟存在怎样的差异呢?

Function Calling

Function Calling 具体是指 AI 模型依据上下文环境,自动执行相应函数的机制。它扮演着 AI 模型与外部系统之间的连接桥梁角色。不过,不同的 AI 模型有着各自不同的 Function Calling 实现方式,代码集成方法也各有不同,这些都由不同的 AI 模型平台负责定义与实现。

若要运用 Function Calling,就需要通过代码为大型语言模型(LLM)提供一组 functions,同时要给出清晰明确的函数描述、函数输入以及输出信息。如此一来,LLM 便能够基于这些结构清晰的数据展开推理,进而执行相应函数。

然而,Function Calling 存在一定局限性。它在应对多轮对话以及复杂需求时表现欠佳,比较适用于任务边界清晰、描述明确的场景。一旦需要处理的任务繁多,Function Calling 的代码维护难度就会显著增加。

Model Context Protocol (MCP)

MCP 属于一个标准协议,类似于电子设备通用的 Type C 协议(既能充电又能传输数据),它能够让 AI 模型与不同的 API 以及数据源实现无缝交互。

MCP 的目标是取代碎片化的 Agent 代码集成方式,以此提升 AI 系统的可靠性与有效性。通过构建通用标准,服务提供商能够基于此协议推出自身服务的 AI 能力,这不仅有助于开发者更迅速地构建功能强大的 AI 应用,还避免了开发者重复开发。借助开源项目,MCP 能够打造出一个强大的 AI Agent 生态系统。

MCP 具备在不同应用或服务之间维持上下文的能力,从而增强整体自主执行任务的效能。可以这样理解,MCP 是对不同任务进行分层处理,每一层都具备特定的能力、描述以及限制条件。而 MCP Client 端会依据不同任务的具体情况,判断是否需要调用某项能力,再通过各层的输入与输出,构建出一个能够处理复杂多步对话并统一上下文的 Agent。

传统模式下,每当我们想让AI完成一个新任务,都需要为特定工具单独编写API代码,就像每台电器都需要定制插头一样繁琐。而MCP协议则像一个"万能插座",为AI提供了统一的接口标准。任何支持MCP的工具(如Figma、Flomo、数据库等)都能即插即用,无需额外开发。

更简单地说,MCP就像一本工具使用说明书,让AI能够读懂如何操作你的电脑、云端工具和互联网服务。它不仅降低了技术门槛,还让普通人也能通过自然语言指令完成复杂的任务。
你的指令 MCP解析器 MCP工具库 调用Figma API 调用Flomo API 调用本地文件系统 生成网页代码 保存笔记 读取/写入文件

AI Agent

AI Agent 是一个具备自主运行能力的智能系统,旨在实现特定目标。传统的 AI 聊天通常仅能提供建议,或者需要用户手动执行任务,而 AI Agent 则不同,它能够分析具体状况,做出合理决策,并自行采取相应行动。

AI Agent 可以借助 MCP 提供的功能描述,深入理解更多的上下文信息,并在各类平台或服务中自动执行任务。

对比

Claude 推出 MCP 后为何能获得广泛认可呢?实际上,在过去一年里,我本人也参与了几个小型 AI 项目的开发工作。在开发过程中,将 AI 模型与现有系统或者第三方系统进行集成,着实是一件颇为棘手的事情。

尽管市面上存在一些支持 Agent 开发的框架,例如 LangChain Tools、LlamaIndex 或者 Vercel AI SDK,但它们都存在不同程度的问题。

LangChain 和 LlamaIndex 虽然是开源项目,但整体发展态势较为混乱。一方面,它们的代码抽象层次过高,总是倡导开发人员通过几行代码就能实现某些 AI 功能。这种方式在演示阶段确实便捷,然而一旦业务变得复杂,糟糕的代码设计就会带来极差的编程体验。另一方面,这两个项目过于注重商业化,却忽视了整体生态的建设。

再看 Vercel AI SDK,尽管我个人认为它在代码抽象方面表现较好,尤其是对前端 UI 结合以及部分 AI 功能的封装较为出色,但它存在一个严重问题,即与 Nextjs 绑定过深,对其他框架和语言的支持力度明显不足。

正因如此,Claude 推动 MCP 可谓恰逢其时。首先,Claude Sonnet 3.5 在开发人员群体中拥有较高的声誉,而 MCP 作为一个开放标准,吸引了许多公司和社区积极参与其中,大家都期望 Claude 能够始终保持良好的开放生态。

MCP 对于社区生态主要带来以下两方面益处:

其一,向服务商开放标准,服务商能够针对 MCP 开放自身的 API 以及部分能力。

其二,避免开发者重复开发,开发者可以利用已有的开源 MCP 服务来强化自己的 Agent。

下面是MCP 和 传统模式效率对比:

痛点场景 传统模式 MCP方案
调用新工具 重写API对接代码(平均200行) 添加MCP服务链接(1分钟)
多工具协作 需开发中间件协调数据流 自然语言描述流程自动串联
敏感数据操作 需上传云端引发隐私风险 本地Server处理(如读取病历)
跨平台使用 不同系统需重复开发 一次配置全平台通用

MCP Server工作示例

我们以官方提供的Github 操作的示例减少MCP Server工作原理。假如我们期望 AI Agent 实现这样一系列功能:先自动在 GitHub 上搜索 Repository(代码仓库),接着在该仓库中搜索 Issue(问题),随后判断所搜索到的 Issue 是否属于已知的 bug,最后依据判断结果决定是否要提交一个新的 Issue。

为了达成这些功能,我们需要创建一个 Github MCP Server(模型上下文协议服务器)。这个服务器必须具备三种能力,分别是查找 Repository、搜索 Issues 以及创建 Issue。

接下来,我们直接查看相关代码:

复制代码
const server = new Server(
  {
    name: "github-mcp-server",
    version: VERSION,
  },
  {
    capabilities: {
      tools: {},
    },
  }
);

server.setRequestHandler(ListToolsRequestSchema, async () => {
  return {
    tools: [
      {
        name: "search_repositories",
        description: "Search for GitHub repositories",
        inputSchema: zodToJsonSchema(repository.SearchRepositoriesSchema),
      },
      {
        name: "create_issue",
        description: "Create a new issue in a GitHub repository",
        inputSchema: zodToJsonSchema(issues.CreateIssueSchema),
      },
      {
        name: "search_issues",
        description: "Search for issues and pull requests across GitHub repositories",
        inputSchema: zodToJsonSchema(search.SearchIssuesSchema),
      }
    ],
  };
});

server.setRequestHandler(CallToolRequestSchema, async (request) => {
  try {
    if (!request.params.arguments) {
      throw new Error("Arguments are required");
    }

    switch (request.params.name) {
      case "search_repositories": {
        const args = repository.SearchRepositoriesSchema.parse(request.params.arguments);
        const results = await repository.searchRepositories(
          args.query,
          args.page,
          args.perPage
        );
        return {
          content: [{ type: "text", text: JSON.stringify(results, null, 2) }],
        };
      }

      case "create_issue": {
        const args = issues.CreateIssueSchema.parse(request.params.arguments);
        const { owner, repo, ...options } = args;
        const issue = await issues.createIssue(owner, repo, options);
        return {
          content: [{ type: "text", text: JSON.stringify(issue, null, 2) }],
        };
      }

      case "search_issues": {
        const args = search.SearchIssuesSchema.parse(request.params.arguments);
        const results = await search.searchIssues(args);
        return {
          content: [{ type: "text", text: JSON.stringify(results, null, 2) }],
        };
      }

      default:
        throw new Error(`Unknown tool: ${request.params.name}`);
    }
  } catch (error) {}
});

async function runServer() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
  console.error("GitHub MCP Server running on stdio");
}

runServer().catch((error) => {
  console.error("Fatal error in main():", error);
  process.exit(1);
});

Server通过setRequestHandler提供了两个接口,ListToolsRequestSchema来告诉 Client 端我们提供了哪些能力,通过 description 字段来描述这个能力的作用,通过 inputSchema 来描述完成这个能力需要的输入参数。CallToolRequestSchema提供对应能力的实现接口。

基于MCP改造我们工作流的一些尝试

我们想象一下,你是否遇到过这样的场景?当你在Figma完成设计稿后,需要手动将设计转化为代码;当你需要整理行业新闻时,不得不逐个打开网页、复制粘贴内容;甚至当你想让AI帮你操作本地文件时,却发现需要复杂的编程知识。这些看似简单的任务,却因为技术门槛和繁琐的操作流程,让许多人望而却步。

但想象一下,如果这一切都能通过一句话指令完成:

"总结今天的AI新闻并存入Flomo。"

"把Figma设计稿转成网页代码。"

"把桌面的PDF论文转成思维导图。"

这不再是科幻小说中的场景,而是MCP协议正在实现的现实。它正在让AI从"只会聊天的聪明大脑"进化为"能动手干活的全能助手"。接下来,我们将通过真实案例和代码实现,带你深入了解这个正在颠覆效率工具领域的技术。先来看一个自动保存新闻的示例。

通过"总结AI新闻存进Flomo"看AI如何理解你的指令

当我们发出指令"总结AI新闻存进Flomo"时,MCP协议会自动拆解任务:

  1. 获取日期 :调用Time MCP模块获取当前日期。
  2. 搜索新闻 :激活Exa MCP模块搜索当日的AI相关新闻。
  3. 内容总结:使用大语言模型对新闻内容进行总结。
  4. 保存笔记 :通过Flomo MCP模块将总结内容存入Flomo。

整个过程就像搭积木一样简单,甚至无需编写任何代码。
用户指令 任务解析 获取日期 搜索新闻 内容总结 保存笔记 MCP时间模块 MCP搜索模块 大语言模型 MCP笔记模块

代码实现:任务拆解逻辑
python 复制代码
def process_user_command(command):
    # 1. 解析指令
    task = parse_command(command)
    
    # 2. 调用对应MCP模块
    if "日期" in task:
        date = call_time_mcp()
    if "新闻" in task:
        news = call_exa_mcp(query=f"AI新闻 {date}")
    if "总结" in task:
        summary = summarize(news)
    if "保存" in task:
        save_to_flomo(summary)
    
    return "任务完成!"

# MCP模块调用示例
def call_time_mcp():
    response = requests.get("https://mcp-time.example.com/api/date")
    return response.json()["date"]

def call_exa_mcp(query):
    payload = {"query": query}
    response = requests.post("https://mcp-exa.example.com/api/search", json=payload)
    return response.json()["results"]
零代码AI日报系统

某产品经理每天需要整理AI行业新闻,传统方法耗时2小时,且格式不统一。通过MCP协议,他仅用3天(实际有效时间约12小时)搭建了一个全自动的AI日报系统:

  1. 在MCP聚合站搜索"Flomo"和"新闻搜索"模块。
  2. 复制JSON配置到ChatWise。
  3. 发送指令:"每天早上8点总结AI新闻存入Flomo"。

现在,他每天早上打开Flomo,就能看到自动生成的日报,包含时间戳、新闻来源和摘要。耗时从2小时缩短至5分钟。

浏览器操控魔法

想象一下,我们可以让AI登录邮箱、筛选未读邮件、提取关键信息并生成待办清单。这一切通过BrowserBase MCP模块即可实现:

python 复制代码
def filter_emails(criteria):
    # 调用BrowserBase MCP
    payload = {
        "action": "login",
        "url": "https://mail.example.com",
        "credentials": {"user": "[email protected]", "pass": "yourpass"}
    }
    requests.post("https://mcp-browser.example.com/api/execute", json=payload)
    
    # 执行筛选
    payload = {
        "action": "filter",
        "criteria": criteria
    }
    response = requests.post("https://mcp-browser.example.com/api/execute", json=payload)
    return response.json()["emails"]

# 示例调用
emails = filter_emails("未读 AND 发件人:老板")
generate_todo_list(emails)
本地文件"语音助手"

只需一句话指令:"把桌面PDF论文转成思维导图",MCP协议就能完成以下操作:

  1. 调用FileSystem MCP读取PDF文件。
  2. 使用大模型解析内容。
  3. 调用XMind MCP生成思维导图。
python 复制代码
def process_pdf_to_mindmap(file_path):
    # 1. 读取PDF
    pdf_content = call_filesystem_mcp(file_path, "read")
    
    # 2. 解析内容
    mindmap_data = parse_pdf_content(pdf_content)
    
    # 3. 生成思维导图
    payload = {
        "action": "create",
        "data": mindmap_data,
        "format": "xmind"
    }
    response = requests.post("https://mcp-xmind.example.com/api/generate", json=payload)
    return response.json()["file_url"]

# MCP文件系统调用
def call_filesystem_mcp(file_path, action):
    payload = {
        "file_path": file_path,
        "action": action
    }
    response = requests.post("https://mcp-filesystem.example.com/api/operate", json=payload)
    return response.content

自建MCP服务:掌握核心能力

为何需要自建?
  • 成本控制:避免API调用费用(如OpenAI按调用计费)。
  • 数据安全:处理敏感数据(如医疗记录、财务数据)。
  • 定制功能:实现特定格式转换等特殊需求。
最简部署步骤
  1. 环境准备

    bash 复制代码
    # 安装Docker
    curl -fsSL https://get.docker.com | bash
    docker run hello-world  # 测试安装
  2. 拉取MCP服务镜像

    bash 复制代码
    docker pull mcp-base-server:latest
    docker run -d -p 8080:80 --name mcp-server mcp-base-server
  3. 配置自定义工具

    python 复制代码
    # 自定义MCP工具示例
    from flask import Flask, request, jsonify
    
    app = Flask(__name__)
    
    @app.route('/api/convert', methods=['POST'])
    def convert_format():
        data = request.json
        # 自定义转换逻辑
        return jsonify({"result": "converted_data"})
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=80)

### MCP 的一些资源

要是还没有体验过如何使用 MCP,可以优先考虑使用 Cursor、Claude Desktop 或者 Cline 来感受一下。大部分情况我们无需亲自去开发 MCP Servers。MCP 的优势就在于它的通用性和标准化,所以开发者没必要重复进行这项工作。最值得推荐的是官方组织提供的一些 Server,也就是官方的 MCP Server 列表,因为社区的 MCP Server 状况比较杂乱。其中不少缺少教程和文档说明,而且很多代码功能也存在问题。大家不妨自行尝试一下 Cursor Directory 里的一些示例。

下面是一些 MCP 的资源,大家可以参考一下。

MCP 官方资源
社区的 MCP Server 的列表
官方推荐的演示Server
  • AWS KB Retrieval - Retrieval from AWS Knowledge Base using Bedrock Agent Runtime
  • Brave Search - Web and local search using Brave's Search API
  • EverArt - AI image generation using various models
  • Everything - Reference / test server with prompts, resources, and tools
  • Fetch - Web content fetching and conversion for efficient LLM usage
  • Filesystem - Secure file operations with configurable access controls
  • Git - Tools to read, search, and manipulate Git repositories
  • GitHub - Repository management, file operations, and GitHub API integration
  • GitLab - GitLab API, enabling project management
  • Google Drive - File access and search capabilities for Google Drive
  • Google Maps - Location services, directions, and place details
  • Memory - Knowledge graph-based persistent memory system
  • PostgreSQL - Read-only database access with schema inspection
  • Puppeteer - Browser automation and web scraping
  • Redis - Interact with Redis key-value stores
  • Sentry - Retrieving and analyzing issues from Sentry.io
  • Sequential Thinking - Dynamic and reflective problem-solving through thought sequences
  • Slack - Channel management and messaging capabilities
  • Sqlite - Database interaction and business intelligence capabilities
  • Time - Time and timezone conversion capabilities

MCP的未来:工具民主化的里程碑

MCP协议正在打破技术壁垒,让每个人都能成为效率工具的设计师。目前,MCP已支持300+应用,开发者社区在GitHub上的星标超过10K,smithery.ai收录了200+实战案例。

未来,MCP将支持更多场景:

  • 物联网设备:控制智能灯、打印机等硬件。
  • 无代码平台:通过可视化拖拽设计任务流程。
相关推荐
CoderJia程序员甲8 分钟前
KrillinAI:视频跨语言传播的一站式AI解决方案
人工智能·ai·大模型·音视频·短视频
北京天拓四方15 分钟前
当纺织车间遇上“数字魔法”--天拓四方飞鸟物联平台+边缘计算采集网关的智造革命
人工智能
CodeJourney.21 分钟前
DeepSeek与ECharts融合助力复杂图表高效制作
数据库·人工智能·算法·excel
绝顶大聪明28 分钟前
[图像掩膜,ROI切割] 图像预处理(OpenCV)-part4
人工智能·opencv·计算机视觉
Y1nhl39 分钟前
搜广推校招面经七十六
人工智能·pytorch·深度学习·推荐算法·搜索算法
AI智能科技用户7946329781 小时前
okcc呼叫中心两个sip对接线路外呼任务怎么设置才能一个任务对应yigesip中继?
人工智能·后端
用户121675766131 小时前
一键开源仓库转使用文档神级MCP--git-mcp
mcp
火山引擎边缘云1 小时前
开启报名!火山引擎 x PICO-全国大学生物联网设计竞赛赛题发布
人工智能·物联网·aigc
机器学习Zero1 小时前
自然语言处理(9)—— 共现词矩阵及Python实现
人工智能·python·自然语言处理·nlp
Json_1 小时前
睡前小故事数据集分享
人工智能·数据分析·openai