项目简介
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' 文件进行工具函数和服务桥接的配置,易于管理和扩展。
安装步骤
-
克隆仓库:
git clone https://github.com/alkue-com/functions.git cd functions -
安装依赖 (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' 或未配置的工具。
基本使用方法
-
启动 MCP 函数工具服务器 (mcp/server): 打开终端,进入项目根目录,运行以下命令启动 MCP 服务器:
./mcp/server/index.js ./这将启动一个 MCP 服务器,它会加载项目根目录下 'functions.json' 以及 'agents' 目录下的工具函数。
-
启动 HTTP 桥接器 (mcp/bridge): 打开另一个终端,进入项目根目录,运行以下命令启动 HTTP 桥接器:
./mcp/bridge/index.js ./这将启动 HTTP 桥接器,它会读取 'mcp.json' 配置文件,并桥接配置的 MCP 服务器的工具。默认 HTTP 端口为 '8808'。
-
通过 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 格式的参数。
-
-
开发和添加新的工具函数: 你可以在 '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与计算