一文入门AI圈最近爆火的MCP协议

前言

今天来聊一聊claude母公司anthropic推出的mcp协议,mcp全称是model context protocol,中文可以翻译成模型上下文协议,官网地址是modelcontextprotocol.io/。 mcp号称是AI工具调用的type-c协议,可以完成AI助手的跨平台调用,让不同的模型可以统一化标准进行交互,从而提升AI技术的互操作性和效率,就如同电子圈里的type-c协议。

其实anthropic在去年11月底就通过一篇博文 www.anthropic.com/news/model-... 发布了mcp协议,虽然我第一时间就关注到这个消息,但当时却对此嗤之以鼻。不是觉得这个协议本身有问题,而是觉得当下全球多家AI大公司疯狂竞争,就好比是春秋战国百家争鸣的鼎盛时期,不太可能出现"书同文车同轨"的情况,更何况,Anthropic看起来也不像能够成为统一六国的"秦国"。

MCP最初只支持自家的Claude桌面工具,但随后AI领域的各类工具、软件和SDK纷纷开始支持MCP协议,包括知名软件Cursor、Cline,以及开发框架LangChain。微软的AutoGen开发框架也在0.4.6版本加入了对MCP的支持。最令人震惊的是,Anthropic的最大竞争对手OpenAI也在3月底宣布支持MCP。这完全出乎我的意料,毕竟OpenAI一直是AI领域各种标准的引领者,现在大家使用的API协议也都是OpenAI制定的。我原本以为OpenAI会推出自己的类似协议,没想到它就这么水灵灵地支持了。只能说,自此 MCP已成,未来必成行业标准。

什么是MCP?

回到正题,到底MCP是什么?为什么需要MCP?让我们先看看当下AI开发的现状。假设我们需要让AI调用某个特定功能的工具,首先必须自行开发这个工具,然后实现AI调用的逻辑。工具的实现虽然取决于具体功能,这部分在不同工具间确实需要重复开发,但由于缺乏统一的对外协议,这些工具很难被共享使用,最多也就停留在源码级别的开放。

在AI调用方面,具体实现方式取决于使用的AI框架。比如OpenAI有自己原生的工具接入方式,而LangChain、AutoGen等开发框架也都有各自独特的工具接入方式。简单来说,由于每个框架或软件的工具接入协议都不相同,导致同样的工具无法在不同框架间直接接入。

框架和工具之间的关系,如下图所示:

  • Local Data Sources: 本地的文件、数据库和服务,MCP服务器可以安全地访问这些内容
  • Remote Services: 可通过互联网访问的外部系统(例如通过API),MCP服务器可以与之连接

可以看出,工具调用者和工具之间形成了多对多的关系。即使是调用同一个工具,每个框架都需要独立保存一份工具代码,或者是重新接入一次这个工具。不管是哪种方式,重复建设导致的成本都会很高,而且后续从工具的维护成本上,也会带来很大的问题。每当工具需要更新时,所有使用该工具的框架都需要同步更新其工具代码,这无疑增加了维护的复杂度。

大家都知道,在计算机科学领域,没有什么问题是加一层解决不了的,而MCP就是在AI工具和框架之间添加了一个中间层。这个中间层规范了工具与框架之间的通信标准,极大地简化了工具的开发和维护流程。有了MCP之后,上图中的调用逻辑就会变成下面这样,有非常大幅度的简化。

这里需要额外介绍图中几个关于MCP的概念。

  • MCP Hosts: 想要通过MCP访问数据的程序,比如Claude桌面端、集成开发环境或其他AI工具
  • MCP Clients: 维护与服务器之间一对一连接的协议客户端
  • MCP Servers: 通过标准化的模型上下文协议暴露特定功能的轻量级程序

需要重点关注的是,MCP采用的是CS架构。任何软件或框架如果要通过MCP协议调用工具,都必须集成MCP Client,并通过它来调用对应工具的MCP Server。值得注意的是,每个MCP Server实际上都是运行在本地的轻量级程序,它可以是pyhton和可以是nodejs甚至java进程,它可以接受来自各个地方的调用,并且可以安全地访问本地的文件系统和数据库,这些MCP Server因为遵循着同一套实现标准,所以也能在任何支持MCP协议的软件中使用。

安装和体验

从上面的设计思路可以看出,Anthropic想在 AI 工具调用领域实现"书同文车同轨"的野心,到底有没有可能?我们来安装几个MCP Server验证下使用验证下。在开始前首先需要一个支持MCP的Hosts(其实就是支持MCP的软件),这里我使用两个工具,一个是mcpo加持下的Open-WebUi,另外一个是VSCode中的Cline插件,在其中安装MCP Server也很简单。这里我以Cline为例,只需要打开其中内置MCP Server市场,点击安装,然后Cline就会给你安装并配置好对应的MCP Server,甚至最后还会帮你测试下,这是Cline的自动安装模型。

其实还有手动安装模式,指需要打开Cline的mcp的json配置文件。直接在其中增加对应的MCP-Server配置即可。这里官方在python下比较推荐的方式是使用uvx,使用uvx的话它会在首次启动是自动安装,比如我们从官方仓库里找到一个Time的MCP,只需要将下面json贴到Cline配置文件中即可(注意,windows平台略有不同)。

json 复制代码
"mcpServers": {
  "time": {
    "command": "uvx",
    "args": ["mcp-server-time"]
  }
}

我在Cline中已经安装了几个MCP-Server了,完整的配置JSON如下:

json 复制代码
{
  "mcpServers": {
    "github.com/ahujasid/blender-mcp": {
      "autoApprove": [],
      "disabled": false,
      "timeout": 60,
      "command": "uvx",
      "args": [
        "blender-mcp"
      ],
      "transportType": "stdio"
    },
    "time": {
      "timeout": 60,
      "command": "uvx",
      "args": [
        "mcp-server-time",
        "--local-timezone=Asia/Shanghai"
      ],
      "transportType": "stdio"
    },
    "fetch": {
      "timeout": 60,
      "command": "uvx",
      "args": [
        "mcp-server-fetch"
      ],
      "transportType": "stdio"
    }
  }
}

这里再额外说一句,在其他软件比如cursor、cherry studio、claude......中配置新的MCP,也是同样的方式,甚至下面的Json文件都是通用的。这里也推荐看下我最近的另外一篇博客,在通过mcpo在Open-WebUI中使用MCP,其配置文件和上面整个json长一模一样。

比较推荐的方式是配置支持uvx或者npm的MCP-Server,省事。当然你也可以直接下载源码的方式安装,在下文中的MCP开发部分我们会详细讲一下。

接下来让我们详细看下几个代表性的MCP应用,Time、Fetch和Blender等,看看他们分别能带来什么样的功能体验。

Time

首先是Time,它能获取当前时间以及进行跨时区时间转换。让我们来测试这两个功能:

Fetch

Fetch只有一个功能,就是将网页抓取下来并且转换成markdown格式,方便AI进行分析和总结。

Blender

Blender是一个专业的3D建模软件,具有很高的技术门槛。前一段时间,量子位发布了一篇文章,展示了一个使用blender-mcp的示例,让Claude操控Blender创建了一个复杂的3D场景(下图来自量子位)。

看到上述示例后,我也特意安装并配置了Blender进行测试。虽然我对3D建模完全没有经验,最后只是让AI操控Blender成功生成了一只巨龙的3D模型。不过经过分析其实现原理后发现,这并非大模型直接进行建模,而是通过blender-mcp调用了hyper3d.ai的功能。这个巨龙模型很可能来自hyper3d.ai的预设模型库。

browser-use

browser-use 是一个让 AI 操作浏览器的工具。你只需给出指令,AI 就能帮你完成浏览器操作任务。browser-use 官方开发了 mcp-server-browser-use,通过这个 MCP,其他软件也能调用 browser-use 来操作浏览器。下面的画面展示了我在 Cline 中让 AI 打开 Google 并找到 MCP 官网的过程,全程我完全没有操作浏览器,都是AI自主完成的。

  通过上述几个MCP应用的体验,我深刻感受到MCP为AI工具调用带来的便利性和标准化优势。从简单的时间查询到复杂的3D建模,再到浏览器自动化操作,MCP提供的功能涵盖面非常广。尤其令人印象深刻的是,这些功能在不同的支持MCP的软件中都能无缝使用,真正实现了"一次配置,处处可用"的理念。

