01-MCP协议入门指南
MCP协议是连接AI助手与外部系统的标准化协议,解决了传统方案中缺乏标准、安全性差和维护困难等问题。它通过统一接口让AI助手安全调用工具、资源和提示模板,包含服务器实现功能、客户端管理连接、类型安全的工具调用、数据资源访问和可重用提示模板等核心概念。MCP协议采用标准化交互流程,包括会话初始化、功能发现和调用执行,显著提升了AI助手的外部交互能力,为构建更智能、可靠的AI应用提供了基础设施。
01-MCP协议入门指南
概述
Model Context Protocol (MCP) 是一个开放的协议标准,用于在大语言模型(LLM)和外部工具之间建立标准化的通信机制。本文将介绍 MCP 协议的基本概念、核心组件、应用场景以及如何在实际项目中使用 MCP。
MCP协议简介
MCP 是由 Anthropic 推出的开源协议,旨在解决 LLM 与外部工具集成的标准化问题。通过 MCP,开发者可以:
- 定义统一的工具接口规范
- 实现跨平台的工具调用机制
- 构建可扩展的 AI 应用架构
核心优势
- 标准化接口: 统一的协议定义,降低集成复杂度
- 语言无关: 支持多种编程语言实现
- 传输灵活: 支持 stdio、HTTP 等多种传输方式
- 易于扩展: 支持自定义工具、资源和提示模板
MCP的核心组件
MCP 协议定义了四个核心组件,每个组件都有明确的职责和接口规范。
1. Prompts (提示模板)
Prompts 是可重用的提示模板,用于定义 AI 助手的行为模式和响应风格。
作用:
- 定义系统角色的行为准则
- 提供标准化的对话模板
- 支持动态参数注入
示例场景:
- 数学问题求解提示: 引导 AI 逐步解决数学问题
- 代码审查提示: 定义代码检查的标准流程
- 文档生成提示: 规范文档结构和格式
2. Resources (资源)
Resources 是静态或动态的数据源,通过 URI(统一资源标识符)进行访问。
特性:
- 支持模板 URI(如
greeting://{name}) - 可返回文本、JSON 等多种格式
- 支持动态数据生成
示例场景:
- 配置文件读取:
config://app - 个性化问候:
greeting://{username} - 常量数据:
constant://pi
3. Tools (工具)
Tools 是可执行的函数,供 AI 助手调用以完成特定任务。
特点:
- 明确的参数类型定义
- 标准化的返回格式
- 支持错误处理机制
示例场景:
- 数学运算: 加减乘除、幂运算、平方根
- 数据查询: 数据库检索、API 调用
- 文件操作: 读写文件、目录遍历
4. Transport (传输层)
Transport 定义了客户端和服务器之间的通信机制。
支持的传输方式:
| 传输方式 | 适用场景 | 优势 | 局限 |
|---|---|---|---|
| stdio | 本地开发、测试 | 低延迟、简单易用 | 不支持远程访问 |
| HTTP | 生产环境、分布式部署 | 支持跨机器访问 | 需要网络配置 |
MCP协议工作原理
通信流程
MCP 采用客户端-服务器架构,通信流程如下:
客户端 服务器
│ │
├────── initialize() ──────────>│
│<───── capabilities ──────────┤
│ │
├────── list_prompts() ───────>│
│<───── prompts list ──────────┤
│ │
├────── list_resources() ──────>│
│<───── resources list ─────────┤
│ │
├────── list_tools() ──────────>│
│<───── tools list ────────────┤
│ │
├────── get_prompt() ──────────>│
│<───── prompt content ─────────┤
│ │
├────── read_resource() ───────>│
│<───── resource content ───────┤
│ │
├────── call_tool() ────────────>│
│<───── tool result ────────────┤
消息格式
MCP 使用 JSON-RPC 格式进行消息交换:
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "add",
"arguments": {
"a": 10,
"b": 20
}
},
"id": 1
}
实战案例:数学计算 MCP 服务器
项目结构
mcp_demo/
├── math_mcp_server_stdio.py # Stdio 模式服务器
├── math_mcp_server_http.py # HTTP 模式服务器
├── math_mcp_client_stdio.py # Stdio 模式客户端
├── math_mcp_client_http.py # HTTP 模式客户端
└── pyproject.toml # 项目配置
安装依赖
使用 uv(推荐)或 pip 安装依赖:
# 使用 uv
uv sync
# 或使用 pip
pip install fastmcp mcp
服务器代码示例
以下是一个简单的数学计算 MCP 服务器实现:
from mcp.server.fastmcp import FastMCP
import math
# 创建 MCP 服务器实例
mcp = FastMCP("Math")
# 定义工具
@mcp.tool()
def add(a: int, b: int) -> str:
"""加法运算"""
result = a + b
return f"{a} + {b} = {result}"
@mcp.tool()
def multiply(a: int, b: int) -> str:
"""乘法运算"""
result = a * b
return f"{a} * {b} = {result}"
# 定义资源
@mcp.resource("constant://pi")
def get_pi() -> str:
"""圆周率常数"""
return f"{math.pi}"
# 定义提示模板
@mcp.prompt()
def system_prompt() -> str:
"""系统提示模板"""
return """
You are an AI assistant specialized in mathematical calculations.
- Use the available tools when needed
- Show step-by-step solutions
- Provide clear answers
"""
if __name__ == "__main__":
mcp.run() # 默认使用 stdio 传输
客户端代码示例
import asyncio
from mcp.client.stdio import stdio_client
from mcp import ClientSession, StdioServerParameters
async def main():
# 配置服务器参数
server_params = StdioServerParameters(
command="python",
args=["math_mcp_server_stdio.py"]
)
# 连接到服务器
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
# 初始化会话
await session.initialize()
# 列出可用工具
tools = await session.list_tools()
print(f"可用工具: {[tool.name for tool in tools.tools]}")
# 调用工具
result = await session.call_tool("add", {"a": 10, "b": 20})
print(f"计算结果: {result.content[0].text}")
if __name__ == "__main__":
asyncio.run(main())
运行步骤
- 启动服务器:
python math_mcp_server_stdio.py
- 在另一个终端启动客户端:
python math_mcp_client_stdio.py
- 观察输出:
可用工具: ['add', 'multiply']
计算结果: 10 + 20 = 30
MCP的应用场景
1. 数据分析助手
通过 MCP 集成数据分析工具:
- Tools: Pandas 数据处理、SQL 查询、统计计算
- Resources: 数据集元数据、分析报告模板
- Prompts: 数据分析标准流程、可视化指导
2. 开发辅助工具
构建智能开发助手:
- Tools: 代码执行、测试运行、依赖分析
- Resources: 项目文档、代码规范
- Prompts: 代码审查标准、重构指导
3. 运维自动化
实现自动化运维系统:
- Tools: 服务器监控、日志分析、故障诊断
- Resources: 系统配置、运维手册
- Prompts: 故障处理流程、最佳实践
4. 企业知识库
构建企业级知识管理系统:
- Tools: 文档检索、内容生成、知识推荐
- Resources: 企业文档、培训材料
- Prompts: 问答模板、写作规范
MCP生态与工具
框架和库
-
FastMCP: Python MCP 服务器框架
- 快速构建 MCP 服务器
- 简化的 API 设计
- 自动类型推断
-
MCP SDK: 官方 Python SDK
- 完整的协议实现
- 客户端和服务器支持
- 多传输方式
-
LangChain MCP Adapters: LangChain 集成适配器
- 与 LangChain 无缝集成
- 支持工具调用
- 状态管理
相关技术
- LangChain: LLM 应用框架
- LangGraph: 状态机工作流引擎
- OpenAI API: 大语言模型服务
常见问题
Q1: MCP 和 LangChain Tools 有什么区别?
MCP 是传输层协议,定义了标准化的通信接口;LangChain Tools 是应用层的工具抽象。MCP 可以与 LangChain 集成,提供标准化的工具调用机制。
Q2: 如何选择传输方式?
- 本地开发: 使用 stdio,简单快速
- 生产部署: 使用 HTTP,支持远程访问
- 混合场景: 可以同时使用两种方式
Q3: MCP 支持哪些编程语言?
MCP 协议本身是语言无关的,目前已有 Python、TypeScript、Go 等语言的实现。
Q4: 如何调试 MCP 应用?
- 使用日志记录通信消息
- 检查 JSON-RPC 消息格式
- 验证工具参数类型
- 测试不同传输方式
学习路线图
建议按照以下顺序学习 MCP:
-
入门阶段 (本篇)
- 理解 MCP 基本概念
- 学习核心组件
- 运行示例代码
-
实践阶段 (下一篇)
- 构建 MCP 服务器
- 开发 MCP 客户端
- 实现自定义工具
-
进阶阶段 (后续文章)
- LLM 集成
- 多服务器架构
- 最佳实践
阅读顺序建议
- 01-MCP协议入门指南: 了解 MCP 基本概念和核心组件
- 02-快速构建MCP服务器: 使用 FastMCP 构建服务器
- 03-MCP客户端开发实战: 开发 stdio 和 HTTP 客户端
- 04-LLM与MCP集成实践: 集成到 LangGraph 构建智能代理
- 05-多服务器架构与最佳实践: 多服务器架构和生产部署
总结
MCP 协议为 LLM 与外部工具的集成提供了标准化的解决方案。通过定义清晰的组件和接口,MCP 大大降低了 AI 应用的开发复杂度,提高了可维护性和可扩展性。
在下一篇《02-快速构建MCP服务器》中,我们将详细介绍如何使用 FastMCP 框架构建完整的 MCP 服务器,包括工具、资源和提示模板的实现。
参考资源
文章标签
MCP协议, Model Context Protocol, AI应用开发, LLM集成, Python开发, 工具调用, 标准化协议, 开源协议
更多推荐


所有评论(0)