🚀 MCP 后台作业服务器
MCP 后台作业服务器是一个基于 MCP(模型上下文协议)的服务器,支持编码代理异步执行长时间运行的 shell 命令,并具备完整的进程管理能力。它为在后台运行 shell 命令提供了强大的解决方案,允许代理启动进程、监控其状态、与它们交互并管理其生命周期。这对于涉及构建过程、测试套件、服务器或任何长时间运行操作的开发工作流程特别有用。
🚀 快速开始
与 Claude Code 配合使用
配置完成后,可让 Claude 协助处理后台任务:
你: "在后台启动我的开发服务器并监控它"
Claude: 我将使用后台作业服务器启动你的开发服务器。
[使用执行工具运行你的开发服务器]
[显示作业 ID 并监控启动进度]
[提供状态更新]
Claude: "你的开发服务器现已在 http://localhost:3000 上运行。
作业 ID 是 abc123 - def456,如果你以后需要控制它。"
手动使用服务器
用于开发或直接使用:
uvx mcp-background-job
uv run python -m mcp_background_job
✨ 主要特性
- 异步进程执行:以唯一的作业 ID 作为后台作业执行 shell 命令。
- 进程生命周期管理:启动、监控、与后台进程交互并终止它们。
- 实时输出监控:捕获和检索标准输出/标准错误,并具备缓冲和尾随功能。
- 交互式进程支持:通过标准输入向正在运行的进程发送输入。
- 资源管理:可配置作业限制,并自动清理已完成的进程。
- MCP 协议集成:与模型上下文协议完全集成,便于代理交互。
📦 安装指南
快速安装(推荐)
使用 uvx 直接从 PyPI 安装:
uvx mcp-background-job
集成到 Claude Code
将服务器添加到你的 Claude Code 配置中:
- 选项 A:使用 Claude Code 桌面版
- 打开 Claude Code 设置/偏好设置。
- 导航到 MCP 服务器部分。
- 添加新服务器:
- 名称:
background-job
- 命令:
uvx
- 参数:
["mcp-background-job"]
- 选项 B:配置文件
在你的 Claude Code 配置文件中添加以下内容:
{
"mcpServers": {
"background-job": {
"command": "uvx",
"args": ["mcp-background-job"]
}
}
}
- 重启 Claude Code 以加载新的 MCP 服务器。
开发环境设置
用于本地开发或贡献代码:
前提条件
- Python 3.12 或更高版本
- uv 包管理器
设置步骤
- 克隆并进入项目目录:
git clone https://github.com/dylan-gluck/mcp-background-job.git
cd mcp-background-job
- 安装依赖项:
uv sync
- 以开发模式安装:
uv add -e .
💻 使用示例
基础用法
execute_result = await execute_command("npm run dev")
job_id = execute_result.job_id
status = await get_job_status(job_id)
print(f"作业状态: {status.status}")
output = await tail_job_output(job_id, lines=20)
print("最近的输出:", output.stdout)
interaction = await interact_with_job(job_id, "some input\n")
print("进程响应:", interaction.stdout)
result = await kill_job(job_id)
print(f"终止结果: {result.status}")
开发服务器工作流程示例
job_id=$(echo '{"command": "npm run dev"}' | mcp-tool execute)
mcp-tool tail --job_id "$job_id" --lines 10
mcp-tool status --job_id "$job_id"
mcp-tool kill --job_id "$job_id"
长时间构建过程示例
job_id=$(echo '{"command": "docker build -t myapp ."}' | mcp-tool execute)
while true; do
status=$(mcp-tool status --job_id "$job_id")
if [[ "$status" != "running" ]]; then break; fi
mcp-tool tail --job_id "$job_id" --lines 5
sleep 10
done
mcp-tool output --job_id "$job_id"
交互式进程示例
job_id=$(echo '{"command": "python -i"}' | mcp-tool execute)
mcp-tool interact --job_id "$job_id" --input "print('Hello, World!')\n"
mcp-tool interact --job_id "$job_id" --input "import sys; print(sys.version)\n"
mcp-tool interact --job_id "$job_id" --input "exit()\n"
📚 详细文档
MCP 工具参考
服务器公开了 7 个用于进程管理的 MCP 工具:
只读工具
| 工具 |
描述 |
参数 |
返回值 |
list |
列出所有后台作业 |
无 |
{jobs: [JobSummary]} |
status |
获取作业状态 |
job_id: str |
{status: JobStatus} |
output |
获取作业的完整输出 |
job_id: str |
{stdout: str, stderr: str} |
tail |
获取最近的输出行 |
job_id: str, lines: int |
{stdout: str, stderr: str} |
交互式工具
| 工具 |
描述 |
参数 |
返回值 |
execute |
启动新的后台作业 |
command: str |
{job_id: str} |
interact |
向作业的标准输入发送输入 |
job_id: str, input: str |
{stdout: str, stderr: str} |
kill |
终止正在运行的作业 |
job_id: str |
{status: str} |
作业状态值
running - 进程当前正在执行。
completed - 进程已成功完成。
failed - 进程因错误而终止。
killed - 进程被用户终止。
配置
环境变量
使用以下环境变量配置服务器行为:
export MCP_BG_MAX_JOBS=20
export MCP_BG_MAX_OUTPUT_SIZE=20MB
export MCP_BG_MAX_OUTPUT_SIZE=20971520
export MCP_BG_JOB_TIMEOUT=3600
export MCP_BG_CLEANUP_INTERVAL=600
export MCP_BG_WORKING_DIR=/path/to/project
export MCP_BG_ALLOWED_COMMANDS="^npm ,^python ,^echo ,^ls"
使用环境变量进行 Claude Code 配置
{
"mcpServers": {
"background-job": {
"command": "uvx",
"args": ["mcp-background-job"],
"env": {
"MCP_BG_MAX_JOBS": "20",
"MCP_BG_MAX_OUTPUT_SIZE": "20MB"
}
}
}
}
编程式配置
from mcp_background_job.config import BackgroundJobConfig
config = BackgroundJobConfig(
max_concurrent_jobs=20,
max_output_size_bytes=20 * 1024 * 1024,
default_job_timeout=7200,
cleanup_interval_seconds=600
)
架构
服务器采用模块化架构构建:
- JobManager:用于作业生命周期管理的核心服务。
- ProcessWrapper:具有 I/O 缓冲功能的子进程处理抽象层。
- FastMCP 服务器:带有工具定义的 MCP 协议实现。
- Pydantic 模型:类型安全的数据验证和序列化。
关键组件
src/mcp_background_job/
├── server.py # FastMCP 服务器和工具定义
├── service.py # JobManager 服务实现
├── process.py # 用于子进程管理的 ProcessWrapper
├── models.py # Pydantic 数据模型
├── config.py # 配置管理
└── logging_config.py # 日志设置
开发
运行测试
uv run pytest tests/
uv run pytest tests/unit/ -v
uv run pytest tests/integration/ -v
代码格式化
uv run ruff format
uv run mypy src/
开发工作流程
- 进行更改。
- 运行测试:
uv run pytest tests/。
- 格式化代码:
uv run ruff format。
- 提交更改。
🔧 技术细节
传输支持
服务器支持多种 MCP 传输方式:
- stdio:用于本地开发和代理集成的默认传输方式。
- HTTP:用于远程访问(需要额外设置)。
对于 stdio 传输,请确保日志仅输出到标准错误,以避免协议冲突。
故障排除
常见问题
uv add -e .
uv sync
uv add -e .
uv run pytest tests/
- 权限错误:确保你对要执行的命令具有适当的权限。
- 内存问题:如果处理产生大量输出的进程,请调整
MCP_BG_MAX_OUTPUT_SIZE。
📄 许可证
本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。
变更日志
v0.1.1
- 发布到 PyPI,可通过
uvx 轻松安装。
- 添加了控制台脚本入口点 (
mcp-background-job)。
- 更新了安装和使用说明的文档。
- 修复了 linting 问题并提高了代码质量。
v0.1.0
- 初始实现,支持完整的 MCP 工具。
- 进程生命周期管理。
- 可配置的资源限制。
- 全面的测试套件。
使用 FastMCP 和 Python 3.12+ 精心打造 ❤️