LXD MCP服务器
用于管理LXD容器和虚拟机的模型上下文协议(MCP)服务器。
特性
此MCP服务器提供以下工具:
实例管理
- list_instances -列出所有LXD实例(容器和VM)
- get_instance -获取特定实例的详细信息
- get_instance_state -获取实例的当前状态和资源使用情况
- 创建实例 -创建新的LXD实例(容器或VM)
- 删除实例 -删除实例
- 重命名状态 -重命名实例
- update_instance -更新实例配置(例如CPU、内存限制)
实例生命周期
- start_instance -启动已停止的实例
- 停止立场 -停止正在运行的实例(支持强制停止)
- restart_instance -重新启动正在运行的实例
- 冷冻状态 -冻结(暂停)正在运行的实例
- unfreeze_instance -解冻(恢复)冻结的实例
实例操作
- 高管立场 -在实例中执行命令
图像管理
- list_images -列出可用图像
先决条件
- LXD已安装并在系统上运行
- 达到1.25.4或更高
- 访问LXD Unix套接字(通常需要用户处于
lxd组)
安装
- 构建服务器:
make build- 确保二进制文件在PATH中,或记下其完整路径以进行配置。
用法
使用GitHub Copilot CLI
使用此MCP服务器的最简单方法是使用GitHub Copilot CLI:
- 运行以下命令以添加服务器:
/mcp add lxd-mcp-server- 出现提示时,提供到的完整路径
lxd-mcp-server二进制(例如。,/home/user/git/lxd-mcp/lxd-mcp-server)
- 服务器将自动配置,您可以在Copilot CLI会话中开始使用LXD工具
- 要验证服务器是否正在运行,您可以要求Copilot列出您的LXD实例或执行其他LXD操作
直接使用
MCP服务器还可以通过stdin/stdout上的JSON-RPC 2.0直接通信:
./lxd-mcp-server工具调用示例
列出所有实例
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_instances",
"arguments": {}
}
}创建实例
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "create_instance",
"arguments": {
"name": "my-container",
"image": "ubuntu:24.04",
"type": "container",
"start": true
}
}
}获取实例详细信息
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "get_instance",
"arguments": {
"name": "my-container"
}
}
}更新实例配置
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "update_instance",
"arguments": {
"name": "my-container",
"config": {
"limits.cpu": "2",
"limits.memory": "2GiB"
}
}
}
}启动实例
{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "start_instance",
"arguments": {
"name": "my-container"
}
}
}执行命令
{
"jsonrpc": "2.0",
"id": 6,
"method": "tools/call",
"params": {
"name": "exec_instance",
"arguments": {
"name": "my-container",
"command": ["ls", "-la", "/"]
}
}
}删除实例
{
"jsonrpc": "2.0",
"id": 7,
"method": "tools/call",
"params": {
"name": "delete_instance",
"arguments": {
"name": "my-container",
"force": true
}
}
}建筑
服务器使用LXD-Go客户端库(github.com/canonical/lxd/client)通过Unix套接字与LXD交互 /var/snap/lxd/common/lxd/unix.socket (或 /var/lib/lxd/unix.socket 用于非卡扣安装)。
项目结构
lxd-mcp/
├── main.go # Application entry point
├── internal/
│ ├── lxd/ # LXD tools package
│ │ ├── client.go # Tools struct and LXD connection
│ │ ├── types.go # Argument type definitions
│ │ ├── instances.go # Instance CRUD operations
│ │ ├── lifecycle.go # Start/stop/restart operations
│ │ ├── exec.go # Command execution
│ │ └── images.go # Image management
│ └── server/ # MCP server setup
│ └── server.go # Tool registration and server initialization
└── doc/ # Documentation assets未来的增强功能
潜在补充:
- \[\]快照管理
- \[\]文件推/拉操作
- \[\]网络配置
- \[\]存储池管理
- \[\]档案管理
- \[\]日志访问
- \[\]图像导入/导出
- \[\]元数据API集成
- \[\]文档端点集成(snap)
安全注意事项
- 服务器需要LXD访问权限(用户必须在
lxd组) - 容器中的命令执行具有安全影响
- 考虑为生产使用实施身份验证
- 验证所有输入参数
