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

在这里插入图片描述

前言

  今天来聊一聊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等开发框架也都有各自独特的工具接入方式。简单来说,由于每个框架或软件的工具接入协议都不相同,导致同样的工具无法在不同框架间直接接入。

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

Internet
Your Computer
Remote
Service C
Framework
(Langchain,AutoGen……)
IDEs
(Cursor,Windsurf,Cline……)
Others
(其他需要调用AI工具的功能)
Tool A (Framework)
Tool B (Framework)
Tool C (Framework)
Tool A (IDEs)
Tool B (IDEs)
Tool C (IDEs)
Tool A (Others)
Tool B (Others)
Tool C (Others)
Local
Data Source A
Local
Data Source B
  • Local Data Sources: 本地的文件、数据库和服务,MCP服务器可以安全地访问这些内容
  • Remote Services: 可通过互联网访问的外部系统(例如通过API),MCP服务器可以与之连接

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

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

Internet
Your Computer
MCP Hosts
MCP Protocol
MCP Protocol
MCP Protocol
Web APIs
Remote Service C
MCP Client
MCP Server A
MCP Server B
MCP Server C
Local Data Source A
Local Data Source B
Framework
(Langchain,AutoGen……)
IDEs
(Cursor,Windsurf,Cline……)
Others
(其他需要调用AI工具的功能)

这里需要额外介绍图中几个关于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已经完成了标准化。

<think>好的,我需要回答用户关于MCP协议在IT领域的用途及实现的问题。首先,我需要明确用户提到的MCP具体指的是哪个协议,因为可能有多个缩写为MCP的术语。根据用户提供的引用内容,有三个来源: 引用[1]提到了MCP(Model Context Protocol),作为AI与外部工具和数据交互的标准,并提到附录中的MCP Server开发实践。引用[2]同样解释了MCP是Model Context Protocol,用于AI交互。引用[3]提到了Burroughs MCP,这是与Unisys Clearpath相关的一个操作系统,属于历史系统。 用户的问题集中在IT领域,因此需要区分这两种不同的MCP。根据引用[1]和[2],重点应该是Model Context Protocol,而引用[3]中的Burroughs MCP可能不是用户关注的重点,但为了全面性,可能需要简要提及。 接下来,我需要整理MCP(Model Context Protocol)的用途和实现。用途方面,需要说明其在AI与外部工具和数据交互中的作用,如标准化接口、模型管理、上下文感知等。实现部分需要参考附录中的开发实践,可能涉及通信协议设计、API网关、上下文管理模块等组件。 同时,需要确保回答结构清晰,分点说明用途和实现,并生成相关问题。还要注意引用标记的正确使用,例如在提到标准化接口时引用[^1]和[^2]。 另外,用户可能混淆了不同MCP,因此需要明确区分Model Context Protocol和Burroughs MCP,但根据引用内容,用户更可能关注前者。最后,生成的相关问题应围绕MCP协议的应用、技术挑战、与其他协议的区别,以及历史背景如Burroughs MCP。 需要验证信息是否准确,尤其是引用来源中的内容是否支持所述用途和实现。例如,引用[1]提到附录的开发实践,可能涉及服务器实现,因此可以推测MCP的实现包括服务器端组件、API设计等。 总结回答结构:先介绍MCP的定义,分点用途,分点实现,区分不同MCP,生成相关问题。</think>### MCP协议在IT领域的用途及实现 MCP(Model Context Protocol)是一种用于AI系统与外部工具、数据源进行标准化交互的协议,尤其在模型上下文管理方面发挥关键作用。以下是其核心用途及实现方式: --- #### 一、MCP协议的主要用途 1. **标准化AI与外部工具的交互** MCP定义了AI模型调用外部工具(如数据库、API、硬件设备)的统一接口,例如通过RESTful API或gRPC实现服务注册与调用[^2]。 2. **动态上下文管理** 支持运行时上下文(如用户输入、环境参数、历史交互记录)的传递与更新,增强AI模型的场景适应能力。 3. **模型生命周期管理** 提供模型加载、版本控制、资源分配等功能,简化多模型协同工作的复杂度。 4. **安全与权限控制** 通过身份验证和访问控制策略(如OAuth 2.0),确保外部工具和数据调用的合规性。 --- #### 二、MCP协议的典型实现 1. **通信协议设计** 基于HTTP/2或WebSocket实现高效数据传输,协议消息格式通常采用JSON或Protocol Buffers[^1]。 2. **核心组件** - **API网关**:负责路由请求、负载均衡和协议转换(如将MCP请求转换为数据库查询语句)。 - **上下文管理器**:维护会话状态,例如使用Redis存储实时上下文数据。 - **模型执行引擎**:调度AI模型运行,支持TensorFlow、PyTorch等框架的集成。 3. **开发实践示例** ```python # MCP Server 示例(简化) from flask import Flask, request app = Flask(__name__) @app.route('/execute', methods=['POST']) def handle_mcp_request(): context = request.json.get('context') tool_id = request.json.get('tool_id') # 调用外部工具并返回结果 result = external_tool_invoke(tool_id, context) return {'status': 'success', 'data': result} ``` --- #### 三、其他MCP相关概念 - **Burroughs MCP**:历史上由Unisix开发的**操作系统级MCP**(Master Control Program),专注于事务处理和大型机资源管理[^3],与AI协议无关。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xindoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值