惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
L
LangChain Blog
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
GbyAI
GbyAI
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Docker
V
V2EX
月光博客
月光博客
Recent Commits to openclaw:main
Recent Commits to openclaw:main
S
SegmentFault 最新的问题
雷峰网
雷峰网
Stack Overflow Blog
Stack Overflow Blog
Cyberwarzone
Cyberwarzone
P
Privacy International News Feed
Spread Privacy
Spread Privacy
Project Zero
Project Zero
腾讯CDC
Engineering at Meta
Engineering at Meta
T
Tenable Blog
aimingoo的专栏
aimingoo的专栏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Jina AI
Jina AI
大猫的无限游戏
大猫的无限游戏
量子位
Blog — PlanetScale
Blog — PlanetScale
D
DataBreaches.Net
T
Troy Hunt's Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
美团技术团队
N
News and Events Feed by Topic
T
Tor Project blog
H
Help Net Security
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Last Week in AI
Last Week in AI
S
Security Affairs
小众软件
小众软件
Scott Helme
Scott Helme
云风的 BLOG
云风的 BLOG
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
人人都是产品经理
人人都是产品经理
PCI Perspectives
PCI Perspectives
TaoSecurity Blog
TaoSecurity Blog
博客园 - 叶小钗
V
Visual Studio Blog
The Cloudflare Blog
Recent Announcements
Recent Announcements

XINDOO

关于内卷,几个值得深想的洞察 当创作被 Skill 化:我用 AI 写了一部 320 章的长篇网文 AI第一剑,先斩程序员 AI 也会偷懒?这个 PUA 工具专治“摸鱼式编程” Gstack 深度解析:YC CEO 开源的 AI 工程团队 GitHub Trending霸榜!深度解析AI Coding辅助神器 Superpowers 深度探讨:从 OpenClaw 爆火,看 AI Agent 的真相与程序员的未来 我复刻了NotebookLM的信息图功能 我用AI写了部小说,这里是整个过程 [翻译]我在谷歌14年学到的21堂课 2万字吊打40万字:为什么我的“牛马Agent”比“数字分身”更聪明? 最近AI领域爆火的 Agent Skills 是什么? 从计算机科学的视角来看拖延症 一周改6个库后我悟了:AI时代,程序员正在退化成“甲方” 使用n8n做一个自动同步更新的Github项目问答机器人 Agent设计模式——第 20 章:优先级排序 Agent设计模式——第 1 章:提示词链 Agent设计模式——附录 D - 使用 AgentSpace 构建 Agent Agent设计模式——第 19 章:评估和监控 Agent设计模式——第 10 章:模型上下文协议 (MCP) Agent设计模式——第 21 章:探索和发现 Agent设计模式——智能体设计模式 Agent设计模式——第 11 章:目标设定和监控 Agent设计模式——第 9 章:学习和适应 Agent设计模式——第 16 章:资源感知优化 Agent设计模式——附录 G - 编码 Agent Agent设计模式——第 13 章:人机协同 Agent设计模式——第 17 章:推理技术 Agent设计模式——附录 F - 深入剖析:Agent 推理引擎的内部运作机制 Agent设计模式——章节目录 Agent设计模式—— Agent设计模式——第 7 章:多 Agent 协作 Agent设计模式——附录 E - 命令行界面中的 AI Agent Agent设计模式——附录 C - Agentic 框架快速概览 Agent设计模式——第 3 章:并行化 Agent设计模式——**常见问题解答:Agentic 设计模式** Agent设计模式——第 14 章:知识检索(RAG) Agent设计模式——第 18 章:Guardrails/安全模式 Agent设计模式——第 15 章:Agent 间通信(A2A) Agent设计模式——第 8 章:内存管理 Agent设计模式——第 12 章:异常处理和恢复 Agent设计模式——第 4 章:反思 Agent设计模式——附录 B - AI Agentic 交互:从图形界面到现实世界环境 Agent设计模式——第 5 章:工具使用(函数调用) Agent设计模式——结论 Agent设计模式——第 6 章:规划 Agent设计模式——第 2 章:路由 从经验主义到贝叶斯理论:如何排查线上问题 我用AI为自己造了一把安全的开发者“瑞士军刀”” 从LLM和MCP的协同过程看如何做优化 打通Dify与AI工具生态:将Workflow转为MCP工具的实践 一文了解知识库背后的技术RAG AI应用的五个级别:从入门到专家的进阶之路 HTTP/3:性能改进(第 2 部分) deepseek-r1祛魅:从过度热捧到理性认知⁠ 为什么AI智能体需要工作流 如何用GPT-4o解读视频 json命令行处理神器jq介绍 OpenAI的结构化浅析 从大模型的原理到提示词优化 从经济学原理看团队分工合作 [翻译]关于人工智能的30个思考 从马斯洛需求层次理论谈职场激励 知识与智慧 如何使用大语言模型绘制专业图表 两个开源项目打造自己的大模型聚合平台 我让gpt4o给我推荐了一千多次书 得到了这些数据 用Langchain创建一个可以总结网页内容的Agent 推荐一个好用的命令行工具ShellGPT 关于ffmpeg height not divisible by 2的错误 使用Certbot解决https证书自动更新的问题 Spring Cache简明教程 软件开发中的抓大放小vs极致细节思维 OpenAI Assistants-API简明教程 OpenAI的多函数调用(Multiple Function Calling)简介 如何使用ffmpeg制作透明背景的视频 spring-kafka中ContainerProperties.AckMode详解 如何在地图上寻找最密集点的位置? IO密集型服务提升性能的三种方法 职场中的基本归因错误和自利归因 使用javax.validation.constraints校验参数合法性 Java Optional:让你的代码更优雅 ChatGPT函数调用初体验:让ChatGPT具备抓取网页文本的能力 如何使用ChatGPT提升自己的“码”力? 使用ffmpeg拼接两张图片 ThreadPoolExecutor——高效处理并发任务的必备良器 从CPU的视角看 多线程代码为什么那么难写! 使用ffmpeg缩小视频体积的几种方式 Linux parallel 命令使用手册 为什么说过早优化是万恶之源? Linux xargs命令介绍 深入理解Spring的事件通知机制 Java高并发之CyclicBarrier简介 聊一聊过度设计! 详解Redisson分布式限流的实现原理 Java中使用HashMap时指定初始化容量性能一定会更好吗? 如何用ffmpeg截取视频片段&截取时间不准确的坑 XINDOO的2022年年终总结 使用ffmpeg将视频转成HLS(m3u8)格式 谷歌Guava LoadingCache介绍
一文入门AI圈最近爆火的MCP协议
xindoo · 2025-04-13 · via XINDOO

在这里插入图片描述

前言

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

  其实anthropic在去年11月底就通过一篇博文 https://www.anthropic.com/news/model-context-protocol 发布了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平台略有不同)。

"mcpServers": {
  "time": {
    "command": "uvx",
    "args": ["mcp-server-time"]
  }
}

我在Cline中已经安装了几个MCP-Server了,完整的配置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的命令。

curl -LsSf https://astral.sh/uv/install.sh | sh

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

# 创建项目目录
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的实现非常简单。

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 服务器的情况下

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

功能验证

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

{
  "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工具的开发效率。目前,在https://mcp.so/网站上已有超过6400多个共享的MCP Server。随着更多开发者和企业的加入,MCP生态必将催生出更加丰富多样的AI工具和应用场景。

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