项目简介

'Pixeltable' 主要是一个声明式多模态AI数据基础设施库。在其 'tests' 目录中包含一个名为 'example_mcp_server.py' 的示例程序,它是一个独立的MCP服务器实现。该服务器使用 'fastmcp' 库构建,用于演示如何向LLM客户端提供“工具”功能,允许LLM调用预定义的Python函数。

主要功能点

  • 工具注册与执行: 注册了 'pixelmultiple'(计算两个整数的特定乘积)和 'pixeldict'(处理字典并添加新键值)等工具。这些工具可以被外部LLM客户端通过标准协议调用。
  • JSON-RPC通信: 通过 'mcp.server.fastmcp' 库,该服务器能够通过JSON-RPC协议接收LLM客户端的工具调用请求并返回结果。
  • 会话管理与能力声明: 支持MCP协议的会话管理和能力声明机制,为LLM应用提供上下文服务。

安装步骤

  1. 克隆仓库: 首先,将Pixeltable GitHub仓库克隆到您的本地机器:

    git clone https://github.com/pixeltable/pixeltable.git
    cd pixeltable
  2. 安装依赖: 建议在虚拟环境中安装项目所需的依赖,以避免与系统Python环境冲突:

    # 创建并激活虚拟环境 (可选,但强烈推荐)
    python -m venv venv
    source venv/bin/activate  # macOS/Linux
    # 或在 Windows 上使用: venv\Scripts\activate.bat
    
    # 安装必要的Python库
    # fastmcp 是MCP服务器框架,pixeltable 是客户端库,openai 是为了测试文件中的LLM集成
    pip install fastmcp pixeltable openai

服务器配置 (供MCP客户端使用)

MCP客户端需要以下JSON格式的配置信息来连接此MCP服务器:

{
  "server_name": "PixeltableDemo",
  "command": "python",
  "args": [
    "path/to/pixeltable/tests/example_mcp_server.py"
  ],
  "description": "连接到Pixeltable仓库中提供的MCP示例服务器。此服务器托管了pixelmultiple和pixeldict工具,并使用JSON-RPC协议进行通信。您可以通过该服务器调用预定义的Python工具,例如计算特定数学表达式或处理字典数据。"
}
  • 'server_name': MCP服务器的唯一标识符,客户端将用此名称来引用服务器。
  • 'command': 启动MCP服务器进程的命令,通常是 'python'。
  • 'args': 启动命令的参数列表。其中第一个参数是MCP服务器脚本的路径。请务必将 'path/to/pixeltable' 替换为您的本地 'pixeltable' 仓库的实际根目录路径。
  • 'description': 对此MCP服务器功能的简要说明,帮助LLM客户端理解其提供的能力。

基本使用方法

  1. 启动MCP服务器: 在终端中,导航到 'pixeltable' 仓库的根目录,然后运行以下命令启动MCP服务器:

    python tests/example_mcp_server.py

    服务器将启动并监听来自MCP客户端的请求(默认通过 'streamable-http' 传输协议)。

  2. 在Pixeltable客户端中加载并调用工具(示例): 打开另一个Python环境或脚本(如果之前激活了虚拟环境,请再次激活),您可以使用 'pixeltable' 库作为MCP客户端,加载并调用服务器上注册的工具。

    import pixeltable as pxt
    
    # 从MCP服务器加载工具。服务器地址和端口必须与example_mcp_server.py中配置的匹配。
    # 默认是 http://localhost:8000/mcp。
    mcp_tools = pxt.mcp_udfs('http://localhost:8000/mcp')
    
    # 打印加载到的工具列表,以确认连接成功并识别工具
    print("MCP服务器上可用的工具:", [tool.name for tool in mcp_tools])
    
    # 假设服务器上注册的第一个工具是 'pixelmultiple'
    # 您也可以通过工具名称访问:pixelmultiple_tool = next(t for t in mcp_tools if t.name == 'pixelmultiple')
    pixelmultiple_tool = mcp_tools[0] 
    
    # 创建一个Pixeltable表来演示如何将MCP工具调用集成到数据处理流程中
    t = pxt.create_table('my_llm_app_data', {'val_a': pxt.Int, 'val_b': pxt.Int})
    t.insert([{'val_a': 10, 'val_b': 5}, {'val_a': 20, 'val_b': 3}])
    
    # 将MCP工具的调用结果作为计算列添加到表中
    # 这里,pixelmultiple_tool 接收表中的 val_a 和 val_b 作为参数
    t.add_computed_column(result_from_mcp=pixelmultiple_tool(a=t.val_a, b=t.val_b))
    
    # 查询表,查看工具调用和计算结果
    print(t.select(t.val_a, t.val_b, t.result_from_mcp).collect())
    
    # 预期输出将显示服务器上 pixelmultiple 工具的计算结果:
    # 对于 (10, 5) -> (10 + 22) * 5 = 160
    # 对于 (20, 3) -> (20 + 22) * 3 = 126

信息

分类

AI与计算