后台任务管理服务

一个基于Model Context Protocol (MCP)的后台任务管理服务,用于启动、监控和终止长期运行的shell命令,适用于AI助手或其他MCP客户端管理开发者工具。

  • by drhurd
  • Rust
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 drhurd/mcp_backgroundr

使用说明

后台任务 MCP 服务器

这个项目暴露了一个模型上下文协议(MCP)服务器,使得MCP-aware(即对MCP有感知能力的)组件能够 客户端用于启动、监控和终止长期运行的shell命令。它非常方便 保持语言服务器或其他开发者工具在后台运行的方法 来自AI助手或任何其他MCP客户端内部。

先决条件

  • Rust 工具链 (1.80+ 推荐)。
  • 无论你计划启动哪种背景工具,例如:
    • python安装一个语言服务器,例如 pyright-langserver (npm install -g pyright)或 pylsp (pip install "python-lsp-server[all]")。
    • **Rust(一种编程语言)**确保 rust-analyzer 可用的 (rustup component add rust-analyzer)。

构建和运行MCP服务器

cargo build --release
./target/release/mcp_backgroundr

或者,可以跳过单独的构建步骤直接运行它:

cargo run --release

服务器通过标准输入输出(stdio)使用MCP协议通信,因此请保持进程运行并连接到它 从您选择的MCP客户端(例如, npx @modelcontextprotocol/client-cli --stdio)。

可用工具

工具名称 用途
run_background_task 启动一个shell命令并开始捕获标准输出/标准错误。
get_task_status 返回命令、生命周期状态、退出代码以及最近的输出。
end_background_task 请求终止正在运行的任务。

输出已截断至最近几行(可根据请求配置)以保持 响应简洁。你可以进行轮询 get_task_status 直到任务完成。

示例:Python 语言服务器(pylsp)

许多LSP(语言服务器协议)服务器支持TCP模式,这与后台任务配合得很好 模型,因为编辑器之后可以使用广告中提到的端口进行附加。Python 语言服务器(pylsp这使得事情变得简单:

  1. 安装 pylsp 如果你还没有的话: pip install "python-lsp-server[all]"。

  2. 请求MCP服务器以TCP模式启动它:

    {
      "command": "pylsp --tcp --host 127.0.0.1 --port 2087"
    }
    
  3. 配置您的编辑器(或任何支持LSP的客户端)以连接到 tcp://127.0.0.1:2087.

  4. 呼叫 get_task_status 在您的MCP客户端中查看日志或确认 服务器仍在运行。使用 end_background_task 当你完成后。

示例:Rust 语言服务器(rust-analyzer)

rust-analyzer 它仅通过标准输入输出(stdio)使用JSON-RPC进行通信,因此我们将其部署在小型(代理/服务器/系统)之后 TCP shim 使得编辑器能够附加,而 MCP 服务器则保持进程运行。 一个常见的选择是 socat:

  1. 确保两者都 rust-analyzer 并且 socat 已安装。一个典型的设置是:

    rustup component add rust-analyzer
    brew install socat  # or use your package manager of choice
    
  2. 通过MCP服务器启动桥接器:

    {
      "command": "socat TCP-LISTEN:9257,reuseaddr,fork EXEC:'rust-analyzer',pty,stderr"
    }
    
    • socat 打开 tcp://127.0.0.1:9257 并且生成(或孵化) rust-analyzer 对于每个连接。
    • pty 确保基于stdio的协议仍然有效,同时MCP服务器 捕获有用的 stderr 日志以供检查。
  3. 将你的编辑器指向 tcp://127.0.0.1:9257 作为Rust语言服务器协议(LSP)的端点。

  4. 使用 get_task_status 并且 end_background_task 按需。

监测与清理

  • 使用 get_task_status 查看最近的stdout/stderr输出,检查退出代码,或者 确认是否已发出终止请求。
  • 当任务不再需要运行时,调用 end_background_task 与……一起;带有 相关的;联系的 task_id如果进程自行退出,任务状态将 自动移动到 completed 或者 failed。
  • 任务仅在服务器进程退出时才会从内存存储中移除; 重启MCP服务器以清除状态。

开发服务器

这是一个基于Tokio的标准Rust项目。运行 cargo test 或者 cargo fmt 在提交更改之前,并且每次重新构建后都要重启您的MCP客户端,以便它 加载新的二进制文件。