轻量级LLM-MCP编排器

一个可配置的服务,用于编排LLM API和微能力协议(MCP)服务器之间的交互,具有动态工具发现和强大的流程管理功能。

  • by doggybee
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 doggybee/llmo

使用说明

轻量级LLM-MCP编排器(LLMO)

一种可配置的服务,协调LLM API和微能力协议(MCP)服务器之间的交互,具有动态工具发现和强大的流程管理功能。

概述

LLMO v1.4是一个后端服务,它:

  1. 管理本地MCP服务器进程(启动、停止、监视)
  2. 通过stdio JSON-RPC从MCP服务器动态发现工具
  3. 将请求路由到不同的LLM提供商
  4. 协调LLM和MCP之间的工具调用
  5. 支持流式响应,实现流畅的对话体验

主要特点

  • 动态工具发现:启动时自动从每个MCP中发现可用工具
  • 配置驱动:LLM提供者和MCP服务器的简单配置
  • 稳健的流程管理:可靠的MCP流程生命周期,优雅的关机
  • 弹性沟通:强大的stdio JSON-RPC通信,具有全面的错误处理功能
  • 工具调用编排:按顺序执行工具调用,并提供详细的错误报告
  • 流媒体支持:响应式用户体验的服务器发送事件(SSE)
  • 结构化日志记录:用于调试和监控的详细上下文丰富的日志记录

需求

  • Node.js 18+(LTS)
  • npm或纱线

安装

  1. 克隆存储库:

    git clone [repository-url]
    cd llmo
    
  2. 安装依赖项:

    npm install
    
  3. 复制示例环境文件并使用API密钥对其进行更新:

    cp .env.example .env
    # Edit .env with your API keys
    
  4. 审查和更新 config.yaml 配置LLM提供程序和MCP服务器的文件。

配置

LLMO v1.4使用YAML或JSON中的简化配置格式:

LLM提供商

配置一个或多个LLM提供程序及其API端点、身份验证和支持的模型。

MCP服务器

仅使用MCP服务器的启动参数进行配置-LLMO将在启动时动态发现其工具。

配置示例

# LLM Providers
llmProviders:
  - name: openai
    apiEndpoint: https://api.openai.com/v1/chat/completions
    authType: bearer
    authEnvVar: OPENAI_API_KEY
    models:
      - gpt-4
      - gpt-3.5-turbo

# MCP Servers (Local Processes)
mcpServers:
  - name: filesystem
    command: npx
    args:
      - -y
      - "@modelcontextprotocol/server-filesystem"
      - "/path/to/directory"
  
  - name: calculator
    command: node
    args: 
      - ./mcp-servers/calculator.js
    env:
      DEBUG: "true"

# Timeouts (in milliseconds)
timeouts:
  mcpResponse: 30000       # 30 seconds
  gracefulShutdown: 5000   # 5 seconds

运行服务

  1. 构建项目:

    npm run build
    
  2. 启动服务器:

    npm start
    

对于自动重新加载的开发:

npm run dev

运作原理

  1. 启动过程:

    • LLMO加载配置并对其进行验证
    • 启动所有已配置的MCP进程
    • 发送 tools/list 请求每个MCP发现可用工具
    • 在内存中缓存工具定义
    • 启动HTTP服务器
  2. 工具发现:

    • 启动时,LLMO发送 tools/list 向每个MCP发送JSON-RPC请求
    • MCP使用其可用工具(名称、描述、参数模式)进行响应
    • LLMO缓存这些定义,并将工具名称映射到其提供的MCP
  3. 聊天请求流:

    • 客户端向发送请求 /chat 端点
    • LLMO根据请求的模型路由到适当的LLM
    • LLMO在LLM请求中包含所有缓存的工具定义
    • 当LLM返回tool_calls时,LLMO:
      • 将工具名称映射到其MCP
      • 发送a tools/call 向相应的MCP提出请求
      • 将MCP的响应(或错误)返回给LLM
    • 流式响应实时转发给客户端

API终点

健康检查

GET /health

返回服务器状态信息。

聊天

POST /chat

主体:

{
  "model": "gpt-4",
  "messages": [
    {"role": "user", "content": "What's in my Documents folder?"}
  ],
  "stream": true
}

错误处理

LLMO实现了标准化的错误处理:

  • 对于非流式响应:带有代码和消息的JSON错误对象
  • 对于流式响应:SSE错误事件
  • 对于工具调用:具有详细消息的特定MCP_*错误类型:
    • MCP_UNAVAILABLE:MCP流程不可用
    • MCP_COMMUNICATION_ERROR:stdio通信错误
    • MCP_TIMEOUT:MCP响应超时
    • MCP_INVALID_RESPONSE:来自MCP的JSON-RPC响应无效

项目结构

该项目组织如下:

  • src/config:配置模式和加载
  • src/process-manager:MCP过程生命周期管理
  • src/mcp-client:标准JSON-RPC通信
  • src/llm-client:LLM API交互
  • src/routes:API端点
  • src/types:TypeScript接口和类型
  • src/utils:共享公用设施

许可证

麻省理工学院