值得一提的是,MCP的安装和配置过程相对简单,大多数工具都支持通过uvx或npm快速部署。同时,标准化的接口设计也使得AI更容易理解和调用这些工具,减少了使用过程中的friction。不过在实际使用中也发现,目前部分MCP工具的稳定性和性能还有提升空间,某些复杂操作偶尔会出现延迟或失败的情况,比如在browser-use使用过程中,我就遇到了多次操作失败的情况。

从0到1开发一个MCP Server

实践是理解新知识的最佳途径。通过开发一个MCP Server,我们不仅能深入理解其工作原理和内部机制,还能学会如何根据实际需求开发定制化的AI工具。接下来,让我们一起创建一个简单实用的MCP Server。众所周知,大语言模型在数学计算方面存在明显短板------它们可以处理简单的计算,但当数字变大或计算逻辑变复杂时就力不从心了。因此,我们将用MCP协议实现一个计算器,来辅助大语言模型完成各类数学运算。

准备工作

在开始之前,我们需要准备好开发环境。本项目依赖Python环境,官方要求使用Python 3.10或更高版本。除此之外,我们还需要使用uv工具。虽然大多数人已安装了Python,但可能还没有安装uv。下面我会提供在Mac系统下安装uv的命令。

bash 复制代码
curl -LsSf https://astral.sh/uv/install.sh | sh

然后就是初始化项目文件,具体如下:

bash 复制代码
# 创建项目目录
uv init mcp-server-calculator

cd mcp-server-calculator

# 创建并激活虚拟环境 
uv venv
source .venv/bin/activate

# 安装依赖
uv add "mcp[cli]" 

# 创建服务文件
touch calculator.py

核心代码开发

接下来只需在calculator.py中编写相关代码。由于calculator只需调用Python内置的eval()函数就能实现计算功能,无需复杂的代码逻辑,所以整个MCP的实现非常简单。

bash 复制代码
from typing import Any
from mcp.server.fastmcp import FastMCP

# Initialize FastMCP server
mcp = FastMCP("calculator")

@mcp.tool()
async def calculate(formula: str) -> float|int:
    """
    计算任何数学表达式的结果。
    Args: 
        formula: 包含数学表达式的字符串。

    Returns:
        数学表达式的计算结果 (float 或 int)。
    """
    try:
        return eval(formula)
    except Exception as e:
        return f"计算错误: {str(e)}"

if __name__ == "__main__":
    # Initialize and run the server
    mcp.run(transport='stdio')

要注意calculate方法定义下面的文档字符串本质上非常重要,因为它不仅告诉大模型这个工具的作用,还能指导大模型在合适的场景下正确调用该工具。对于一个功能强大的MCP工具来说,清晰明确的文档说明是必不可少的。

数据传输模式

值得注意的是,MCP内置了stdio和sse这两种数据传输模式,在上面的代码中我们使用了stdio模式(mcp.run(transport='stdio'))

MCP 提供了两种内置的数据传输模式,各有千秋:

  1. stdio (标准输入/输出)
    • 优点:极其简单,非常适合本地应用、命令行工具或进程间通信,无需网络配置。它是快速构建本地集成或脚本交互的首选。
    • 缺点:功能局限于单一机器内部,无法进行网络通信,不适用于分布式系统或 Web 应用。
  2. SSE (Server-Sent Events)
    • 优点:利用标准 HTTP/S 协议,易于穿越防火墙和代理。特别适合服务器需要向客户端单向推送更新或流式数据的场景(如状态更新、通知)。设置相对简单,尤其是在已有 Web 服务器的情况下

当然你也使用自定义的传输协议,这部分就不再多讲了,具体可以看下官网的文档 modelcontextprotocol.io/docs/concep...

功能验证

回到上面这个例子,让我们来在支持 MCP Server 的软件中测试一下。这里我用了 Cherry Studio 进行测试,下面是其中的 MCP 配置:

