项目简介

这是一个实现了Model Context Protocol (MCP) 的后端应用,专注于提供一个由大型语言模型 (LLM) 可调用的 Ruby 代码执行工具。它可以部署在Heroku等平台上,通过标准化的JSON-RPC接口(支持Stdio和SSE传输)接收LLM客户端发来的请求,在隔离的环境中执行指定的Ruby代码,并返回执行结果。

主要功能点

  • Ruby代码执行: 接收Ruby代码字符串并在服务器端执行。
  • 依赖管理: 支持在执行前安装指定的Ruby Gems包。
  • 隔离环境: 可选择在临时目录中运行代码和安装依赖,提供一定程度的隔离(非完全安全沙箱)。
  • MCP协议支持: 实现标准的MCP JSON-RPC通信协议。
  • 多传输协议: 支持通过Stdio(标准输入/输出)和SSE(Server-Sent Events)进行通信。
  • 工具暴露: 作为一个MCP工具('code_exec_ruby')供LLM客户端发现和调用。

安装步骤

该服务主要设计用于部署在Heroku平台。

  1. 克隆仓库: 将代码库克隆到本地。
  2. 创建Heroku应用: 使用Heroku CLI创建一个新的应用 ('heroku create <your-app-name>')。
  3. 添加Buildpacks: 添加Ruby和Python Buildpacks。
  4. 配置环境变量: 设置必要的环境变量,特别是'API_KEY'用于SSE模式的认证,以及'STDIO_MODE_ONLY'来控制是否仅启用STDIO模式。
  5. 部署: 将代码推送到Heroku ('git push heroku main')。
  6. 启动Dyno: 根据需要启动'web' dyno(用于SSE)或使用'heroku run'执行一次性'worker' dyno(用于STDIO)。

详细的部署步骤和命令请参考仓库的 'README.md' 文件。

服务器配置(供MCP客户端连接)

MCP客户端需要配置如何连接到此服务器。对于Heroku部署场景,常见的配置方式是指定用于启动服务器进程的命令及其参数,尤其是在使用STDIO模式时(推荐用于隔离执行)。

以下是MCP客户端连接此MCP服务器(以STDIO模式为例,通过Heroku One-Off Dyno运行)可能需要的配置信息结构(JSON格式概念描述,非实际代码):

{
  "name": "heroku-ruby-executor", // 给这个MCP服务器实例取一个标识名称
  "transport": "stdio",          // 指定通信协议为Stdio
  "server": {
    "command": "heroku",         // 启动服务器进程的命令
    "args": [                    // 命令参数
      "run",
      "--app",
      "<your-heroku-app-name>", // 替换为你的Heroku应用名称
      "--",
      "python",                  // 在One-Off Dyno中执行Python命令
      "-m",
      "src.stdio_server"         // 启动服务器的Python模块
    ],
    "env": {                     // 需要传递给服务器进程的环境变量
        "API_KEY": "...",        // 如果STDIO模式也需要API_KEY,则配置;STDIO模式下通常不需要
        "STDIO_MODE_ONLY": "true" // 确保服务器以STDIO模式启动
        // LLM可能需要访问的其他环境变量...
    }
  }
  // 如果使用SSE模式,配置结构会有所不同,通常包含URL和认证信息
  // "transport": "sse",
  // "server": { "url": "https://your-app-name.herokuapp.com/sse" },
  // "authentication": { "type": "bearer", "token": "your-api-key" }
}

MCP客户端使用以上配置信息,便知道如何启动一个Heroku One-Off Dyno并与之建立Stdio连接,进而发送MCP请求并接收响应。

基本使用方法

部署并配置好MCP客户端后,LLM可以通过以下步骤使用此服务:

  1. 发现工具: LLM客户端可以调用MCP的 'list_tools' 方法,查询服务器提供的所有工具及其描述。会返回一个名为 'code_exec_ruby' 的工具信息。
  2. 调用工具: LLM根据 'list_tools' 返回的工具描述,调用MCP的 'call_tool' 方法,指定工具名称 'code_exec_ruby' 并提供参数。
    • 'code' (字符串, 必需): 要执行的Ruby代码字符串。
    • 'packages' (字符串列表, 可选): 执行前需要安装的Ruby Gem名称列表。
    • 'use_temp_dir' (布尔值, 可选, 默认为 False): 如果为 True,则在临时目录中执行代码并安装依赖,提供隔离。
  3. 处理结果: 服务器返回一个包含执行结果的JSON对象,通常包括:
    • 'returncode': Ruby脚本的退出码(0表示成功)。
    • 'stdout': 标准输出内容。
    • 'stderr': 标准错误输出内容或依赖安装错误信息。 LLM解析这些结果来理解代码执行的状态和输出。

信息

分类

开发者工具