首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >从原理到落地,一文搞懂这个让 AI 模型 “活起来” 的革命性协议!

从原理到落地,一文搞懂这个让 AI 模型 “活起来” 的革命性协议!

原创
作者头像
AI大眼萌
发布2025-05-30 00:49:43
发布2025-05-30 00:49:43
1.5K0
举报
文章被收录于专栏:AI产品体验专栏AI产品体验专栏

一、MCP概述

MCP即模型上下文协议(Model Context Protocol),是由Anthropic公司于2024年11月推出的一种开放标准协议。它旨在为AI模型与外部数据源、工具之间构建统一的交互接口,类似于智能交互领域的“通用插头”,通过制定统一规范,实现AI模型与外部资源的无缝对接。

在MCP出现之前,大模型与数据的交互存在诸多问题,如物理隔离、协议碎片化、时效性缺失等。而MCP的提出,为AI交互带来了革命性的变化,它提供了一种标准化的框架,使得AI模型与外部工具和数据源的交互变得更加高效、安全和易于实现。

二、核心原理

(一)核心架构

MCP遵循客户端 - 服务器架构,主要包含以下三个核心组件:

  1. MCP主机(Hosts):如Claude桌面或Cursor等AI应用,提供AI交互环境,运行MCP客户端。它负责发起连接的LLM应用程序,承担初始化和管理客户端、处理用户授权、管理上下文聚合等任务。
  2. MCP客户端(MCP Client):在主机内运行,负责与MCP服务器通信。它是AI助手与MCP服务器之间的通信桥梁,负责将用户请求转化为MCP服务器可识别的标准化API调用,并返回结果。主要在主机应用程序内负责与服务器保持一对一连接,承担消息路由、能力管理、协议协商和订阅管理等职责。
  3. MCP服务器(MCP Server):轻量级程序,暴露特定的功能(如工具、资源和提示),并提供对数据源的访问。每个服务器专注于一种资源类型或功能,例如文件系统、数据库、Web搜索等。服务器的模块化设计确保了协议的可扩展性。以标准化协议向客户端提供外部数据和工具,为AI模型提供额外的上下文和功能,具体包括工具(可执行函数,如发送邮件、调用API)、资源(静态数据,如文件、数据库记录,为AI模型提供实时或历史数据)、提示词(预定义模板,标准化LLM交互流程,确保模型执行过程中的连贯性和一致性)。

(二)通信过程

MCP Server当前支持三种传输类型,分别是stdio 传输、SSE 传输、Streamable HTTP,这两者区别如下:

  • stdio(标准输入输出)传输主要用于本地进程与AI模型的交互,它基于操作系统进程间通信的机制,主要应用于本地环境。
  • SSE(Server-Sent Events, 服务器发送事件)传输主要用于远程通信,它是一种基于HTTP的服务器推送技术,允许服务器通过长连接主动向客户端发送数据流。
  • Streamable HTTP(可流式HTTP),这是MCP最新支持的传输方式,可以理解成升级版的HTTP通信。它不像SSE那样必须一直保持连接,而是你可以随时发消息给服务器,服务器也可以随时回复你,支持双向流式传输。双方像在“对话”一样灵活高效。相比 SSE,它更适合需要双向互动和更复杂通信的远程场景。

MCP的SSE通信过程可以分为以下几个关键步骤:

  1. 初始化连接:客户端向服务器发送连接请求,建立通信通道。
  2. 功能协商:客户端和服务器之间进行功能协商,确定它们可以相互提供哪些功能和服务。例如,一个天气API服务器可能提供可用的工具(用于调用API端点)、提示(提示模板)和资源(如API文档)。
  3. 发送请求:客户端根据需求构建请求消息,并发送给服务器。
  4. 处理请求:服务器接收到请求后,解析请求内容,执行相应的操作(如查询数据库、读取文件等)。
  5. 返回结果:服务器将处理结果封装成响应消息,发送回客户端。
  6. 断开连接:任务完成后,客户端可以主动关闭连接或等待服务器超时关闭。
SSE 通信模型
SSE 通信模型

(三)双向通信与采样特性

与传统API的单向通信不同,MCP支持双向交互。这不仅让AI应用能从服务器获取数据,还能让服务器利用客户端的AI能力(如LLM的补全或生成)。例如,服务器可以通过MCP请求客户端的LLM完成任务,并将上下文数据纳入提示中,从而实现嵌套的智能行为(如代理式行为)。