json 复制代码
{
  "mcpServers": {
    "calculator": {
      "name": "calculator",
      "command": "uv",
      "args": [
        "--directory",
        "/Users/xindoo/code/mcp-server-calculator",
        "run",
        "calculator.py"
      ]
    }
  }
}

可以看到,这里我没有使用uvx指定包名,而是直接用uv启动了本地的python代码文件。你也可以选择将项目文件打包发布到PyPi上,这样其他用户就能通过uvx直接安装你的MCP工具了。让我们看看这个计算器MCP的实际使用效果,下面的测试案例展示了AI如何成功使用calculator工具完成一个相对复杂的数学计算。

核心概念

以上示例是使用mcp协议提供了一个calculator的tool,实际上mcp协议除了Tools外,还支持资源(Resource)和提示模板(Prompts)两种功能。这里我们大概介绍下,不再做展开,有兴趣 的朋友可以参考MCP官方文档。以下是三种功能类型的简要介绍:

  1. 资源(Resource):客户端可以读取的类文件数据(如API响应或文件内容)
  2. 工具(Tools):大语言模型可以调用的函数(需要用户批准)
  3. 提示模板(Prompts):帮助用户完成特定任务的预设模板

结语

  MCP让我想起大学时期见过的10合一电源线(暴露年龄了)。如今电器基本都统一使用Type-C接口,而MCP的目标正是要成为AI工具调用领域的"Type-C"标准,实现不同工具和框架之间的统一对接。这与Type-C标准的诞生如出一辙------当年它终结了各类充电接口并存的混乱局面。从目前各大厂商对MCP展现出的支持态度来看,这个愿景很可能会实现。

更进一步,MCP协议不仅是一项标准,更是一个完整的生态系统。在这个生态中,各类MCP server层出不穷,每一个都能与支持MCP协议的软件实现无缝对接。这种标准化和可复用性大大提升了AI工具的开发效率。目前,在mcp.so/ 网站上已有超过6400多个共享的MCP Server。随着更多开发者和企业的加入,MCP生态必将催生出更加丰富多样的AI工具和应用场景。

最后,除了MCP令人兴奋的一面,我还要稍微泼点冷水。MCP本质上就是大模型的Function Calling,它只是让大模型能更方便地调用更多工具。虽然它确实能提升大模型的功能性,但不要期望它能给大模型带来质的飞跃。受限于大模型上下文长度的问题,目前依然无法挂载太多MCP工具。即便是具备超长上下文的模型,过多的工具挂载也会影响大模型的决策和推理能力,反而导致效果变差。不过我预计后续会出现专门针对MCP调用进行微调的特殊模型,将MCP内化到模型中,毕竟MCP已经完成了标准化。

相关推荐
AI绘画咪酱11 分钟前
【CSDN首发】Stable Diffusion从零到精通学习路线分享
人工智能·学习·macos·ai作画·stable diffusion·aigc
DeepSeek+NAS17 分钟前
耘想WinNAS:以聊天交互重构NAS生态,开启AI时代的存储革命
人工智能·重构·nas·winnas·安卓nas·windows nas
2201_7549184133 分钟前
OpenCv--换脸
人工智能·opencv·计算机视觉
ocr_sinosecu134 分钟前
OCR进化史:从传统到深度学习,解锁文字识别新境界
人工智能·深度学习·ocr
Stara05111 小时前
YOLO11改进——融合BAM注意力机制增强图像分类与目标检测能力
人工智能·python·深度学习·目标检测·计算机视觉·yolov11
movigo7_dou1 小时前
关于深度学习局部视野与全局视野的一些思考
人工智能·深度学习
itwangyang5201 小时前
AIDD-人工智能药物设计-大语言模型在医学领域的革命性应用
人工智能·语言模型·自然语言处理
热心网友俣先生1 小时前
2025年泰迪杯数据挖掘竞赛B题论文首发+问题一二三四代码分享
人工智能·数据挖掘
LitchiCheng2 小时前
MuJoCo 机械臂关节路径规划+轨迹优化+末端轨迹可视化(附代码)
人工智能·深度学习·机器人