Standardizing LLM Interaction with MCP Servers

Standardizing LLM Interaction with MCP Servers

一个简短精炼的 MCP 服务器/客户端工具、资源和提示实现示例。

ALucek

研究与数据
访问服务器

README

使用 MCP 服务器标准化 LLM 交互

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

<img src="./media/mcp_arch.png" width=600>

MCP 生态系统概述了三个特定组件:

  • MCP 服务器 处理:工具可用性(公开可用的功能)、工具执行(在请求时运行这些功能)、作为资源的静态内容(提供可以引用的数据)、预设提示(用于常见任务的标准化模板)

  • 客户端 管理:与服务器的连接、LLM 集成、组件之间的消息传递

  • 主机 提供:前端界面、向用户呈现 MCP 功能、整体生态系统的集成点

这种架构创建了一个模块化系统,不同的组件可以独立开发,同时保持互操作性。这让用户可以为不同的 LLM 相关功能创建 MCP 服务器,然后在各种受支持的应用程序中即插即用。通常用于集成服务 API 和工具,或连接到您自己机器上的本地数据源。

MCP 服务器组件

MCP 服务器通过明确定义的接口公开标准化功能,从而构成协议的基础。主机和客户端可以使用协议标准连接到这些服务器,但如何向用户呈现这些功能仍然是灵活的,并且对开发人员开放。这意味着实际的实现和用户体验完全取决于开发人员 - 无论是通过命令行界面、图形应用程序还是嵌入在更大的系统中。

在本指南中,我们将重点构建一个具有核心功能的示例 MCP 服务器,以及一个简单的客户端实现来演示交互模式。首先,让我们回顾一下 MCP 服务器的主要组件:

<img src="./media/core_comp.png" width=600>

工具

工具是 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 服务器将突出显示工具、资源和提示。核心概念是创建一个简单的知识库聊天机器人流程,它将具有以下功能:

  1. 让 LLM 使用工具查询向量数据库以获取 RAG 响应
  2. 让用户选择现有资源以提供上下文
  3. 让用户执行标准提示以进行更复杂的分析工作流程

<img src="./media/mcp_plan.png" width=600>

上面的图表是在 mcp_server.py 中实现的,并在 client.py 中有一个相应的简单 CLI 客户端。

作为一个有用的资源,请查看 MCP 的服务器列表,以获取官方集成和社区制作的服务器。


设置和安装

  1. 克隆存储库
git clone https://github.com/ALucek/quick-mcp-example.git
cd quick-mcp-example
  1. 创建 ChromaDB 数据库

按照 MCP_setup.ipynb 中的说明创建向量数据库并将 PDF 嵌入其中。

  1. 创建虚拟环境并安装软件包
# 使用 uv (推荐)
uv venv
source .venv/bin/activate  # 在 macOS/Linux 上
# OR
.venv\Scripts\activate     # 在 Windows 上

# 安装依赖项
uv sync
  1. 运行客户端和服务器
python client.py mcp_server.py

推荐服务器

Crypto Price & Market Analysis MCP Server

Crypto Price & Market Analysis MCP Server

一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。

精选
TypeScript
MCP PubMed Search

MCP PubMed Search

用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。

精选
Python
mixpanel

mixpanel

连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。

精选
TypeScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Nefino MCP Server

Nefino MCP Server

为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。

官方
Python
Vectorize

Vectorize

将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。

官方
JavaScript
Mathematica Documentation MCP server

Mathematica Documentation MCP server

一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。

本地
Python
kb-mcp-server

kb-mcp-server

一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。

本地
Python
Research MCP Server

Research MCP Server

这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

本地
Python
Cryo MCP Server

Cryo MCP Server

一个API服务器,实现了模型补全协议(MCP),用于Cryo区块链数据提取,允许用户通过任何兼容MCP的客户端查询以太坊区块链数据。

本地
Python