简介
Model Context Protocol (MCP)是一种开源标准,用于连接AI应用与外部系统。它采用客户端-服务器架构,由数据层和传输层组成,提供工具、资源、提示等核心原语。MCP交互流程包括初始化、工具发现、执行和更新。通过MCP,AI应用可以访问文件系统、数据库、API等外部资源并执行特定任务。FastMCP作为标准框架,提供简洁的Pythonic代码,帮助开发者高效构建MCP应用程序,实现大模型与外部系统的无缝集成。
Model Context Protocol (MCP),即****模型上下文协议,是一种开源标准,用于连接AI 应用程序(如 Claude 或 ChatGPT)与外部系统。 通过连接这些外部系统,MCP 使 AI 能够访问关键信息并执行任务:
数据源: 例如本地文件、数据库等。
工具: 例如搜索引擎、计算器等。
工作流程: 例如专业的提示(Specialized Prompts)。
MCP 核心概念 (Core Concepts)
https://modelcontextprotocol.io/docs/develop/connect-local-servers
MCP 遵循客户端-服务器(Client-Server)架构,主要参与者和分层如下:

参与者 (Participants)
MCP 主机 (Host): 即 AI 应用程序(如 Claude Code),它协调和管理一个或多个 MCP 客户端。
MCP 客户端 (Client): 维护与 MCP 服务器的连接,并从服务器获取上下文供主机使用。
MCP 服务器 (Server): 提供上下文数据给 MCP 客户端的程序,可以本地或远程运行。

一个 MCP 主机可以连接多个 MCP 服务器,但通过每个 MCP 客户端与对应的 MCP 服务器之间维持一对一的专用连接。
架构分层 (Layers)
MCP 由两个抽象层组成:
| 分层 | 作用描述 |
| 数据层 (Data Layer) | 内层。定义基于JSON-RPC 2.0的协议,用于客户端-服务器通信,包括生命周期管理、核心原语(工具、资源、提示)和通知。 |
| 传输层 (Transport Layer) | 外层。定义实现数据交换的通信机制和通道,包括连接建立、消息分帧和授权。 |
传输层机制:
Stdio 传输: 使用标准输入/输出流,适用于同一机器上的本地进程间通信。
流式 HTTP 传输 (Streamable HTTP): 使用 HTTP POST,支持远程服务器通信和标准 HTTP 身份验证(如 OAuth)。
MCP 是一个有状态协议,需要生命周期管理。其核心目的是通过 initialize 请求协商客户端和服务器双方支持的能力 (Capabilities),确保协议版本兼容性,并进行身份信息交换。
核心原语 (Primitives)
原语是 MCP 中最重要的概念,它们定义了客户端和服务器可以互相提供的功能和上下文信息。
| 原语类型 | 角色 | 功能描述 | 示例 |
| 工具 (Tools) | 服务器提供 | 可执行函数,AI 应用程序可以调用它来执行操作(例如:文件操作、API 调用、数据库查询)。 | tools/list (发现) 和tools/call(执行) |
| 资源 (Resources) | 服务器提供 | 提供上下文数据的来源(例如:文件内容、数据库记录、API 响应)。 | resources/list 和resources/get |
| 提示 (Prompts) | 服务器提供 | 可重用的模板,用于构建与语言模型的交互(例如:系统提示、少样本示例)。 | |
| 采样 (Sampling) | 客户端提供 | 允许服务器向客户端请求语言模型完成(LLM completions),使服务器保持模型独立性。 | sampling/complete |
| 引发 (Elicitation) | 客户端提供 | 允许服务器请求用户提供额外信息或确认操作。 | elicitation/request |
| 日志 (Logging) | 客户端提供 | 允许服务器向客户端发送日志消息进行调试和监控。 |
MCP交互示例概览
一个典型的 MCP 交互流程如下:
初始化 (Initialization): 客户端发送 initialize 请求,协商协议版本和双方支持的能力(例如,客户端支持 elicitation,服务器支持 tools 和 resources)。
工具发现 (Tool Discovery): 连接建立后,客户端发送 tools/list 请求,获取服务器提供的所有工具的详细元数据(名称、描述、输入 inputSchema 等)。
工具执行 (Tool Execution): AI 应用程序的 LLM 决定使用工具时,客户端发送 tools/call 请求,指定工具名称和参数,服务器执行后返回包含 content 数组的结果。
实时更新 (Notifications): 如果服务器的工具列表发生变化,它会发送 notifications/tools/list_changed 通知(无 ID,无响应),客户端收到后通常会再次调用 tools/list 来刷新其工具注册表。

