首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-04-17 07:00
  • 4253
  • 6111
juejin.cn

在这里插入图片描述

前言

  今天来聊一聊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):帮助用户完成特定任务的预设模板

结语

image.png   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已经完成了标准化。

注:本文转载自juejin.cn的xindoo的文章"https://juejin.cn/post/7492271292155756583"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

109
人工智能
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top