MCP(Model Context Protocol)是专为LLM(大语言模型)应用设计的标准化协议
核心定义
MCP(Model Context Protocol)是专为LLM(大语言模型)应用设计的标准化协议,通过安全可控的方式向AI应用暴露数据和功能。主要提供以下能力:
- 标准化的上下文管理
- 安全的功能调用接口
- 跨平台的数据交互协议
- 可审计的操作日志记录
MCP三大原语
MCP Server 提供了三种核心原语,每种原语都有其特定的用途和特点:
- Tool(工具):服务器公开可执行的函数,供客户端和LLM调用,实现主动操作和数据写入。
- Resource(资源):服务器提供的只读数据,如文件、数据库记录、图片等,供客户端或应用获取上下文。
- Prompt(提示模板):可重用的交互模板,引导或标准化与LLM的对话流程。
技术架构
+----------------+ +----------------+ +----------------+
| MCP Client | ← → | MCP Server | ← → | MCP Host |
+----------------+ +----------------+ +----------------+↓ ↓ ↓
+----------------+ +----------------+ +----------------+
| LLM Application | | API Endpoints | | Data Sources |
+----------------+ +----------------+ +----------------+
通信方式
MCP服务端支持两种与客户端的数据通信方式:
1. 标准输入输出(stdio)
- 原理:客户端将服务端作为子进程启动,通过标准输入输出进行数据交换。
- 适用场景:本地运行,低延迟、高效率,适合快速响应的本地应用。
2. 基于HTTP的服务器推送事件(SSE)
- 原理:客户端与服务端通过HTTP协议通信,利用SSE实现服务端向客户端实时推送数据。
- 适用场景:分布式或远程部署,适合跨物理位置的服务集成。
开发指南
Python环境管理与FastMCP安装
推荐使用uv进行Python环境管理:
- 安装uv(Windows):
powershell -ExecutionPolicy ByPass -c “irm https://astral.sh/uv/install.ps1 | iex” - 初始化项目并指定Python版本:
uv init py-app -p 3.11.9 - 创建并激活虚拟环境:
uv venv
source .venv/bin/activate - 安装FastMCP库:
pip install fastmcp
版本推荐
- Python 3.10及以上,支持async/await
- FastMCP库需通过pip安装
Python服务端开发示例
以下为基于FastMCP的MCP服务端完整示例,包含Tool与Resource原语:
from mcp.server.fastmcp import FastMCPmcp = FastMCP("Demo 🚀")@mcp.tool()
def add(a: int, b: int) -> int:"""两个数字相加"""return a + b@mcp.tool()
async def calculate(expression: str) -> str:"""计算一个简单的数学表达式。Args:expression: 要计算的数学表达式(如"1 + 2")Returns:str: 计算结果"""try:result = eval(expression)return f"计算结果: {result}"except Exception as e:return f"计算错误: {str(e)}"@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:"""获取个性化问候语"""return f"Hello, {name}!"if __name__ == "__main__":mcp.run(transport='stdio')
TypeScript 集成
import { MCPServer } from 'mcp-ts';
const server = new MCPServer('GitHubIntegrator');server.registerTool({name: 'search_repos',description: '搜索GitHub仓库',execute: async (query: string) => {// 调用GitHub API}
});