理解 MCP 服务器
MCP 服务器是程序,它通过标准化的协议接口,向 AI 应用程序公开特定的能力。
常见的 MCP 服务器示例包括:用于文档访问的文件系统服务器、用于数据查询的数据库服务器、用于代码管理的 GitHub 服务器、用于团队沟通的 Slack 服务器以及用于日程安排的日历服务器。
MCP 服务器主要通过以下三个核心构建模块提供功能:
| 功能模块 | 解释 | 示例 | 控制者 |
| 工具 (Tools) | 函数 ,LLM 可以根据用户请求主动调用并决定何时使用它们。工具可以写入数据库、调用外部 API、修改文件或触发其他逻辑。 | 搜索航班、发送消息、创建日历事件。 | 模型 (Model) |
| 资源 (Resources) | 被动数据源 ,提供信息的只读访问,作为上下文(Context),例如文件内容、数据库 Schema 或 API 文档。 | 检索文档、访问知识库、读取日历。 | 应用程序 (Application) |
| 提示 (Prompts) | 预设的指令模板 ,指导模型使用特定的工具和资源来完成复杂的工作流程。 | 计划假期、总结会议、起草邮件。 | 用户 (User) |
理解 MCP 客户端
MCP 客户端由宿主应用程序(Host Application,例如 Claude.ai 或一个 IDE)实例化,用于与特定的 MCP 服务器进行通信。宿主应用管理整体用户体验并协调多个客户端,而每个客户端负责与一个服务器进行一次直接通信。
除了利用服务器提供的上下文(Tools, Resources, Prompts)外,客户端还必须向服务器提供一些核心功能,以支持更丰富的交互:
| 功能模块 | 解释 | 示例 |
| 采样 (Sampling) | 允许服务器通过客户端请求 LLM 完成(LLM completions),使服务器能执行依赖 AI 的任务,同时将安全和权限控制权完全交给客户端。 | 旅行预订服务器将航班列表发送给 LLM,请求 LLM 推荐最佳航班。 |
| 根目录 (Roots) | 客户端指定服务器应关注的文件系统边界,通过协调机制传达预期的范围(Scope)。 | 客户端允许旅行预订服务器访问包含用户日历的特定目录。 |
| 引发 (Elicitation) | 允许服务器在交互过程中按需请求用户提供特定信息,以结构化的方式动态收集数据。 | 旅行预订服务器请求用户确认座位偏好、房间类型或联系电话以完成预订。 |
FastMCP
FastMCP 是一个旨在实现 MCP 应用程序的标准框架。它提供简洁、Pythonic(Python 风格) 的代码,使开发者能够更高效、更便捷地构建、部署和集成 MCP 应用程序和服务器。
- MCP Server
from fastmcp import FastMCPmcp = FastMCP("Demo 🚀")@mcp.tooldef add(a: int, b: int) -> int: """Add two numbers""" return a + bif __name__ == "__main__": mcp.run()
- MCP Client
import asynciofrom fastmcp import Clientclient = Client("http://localhost:8000/mcp")async def call_tool(name: str): async with client: result = await client.call_tool("greet", {"name": name}) print(result)asyncio.run(call_tool("Ford"))
FastMCP Server 使用
https://gofastmcp.com/servers/server
FastMCP 类是构建 MCP 应用程序的核心,它作为应用程序的中心容器,用于存放工具 (Tools)、资源 (Resources) 和提示 (Prompts),并负责管理与 MCP 客户端的通信。
- 定义工具说明
@mcp.tool( name="find_products", # Custom tool name for the LLM description="Search the product catalog with optional category filtering.", # Custom description tags={"catalog", "search"}, # Optional tags for organization/filtering meta={"version": "1.2", "author": "product-team"} # Custom metadata)def search_products_implementation(query: str, category: str | None = None) -> list[dict]: """Internal function description (ignored if description is provided above).""" # Implementation... print(f"Searching for '{query}' in category '{category}'") return [{"id": 2, "name": "Another Product"}]
- 定义工具参数
@mcp.tooldef analyze_text( text: str, max_tokens: int = 100, language: str | None = None) -> dict: """Analyze the provided text.""" # Implementation...
- 定义资源
@mcp.resource("data://config")def get_config() -> dict: """Provides application configuration as JSON.""" return { "theme": "dark", "version": "1.2.0", "features": ["tools", "resources"], }
- 定义资源模板
@mcp.resource("weather://{city}/current")def get_weather(city: str) -> dict: """Provides weather information for a specific city.""" # In a real implementation, this would call a weather API # Here we're using simplified logic for example purposes return { "city": city.capitalize(), "temperature": 22, "condition": "Sunny", "unit": "celsius" }
- 定义提示词
-
@mcp.prompt( name="analyze_data_request", # Custom prompt name description="Creates a request to analyze data with specific parameters", # Custom description tags={"analysis", "data"}, # Optional categorization tags meta={"version": "1.1", "author": "data-team"} # Custom metadata)def data_analysis_prompt( data_uri: str = Field(description="The URI of the resource containing the data."), analysis_type: str = Field(default="summary", description="Type of analysis.")) -> str: """This docstring is ignored when description is provided.""" return f"Please perform a '{analysis_type}' analysis on the data found at {data_uri}."AI大模型学习福利
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量
MCP协议与FastMCP框架详解
1474

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



