AI Agent学习 -- MCP篇
MCP是什么
MCP(Model Context Protect,模型上下文协议)是一个开源标准,用于将人工智能应用与外部系统连接起来。
可以将MCP理解成USB端口,USB提供了连接电子设备的标准化方式,MCP对于AI应用来说也是如此,MCP可以连接claude code,cursor,vs等应用。
MCP Server核心概念
三大原语
- Tools:模型可调用的函数或者可以执行操作,如数据库查询,文件系统操作等。客户端向服务器端
- Resources:为应用提供上下文数据的数据源,如文件内容,数据库记录等。服务器端向客户端
- Prompts:用户可调用的模板,帮助结构化与语言模型的交互。服务端向用户
- Sampling:服务器向LLM发送补全请求。服务端向LLM
- Logging:服务器能够向客户端发送日志消息,以便进行调试和监控。服务端向客户端
MCP架构的主要参与者
MCP Host :协调和管理一个或多个 MCP 客户端的 AI 应用
MCP 客户端 :一个组件,负责维护与 MCP 服务器的连接,并从该 MCP 服务器获取上下文供 MCP 主机使用
MCP 服务器:为 MCP 客户端提供上下文的程序
传输方式
- stdio:本地进程场景,客户端启动服务器进程,通过stdin/stdout通信
- http:远程服务场景,HTTP POST发送请求
- SSE:远程服务场景,已被HTTP取代
MCP使用
MCP生态有很多个服务器,可以直接在AI应用中使用已经定义好的mcp服务器,也可以自己定制mcp服务器。
Python 用 FastMCP 2.0 的装饰器 API,使用python开发一个MCP案例
首先需要部署环境:
bash
python -m pip install uv #安装uv,使用uv管理mcp
pip install fastmcp
uv init weather #使用uv初始化一个mcp服务项目
uv add "mcp[cli]" #添加mcp的依赖项
python代码如下:
python
"""
FastMCP quickstart example.
"""
from mcp.server.fastmcp import FastMCP
# 创建一个mcp实例
mcp = FastMCP("Demo", json_response=True)
# 定义tool,即该mcp能提供的功能
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b
# 该mcp能获得的资源
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
"""Get a personalized greeting"""
return f"Hello, {name}!"
# 该mcp定义的提示词
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
"""Generate a greeting prompt"""
styles = {
"friendly": "Please write a warm, friendly greeting",
"formal": "Please write a formal, professional greeting",
"casual": "Please write a casual, relaxed greeting",
}
return f"{styles.get(style, styles['friendly'])} for someone named {name}."
if __name__ == "__main__":
mcp.run()
在cursor中使用定制的mcp服务:
1.在cursor中添加mcp服务器

由于我已经添加了两个mcp,所以上面会显示添加的mcp,点击New MCP Server,跳转到mcp.json文件,然后填充mcp.json文件内容如下:
json
{
"mcpServers": {
"fastmcp_quickstart": {
"command": "uv",
"args": [
"run",
"--with",
"mcp",
"path/fastmcp_quickstart.py"
]
}
}
}
即可看到添加的fastmcp_quickstart的mcp服务器。在cursor中调用实现的mcp服务器。
由于和llm的结果进行区分,因此修改了add的实现 ,实际fastmcp_quickstart的add功能代码为返回a + a + b :

然后在cursor中使用:

可以发现,计算结果是符合预期的,因此能够验证已经调用到自己定制的fastmcp_quickstart的mcp服务器