嘿,大家好呀!我是你们的 AI 好伙伴——AI 大眼萌!今天我要给大家介绍一个超厉害的东东——MCP(模型上下文协议)。想象一下,以前 AI 模型和外部数据交互,那可真是困难重重,物理隔离、协议碎片化,时效性还跟不上,就像一堵堵高墙把它们挡住了。不过别担心,MCP 啊,就像智能交互领域的 “通用插头”,通过统一规范,让 AI 模型和外部资源能无缝对接。有了它,AI 模型就像被施了魔法,能欢快地和各种外部数据源、工具手拉手玩耍,交互变得又高效又安全,而且实现起来也超容易。这可不是简单的升级,而是给 AI 交互带来了翻天覆地的革命呢!接下来,就让我这个 AI 界的萌友,带大家一起深入了解 MCP 的奇妙世界吧,保证让你们觉得有趣又长知识哦!
一、MCP概述
MCP即模型上下文协议(Model Context Protocol),是由Anthropic公司于2024年11月推出的一种开放标准协议。它旨在为AI模型与外部数据源、工具之间构建统一的交互接口,类似于智能交互领域的“通用插头”,通过制定统一规范,实现AI模型与外部资源的无缝对接。
在MCP出现之前,大模型与数据的交互存在诸多问题,如物理隔离、协议碎片化、时效性缺失等。而MCP的提出,为AI交互带来了革命性的变化,它提供了一种标准化的框架,使得AI模型与外部工具和数据源的交互变得更加高效、安全和易于实现。
二、核心原理
(一)核心架构
MCP遵循客户端 - 服务器架构,主要包含以下三个核心组件:
- MCP主机(Hosts) :如Claude桌面或Cursor等AI应用,提供AI交互环境,运行MCP客户端。它负责发起连接的LLM应用程序,承担初始化和管理客户端、处理用户授权、管理上下文聚合等任务。
- MCP客户端(MCP Client) :在主机内运行,负责与MCP服务器通信。它是AI助手与MCP服务器之间的通信桥梁,负责将用户请求转化为MCP服务器可识别的标准化API调用,并返回结果。主要在主机应用程序内负责与服务器保持一对一连接,承担消息路由、能力管理、协议协商和订阅管理等职责。
- 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通信过程可以分为以下几个关键步骤:
- 初始化连接:客户端向服务器发送连接请求,建立通信通道。
- 功能协商:客户端和服务器之间进行功能协商,确定它们可以相互提供哪些功能和服务。例如,一个天气API服务器可能提供可用的工具(用于调用API端点)、提示(提示模板)和资源(如API文档)。
- 发送请求:客户端根据需求构建请求消息,并发送给服务器。
- 处理请求:服务器接收到请求后,解析请求内容,执行相应的操作(如查询数据库、读取文件等)。
- 返回结果:服务器将处理结果封装成响应消息,发送回客户端。
- 断开连接:任务完成后,客户端可以主动关闭连接或等待服务器超时关闭。
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服务器的准备工作
(一)环境和工具准备
不同的搭建方式可能需要不同的环境和工具,以下是一些常见的准备要求:
- 编程语言环境众多编程语言都支持开发MCP服务器,例如Python、JavaScript、Java、Kotlin、C#等。以Python为例,需要Python 3.8+环境;若使用Node.js,建议安装LTS版本。
- 包管理工具如Python的
pip、uv(Rust版,需要Python 3.8+环境),Node.js的npm、npx等。 - 其他依赖根据具体的项目需求,可能还需要安装一些额外的依赖,如
fastapi、uvicorn、@modelcontextprotocol/sdk、zod等。
(二)安装必要软件
以下是一些常见软件的安装步骤:
- 安装uv工具(以Python项目为例) uv(Rust版)需要Python 3.8+环境,可通过pip安装(推荐)。
- MacOS/Linux:执行相应的pip安装命令。
- Windows:执行相应的pip安装命令。安装完成后,务必重启终端,以确保uv命令被识别。
- 安装Node.js 若使用Node.js进行开发,可从nodejs.org下载并安装最新LTS版本的Node.js。
-
安装完成后,打开命令提示符(CMD)或PowerShell,输入以下命令检查安装是否成功:
node -v npm -v
-
(三)若不想配置运行环境,可以考虑选择腾讯云轻量应用服务器
在云上一键部署MCP Server,无需配置运行环境,支持社区热门MCP Server和自定义MCP Server,提供完整托管功能。云端或本地的AI应用可随时随地调用MCP Server。
五、不同方式搭建MCP服务器的步骤
(一)使用Python和FastMCP搭建天气服务器示例
1. 搭建开发环境
# 在Windows下
python -m venv venv
venv\Scripts\activate
# 在Linux下
python3 -m venv venv
source venv/bin/activate
激活虚拟环境后,安装所需的依赖:
pip install mcp[cli] httpx
2. 创建辅助函数
创建helpers.py文件,编写辅助函数用于处理API请求和格式化数据:
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"
}
asyncwith httpx.AsyncClient()asclient:
try:
response =await client.get(url, headers=headers, timeout=30.0)
response.raise_for_status()
return response.json()
except Exception ase:
logging.error(e)
return None
3. 制作工具
创建tools.py文件,实现MCP工具:
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 =awaitmake_nws_request(url)
if not data or "features" not indata:
return"无法获取警报或没有找到警报。"
if not data["features"]:
return"该州目前没有活跃的警报。"
alerts =[format_alert(feature)for feature in data["features"]]
return"\n---\n".join(alerts)
4. 编写服务器代码
将如下代码添加到weather.py文件中:
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. 运行服务器
uv run weather.py
(二)使用Node.js搭建Pixabay图片搜索MCP服务器示例
1. 安装Node环境
从nodejs.org下载并安装Node.js和npm,然后验证Node.js是否正确安装:
node --version
npm --version
2. 创建MCP Server项目
mkdir pixabay
cd pixabay
npm init -y
3. 安装相关依赖
npm install @modelcontextprotocol/sdk zod
npm install -D @types/node typescript
4. 更新package.json文件
添加以下主要配置项:
{
"type":"module",
"bin":{
"pixabay":"./build/index.js"
},
"scripts":{
"build":"tsc && chmod 755 build/index.js"
},
"files":[
"build"
]
}
5. 创建主要目录和文件
mkdir src
touch src/index.ts
6. 在根目录创建tsconfig.json文件
{
"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文件中添加以下代码:
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 =newMcpServer({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 =awaitfetch(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 =newStdioServerTransport();
server.start(transport);
8. 运行和测试
编译TypeScript代码:
npm run build
运行服务器:
node build/index.js
(三)使用FastAPI搭建MCP服务器示例
1. 安装依赖项
pip install uvicorn fastapi
2. 搭建FastAPI服务器
from fastapi import FastAPI
app =FastAPI()
@app.get("/")
async def 首页():
return{"message":"MCP 太酷了"}
3. 用uvicorn运行应用
uvicorn main:app --reload
4. 升级到MCP服务器
安装fastapi-mcp:
pip install fastapi-mcp
在FastAPI代码中添加:
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中的配置方式可能有所不同,以下是一些常见的配置步骤:
- 安装依赖包:例如,若要配置FileSystem服务器,执行以下命令:
npm install -g @modelcontextprotocol/server-filesystem
- 在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:
{
"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 市场,支持一键进行安装
- 自定义配置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 市场,支持一键进行安装
- 自定义配置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服务器
(一)测试方法
- 在客户端中提出相关问题,检查是否能正确调用MCP服务器的工具并返回预期结果。例如,在Cursor中直接询问相关功能,看是否能自动调用MCP工具。
- 使用Postman等工具对MCP服务器的API进行测试,检查接口的响应是否正常。
(二)调试技巧
- 查看日志:许多MCP服务器会记录详细的日志信息,通过查看日志可以了解服务器的运行状态和可能出现的错误。
- 使用调试工具:如VS Code的调试功能,可帮助定位代码中的问题。
- 检查配置文件:确保配置文件中的参数设置正确,如端口号、主机名、环境变量等。
九、注意事项
-
路径问题:在配置命令时,务必确保路径的准确性,尤其是文件路径和命令路径。如果路径错误,MCP服务器将无法正常启动。
-
依赖安装:有些MCP服务器可能依赖其他软件或库,在安装前请仔细阅读官方文档,确保相关依赖已正确安装。
-
权限问题:如果在运行命令时遇到权限不足的问题,可能需要使用
sudo命令获取更高权限,但使用sudo时需谨慎操作。 -
版本兼容性:确保所使用的编程语言、包管理工具和依赖库的版本相互兼容,避免因版本不匹配导致的问题。
-
安全性:在配置和使用MCP服务器时,要注意数据安全和隐私保护,避免将敏感信息暴露在外。例如,设置合适的访问权限和加密机制。
让我们携手共创更多美好时刻!
如果您发现这篇文章对您有所启发或帮助, 请不吝赐赞,为我 【点赞】、【转发】、【关注】 ,带你一起玩转AI !后台回复知识库,获取AI大眼萌整理的AI知识库内容。
<您的点赞和在看,只有我能够看到。>
微信号 |AICuteMQ