此外,MCP还具备采样特性。如果需要,服务器可以利用客户端的AI能力(例如调用LLM生成文本或图像),而无需直接持有API密钥。客户端保留对模型访问和权限的控制权,确保安全性与灵活性。

(四)安全与扩展性

MCP在设计上注重安全性,数据访问受到严格控制。所有操作都需要用户授权,并且MCP服务通常部署在本地,避免了数据外泄的风险。同时,MCP的架构灵活,支持模块化开发,允许开发者扩展MCP,创建更多的数据源支持。

(五)传输层与消息格式

MCP的传输层支持多种传输方法,如HTTP/2或WebSocket。所有传输都使用JSON - RPC 2.0进行消息交换,这为MCP Clients和MCP Servers之间的通信提供了统一的消息格式。

三、MCP协议与API协议的特点及优劣势对比

四、搭建MCP服务器的准备工作

(一)环境和工具准备

不同的搭建方式可能需要不同的环境和工具,以下是一些常见的准备要求:

  1. 编程语言环境:众多编程语言都支持开发MCP服务器,例如Python、JavaScript、Java、Kotlin、C#等。以Python为例,需要Python 3.8+环境;若使用Node.js,建议安装LTS版本。
  2. 包管理工具:如Python的pipuv(Rust版,需要Python 3.8+环境),Node.js的npmnpx等。
  3. 其他依赖:根据具体的项目需求,可能还需要安装一些额外的依赖,如fastapiuvicorn@modelcontextprotocol/sdkzod等。

(二)安装必要软件

以下是一些常见软件的安装步骤:

  1. 安装uv工具(以Python项目为例):uv(Rust版)需要Python 3.8+环境,可通过pip安装(推荐)。
    • MacOS/Linux:执行相应的pip安装命令。
    • Windows:执行相应的pip安装命令。安装完成后,务必重启终端,以确保uv命令被识别。
  2. 安装Node.js
    • 若使用Node.js进行开发,可从nodejs.org下载并安装最新LTS版本的Node.js。
    • 安装完成后,打开命令提示符(CMD)或PowerShell,输入以下命令检查安装是否成功:
代码语言:javascript
复制
node -v
npm -v

(三)若不想配置运行环境,可以考虑选择腾讯云轻量应用服务器

在云上一键部署MCP Server,无需配置运行环境,支持社区热门MCP Server和自定义MCP Server,提供完整托管功能。云端或本地的AI应用可随时随地调用MCP Server。

五、不同方式搭建MCP服务器的步骤

(一)使用Python和FastMCP搭建天气服务器示例

1. 搭建开发环境
代码语言:javascript
复制
# 在Windows下
python -m venv venv
venv\Scripts\activate

# 在Linux下
python3 -m venv venv
source venv/bin/activate

激活虚拟环境后,安装所需的依赖:

代码语言:javascript
复制
pip install mcp[cli] httpx
2. 创建辅助函数

创建helpers.py文件,编写辅助函数用于处理API请求和格式化数据:

代码语言:javascript
复制
from textwrap import dedent
import httpx
from typing import Any
import logging

USER_AGENT = "weather-app/1.0"

async def make_nws_request(url: str) -> dict[str, Any] | None:
    """向NWS API发出请求,并进行适当的错误处理。"""
    headers = {
        "User-Agent": USER_AGENT,
        "Accept": "application/geo+json"
    }
    async with httpx.AsyncClient() as client:
        try:
            response = await client.get(url, headers=headers, timeout=30.0)
            response.raise_for_status()
            return response.json()
        except Exception as e:
            logging.error(e)
            return None
3. 制作工具

创建tools.py文件,实现MCP工具:

代码语言:javascript
复制
from textwrap import dedent
from helpers import make_nws_request, format_alert

NWS_API_BASE = "https://api.weather.gov"

async def get_alerts(state: str) -> str:
    """获取美国某州的天气警报。

    参数:
        state: 两位字母的美国州代码(例如CA, NY)
    """
    url = f"{NWS_API_BASE}/alerts/active/area/{state}"
    data = await make_nws_request(url)
    if not data or "features" not in data:
        return "无法获取警报或没有找到警报。"
    if not data["features"]:
        return "该州目前没有活跃的警报。"
    alerts = [format_alert(feature) for feature in data["features"]]
    return "\n---\n".join(alerts)
