模型上下文协议(MCP)是一个开放协议,用于标准化应用程序如何向LLM提供上下文。换句话说,它为基于LLM的应用程序提供了一个统一的框架,以便连接到数据源、获取上下文、使用工具并执行标准提示。

MCP生态系统概述了三个特定组件:
MCP服务器处理:工具可用性(暴露哪些功能可用)、工具执行(在请求时运行这些功能)、静态内容作为资源(提供可以引用的数据)、预设提示(常见任务的标准模板)
客户端管理:与服务器的连接、LLM集成、组件之间的消息传递
主机提供:前端界面、向用户展示MCP功能、整个生态系统中的集成点
这种架构创建了一个模块化系统,其中不同的组件可以独立开发,同时保持互操作性。这使得用户可以为不同LLM相关功能制作MCP服务器,然后在各种支持的应用程序中插拔使用。通常用于集成服务API和工具,或连接到您机器上的本地数据源。
MCP服务器通过定义良好的接口暴露标准化的能力,构成了该协议的基础。主机和客户端可以使用协议标准连接到这些服务器,但这些能力如何呈现给用户仍然灵活且对开发者开放。这意味着实际实现和用户体验完全取决于开发者——无论是通过命令行界面、图形应用程序还是嵌入更大的系统中。
在这份指南中,我们将专注于构建一个具有核心功能的示例MCP服务器,以及一个简单的客户端实现来演示交互模式。首先,让我们了解一下MCP服务器的主要组件:

工具是LLM可以调用以执行动作或检索信息的功能。每个工具都定义如下:
{
name: string; // 工具的唯一标识符
description?: string; // 可读描述
inputSchema: { // 工具参数的JSON Schema
type: "object",
properties: { ... } // 工具特定的参数
}
}
工具允许LLM与外部系统交互、执行代码、查询数据库或进行计算。它们代表具有效果或计算新信息的动作。
资源表示客户端应用程序可以访问的数据源。它们由URI标识,并可以包括:
{
uri: string; // 资源的唯一标识符
name: string; // 可读名称
description?: string; // 可选描述
mimeType?: string; // 可选MIME类型
}
资源可以是静态的(如配置文件)或动态的(如数据库记录或API响应)。它们为LLM提供上下文,而无需调用函数。
提示是可重用的模板,定义了特定的交互模式。它们允许服务器暴露标准化的对话流程:
{
name: string; // 提示的唯一标识符
description?: string; // 可读描述
arguments?: [ // 可选参数列表
{
name: string; // 参数标识符
description?: string; // 参数描述
required?: boolean; // 参数是否必需
}
]
}
提示有助于创建一致的、针对特定用途的交互,用于常见的任务,允许用户通过UI元素(如斜杠命令)调用它们。
注意:虽然工具专门设计用于LLM交互(类似于函数调用),但在MCP生态系统中,提示和资源有不同的用途。提示通常是用户控制的模板,可以通过UI元素(如斜杠命令)直接调用,而资源是由应用程序控制的数据源,在被包含在LLM上下文中之前可能会呈现给用户选择。
更多详情和附加功能可以在MCP官方文档中找到。
我们的MCP服务器将突出显示工具、资源和提示。核心概念是创建一个简单的知识库聊天机器人流程,该流程将具有以下功能:

上述图表在mcp_server.py中实现,对应的是一个简单的CLI客户端client.py。
作为一个有用的资源,请查看MCP的服务器列表,了解官方集成和社区制作的服务器。
git clone https://github.com/ALucek/quick-mcp-example.git
cd quick-mcp-example
按照MCP_setup.ipynb中的说明创建向量数据库并将PDF嵌入其中。
# 使用uv(推荐)
uv venv
source .venv/bin/activate # 在macOS/Linux上
# 或者
.venv\Scripts\activate # 在Windows上
# 安装依赖项
uv sync
python client.py mcp_server.py