此 Node.js 应用程序充当 llama-server 的代理服务器。其主要目的是拦截聊天完成请求,通过模型上下文协议(MCP)增强这些请求,并允许语言模型(LLM)迭代地使用这些工具。
它代理标准的 llama-server GUI 请求(如获取主页)直接到本地的 llama-server 实例,并特别处理 /v1/chat/completions 请求以启用工具交互。
mcp-config.json 中定义的与 MCP 兼容的工具服务器。llama-server 的错误,并为失败的工具执行提供错误消息返回给 LLM 和客户端。LLM 将分析错误并尝试找到可行的方法。llama-server URL 和 MCP 配置路径。@modelcontextprotocol/sdk 依赖项指示)。llama-server: 正在运行的 llama-server 实例(或兼容的类似 OpenAI 的 API 端点)。克隆仓库(或创建项目目录):
# 如果您有 Git 仓库:
# git clone <您的仓库网址>
# cd llama-server_mcp_proxy
# 如果从零开始,请创建一个目录并进入该目录:
mkdir llama-server_mcp_proxy
cd llama-server_mcp_proxy
创建 package.json:
如果没有,请创建一个包含以下内容的 package.json 文件:
{
"name": "llama-server-mcp-proxy",
"version": "1.0.0",
"description": "用于启用 MCP 工具使用的 `llama-server` 代理。",
"main": "llama-server-mcp-proxy.js",
"scripts": {
"start": "node llama-server-mcp-proxy.js"
},
"dependencies": {
"@modelcontextprotocol/sdk": "^1.8.0"
}
}
安装依赖项: 在您的项目目录中运行以下命令以安装必要的包:
npm install
这将使用您的 package.json(以及如果存在且一致的 package-lock.json)来安装 @modelcontextprotocol/sdk。
创建 mcp-config.json:
此文件告诉代理如何连接到您的 MCP 工具服务器。默认情况下,它应该与您的代理脚本(例如 llama-server-mcp-proxy.js)在同一目录下,或者您可以使用 MCP_CONFIG_PATH 环境变量指定其路径。
作为快速启动示例,将 mcp-config.json.example 重命名为 mcp-config.json
mcp-config.json.example:
{
"mcpServers": {
"search1api": {
"command": "npx",
"args": [
"search1api-mcp",
"--port",
"0",
"--api-key",
"YOUR_SEARCH1API_KEY_PLACEHOLDER"
],
"env": {
"DEBUG": "true"
}
},
"another_tool_server": {
"command": "path/to/your/tool/server/executable",
"args": [
"--some-config-for-tool", "value",
"--api-key", "ANOTHER_API_KEY_PLACEHOLDER"
],
"env": {}
}
}
}
mcpServers: 每个键是您工具服务器的唯一名称(例如,“search1api”,“my_custom_tools”)。command: 执行以启动 MCP 工具服务器的命令。这可以是 npx 对于可运行的包,直接指向可执行文件的路径,或脚本。args: 传递给命令的参数数组。
--port 0 通常用于让 MCP 服务器选择可用于 stdio 通信的可用端口。YOUR_SEARCH1API_KEY_PLACEHOLDER 和其他占位符为您实际的 API 密钥或其他必要配置。env: 为 MCP 服务器进程设置的可选环境变量对象。通过复制示例并填写您的真实 API 密钥和路径来创建您的实际 mcp-config.json。
将 mcp-config.json 添加到 .gitignore:
为了防止意外提交敏感的 API 密钥,在项目根目录中创建或更新 .gitignore 文件:
node_modules/
mcp-config.json
*.log
# 添加您想要忽略的其他文件/目录
保存代理代码:
将前面步骤提供的 JavaScript 代理代码保存到一个文件中,例如 llama-server-mcp-proxy.js(如 package.json 中引用的)。
确保 llama-server 正在运行。
代理需要连接到它。默认情况下,它假设 llama-server 在 http://localhost:8080。
启动代理服务器: 在项目目录中打开终端并运行:
npm start
或直接使用 Node:
node llama-server-mcp-proxy.js
您应该看到控制台输出,表明代理已启动,连接了哪些 MCP 服务器,以及可用的工具。
配置环境变量(可选): 您可以通过环境变量自定义代理的行为:
PORT:代理服务器监听的端口(默认:9090)。LLAMA_SERVER_URL:正在运行的 llama-server 实例的 URL(默认:http://localhost:8080)。MCP_CONFIG_PATH:您的 mcp-config.json 文件的完整路径(默认:相对于脚本的 ./mcp-config.json)。MCP_PROXY_DEBUG:设置为 true 以启用详细的调试日志(默认:false)。LLAMA_SERVER_TIMEOUT:对 llama-server 请求的超时时间(毫秒,默认:60000)。示例(Linux/macOS):
PORT=9000 LLAMA_SERVER_URL=http://127.0.0.1:8081 MCP_PROXY_DEBUG=true node llama-server-mcp-proxy.js
示例(Windows PowerShell):
$env:PORT="9000"; $env:LLAMA_SERVER_URL="http://127.0.0.1:8081"; $env:MCP_PROXY_DEBUG="true"; node llama-server-mcp-proxy.js
llama-server 通信的 Web UI)指向代理的地址和端口(例如,如果代理运行在 9090 端口,则为 http://localhost:9090)。TOOL_NAME(ARG_NAME="ARG_VALUE", ...) 或可能是 XML 格式。代理尝试在 LLM 结束当前响应段(由 [DONE] 表示)后,识别 LLM 输出中的两种主要格式的工具调用:
简单函数风格:
示例:news(query="最新的人工智能研究", max_results=3)
XML 风格: