LXD容器管理服务器

一个用于管理LXD容器和虚拟机的模型上下文协议(MCP)服务器,提供实例管理、生命周期控制和命令执行功能。

  • by kadinsayani
  • Go
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 kadinsayani/lxd-mcp

使用说明

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 组)

安装

  1. 构建服务器:
make build
  1. 确保二进制文件在PATH中,或记下其完整路径以进行配置。

用法

使用GitHub Copilot CLI

使用此MCP服务器的最简单方法是使用GitHub Copilot CLI:

  1. 运行以下命令以添加服务器:
/mcp add lxd-mcp-server
  1. 出现提示时,提供到的完整路径 lxd-mcp-server 二进制(例如。, /home/user/git/lxd-mcp/lxd-mcp-server)

  2. 服务器将自动配置,您可以在Copilot CLI会话中开始使用LXD工具

  3. 要验证服务器是否正在运行,您可以要求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 组)
  • 容器中的命令执行具有安全影响
  • 考虑为生产使用实施身份验证
  • 验证所有输入参数