后台任务 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这使得事情变得简单:
- 安装
pylsp如果你还没有的话:pip install "python-lsp-server[all]"。
- 请求MCP服务器以TCP模式启动它:
{
"command": "pylsp --tcp --host 127.0.0.1 --port 2087"
}- 配置您的编辑器(或任何支持LSP的客户端)以连接到
tcp://127.0.0.1:2087.
- 呼叫
get_task_status在您的MCP客户端中查看日志或确认
服务器仍在运行。使用 end_background_task 当你完成后。
示例:Rust 语言服务器(rust-analyzer)
rust-analyzer 它仅通过标准输入输出(stdio)使用JSON-RPC进行通信,因此我们将其部署在小型(代理/服务器/系统)之后 TCP shim 使得编辑器能够附加,而 MCP 服务器则保持进程运行。 一个常见的选择是 socat:
- 确保两者都
rust-analyzer并且socat已安装。一个典型的设置是:
rustup component add rust-analyzer
brew install socat # or use your package manager of choice- 通过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 日志以供检查。
- 将你的编辑器指向
tcp://127.0.0.1:9257作为Rust语言服务器协议(LSP)的端点。
- 使用
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客户端,以便它 加载新的二进制文件。
