MCP之旅
我的MCP学习之旅中的笔记、示例和实验
高水平的MCP(多路径控制协议/某种特定领域的高级MCP,具体含义需根据上下文确定)
大型语言模型(LLMs)功能极其强大,但它们面临两大关键限制:
- 它们的知识在训练时就被固定下来了。
- 它们无法直接与外部系统或现实世界的数据进行交互。
2024年11月,Anthropic推出了模型上下文协议(MCP),以应对这些挑战。 MCP是一种开放标准,它为大型语言模型(LLMs)提供了一种安全且一致的方式,以连接外部数据源、应用程序和服务。
通过使用MCP,大型语言模型(LLMs)可以:
- 获取最新、真实的现实世界数据
- 在外部系统中执行操作
- 利用超出其训练范围的专业工具或功能
MCP 架构概述
MCP生态系统包含三个主要组成部分:
- MCP 主机协调和管理一个或多个MCP客户端的人工智能应用程序。
- MCP 客户端连接到MCP服务器并检索MCP主机的上下文数据。
- MCP服务器向客户端提供上下文信息或操作。
每个 MCP客户端 保持一个 专属的一对一连接 各具其相应的 MCP服务器使主机能够与多个服务器无缝通信。
MCP服务器可以运行 本地地 或者 远程地:
- 本地示例当Claude Desktop使用STDIO传输方式启动文件系统服务器时(在同台机器上运行)。
- 远程示例官方的Sentry MCP服务器,它基于Sentry平台运行,使用HTTP流传输协议。
MCP层
数据层
使用基于JSON-RPC 2.0的协议定义消息结构和语义,以实现客户端和服务器之间的一致通信。
传输层
负责处理MCP参与者之间的连接建立、身份验证和安全通信。它管理消息的传输和帧格式化方式。
支持的传输协议
- STDIO 传输使用标准输入/输出流作为默认传输方式。
- HTTP流传输使用HTTP POST进行客户端到服务器的消息传递,并可选地使用服务器发送事件(SSE)进行流式更新。
快速MCP(多通道板)
FastMCP是构建MCP(模型上下文协议)应用程序的标准框架。模型上下文协议(MCP)提供了一种标准化的方式,用于将大型语言模型(LLM)连接到工具和数据,而FastMCP则通过简洁、Python化的代码,使其能够直接投入生产环境使用。
安装
建议使用uv来安装和管理FastMCP。或者,您也可以使用pip。
pip install fastmcp
验证安装
fastmcp version
快速入门
创建一个FastMCP服务器
mcp-hello/hello_server.py 翻译为中文是:mcp-hello/问候服务器.py 一个简单的MCP服务器,用于响应问候消息。
运行服务器
python hello_server.py
创建一个FastMCP客户端
mcp-hello/hello_client.py 翻译为中文是:mcp-hello/问候客户端.py 一个简单的MCP客户端,用于连接服务器并请求问候语。
运行客户端
python hello_client.py
核心服务器功能
- 工具AI应用程序可调用的可执行函数,以执行操作(例如,文件操作、API调用、数据库查询)
- 资源为人工智能应用提供上下文信息的数据源(例如,文件内容、数据库记录、API响应)
- 提示(或触发词)可重用的模板,有助于构建与语言模型的交互结构(例如,系统提示、少量示例)
核心客户端功能
- 采样采样允许服务器通过客户端请求大型语言模型(LLM)的完成,从而实现一种自主的工作流程。这种方法使客户端能够完全控制用户权限和安全措施
- 根部根目录允许客户端指定服务器应关注的目录,通过协调机制传达预期的作用范围。
- 引出(或诱发)引出(或提示)功能使服务器能够在与用户的交互过程中请求特定信息,为服务器按需收集信息提供了一种结构化的方式。
FastMCP 客户端
- 通过类型安全、Pythonic的接口与MCP服务器进行交互的程序化客户端。
- \
fastmcp.Client\类提供了一个程序化接口,用于与任何模型上下文协议(MCP)服务器进行交互,自动处理协议细节和连接管理。 - 它在多种场景中都有帮助,包括:
- 在开发过程中测试MCP服务器 - 构建需要可靠MCP交互的确定性应用程序 - 为基于智能体或大型语言模型(LLM)的客户端创建具有结构化、类型安全操作的基础
- 所有客户端操作都需要使用异步上下文管理器(async with)来正确管理连接的生命周期。
CallToolResult 对象概述
当使用MCP客户端调用工具时(例如,通过client.call_tool()),它会返回一个CallToolResult对象——这是一个结构化的响应,包含工具的输出和相关的元数据。
*属性*
| 属性 | 描述 |
|---|---|
| data | 工具执行的最终、未封装结果,以最易访问的格式呈现。 |
| 内容 | 服务器返回的一系列符合MCP标准的内容模块(例如,文本内容、图片内容、音频内容等)的列表。 |
| structured_content | 由支持结构化输出的MCP服务器提供的标准JSON可序列化输出(字典或列表)。最适合大多数实际应用场景。 |
| is_error | 布尔标志,指示工具执行是否失败(True = 错误)。 |
使用提示
- 当你需要在代码中直接访问数据字段时,请使用structured_content。
- 当你需要可读或可打印的输出时,请使用 content\[0\].text。
result = client.call_tool("summarize_data", {"file_path": "data.csv"})
# Structured content (for data access)
print(result.structured_content)
# Readable output
print(result.content[0].text)示例:使用FastMCP的AI数据助手
一个基于FastMCP框架构建的AI数据助手,能够通过标准化的模型上下文协议(MCP)工具分析CSV数据集。