4. 编写服务器代码

将如下代码添加到weather.py文件中:

代码语言:javascript
复制
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("weather")

@mcp.tool()
async def get_alerts(state: str) -> str:
    # 调用辅助函数获取数据
    pass

@mcp.tool()
async def get_forecast(location: str) -> str:
    # 调用辅助函数获取数据
    pass

if __name__ == "__main__":
    mcp.run(transport='stdio')
5. 运行服务器
代码语言:javascript
复制
uv run weather.py

(二)使用Node.js搭建Pixabay图片搜索MCP服务器示例

1. 安装Node环境

从nodejs.org下载并安装Node.js和npm,然后验证Node.js是否正确安装:

代码语言:javascript
复制
node --version
npm --version
2. 创建MCP Server项目
代码语言:javascript
复制
mkdir pixabay
cd pixabay
npm init -y
3. 安装相关依赖
代码语言:javascript
复制
npm install @modelcontextprotocol/sdk zod
npm install -D @types/node typescript
4. 更新package.json文件

添加以下主要配置项:

代码语言:javascript
复制
{
    "type": "module",
    "bin": {
        "pixabay": "./build/index.js"
    },
    "scripts": {
        "build": "tsc && chmod 755 build/index.js"
    },
    "files": [
        "build"
    ]
}
5. 创建主要目录和文件
代码语言:javascript
复制
mkdir src
touch src/index.ts
6. 在根目录创建tsconfig.json文件
代码语言:javascript
复制
{
    "compilerOptions": {
        "target": "ES2022",
        "module": "Node16",
        "moduleResolution": "Node16",
        "outDir": "./build",
        "rootDir": "./src",
        "strict": true,
        "esModuleInterop": true,
        "skipLibCheck": true,
        "forceConsistentCasingInFileNames": true
    },
    "include": ["src/**/*"],
    "exclude": ["node_modules"]
}
7. 构建MCP Server

src/index.ts文件中添加以下代码:

代码语言:javascript
复制
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const baseUrl = "https://pixabay.com/api/";

const server = new McpServer({ name: "pixabay", version: "1.0.0", capabilities: { resources: {}, tools: {} } });

server.tool('pixabay-image-search', { query: z.string(), type: z.string() }, async ({ query, type = 'all' }) => {
    try {
        if (!process.env.PIXABAY_KEY) {
            console.error("PIXABAY_KEY environment variable is not set");
            process.exit(1);
        }
        const requestUrl = `${baseUrl}?key=${process.env.PIXABAY_KEY}&q=${query}&image_type=${type}&per_page=3`;
        const response = await fetch(requestUrl);
        const json = await response.json();
        return { content: [{ type: 'text', text: JSON.stringify({ images: json.hits || [], total_results: json.total, query }, null, 2) }] };
    } catch (e) {
        // 错误处理
    }
});

const transport = new StdioServerTransport();
server.start(transport);
8. 运行和测试

编译TypeScript代码:

代码语言:javascript
复制
npm run build

运行服务器:

代码语言:javascript
复制
node build/index.js

(三)使用FastAPI搭建MCP服务器示例

1. 安装依赖项
代码语言:javascript
复制
pip install uvicorn fastapi
2. 搭建FastAPI服务器
代码语言:javascript
复制
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def 首页():
    return { "message": "MCP 太酷了" }
3. 用uvicorn运行应用
代码语言:javascript
复制
uvicorn main:app --reload
4. 升级到MCP服务器

安装fastapi-mcp

代码语言:javascript
复制
pip install fastapi-mcp

在FastAPI代码中添加:

代码语言:javascript
复制
from fastapi import FastAPI
from fastapi_mcp import add_mcp_server

app = FastAPI()
add_mcp_server(app, mount_path = "/mcp", name = "My API MCP")

六、配置和连接MCP服务器到客户端

(一)以Cursor客户端为例

不同的MCP服务器在Cursor中的配置方式可能有所不同,以下是一些常见的配置步骤:

  1. 安装依赖包:例如,若要配置FileSystem服务器,执行以下命令:
