Python环境管理服务器

Jumpboot MCP Server是一个用于动态创建、管理Python环境并执行代码的服务器,支持环境隔离、包安装和持久化工作区管理。

  • by richinsley
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 richinsley/jumpboot-mcp

使用说明

Jumpboot MCP服务器

MCP(模型上下文协议)服务器,用于封装 跳靴 Go库,使AI助手能够动态创建和管理Python环境、安装包和执行Python代码。

特性

  • 环境管理:创建隔离的Python环境(完全独立于系统Python)
  • 软件包安装:通过pip或conda或requirements.txt文件安装软件包
  • 代码执行:运行Python代码片段或脚本文件
  • REPL会话:维护具有保留状态的持久Python REPL会话
  • 工作空间管理:用于写入文件、克隆存储库和执行脚本的持久代码文件夹
  • 长时间运行的流程:生成GUI应用程序、服务器、游戏和其他持久Python进程
  • 环境可移植性:冷冻和恢复环境以实现可重复性
  • 服务器联合:通过mDNS发现并代理远程jumpboot mcp服务器

目录

安装

先决条件

  • 转到1.21+
  • Git

从源代码构建

git clone https://github.com/richinsley/jumpboot-mcp.git
cd jumpboot-mcp
go build -o jumpboot-mcp .

快速开始

本地使用(stdio)

在本地为Claude Desktop或Claude Code运行服务器:

./jumpboot-mcp

HTTP服务器

作为HTTP服务器运行以进行远程访问或容器:

./jumpboot-mcp -transport http -addr :8080

联合设置

运行一个在网络上声明自己的HTTP服务器:

# On a GPU server
./jumpboot-mcp -transport http -addr :8080 -note "GPU server for ML"

然后运行一个本地stdio实例,该实例可以发现并代理它:

# On your local machine - discovers gpu-server automatically
./jumpboot-mcp

运输选项

标志 默认值 描述
-transport stdio 运输类型: stdio 或 http
-addr :8080 HTTP服务器地址
-endpoint /mcp HTTP端点路径
-stateless false 在无状态模式下运行(无会话跟踪)
-tls-cert TLS证书文件(启用HTTPS)
-tls-key TLS密钥文件(启用HTTPS)

服务器联合(mDNS)

Jumpboot mcp支持通过mDNS(Bonjour/Avahi)自动发现服务。这实现了一个强大的联盟模型,其中:

  1. HTTP服务器 在本地网络上宣布自己
  2. Stdio客户端 发现HTTP服务器并代理其工具
  3. 克劳德 查看所有带有前缀名称的工具(本地+远程)

mDNS标志

标志 默认值 描述
-note "" 人类可读的服务器描述(例如,“用于机器学习的GPU服务器”)
-instance-name hostname 唯一mDNS实例名称(用作工具前缀)
-mdns-announce true 启用mDNS公告(仅限HTTP模式)
-mdns-discover true 启用mDNS发现(仅限stdio模式)
-discover-timeout 5s 创业时等待多久才能发现

联邦是如何运作的

┌─────────────────┐     mDNS Discovery      ┌─────────────────────┐
│  Claude Desktop │ ◄──────────────────────►│  HTTP Server A      │
│  or Claude Code │                         │  (gpu-server)       │
│                 │     HTTP/MCP Protocol   │  -note "GPU for ML" │
│  ┌───────────┐  │ ◄─────────────────────► │                     │
│  │ stdio     │  │                         └─────────────────────┘
│  │ jumpboot  │  │
│  │ -mcp      │  │     mDNS Discovery      ┌─────────────────────┐
│  │           │  │ ◄──────────────────────►│  HTTP Server B      │
│  │ (local +  │  │                         │  (pi-cluster)       │
│  │  proxied  │  │     HTTP/MCP Protocol   │  -note "Raspberry"  │
│  │  tools)   │  │ ◄─────────────────────► │                     │
│  └───────────┘  │                         └─────────────────────┘
└─────────────────┘

Tools visible to Claude:
  - create_environment        (local)
  - run_code                  (local)
  - gpu-server:create_environment   (proxied)
  - gpu-server:run_code             (proxied)
  - pi-cluster:create_environment   (proxied)
  - pi-cluster:run_code             (proxied)

工具命名约定

远程工具的前缀是服务器的实例名称:

原始工具 代理工具名称
create_environment gpu-server:create_environment
run_code gpu-server:run_code
install_packages gpu-server:install_packages

服务器注释增强了工具描述:

  • 原件: "Create a new Python environment"
  • 代理: "[GPU server for ML] Create a new Python environment"

联合设置示例

示例1:GPU服务器+本地计算机

在GPU服务器(配备CUDA的机器)上:

./jumpboot-mcp \
  -transport http \
  -addr :8080 \
  -instance-name gpu-server \
  -note "GPU server with CUDA for ML workloads"

在您的本地计算机上:

# Just run normally - it discovers gpu-server automatically
./jumpboot-mcp

# Output:
# Discovered 1 remote jumpboot-mcp service(s):
#   - gpu-server at http://192.168.1.100:8080/mcp (GPU server with CUDA for ML workloads)
#     Connected successfully
# Registered 26 proxied tools from remote servers

现在克劳德可以使用本地工具和 gpu-server:* 工具。

示例2:多个专用服务器

服务器1-机器学习工作负载:

./jumpboot-mcp -transport http -addr :8080 \
  -instance-name ml-server \
  -note "ML server with PyTorch/TensorFlow"

服务器2-数据处理:

./jumpboot-mcp -transport http -addr :8080 \
  -instance-name data-server \
  -note "Data server with Pandas/Spark"

服务器3-网络抓取:

./jumpboot-mcp -transport http -addr :8080 \
  -instance-name scraper \
  -note "Scraping server with Selenium/Playwright"

本地stdio客户端:

./jumpboot-mcp
# Discovers all three servers, registers:
#   - Local tools (26)
#   - ml-server:* tools (26)
#   - data-server:* tools (26)
#   - scraper:* tools (26)
# Total: 104 tools available to Claude

示例3:禁用发现/公告

不带mDNS的HTTP服务器(仅手动配置):

./jumpboot-mcp -transport http -addr :8080 -mdns-announce=false

没有发现的Stdio客户端(仅限本地工具):

./jumpboot-mcp -mdns-discover=false

验证mDNS公告

在macOS上:

dns-sd -B _jumpboot-mcp._tcp

在Linux上(使用avahi):

avahi-browse -r _jumpboot-mcp._tcp

Docker部署

塑造形象

docker build -t jumpboot-mcp .

基本HTTP服务器

docker run -p 8080:8080 jumpboot-mcp

使用持久存储(推荐)

docker run -p 8080:8080 \
  -v jumpboot-data:/root/.jumpboot-mcp \
  jumpboot-mcp

该卷在容器重新启动时保留缓存的micromamba库和环境。

mDNS公告

要使mDNS在Docker中工作,请使用主机网络:

docker run --network host \
  -v jumpboot-data:/root/.jumpboot-mcp \
  jumpboot-mcp \
  -transport http -addr :8080 \
  -instance-name docker-server \
  -note "Docker container with Python environments"

注: --network host mDNS多播工作需要。在macOS Docker Desktop上,主机网络有局限性-考虑直接运行二进制文件。

使用HTTPS

docker run -p 8443:8443 \
  -v jumpboot-data:/root/.jumpboot-mcp \
  -v /path/to/certs:/certs:ro \
  jumpboot-mcp \
  -transport http -addr :8443 \
  -tls-cert /certs/cert.pem \
  -tls-key /certs/key.pem

Docker Compose

基本HTTP服务器

version: '3.8'
services:
  jumpboot-mcp:
    build: .
    ports:
      - "8080:8080"
    volumes:
      - jumpboot-data:/root/.jumpboot-mcp
    restart: unless-stopped

volumes:
  jumpboot-data:

使用mDNS(主机网络)

version: '3.8'
services:
  jumpboot-mcp:
    build: .
    network_mode: host
    volumes:
      - jumpboot-data:/root/.jumpboot-mcp
    command:
      - "-transport"
      - "http"
      - "-addr"
      - ":8080"
      - "-instance-name"
      - "docker-jumpboot"
      - "-note"
      - "Docker Python environment server"
    restart: unless-stopped

volumes:
  jumpboot-data:

多个服务器

version: '3.8'
services:
  ml-server:
    build: .
    network_mode: host
    volumes:
      - ml-data:/root/.jumpboot-mcp
    command: ["-transport", "http", "-addr", ":8080", "-instance-name", "ml-server", "-note", "ML workloads"]

  data-server:
    build: .
    network_mode: host
    volumes:
      - data-data:/root/.jumpboot-mcp
    command: ["-transport", "http", "-addr", ":8081", "-instance-name", "data-server", "-note", "Data processing"]

volumes:
  ml-data:
  data-data:

Claude桌面配置

Claude Desktop使用stdio传输。在以下位置配置:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 视窗: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/claude/claude_desktop_config.json

仅限本地(无联邦)

{
  "mcpServers": {
    "jumpboot": {
      "command": "/path/to/jumpboot-mcp",
      "args": ["-mdns-discover=false"]
    }
  }
}

与联邦(推荐)

{
  "mcpServers": {
    "jumpboot": {
      "command": "/path/to/jumpboot-mcp",
      "args": []
    }
  }
}

这将:

  1. 在stdio模式下启动本地jumpboot mcp
  2. 通过mDNS发现网络上的任何HTTP跳转mcp服务器
  3. 具有前缀名称的代理远程工具(例如。, gpu-server:run_code)

自定义发现超时

如果您的网络发现速度较慢:

{
  "mcpServers": {
    "jumpboot": {
      "command": "/path/to/jumpboot-mcp",
      "args": ["-discover-timeout", "10s"]
    }
  }
}

多个显式服务器(无mDNS)

如果您无法使用mDNS,请直接配置多个服务器:

{
  "mcpServers": {
    "jumpboot-local": {
      "command": "/path/to/jumpboot-mcp",
      "args": ["-mdns-discover=false"]
    }
  }
}

