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

推荐订阅源

S
Security @ Cisco Blogs
The Last Watchdog
The Last Watchdog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
aimingoo的专栏
aimingoo的专栏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
PCI Perspectives
PCI Perspectives
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
L
LangChain Blog
B
Blog RSS Feed
小众软件
小众软件
N
News | PayPal Newsroom
Attack and Defense Labs
Attack and Defense Labs
Microsoft Azure Blog
Microsoft Azure Blog
V
Vulnerabilities – Threatpost
The Hacker News
The Hacker News
T
Tor Project blog
A
Arctic Wolf
Jina AI
Jina AI
Hacker News: Ask HN
Hacker News: Ask HN
F
Fortinet All Blogs
Cloudbric
Cloudbric
S
Secure Thoughts
L
LINUX DO - 热门话题
博客园 - 司徒正美
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Security Affairs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
P
Privacy International News Feed
AWS News Blog
AWS News Blog
S
Securelist
TaoSecurity Blog
TaoSecurity Blog
AI
AI
O
OpenAI News
C
Cyber Attacks, Cyber Crime and Cyber Security
K
Kaspersky official blog
T
The Blog of Author Tim Ferriss
大猫的无限游戏
大猫的无限游戏
Google DeepMind News
Google DeepMind News
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
T
Tenable Blog
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
S
SegmentFault 最新的问题

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