代码语言:javascript
复制
npm install -g @modelcontextprotocol/server-filesystem
  1. 在Cursor中配置MCP:打开Cursor,进入设置(Settings),找到“Features”下的“MCP”选项,点击“add new MCP server”,进行如下设置:
    • 类型(Type):选择“command” ,用于标准输入输出。
    • 名称(Name):为服务器设置一个易识别的昵称。
    • 命令(Command):输入启动命令,例如:node [包的安装路径]\node_modules@modelcontextprotocol\server-filesystem\dist\index.js [允许访问的目录路径]。设置完成后,点击保存,如果小按钮变为绿色,表示添加成功。

(二)以Claude Desktop客户端为例

以MySQL MCP Server为例,将以下配置添加到claude_desktop_config.json

代码语言:javascript
复制
{
    "mcpServers": {
        "mysql": {
            "command": "uv",
            "args": [
                "--directory", 
                "path/to/mysql_mcp_server",
                "run",
                "mysql_mcp_server"
            ],
            "env": {
                "MYSQL_HOST": "localhost",
                "MYSQL_PORT": "3306",
                "MYSQL_USER": "your_username",
                "MYSQL_PASSWORD": "your_password",
                "MYSQL_DATABASE": "your_database"
            }
        }
    }
}

(三)以腾讯代码助手Codebuddy客户端为例

1. 通过预置的 MCP Server 市场,支持一键进行安装

2. 自定义配置MCP SERVER ,以Time MCP Server为例,在 Craft_mcp_settings.json 配置文件中添加 Time MCP Server 服务器的配置

代码语言:json
复制
 {
  "mcpServers": {
    "mcp-server-time": {
      "command": "python",
      "args": [
        "-m",
        "mcp_server_time",
        "--local-timezone",
        "Asia/Shanghai"
      ],
      "disabled": false
    }
  }
}

(四)以Trae客户端为例

1. 通过预置的 MCP Server 市场,支持一键进行安装

2. 自定义配置MCP SERVER

七、常用的第三方MCP市场

名称

网址

特点

阿里云百炼

https://bailian.console.aliyun.com/

2025 年 4 月 9 日上线业界首个全生命周期 MCP 服务,支持一键部署、无需运维,具备高可用与低成本特点,提供多类型供给、低成本托管及全链路工具兼容,帮助企业快速构建专属智能体,首批上线了高德、无影、Fetch、Notion 等 50 多款主流 MCP 服务。

腾讯云

https://cloud.tencent.com.cn/

2025 年 4 月 12 日,腾讯云发布 Agent 之 MCP 协议,其知识引擎平台作为企业级大模型应用构建平台,升级支持 MCP 协议接入 MCP Server,工作文档精选的 MCP Server 包括腾讯生态内的多款 APP,如腾讯位置共享服务、腾讯云 Edge One Pages、微信读书等,也包括 Fetch 和 Airbnb 等第三方应用,内容覆盖专业知识获取、网页部署和预览、网页爬虫解析等场景。

字节跳动火山引擎

https://www.volcengine.com/mcp-marketplace

字节跳动推出 MCP Servers,即大模型生态广场,通过 “MCP Market(工具广场)+ 火山方舟(大模型服务)+ Trae(应用开发环境)” 的深度协同,实现工具调用、模型推理到应用部署的全链路开发闭环。其集成了众多高质量的 MCP 协议适配工具,涵盖搜索、数据库、业务系统 API 等高频场景,并支持开发者将自研工具按 MCP 协议封装并上传共享。

MCPmarket.cn

https://mcpmarket.cn/

已收录超过 7000 + 标准化的 MCP 工具,覆盖数据处理、内容生成、消息调度、系统控制等多个典型场景,为开发者汇集了全球范围内可接入的 MCP Server 工具资源。同时,该平台还为开发者提供中文教程文档和中文社群支持,并将陆续提供开箱即用的开发模板、调试工具,帮助开发者快速构建和测试 MCP 工具链,降低接入门槛、提升构建效率。

PulseMCP

https://github.com/pulse-mcp/pulse-mcp-server

目前最大的 MCP 服务器集合平台,提供了超过 1150 个 MCP 服务器。

ClineMCP

https://cline-mcp-marketplace.vercel.app/

用户可以发现和使用各种 MCP 服务器资源,并且该平台提供详细的服务器描述和使用统计。如果在使用 Cline 插件,使用 Cline MCP Marketplace 安装 MCP 应用会很简便,只需点击 “下载” 按钮,Cline 会自动完成 MCP 服务器的安装和配置,无需手动处理复杂的 JSON 文件和依赖关系。