注: Claude Desktop不直接支持HTTP传输。对于没有mDNS的HTTP服务器,使用联邦方法,使用本地stdio实例来发现它们。

Claude代码配置

Claude Code支持stdio和HTTP传输。

通过CLI配置

添加本地stdio服务器:

claude mcp add jumpboot /path/to/jumpboot-mcp

使用联盟添加本地stdio:

claude mcp add jumpboot /path/to/jumpboot-mcp
# Federation happens automatically via mDNS

直接添加远程HTTP服务器:

claude mcp add jumpboot-gpu --transport http http://gpu-server:8080/mcp

通过.mcp.json配置

创建 .mcp.json 在项目根目录或主目录中:

当地与联邦(推荐)

{
  "mcpServers": {
    "jumpboot": {
      "command": "/path/to/jumpboot-mcp"
    }
  }
}

仅限本地(未发现)

{
  "mcpServers": {
    "jumpboot": {
      "command": "/path/to/jumpboot-mcp",
      "args": ["-mdns-discover=false"]
    }
  }
}

直接HTTP连接(无联合)

{
  "mcpServers": {
    "jumpboot-remote": {
      "type": "url",
      "url": "http://gpu-server:8080/mcp"
    }
  }
}

多个直接连接

{
  "mcpServers": {
    "jumpboot-local": {
      "command": "/path/to/jumpboot-mcp",
      "args": ["-mdns-discover=false"]
    },
    "jumpboot-gpu": {
      "type": "url",
      "url": "http://gpu-server:8080/mcp"
    },
    "jumpboot-data": {
      "type": "url",
      "url": "http://data-server:8080/mcp"
    }
  }
}

注: 对于直接HTTP连接,工具名称没有前缀。如果要自动添加前缀,请使用联邦(stdio和mDNS)。

混合设置:联邦+直接

{
  "mcpServers": {
    "jumpboot": {
      "command": "/path/to/jumpboot-mcp"
    },
    "jumpboot-cloud": {
      "type": "url",
      "url": "https://cloud-server.example.com:8443/mcp"
    }
  }
}

这为您提供了:

  • stdio实例中的本地工具
  • 通过mDNS自动发现局域网服务器(前缀名称)
  • 直接连接到云服务器(无前缀名称)

MCP工具参考

环境管理(5个工具)

工具 说明
create_environment 创建一个新的Python环境
list_environments 列出所有托管环境
destroy_environment 删除环境和工作区
freeze_environment 将环境导出为JSON
restore_environment 从冻结的JSON重新创建

包管理(3个工具)

工具 说明
install_packages 安装软件包(pip或conda)
install_requirements 从requirements.txt安装
list_packages 列出已安装的软件包

代码执行(2个工具)

工具 说明
run_code 执行Python代码片段
run_script 执行Python脚本文件

REPL会话(4个工具)

工具 说明
repl_create 创建持久REPL
repl_execute 运行代码(状态保留)
repl_list 列出活动会话
repl_destroy 结束会话

工作空间管理(8个工具)

工具 说明
workspace_create 创建代码文件夹
workspace_write_file 将文件写入工作区
workspace_read_file 从工作区读取文件
workspace_list_files 列出工作区文件
workspace_delete_file 删除文件
workspace_run_script 从工作区运行脚本
workspace_git_clone 克隆git存储库
workspace_destroy 删除工作区

过程管理(4个工具)

工具 说明
spawn_process 启动后台进程
list_processes 列出生成的进程
process_output 获取进程stdout/stderr
kill_process 终止进程

用法示例

基本工作流程

1. create_environment(name="myenv", python_version="3.11") → env_id
2. install_packages(env_id="...", packages=["numpy", "pandas"])
3. run_code(env_id="...", code="import numpy; print(numpy.__version__)")

使用远程服务器

1. gpu-server:create_environment(name="ml-env", python_version="3.11") → env_id
2. gpu-server:install_packages(env_id="...", packages=["torch", "transformers"])
3. gpu-server:run_code(env_id="...", code="import torch; print(torch.cuda.is_available())")

REPL会话

1. repl_create(env_id="...", session_name="analysis") → session_id
2. repl_execute(session_id="...", code="x = 42")
3. repl_execute(session_id="...", code="print(x)")  # prints 42

长时间运行的进程

1. workspace_write_file(env_id="...", filename="server.py", content="...")
2. spawn_process(env_id="...", script_path="server.py", capture_output=true)
3. process_output(process_id="...", tail_lines=50)
4. kill_process(process_id="...")

响应格式

所有工具都返回JSON:

{"success": true, "data": {...}, "error": null}

或者出错:

{"success": false, "data": null, "error": "descriptive error message"}

数据存储

所有数据都存储在 ~/.jumpboot-mcp/envs/:

~/.jumpboot-mcp/envs/
├── bases/                    # Cached micromamba bases
│   ├── base_3.11/
│   └── base_3.12/
└── {env-uuid}/              # User environments (venvs)
    ├── bin/
    ├── lib/
    └── workspace/           # Persistent workspace

依赖项

许可证

麻省理工学院