使用说明
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
许可证
麻省理工学院——见 许可证.