本文深入浅出地介绍了模型上下文协议(MCP),它为大型语言模型(LLM)与外部数据源和工具的连接提供了一种标准化的方式。
文章详细阐述了MCP的重要性、架构、核心组件以及工作原理,并通过与传统API集成的对比,突出了MCP在简化集成流程、解决AI模型局限性等方面的优势。
此外,文章还提供了使用Python构建MCP服务器的具体案例,帮助读者更好地理解和应用MCP技术。
/>
模型上下文协议
在人工智能领域引起了广泛关注,为人工智能模型连接外部数据源和工具提供了一种标准化的方式。
通过简化集成流程,MCP
有望彻底改变开发者创建人工智能应用的方式,使用户能够更轻松地访问实时数据并利用高级功能。
在
MCP
连接到外部系统需要:
- 自定义agents
- 自定义工具schemas
- 自定义prompt格式
- 实现代码需要定制化
这意味着:
- 工具不可重复使用
- 不同模型无法共享相同的功能
- 调试过程很复杂
- 没有统一的安全模型
工程团队需要重复开发相同的基础功能:
模型如何调用工具?
“如何传递参数?”
“如何获得结果?”
MCP
通过一个通用协议解决了所有这些问题,使工具、资源和操作能够即插即用,
MCP?
当你第一次听到“MCP”时,
的核心是一种通信标准。
它以清晰、结构化的方式定义了人工智能模型和外部系统如何相互通信
MCP
出现之前,每个工具的集成方式都各不相同。
有的系统可能需要
JSON
数据;有的系统可能需要专有模式;还有的系统可能需要在Prompt中使用一些变通方法。
总之,没有任何统一的标准。
MCP
通过引入一个所有工具、模型和应用程序都能达成共识的单一、定义明确的协议来解决这个问题。
/>
最简单的类比:
MCP
就像谷歌
服务器是网站。
浏览器知道如何加载任何网站,因为所有网站都遵循标准的“网络协议”。
相似地:
任何兼容
MCP
的任何模型配合使用。
这样一来,你的工具就变成了即插即用型的。
1.1
为什么
的一个根本局限性。
LLM受限于其训练数据,无法获取超出训练范围的信息和动作,这通常被称为“知识截止日期”。
LLM
本身只能处理你提供的文本。
它们不能:
- 检查本地文件
- 查询您的数据库
- 运行分析
- 编辑文档
- 调用
API
- 访问知识库
- 触发工作流程
这一切都需要“外部上下文”。
通常来说,团队经常是这样开发的:
- 自定义
Python
SDK
- 模型专用插件
- 提示词注入攻击
- 一次性集成
这种开发方式在LLM时代会遇到如下情况:
- 两种不同的模型很难共用同一个工具。
- 两个不同的团队不能重复使用相同的逻辑。
- 每增加一项新功能,工程师都必须重新编写集成代码。
/>
为了克服LLM局限性,主要有如下两种方式:
检索增强生成(RAG):这项技术的原理是从外部来源检索相关信息,并将其直接放入到LLM上下文窗口中。
然后,LLM可以基于这些新提供的信息生成响应,从而有效地将其知识扩展到训练数据之外。
工具使用(Tool
Use)
:这种方法使LLM能够访问外部“工具”或功能,并在需要时调用它们。
例如,某个工具可以帮助LLM查看天气、进行计算或搜索互联网。
虽然两种方法都很有价值,但工具使用面临着一个重大挑战:
MCP
应用程序中。
如果想要添加新的工具或功能,则需要更新
应用程序本身。
这导致生态系统碎片化,各种工具被孤立地存储在特定的
USB
外设,无论这两个组件的制造商是谁。
1.2
MCP:标准连接
MCP在解决这个问题时,主要考虑以下问题:
- 模型如何请求操作
- 服务器如何获取工具和资源
- 数据如何交换
- 事件和更新如何实时传输
- 如何传达错误和能力信息
MCP为双方都提供了可预测的结构和词。
这意味着:
如果你构建一台
MCP
或agent都可以使用它。
如果你想更换型号,
→
您的工具无需修改即可继续使用。
如果你设计多个工具,
→
/>
可以把它想象成人工智能集成领域的USB
等标准出现之前,连接外设需要各种不同的端口和定制驱动程序。
同样,将人工智能应用程序与外部工具和系统集成也是一个
M×N
GitHub、Slack、Asana、数据库等),您可能需要构建
M×N
个不同的集成。
这会导致团队间重复劳动,以及实现方式不一致。
MCP
服务器(每个系统一个),而应用程序开发人员构建
MCP
应用程序一个)。
/>
二、MCP
能够帮助不同的编程语言与各种开发工具连接。
类似地,MCP
的目标是通过标准化上下文,为人工智能应用与外部系统交互提供一种通用的方式。
/>
MCP
客户端的同时,为执行基于人工智能的任务提供环境。
它集成了交互式工具和数据,以实现与外部服务的顺畅通信。
Claude
Desktop,用于代码补全和软件开发的人工智能
IDE
Cursor,以及作为自主系统执行复杂任务的人工智能代理。
MCP
Client
该功能集成在主机应用程序中,与MCP
servers进行连接,并在主机需求和模型上下文协议
(MCP)
客户端。
client是指使用这些工具的实体。
这可能是:
ChatGPT
一个LangGraph智能体
运行
LLM
的应用程序
客户端的任务很简单:它使用
MCP
协议发送请求和接收响应。
它不知道这些工具的实际工作原理;它只知道服务器公开了哪些内容
。
把它想象成遥控器:
你不需要了解电视机的内部工作原理,你只需要按下按钮,然后期待电视机做出反应。/>
2.3
your:
服务器可是如下:
/>
服务器决定模型可以使用的“工具箱”。
/>
模型无法超出此工具箱的范围,这使得
MCP
服务器提供了特定功能和可以访问的数据,比如:
2.3.1
Resources
资源是模型可以读取的数据。
例如:
/>
资源为只读视图。
比如:
- /docs
文件夹
- /configs/system.json
- SELECT
FROM
10
- /tickets/open/123
这为模型提供了重要的背景信息,且没有被修改的风险。
2.3.2
/>
工具需要具备以下特点:
工具名字
输入数据的schema
输出数据的schema
这些schema使得
MCP
具有极强的可预测性。
模型知道预期参数是什么,以及它将得到什么结果。
工具才是真正力量的源泉。
Resources
=
支持两种主要的传输方式:
STDIO(标准输入/输出):
主要用于本地集成,其中服务器与客户端运行在同一环境中。
HTTP+SSE(服务器发送事件):
远程连接,使用
进行服务器响应和流式传输。
MCPJSON-RPC
作为底层消息标准,为请求、响应和通知提供标准化的结构。
/>
三、MCP
的工作原理
了解host-client-server通信对于构建自己的MCP
client-server至关重要。
那么让我们来了解一下客户端和服务器是如何通信的。
在分步骤讲解之前,先来看一张示意图。
MCP
应用程序)交互时,后台会发生多个进程,以实现
与外部系统之间的快速无缝通信。
理解
MCP
的最佳方法是将其视为一个交互的pipeline:
- 大模型发送结构化请求
- MCP
,要么调用工具
- 结果反馈到模型中
3.1
Protocol
Desktop)启动时,它会连接到设备上配置的
MCP
客户端询问每个服务器“你们提供哪些能力?”每个服务器都会以其可用的工具、资源和提示进行响应。
能力注册:
客户端注册这些功能,以便人工智能在对话过程中可以使用它们。
/>
3.2
从用户请求到外部数据
假设你问Claude:“旧金山今天天气怎么样?”
会发生什么:
需求识别:
Claude
分析了您的问题,并识别出它需要训练数据中没有的外部实时信息。
工具或资源选择:
Claude
功能来满足您的请求。
权限请求:
客户端会显示权限提示,询问您是否要允许访问外部工具或资源。
信息交换:
一旦获得批准,客户端将使用标准化的协议格式向相应的
MCP
服务器发送请求。
外部处理:
MCP
服务器处理请求,执行所需的任何操作——查询天气服务、读取文件或访问数据库。
结果返回:服务器以标准化的格式向客户端返回请求的信息。
上下文整合:
Claude接收到这些信息并将其融入到对对话的理解中。
回复生成:
Claude
会生成包含外部信息的回复,根据当前数据为您提供答案。
理想情况下,整个过程只需几秒钟即可完成,让
Claude
看起来“知道”了它仅凭训练数据不可能获得的信息。
3.3
其他协议功能
自最初发布以来,MCP
已新增多项重要功能,进一步增强了其性能:
采样功能允许服务器向客户端请求
LLM
服务器可以识别出需要更多上下文信息,并请求客户端的
LLM
生成最近更改的摘要。
这实现了本质上的“agentic”工作流程,同时仍然保留了客户端对模型访问、选择和权限的控制——所有这些都无需服务器
API
密钥。
请求获取机制使服务器能够在用户操作过程中请求额外信息。
例如,如果
GitHub
服务器需要知道要提交到哪个分支(因为提示中没有说明),它可以在操作过程中使用结构化的
JSON
模式向用户询问该信息并验证响应。
这既能实现更具交互性的工作流程,又能通过人工监督来维护安全性。
根,而不是整个文件系统,从而防止对敏感数据存储的意外(或恶意)访问。
四、MCP
use或function
calling)的概念。
工具调用,需要在提示中提供工具定义列表,每个工具都包含名称、描述和预期输入参数。
根据问题和可用工具,LLM
但关键在于:LLM
不知道如何使用工具。
它们没有原生工具调用支持。
它们只是生成代表函数调用的文本。
/>
在上图中,可以看到LLM
实际看到的内容:一个由指令、之前的用户消息和可用工具列表组成的提示。
基于此,LLM
生成一个文本响应,其中可能包含您的系统应该调用的工具。
它并不真正理解工具的含义,只是进行预测。
我们来看一个更实际的应用场景。
例如,如果您提供一个名为
get\_wea***r
作为输入,然后询问模型:“加州圣何塞的天气如何?”它可能会返回:
{"name":
}
如下面的图表所示,LLM本身并不知道如何调用
工具,也不需要知道。
agentic循环或agentic应用程序负责接收此输出并执行实际的
API
调用或函数调用。
它会解析生成的工具名称和输入,运行该工具,并将结果作为新消息返回给
/>
这种职责分离非常重要。LLM
只负责生成预测,而你的系统则负责执行。
这就引出了
MCP
是智能体与工具、提示、资源和示例等数据源的一种标准化连接方式。
MCP
定义了一套统一的架构和通信模式,无需为每个工具手动编写自定义格式的代码。
可以将其视为工具的通用适配器(类似于
MCP
Cursor),其中包含能够连接到不同服务器的
MCP
可以使用的格式进行描述。
/>
对于同样的问题,“What’s***
仍然会得到相同的工具列表。
根据该列表,它会告诉你应该调用哪个工具,而如何调用该工具则由开发人员决定。
如果使用
MCP,则会使用
有助于管理使用多种不同工具的复杂性。
它使跨项目复用工具、强制执行一致的格式以及无需重写所有代码即可接入新系统变得更加容易。
要让LLM使用MCP,必须在工具定义的系统提示中明确告知,否则
LLM
MCP。
您(开发人员)负责调用工具,LLM
接下来,让我们看看如何把MCP融入上下文工程中,以及为什么像
MCP
这样的抽象层让人类更容易理解,而不是让模型更容易理解。
4.3
上下文工程
上下文工程的目的是为LLM提供正确的输入,使其能够生成有用的输出。这听起来很简单,但实际上却是构建高效人工智能系统的关键环节之一。
当你向模型提出问题时,实际上是在给它一个提示词——一段用来预测下一段文本的文本块。
这个提示的质量直接影响着模型回答的质量。
这时就需要用到工具了。
有时候,模型缺乏足够的上下文信息来很好地回答问题。
它可能需要实时数据、用户配置文件访问权限,或者代表用户执行操作的能力。
正如在本博文中了解到的,工具调用可以通过赋予模型访问外部系统的权限来解决这个问题。
再次强调,模型不需要了解这些工具的工作原理,它只需要知道它们的存在、用途以及如何调用它们。
这就是上下文工程与工具设计相结合的地方:你需要构建一套工具定义,作为模型提示的一部分。
/>
MCP使流程更简洁、更可重复。
无需对工具进行硬编码或编写临时封装,只需定义一次结构化接口,并通过
MCP
的工具。
它帮助我们构建更可靠、模块化的系统。
它帮助我们专注于上下文工程,而无需每次都重新开发相同的架构。
五、智能家居集成实际案例
让我们通过一个实际例子来说明API
进行比较:
5.1
API
方法
首先,构建一个可以与你的智能照明系统集成的语音助手。
然后,给照明
API
(on/off)
你需要将助手程序硬编码,使其发送带有这些精确参数的请求。
API,要求添加第三个必需参数:
-brightness
intensity)
这时,你的语音助手将不能继续正常工作,因为你的代码中缺少这个新的必需参数。/>
5.2
方法
您的语音助手(MCP主机)连接到您的智能照明系统(MCP
服务器)。
-The
parameters.
/>
当照明公司更新其系统时:
-The
requests.
无需更改代码!助手将继续完美运行。
/>
六、MCP
服务器生命周期
本节从服务器的角度概述了MCP
/>
在创建阶段,开发人员定义元数据、指定功能并实现服务器本身。部署阶段始于服务器发布之时(无论是公开发布还是内部发布),用户在
MCP
维护阶段包括版本更新、配置更改和持续改进,以确保服务器长期保持安全、稳定和高效。
/>
七、使用
服务器
让我们通过一个具体的例子来更具体地说明。这里,我将使用
Anthropic
。
稍后我们会在示例中看到原因,简而言之,它允许使用单个命令启动服务器(及其依赖项)。
的安装方法如下所示:
#Mac/Linux
https://astral.sh/uv/install.sh
Windows
https://astral.sh/uv/install.ps1
Python
服务器变得非常简单。
下面我们将创建一个名为“AVA”的服务器。
frommcp.server.fastmcp
FastMCP("AVA")
MCP服务器有三个关键基本组件:
。
让我们将它们逐一添加到我们的服务器中。
7.3
添加提示
提示词是一种可以接收文本输入并动态将其格式化为最终提示信息的函数。
当您有一个想要反复使用的样板提示符模板时,这非常方便。
AVA
发出指令。
@mcp.prompt()def
"""
7.4
添加资源
接下来,我们可以添加资源。这些资源为
LLM
代码库[2]中找到。
#Define
@mcp.resource("email-examples://3-way-intro")
def
open("email-examples/3-way-intro.md",
"r")
@mcp.resource("email-examples://call-follow-up")
def
open("email-examples/call-follow-up.md",
"r")
@mcp.resource("directory://all")
def
添加工具
最后,在服务器上添加一个工具。工具可以执行任意操作,例如运行
Python
帐户中创建新电子邮件草稿的工具。
必需的环境变量:
- USER_EMAIL
Gmail
地址;
- GOOGLE_CREDENTIALS_PATH
:
凭据文件的路径;
- GOOGLE_TOKEN_PATH
:Google
token的存储路径
USER_EMAIL=your_email_addressGoogle
GOOGLE_CREDENTIALS_PATH=.config/ava-agent/credentials.json
GOOGLE_TOKEN_PATH=.config/ava-agent/token.json
#tools/gmail.pyimport
['https://www.googleapis.com/auth/gmail.compose']
def
os.path.expanduser(os.getenv('GOOGLE_TOKEN_PATH'))
credentials_path
os.path.expanduser(os.getenv('GOOGLE_CREDENTIALS_PATH'))
The
Credentials.from_authorized_user_file(token_path,
SCOPES)
os.path.exists(credentials_path):
raise
FileNotFoundError(f"Credentials
file
InstalledAppFlow.from_client_secrets_file(
credentials_path,
flow.run_local_server(port=0)
Save
os.makedirs(os.path.dirname(token_path),
exist_ok=True)
https://developers.google.com/identity
for
os.getenv("USER_EMAIL")
=
base64.urlsafe_b64encode(message.as_bytes()).decode()
create_message
.create(userId="me",
.execute()
{draft["message"]}')
except
gmail_create_draft()
fromtools.gmail
write_email_draft(recipient_email:
str,
os.getenv("USER_EMAIL")
=
base64.urlsafe_b64encode(message.as_bytes()).decode()
create_message
.create(userId="me",
.execute()
{draft["message"]}')
except
本地传输
要在本地托管服务器并从命令行运行它,我们可以将以下内容添加到我们的Python
脚本的末尾。
if__name__
mcp.run(transport='stdio')
7.7
测试服务器
为了确保一切运行正常,我们可以从命令行以开发模式运行服务器。如果您是从
GitHub
环境应该已经设置好了。
uvrun
mcp-server-example.py
这将在浏览器中启动一个图形用户界面,可以通过它来测试服务器并查看其提示、资源和工具。界面如下所示。
7.8
集成到
Desktop
既然服务器运行正常,我们就可以将其集成到人工智能应用中。MCP
Claude
claude.ai,因为该服务器仅配置为本地运行。
- 安装
Claude
Desktop
- 进入开发者设置(Claude
>
"/global/path/to/mcp/server/code/",
"run",
"mcp-server-example.py"
}
注意
“uv”
命令找到此路径)。
- 重新启动
Claude,集成功能应该就会出现!
start="5">
:
命令可以帮我们处理所有这些依赖项!
八、使用
LangGraph
项目结构
在搭建服务器和agent之前,我们先来了解一下项目结构。该项目由多个
MCP
Agent组成,如下所示:
langgraph_mcp/│--
Dependencies
8.2
安装
- 克隆代码库
首先,克隆项目仓库并进入
langgraph-mcp
https://github.com/your-repo/langgraph-mcp.git
start="2">
- 安装依赖项
然后,运行以下代码安装所有必需的依赖项:
pipinstall
requirements.txt
- 设置
文件中:
TAVILY_API_KEY=<your-tavily-api-key>OPENAI_API_KEY=<your-openai-api-key>
8.3
MCP
工具的过程。
start="3">
Web
MCP
服务器(Tavily)
该服务器允许人工智能代理使用
Tavily
执行实时网络搜索。
它可以帮助回答需要从互联网获取最新信息的查询。
importimport
FastMCP("tavily_search")
Tavily
os.getenv("TAVILY_API_KEY")
TAVILY_SEARCH_URL
"https://api.tavily.com/search"
async
"include_image_descriptions":
False,
mcp.run(transport="stdio")
文字稿
视频的文字稿。
agent程序可以根据这些文字稿对视频内容进行总结或分析。
importfrom
FastMCP("youtube_transcript")
@mcp.tool()
re.search(r"(?:v=|\/)([0-9A-Za-z_-]{11}).*",
url)
YouTubeTranscriptApi.get_transcript(video_id)
transcript_text
"\n".join([entry["text"]
for
mcp.run(transport="stdio")
8.4
MCP
客户端将服务器连接到agent
为了将MCP
Agent,如下所示:
importasyncio
https://www.youtube.com/watch?v=2f3K43FHRKo"
query
ChatOpenAI(model="gpt-4o")
Define
["servers/yt_transcript.py"],
"transport":
["servers/math_server.py"],
"transport":
"http://localhost:8000/sse",
start
agent.ainvoke({"messages":
[system_message,
HumanMessage(content=query)]})
Print
agent_response["messages"]:
m.pretty_print()
agent_response["messages"][-1].content
Run
response)
一切设置完毕后,只需运行服务器脚本和agent.py
Agent并提出您的查询,如演示所示:
MCP
代理,该代理集成了多个外部工具。
九、安全和隐私
MCP
/>
十、MCP
安全的最佳实践
以下是一套综合最佳实践,并结合了实用的工程原理。
/>
随着人工智能系统与企业数据更加紧密地集成,模型上下文协议(MCP)
模型,因此必须将其视为关键基础设施组件,
并采取明确的安全控制措施。
/>
最后
我在一线科技企业深耕十二载,见证过太多因技术更迭而跃迁的案例。
那些率先拥抱
的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。
我整理出这套
大模型突围资料包:
- ✅AI大模型学习路线图
- ✅Agent行业报告
- ✅100集大模型视频教程
- ✅大模型书籍PDF
- ✅DeepSeek教程
- ✅AI产品经理入门资料
完整的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇
/>
/>
为什么说现在普通人就业/升职加薪的首选是AI大模型?
人工智能技术的爆发式增长,正以不可逆转之势重塑就业市场版图。
从DeepSeek等国产大模型引发的科技圈热议,到全国两会关于AI产业发展的政策聚焦,再到招聘会上排起的长队,AI的热度已从技术领域渗透到就业市场的每一个角落。
/>
/>智联招聘的最新数据给出了最直观的印证:2025年2月,AI领域求职人数同比增幅突破200%,远超其他行业平均水平;整个人工智能行业的求职增速达到33.4%,位居各行业榜首,其中人工智能工程师岗位的求职热度更是飙升69.6%。
AI产业的快速扩张,也让人才供需矛盾愈发突出。
麦肯锡报告明确预测,到2030年中国AI专业人才需求将达600万人,人才缺口可能高达400万人,这一缺口不仅存在于核心技术领域,更蔓延至产业应用的各个环节。
/>
/>
资料包有什么?
①从入门到精通的全套视频教程⑤⑥
包含提示词工程、RAG、Agent等技术点
/>![]()
AI大模型学习路线图(还有视频解说)
全过程AI大模型学习路线
/>
③学习电子书籍和技术文档
市面上的大模型书籍确实太多了,这些是我精选出来的
/>
④各大厂大模型面试题目详解
/>⑤
这些资料真的有用吗?
这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE
Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。
目前我正在和鲁博士共同进行人工智能的研究。
所有的视频教程由智泊AI老师录制,且资料与智泊AI共享,相互补充。
这份学习大礼包应该算是现在最全面的大模型学习资料了。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
/>
/>
智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势,构建起"前沿课程+智能实训+精准就业"的高效培养体系。
课堂上不光教理论,还带着学员做了十多个真实项目。
学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
/>
/>
如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!
应届毕业生:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能
突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓**
/>


