项目简介

llm-functions 是一个基于 Model Context Protocol (MCP) 实现的工具函数服务器。它允许开发者将各种功能封装成独立的工具函数,并通过标准的 MCP 协议与 LLM (大型语言模型) 客户端进行交互。该项目不仅提供了一个基础的 MCP 服务器实现,还包含了一个 HTTP 桥接器,可以将多个 MCP 服务器的工具整合并通过 HTTP API 暴露出来,方便集成到各种应用中。

主要功能点

  • 工具函数注册与执行: 支持使用 JavaScript 和 Python 编写工具函数,并通过简单的配置进行注册。服务器能够接收 MCP 客户端的请求,动态执行注册的工具函数。
  • 基于 Stdio 的 MCP 协议通信: 服务器和客户端之间通过标准的 Stdio (标准输入输出) 进行 JSON-RPC 格式的 MCP 协议通信。
  • HTTP 桥接器: 提供一个 HTTP 桥接器,可以将多个独立的 MCP 服务器的工具函数聚合起来,通过统一的 HTTP API 对外提供服务。这使得非 MCP 客户端的应用也能方便地调用这些工具。
  • 多语言工具支持: 工具函数可以使用 JavaScript 或 Python 编写,具备良好的扩展性,方便集成各种功能。
  • 灵活的配置: 通过 'functions.json' 和 'mcp.json' 文件进行工具函数和服务桥接的配置,易于管理和扩展。

安装步骤

  1. 克隆仓库:

    git clone https://github.com/alkue-com/functions.git
    cd functions
  2. 安装依赖 (Node.js 环境): 确保你已安装 Node.js 和 npm。在项目根目录下运行:

    npm install

服务器配置

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

MCP 客户端需要配置连接到 'mcp/server/index.js' 启动的 MCP 服务器。以下是一个典型的 JSON 格式配置示例,你需要告知 MCP 客户端如何启动 'mcp/server/index.js' 服务端程序:

{
  "serverName": "my_function_server",
  "command": "./mcp/server/index.js",
  "args": [
    "./"
  ],
  "cwd": "./",
  "prefix": true  // 是否给工具名称添加前缀,建议开启,避免工具名冲突
}

配置参数说明:

  • 'serverName': 自定义的服务名称,用于在桥接器中区分不同的 MCP 服务器。
  • 'command': 启动 MCP 服务器的命令。这里指向项目根目录下的 'mcp/server/index.js' 脚本。
  • 'args': 传递给启动命令的参数。'"./"' 表示将当前目录 (项目根目录) 作为工具函数根目录传递给 'mcp/server/index.js'。
  • 'cwd': 命令执行的工作目录。这里设置为项目根目录。
  • 'prefix': 是否给桥接后的工具名称添加服务名前缀,建议设置为 'true',以避免不同 MCP 服务器之间工具名称冲突。

HTTP 桥接器配置 (mcp.json):

HTTP 桥接器通过读取 'mcp.json' 文件来配置需要桥接的 MCP 服务器。你需要在项目根目录下创建 'mcp.json' 文件,并配置 'mcpServers' 字段。

{
  "mcpServers": {
    "demo": {  //  MCP 服务器实例名称,可以自定义
      "command": "./mcp/server/index.js", //  启动 MCP 服务器的命令,指向 mcp/server/index.js
      "args": [
        "./" //  传递给 mcp/server/index.js 的参数,这里使用当前目录作为工具根目录
      ],
      "cwd": "./", //  命令执行的工作目录,设置为当前目录
      "prefix": true // 是否给工具名称添加前缀,建议开启
    },
    "json_tool": {  // 另一个 MCP 服务器实例
      "command": "./mcp/server/index.js",
      "args": [
        "./"
      ],
      "cwd": "./",
      "agent": "json-viewer", //  指定 agent 名称,如果 functions.json 中有 agent 字段,则只加载 agent 相关的工具
      "prefix": true
    }
  }
}

配置参数说明:

  • 'mcpServers': 一个 JSON 对象,包含了要桥接的 MCP 服务器实例配置。
  • 每个服务器实例配置 (如 "demo", "json_tool") 都包含以下字段,与 MCP 客户端配置类似:
    • 'command': 启动 MCP 服务器的命令。
    • 'args': 传递给启动命令的参数。
    • 'cwd': 命令执行的工作目录。
    • 'prefix': 是否给工具名称添加服务名前缀。
    • 'agent' (可选): 指定 agent 名称。如果配置此项,'mcp/server/index.js' 启动时会加载 'agents/{agent}/functions.json' 中 'agent' 字段为 'true' 的工具,以及 'functions.json' 中 'agent' 字段为 'false' 或未配置的工具。

基本使用方法

  1. 启动 MCP 函数工具服务器 (mcp/server): 打开终端,进入项目根目录,运行以下命令启动 MCP 服务器:

    ./mcp/server/index.js ./

    这将启动一个 MCP 服务器,它会加载项目根目录下 'functions.json' 以及 'agents' 目录下的工具函数。

  2. 启动 HTTP 桥接器 (mcp/bridge): 打开另一个终端,进入项目根目录,运行以下命令启动 HTTP 桥接器:

    ./mcp/bridge/index.js ./

    这将启动 HTTP 桥接器,它会读取 'mcp.json' 配置文件,并桥接配置的 MCP 服务器的工具。默认 HTTP 端口为 '8808'。

  3. 通过 HTTP API 访问工具 (桥接器): 桥接器启动后,你可以通过 HTTP API 访问聚合后的工具列表和执行工具。

    • 获取工具列表:

      curl http://localhost:8808/tools

      这将返回一个 JSON 数组,包含所有桥接的工具的定义信息。工具名称会带有服务名前缀 (如果 'prefix' 配置为 'true'),例如 'demo_get_ipinfo'。

    • 执行工具:

      curl -X POST http://localhost:8808/tools/demo_get_ipinfo

      或者执行带参数的工具 (例如 'filesystem_write_file' 工具,需要自行添加并配置):

      curl -X POST http://localhost:8808/tools/filesystem_write_file \
        -H 'content-type: application/json' \
        -d '{"path": "/tmp/test.txt", "content": "Hello from HTTP Bridge!"}'

      根据工具的定义,POST 请求的 body 需要提供 JSON 格式的参数。

  4. 开发和添加新的工具函数: 你可以在 'tools' 目录下添加新的 JavaScript 或 Python 文件来创建工具函数。

    • JavaScript 工具: 参考 'tools/demo_js.js' 和 'tools/execute_js_code.js' 的示例。
    • Python 工具: 参考 'tools/demo_py.py' 和 'tools/execute_py_code.py' 的示例。 编写完工具函数后,需要更新 'functions.json' 文件,将新工具函数的信息添加到 'functions' 数组中,以便服务器能够加载和识别它。对于 agent 相关的工具,可以放置在 'agents/{agent_name}/tools.js' 或 'agents/{agent_name}/tools.py' 中,并配置 'agents/{agent_name}/functions.json'。

注意事项

  • 确保 Node.js 环境配置正确,并且已安装必要的 npm 依赖。
  • 'functions.json' 和 'mcp.json' 配置文件需要根据实际情况进行调整。
  • 工具函数的执行环境为 Node.js 或 Python,请确保工具函数依赖的库已安装。
  • HTTP 桥接器默认端口为 '8808',可以通过环境变量 'MCP_BRIDGE_PORT' 进行修改。

信息

分类

AI与计算