使用说明

项目简介

本项目是一个演示性质的MCP服务器实现,展示了如何通过“数据句柄”(Data Handles)来管理和操作 pandas DataFrame。与直接将大量数据返回给LLM不同,该服务器返回和接收数据句柄(UUID字符串),句柄指向存储在服务器内存中的数据。这种方式可以有效减少数据传输量,并允许LLM通过句柄调用不同的工具来操作数据。

项目提供了两种工具API的实现方式:

  1. 简化的 DataFrame 抽象 API: 提供预定义的一组常用 DataFrame 操作,接口安全可控,适用于基础数据操作。
  2. 通用的 Pandas 操作 API: 允许执行任意 pandas 代码,功能更灵活,但需注意安全风险。

主要功能点

  • 资源管理 (Resources): 使用数据句柄在服务器端内存中托管和管理 pandas DataFrame。
  • 工具注册和执行 (Tools):
    • DataFrame 抽象 API: 提供 'query_database', 'combine_columns', 'join_dataframes', 'get_shape', 'get_head', 'get_top_n_rows' 等工具,用于常见的 DataFrame 操作。
    • 通用 Pandas API: 提供 'query_database', 'execute_pandas_code', 'materialize_dataframe', 'get_shape' 等工具,允许执行任意 Pandas 代码,并能将 DataFrame 数据以多种格式(字符串、JSON、CSV)返回给客户端。
  • 会话管理: 通过句柄在服务器端维护会话状态,LLM客户端可以通过句柄引用之前操作的数据。
  • 能力声明: 通过 MCP 协议声明服务器提供的工具和功能。
  • 多种传输协议支持: 默认使用 Stdio (标准输入输出) 作为传输协议。

安装步骤

  1. 克隆仓库: 将 GitHub 仓库 'https://github.com/EvanOman/mcp-data-handles' 克隆到本地。
    git clone https://github.com/EvanOman/mcp-data-handles
    cd mcp-data-handles
  2. 安装依赖: 建议使用 'uv' 或 'pip' 等工具创建虚拟环境并安装项目依赖。
    # 使用 uv (如果已安装 uv):
    uv venv
    uv pip install -r requirements.txt
    
    # 或者使用 pip:
    python -m venv venv
    source venv/bin/activate  # 或 venv\Scripts\activate (Windows)
    pip install -r requirements.txt

服务器配置

MCP 客户端需要配置 MCP 服务器的启动命令和参数才能连接。以下是针对本项目提供的两种服务器实现的配置示例 (JSON 格式):

1. DataFrame 抽象 API 服务器配置 (df-abstractions-handler-demo):

{
  "serverName": "df-abstractions-handler-demo",
  "command": "uv",
  "args": [
    "run",
    "-m",
    "mcp_handles_server.df_abstractions"
  ]
}
  • serverName: 服务器名称,客户端用于标识和引用该服务器。
  • command: 启动服务器的命令,这里使用 'uv run' (或 'python -m' 如果使用 pip)。
  • args: 传递给命令的参数列表:
    • '"run"': 'uv' 的运行命令。
    • '"-m"': Python 模块参数,表示运行一个模块。
    • '"mcp_handles_server.df_abstractions"': 要运行的 Python 模块,指向 'mcp_handles_server' 目录下的 'df_abstractions.py' 文件,该文件实现了 DataFrame 抽象 API 服务器。

2. 通用 Pandas API 服务器配置 (generic-pandas-handler-demo):

{
  "serverName": "generic-pandas-handler-demo",
  "command": "uv",
  "args": [
    "run",
    "-m",
    "mcp_handles_server.pandas_generic"
  ]
}
  • 配置与 DataFrame 抽象 API 服务器类似,主要区别在于 'args' 中指定的模块为 '"mcp_handles_server.pandas_generic"',指向 'pandas_generic.py' 文件,该文件实现了通用 Pandas API 服务器。

注意:

  • 'command' 和 'args' 需要根据你的实际环境进行调整。例如,如果未使用 'uv',可以将 'command' 更改为 'python' 或 'python3',并相应调整 'args'。
  • 确保 MCP 客户端能够找到并执行配置的 'command'。如果 'uv' 或 'python' 不在系统 PATH 环境变量中,需要提供完整的路径。
  • 配置中的 'serverName' 字段可以自定义,但在客户端引用时需要保持一致。

基本使用方法

  1. 启动服务器: 根据你选择的 API 类型,运行相应的命令来启动 MCP 服务器。

    • DataFrame 抽象 API 服务器:
      uv run -m mcp_handles_server.df_abstractions
    • 通用 Pandas API 服务器:
      uv run -m mcp_handles_server.pandas_generic

    服务器成功启动后,会监听来自 MCP 客户端的请求。

  2. 配置 MCP 客户端: 在你的 MCP 客户端(例如 MCP Inspector, Claude Desktop, 或 OpenAI Agents SDK)中,根据上述 "服务器配置" 部分的说明,添加或配置 MCP 服务器连接信息,选择相应的 'serverName' 和配置。

  3. 使用客户端与服务器交互: 通过 MCP 客户端向服务器发送请求,例如:

    • 使用 'query_database' 工具加载数据表并获取数据句柄。
    • 使用其他工具(如 'combine_columns', 'join_dataframes', 'execute_pandas_code' 等)和数据句柄来操作数据。
    • 使用 'materialize_dataframe' 工具将数据句柄指向的 DataFrame 数据以指定格式返回给客户端。

    具体操作方式取决于你使用的 MCP 客户端的功能和界面。可以参考仓库 README 中提供的 MCP Inspector, Claude Desktop 和 OpenAI Agents SDK 的使用示例。

安全提示: 通用 Pandas API ('pandas_generic.py') 提供了 'execute_pandas_code' 工具,允许执行任意 Python 代码,在生产环境中使用时存在严重的安全风险,请务必谨慎评估和采取必要的安全措施 (例如沙箱隔离)。 DataFrame 抽象 API ('df_abstractions.py') 提供了更安全、可控的接口,推荐在对安全性有较高要求的场景中使用。

信息

分类

数据库与文件