返回市场
llama服务器_mcp代理

llama服务器_mcp代理

作者:extopico15 星标更新:2025-05-10

项目介绍

Llama-Server MCP 代理

此 Node.js 应用程序充当 llama-server 的代理服务器。其主要目的是拦截聊天完成请求,通过模型上下文协议(MCP)增强这些请求,并允许语言模型(LLM)迭代地使用这些工具。

它代理标准的 llama-server GUI 请求(如获取主页)直接到本地的 llama-server 实例,并特别处理 /v1/chat/completions 请求以启用工具交互。

当前状态

  • brave 搜索工作正常
  • search1 API 工作正常
  • 文件系统访问存在问题,取决于所使用的模型
  • puppeteer

主要特性

  • MCP 工具集成: 连接到在 mcp-config.json 中定义的与 MCP 兼容的工具服务器。
  • 动态系统提示: 自动生成一个系统提示,列出可用工具及其描述,并将其注入到 LLM 的上下文中。
  • 迭代工具使用: 允许 LLM 在单个用户回合中多次调用工具。代理处理请求-响应流程:
    1. LLM 表明一个工具调用。
    2. 代理检测并解析工具调用。
    3. 代理通过适当的 MCP 客户端执行工具。
    4. 代理将工具的结果返回给 LLM。
    5. LLM 使用结果继续其响应或调用另一个工具。
  • 流支持: 维持 LLM 响应(服务端发送事件)到客户端的流,包括中间消息如“[执行工具...]”和工具结果。
  • 错误处理: 转发来自 llama-server 的错误,并为失败的工具执行提供错误消息返回给 LLM 和客户端。LLM 将分析错误并尝试找到可行的方法。
  • 可配置性: 使用环境变量设置端口、llama-server URL 和 MCP 配置路径。
  • 调试日志: 通过环境变量选择启用详细的调试日志。

前提条件

  • Node.js: 版本 18 或更高(由 @modelcontextprotocol/sdk 依赖项指示)。
  • llama-server 正在运行的 llama-server 实例(或兼容的类似 OpenAI 的 API 端点)。
  • MCP 工具服务器: 一个或多个您希望 LLM 访问的与 MCP 兼容的工具服务器。

设置

  1. 克隆仓库(或创建项目目录):

    # 如果您有 Git 仓库:
    # git clone <您的仓库网址>
    # cd llama-server_mcp_proxy
    
    # 如果从零开始,请创建一个目录并进入该目录:
    mkdir llama-server_mcp_proxy
    cd llama-server_mcp_proxy
    
  2. 创建 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"
      }
    }
    
  3. 安装依赖项: 在您的项目目录中运行以下命令以安装必要的包:

    npm install
    

    这将使用您的 package.json(以及如果存在且一致的 package-lock.json)来安装 @modelcontextprotocol/sdk

  4. 创建 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

  5. mcp-config.json 添加到 .gitignore 为了防止意外提交敏感的 API 密钥,在项目根目录中创建或更新 .gitignore 文件:

    node_modules/
    mcp-config.json
    *.log
    # 添加您想要忽略的其他文件/目录
    
  6. 保存代理代码: 将前面步骤提供的 JavaScript 代理代码保存到一个文件中,例如 llama-server-mcp-proxy.js(如 package.json 中引用的)。

运行代理

  1. 确保 llama-server 正在运行。 代理需要连接到它。默认情况下,它假设 llama-serverhttp://localhost:8080

  2. 启动代理服务器: 在项目目录中打开终端并运行:

    npm start
    

    或直接使用 Node:

    node llama-server-mcp-proxy.js
    

    您应该看到控制台输出,表明代理已启动,连接了哪些 MCP 服务器,以及可用的工具。

  3. 配置环境变量(可选): 您可以通过环境变量自定义代理的行为:

    • 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
    

使用

  1. 一旦代理服务器运行,将您的 LLM GUI 客户端(例如,通过浏览器访问通常与 llama-server 通信的 Web UI)指向代理的地址和端口(例如,如果代理运行在 9090 端口,则为 http://localhost:9090)。
  2. 如常与 LLM 互动。
  3. 当您要求 LLM 执行一个可能受益于配置工具的任务时,它应该:
    • 表明其使用工具的意图。
    • 输出一个工具调用,格式为 TOOL_NAME(ARG_NAME="ARG_VALUE", ...) 或可能是 XML 格式。
  4. 代理将:
    • 检测这个工具调用。
    • 显示“[执行工具:TOOL_NAME...]”消息在流中。
    • 执行工具。
    • 显示“[工具结果为 TOOL_NAME]:...RAW_RESULT...”消息在流中。
    • 将结果反馈给 LLM。
  5. LLM 将使用工具的结果来制定其最终响应或决定调用另一个工具。

识别的工具调用格式

代理尝试在 LLM 结束当前响应段(由 [DONE] 表示)后,识别 LLM 输出中的两种主要格式的工具调用:

  1. 简单函数风格:

    示例:news(query="最新的人工智能研究", max_results=3)

  2. XML 风格: