虚拟机管理服务

anyvm-mcp是一款基于模型上下文协议(MCP)的服务器,用于通过自然语言启动和管理各种操作系统的虚拟机,支持多种架构和功能操作。

  • by anyvm-org
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 anyvm-org/mcp

使用说明

anyvm-mcp

MCP服务器 anyvm --使用自然语言引导和管理BSD、illumos、Linux、Haiku、Android、GNU Hurd和Plan 9虚拟机。 与...兼容 Claude 代码, GitHub Copilot,以及任何其他 主控程序-兼容的AI助手。


概述

anyvm-mcp 是一个 模型上下文协议(MCP) 连接AI编码助手和 anyvm VM启动器。 anyvm在QEMU下引导预构建的客户机映像——无需手动安装,也无需libvirt。安装后,您的AI助手可以:

  • 靴子 FreeBSD、OpenBSD、NetBSD、DragonFly BSD、GhostBSD、MidnightBSD、Solaris、OmniOS、OpenIndiana、Tribblix、Haiku、Ubuntu、openEuler、BlissOS(Android)、Debian GNU/Hurd和Plan 9 背景中的客人
  • 目标 x86_64、aarch64、riscv64、sparc64、powerpc64、s390x 以及更多(每个操作系统的可用性各不相同)
  • 执行命令 通过SSH运行虚拟机以进行即时诊断
  • 读取串行控制台 调试启动失败
  • 地图 端口 并同步 文件夹 主机和客户机之间的(rsync/sshfs/nfs/scp/9p)
  • 停止 通过QEMU监视器优雅地关闭虚拟机(使用ACPI回退关闭客户机)或硬终止虚拟机

VM模型反映了anyvm CLI:VM由其操作系统名称加上 可选版本(例如。 freebsd + 14.3),而不是用户发明的名称。 操作系统/版本的首次启动会从匹配的文件下载映像 anyvm组织构建器 释放,所以允许几个 分钟;稍后的引导会重用缓存的映像。


需求

要求 注意事项
Python>=3.10
QEMU qemu-system-* 在PATH上(anyvm也可以为某些访客自行下载固定版本)
OpenSSH客户端 ssh PATH(用于exec/stop)
MCP兼容的AI助手 Claude Code、GitHub Copilot in VS Code或任何其他MCP客户端

注: 这个 anyvm.py 启动器是自动捆绑的,不需要单独安装。


安装

pipx install anyvm-mcp

或者使用pip:

pip install anyvm-mcp

或者从源代码安装:

git clone https://github.com/anyvm-org/mcp
cd mcp
pip install -e .

快速入门

Claude 代码

将服务器添加到 ~/.claude/mcp.json (或项目层面 .claude/mcp.json):

{
  "mcpServers": {
    "anyvm": {
      "command": "anyvm-mcp"
    }
  }
}

重新启动克劳德代码。你现在可以说:

启动一个带有2个CPU和2 GB RAM的FreeBSD 14.3虚拟机,然后在其中运行uname-a

“我的OpenBSD VM无法应答SSH。请显示串行控制台输出并建议修复。”

GitHub副本(VS代码)

将服务器添加到 .vscode/mcp.json 在您的工作区(或用户级设置)中:

{
  "servers": {
    "anyvm": {
      "type": "stdio",
      "command": "anyvm-mcp"
    }
  }
}

通用MCP客户端(HTTP/SSE)

将anyvm-mcp作为HTTP服务器运行:

anyvm-mcp --transport sse --host 127.0.0.1 --port 8000

然后将您的MCP客户端指向 http://127.0.0.1:8000/sse.


CLI参考

usage: anyvm-mcp [-h] [--anyvm PATH] [--data-dir DIR]
                 [--transport {stdio,sse,streamable-http}]
                 [--host HOST] [--port PORT]

options:
  --anyvm PATH          Path to the anyvm launcher (default: bundled anyvm.py)
  --data-dir DIR        Directory for images, logs, and VM state (default: ~/.anyvm-mcp)
  --transport           MCP transport: stdio (default), sse, or streamable-http
  --host HOST           Bind host for HTTP transports (default: 127.0.0.1)
  --port PORT           Bind port for HTTP transports (default: 8000)

可用工具

工具 说明
list_supported_os 每个客户操作系统anyvm都可以启动,带有注释和SSH用户
start_vm 在后台启动来宾(操作系统、版本、arch、内存、cpu、端口、卷、同步)
list_running_vms 已注册的VM具有实时运行/停止的探测器
vm_info 一个VM的状态、SSH端口/用户/密钥和串行日志路径
exec_in_vm 在正在运行的VM中通过SSH运行shell命令
stop_vm 优雅的客户机关闭(SSH+ACPI回退); force 通过QEMU监视器进行硬击杀
console_output 跟踪VM串行控制台日志(即使SSH关闭也能工作)

笔记:

  • start_vm 将操作系统和版本分开: os="freebsd", release="14.3" --省略 release 对于构建器的默认版本。
  • 计划9(9front)的客人没有SSH; exec_in_vm 对他们来说是不可用的。 使用 console_output,或者VNC web控制台anyvm在启动时打印。
  • Haiku的SSH用户是 user;所有其他客人使用 root.

示例对话

启动并检查虚拟机

You:      Boot an OmniOS VM with 4 CPUs and 4 GB RAM and show me its uname.
Copilot:  [calls start_vm(os="omnios", cpus=4, mem_mb=4096)]
          VM omnios-r151054 is running (ssh -p 42761 root@127.0.0.1).
          [calls exec_in_vm(os="omnios", command="uname -a")]
          SunOS omnios 5.11 omnios-r151054 i86pc i386 i86pc

调试启动失败

You:      My NetBSD VM never comes up on SSH. What's wrong?
Copilot:  [calls console_output(os="netbsd", lines=200)]
          The console shows the kernel waiting on root device selection...

跨架构测试

You:      Run my test script on Ubuntu riscv64.
Copilot:  [calls start_vm(os="ubuntu", arch="riscv64",
                          volumes=["/home/me/proj:/proj"], sync="rsync")]
          [calls exec_in_vm(os="ubuntu", command="cd /proj && sh run-tests.sh")]

发展

# Install with dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Run a single test file
pytest tests/test_vm_manager.py -v

许可证

麻省理工学院——见 许可证.