> 📢 **导读**:MCP(Model Context Protocol)正在成为AI Agent领域的事实标准。本文从零开始,带你理解MCP的核心概念、架构设计,并手把手实现一个MCP Server。建议收藏!
---
## 一、什么是MCP?
MCP(Model Context Protocol,模型上下文协议)是 **Anthropic** 于2024年底提出的一套开放协议,旨在为大语言模型(LLM)提供 **标准化的外部工具调用和上下文获取能力**。
你可以把它理解为:
```
MCP 之于 AI Agent = USB 协议 之于 电脑外设
```
在MCP出现之前,每个AI应用对接外部工具都需要写一套定制代码。有了MCP,**一次实现,到处复用**。
### 1.1 核心架构
MCP采用 **Client-Server 架构**:
```
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ MCP Host │◄─────►│ MCP Client │◄─────►│ MCP Server │
│ (AI应用/IDE) │ │ (协议层) │ │ (工具提供者) │
└─────────────┘ └─────────────┘ └─────────────┘
```
- **MCP Host**:宿主应用,如Claude Desktop、Cursor、VS Code等
- **MCP Client**:负责与Server建立连接、发送请求
- **MCP Server**:对外暴露具体能力(工具、资源、提示词)
### 1.2 三大核心能力
| 能力 | 说明 | 示例 |
|------|------|------|
| **Tools** | 可被LLM调用的函数 | 查询数据库、发送邮件、调用API |
| **Resources** | 可被读取的上下文数据 | 文件内容、数据库记录 |
| **Prompts** | 预定义的提示词模板 | 代码审查模板、翻译模板 |
---
## 二、快速上手:用Python实现一个MCP Server
### 2.1 环境准备
```bash
# 安装uv(Python包管理器)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 创建项目
uv init my-mcp-server
cd my-mcp-server
# 安装MCP SDK
uv add "mcp[cli]"
```
### 2.2 编写MCP Server
创建 `server.py`:
```python
from mcp.server.fastmcp import FastMCP
# 创建MCP Server实例
mcp = FastMCP(
name="my-tools",
version="1.0.0"
)
# 定义一个工具:查询天气
@mcp.tool()
async def get_weather(city: str) -> str:
"""查询指定城市的天气信息
Args:
city: 城市名称,如"北京"、"上海"
"""
# 这里模拟返回,实际项目中可对接天气API
weather_data = {
"北京": "晴,25°C,空气质量良",
"上海": "多云,22°C,东南风3级",
"深圳": "阵雨,28°C,湿度85%",
}
return weather_data.get(city, f"暂不支持查询 {city} 的天气")
# 定义一个工具:代码格式化
@mcp.tool()
async def format_code(code: str, language: str = "python") -> str:
"""对代码进行格式化
Args:
code: 待格式化的代码
language: 编程语言,默认python
"""
if language == "python":
try:
import black
return black.format_str(code, mode=black.Mode())
except ImportError:
return "请先安装black: pip install black"
return f"暂不支持 {language} 的格式化"
# 定义一个资源:提供项目信息
@mcp.resource("info://project")
async def get_project_info() -> str:
"""返回当前项目的基本信息"""
return """
项目名称:My MCP Server
版本:1.0.0
作者:你的名字
描述:一个示例MCP Server,演示如何暴露工具和资源
"""
# 启动服务
if __name__ == "__main__":
mcp.run(transport="stdio")
```
### 2.3 配置Claude Desktop
编辑 `claude_desktop_config.json`:
```json
{
"mcpServers": {
"my-tools": {
"command": "uv",
"args": ["--directory", "/path/to/my-mcp-server", "run", "server.py"]
}
}
}
```
重启Claude Desktop,你就能在对话中使用自定义工具了!
---
## 三、进阶:Streamable HTTP传输方式
除了 `stdio`,MCP还支持 **Streamable HTTP** 传输,适合远程部署:
```python
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("remote-tools")
@mcp.tool()
async def search_docs(query: str) -> str:
"""搜索文档"""
return f"搜索结果: {query} 相关文档共3篇..."
if __name__ == "__main__":
# 使用HTTP传输,监听8080端口
mcp.run(transport="streamable-http", host="0.0.0.0", port=8080)
```
客户端连接:
```json
{
"mcpServers": {
"remote-tools": {
"url": "http://your-server:8080/mcp"
}
}
}
```
---
## 四、MCP生态现状
截至目前,MCP生态已经非常丰富:
| 类别 | 代表项目 |
|------|---------|
| **数据库** | PostgreSQL、MySQL、SQLite、Redis |
| **开发工具** | GitHub、GitLab、Jira、Linear |
| **文件系统** | 本地文件、Google Drive、S3 |
| **搜索** | Brave Search、Tavily、Perplexity |
| **通讯** | Slack、Discord、邮件 |
| **云服务** | AWS、GCP、Azure |
> 💡 **推荐**:去 [mcp.so](https://mcp.so) 或 [Smithery](https://smithery.ai) 浏览更多MCP Server。
---
## 五、常见问题
### Q1: MCP和Function Calling有什么区别?
| 对比项 | Function Calling | MCP |
|--------|-----------------|-----|
| 标准化 | 各厂商各实现 | 统一开放协议 |
| 复用性 | 绑定特定模型 | 跨模型、跨应用 |
| 能力范围 | 仅工具调用 | 工具+资源+提示词 |
| 生态 | 碎片化 | 统一生态 |
### Q2: MCP Server只能用Python写吗?
不是!官方SDK支持:
- **Python**:`mcp[cli]`
- **TypeScript/Node.js**:`@modelcontextprotocol/sdk`
- **Java/Kotlin**、**Go**、**Rust** 等社区SDK也在快速发展
### Q3: 安全性如何保障?
- MCP Server运行在本地,数据不经过第三方
- 支持OAuth 2.1认证
- 工具调用需要用户确认(可配置)
---
## 六、总结
MCP协议正在快速成为AI Agent领域的 **"USB标准"**。掌握MCP意味着:
1. ✅ 你能为任意AI应用扩展能力
2. ✅ 你的工具可以被所有支持MCP的Host复用
3. ✅ 你站在了AI Agent开发的前沿
**动手试试吧!** 从上面的示例开始,5分钟就能跑通你的第一个MCP Server。
---
> 📌 **觉得有帮助?点赞👍 + 收藏⭐ + 关注,持续分享AI开发干货!**
>
> 💬 评论区聊聊:你在用MCP做什么项目?
---
**标签**:`MCP` `AI Agent` `大模型` `Claude` `工具调用` `Python` `LLM`
1229

被折叠的 条评论
为什么被折叠?