mcp.so

https://mcp.so/

专注于提供高质量 MCP 服务器的集合网站。

MCP Store

https://mcpstore.co/

聚合全球的 MCP Servers,为用户提供了丰富的选择,目前已经收录了 8632 个 MCP Servers。这些服务器涵盖多种功能,如网页搜索、地图服务、文件转换等。该网站是一个开放的 MCP 市场,对于 MCP 开发者来说,这是一个展示和分享自己开发的 MCP 服务器的平台。

ModelScope

https://modelscope.cn/

是国际化的模型开放平台,其 MCP 市场提供了多种多样的 MCP 服务。

Cursor Directory

https://cursor.dev/

主要是与 Cursor IDE 相关的 MCP 服务器集合。

Smithery.ai

https://smithery.ai/

提供了 500 + 开箱即用的 MCP 工具,涵盖 API、数据库和无头 CMS 工具等,如 google-docs、forms、maps 等 GCP 服务,还可以直接在平台上构建和部署应用程序。

八、测试和调试MCP服务器

(一)测试方法

  1. 在客户端中提出相关问题,检查是否能正确调用MCP服务器的工具并返回预期结果。例如,在Cursor中直接询问相关功能,看是否能自动调用MCP工具。
  2. 使用Postman等工具对MCP服务器的API进行测试,检查接口的响应是否正常。

(二)调试技巧

  1. 查看日志:许多MCP服务器会记录详细的日志信息,通过查看日志可以了解服务器的运行状态和可能出现的错误。
  2. 使用调试工具:如VS Code的调试功能,可帮助定位代码中的问题。
  3. 检查配置文件:确保配置文件中的参数设置正确,如端口号、主机名、环境变量等。

九、注意事项

  1. 路径问题:在配置命令时,务必确保路径的准确性,尤其是文件路径和命令路径。如果路径错误,MCP服务器将无法正常启动。
  2. 依赖安装:有些MCP服务器可能依赖其他软件或库,在安装前请仔细阅读官方文档,确保相关依赖已正确安装。
  3. 权限问题:如果在运行命令时遇到权限不足的问题,可能需要使用sudo命令获取更高权限,但使用sudo时需谨慎操作。
  4. 版本兼容性:确保所使用的编程语言、包管理工具和依赖库的版本相互兼容,避免因版本不匹配导致的问题。
  5. 安全性:在配置和使用MCP服务器时,要注意数据安全和隐私保护,避免将敏感信息暴露在外。例如,设置合适的访问权限和加密机制。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、MCP概述
  • 二、核心原理
    • (一)核心架构
    • (二)通信过程
    • (四)安全与扩展性
    • (五)传输层与消息格式
  • 三、MCP协议与API协议的特点及优劣势对比
  • 四、搭建MCP服务器的准备工作
    • (一)环境和工具准备
    • (二)安装必要软件
    • (三)若不想配置运行环境,可以考虑选择腾讯云轻量应用服务器
  • 五、不同方式搭建MCP服务器的步骤
    • (一)使用Python和FastMCP搭建天气服务器示例
      • 1. 搭建开发环境
      • 2. 创建辅助函数
      • 3. 制作工具
      • 4. 编写服务器代码
      • 5. 运行服务器
    • (二)使用Node.js搭建Pixabay图片搜索MCP服务器示例
      • 1. 安装Node环境
      • 2. 创建MCP Server项目
      • 3. 安装相关依赖
      • 4. 更新package.json文件
      • 5. 创建主要目录和文件
      • 6. 在根目录创建tsconfig.json文件
      • 7. 构建MCP Server
      • 8. 运行和测试
    • (三)使用FastAPI搭建MCP服务器示例
      • 1. 安装依赖项
      • 2. 搭建FastAPI服务器
      • 3. 用uvicorn运行应用
      • 4. 升级到MCP服务器
  • 六、配置和连接MCP服务器到客户端
    • (一)以Cursor客户端为例
    • (二)以Claude Desktop客户端为例
    • (三)以腾讯代码助手Codebuddy客户端为例
    • (四)以Trae客户端为例
  • 七、常用的第三方MCP市场
  • 八、测试和调试MCP服务器
    • (一)测试方法
    • (二)调试技巧
  • 九、注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档