Proxmox MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PROXMOX_HOST | Yes | Proxmox host address | |
| PROXMOX_PORT | No | API port | 8006 |
| PROXMOX_USER | No | User | root@pam |
| TOOL_ROUTING | No | Enable tool routing mode | false |
| PROXMOX_TIMEOUT | No | Request timeout in seconds | 30 |
| PROXMOX_PASSWORD | No | Password (alternative to token authentication) | |
| PROXMOX_TOKEN_NAME | No | API token name (required with PROXMOX_TOKEN_VALUE if not using password) | |
| PROXMOX_VERIFY_SSL | No | SSL verification (0 or 1) | 0 |
| PROXMOX_TOKEN_VALUE | No | API token value (required with PROXMOX_TOKEN_NAME if not using password) |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_usersA | List all users in Proxmox. Args: enabled: Only show enabled users. full: Include detailed info (groups, tokens, etc.). |
| get_userA | Get details for a specific user. Args: userid: User ID (format: 'user@realm', e.g. 'admin@pam'). |
| create_userA | Create a new user. Args: userid: User ID (format: 'user@realm', e.g. 'myuser@pve'). password: Password (only for pve/pam realms). email: Email address. firstname: First name. lastname: Last name. groups: Comma-separated group list. comment: Description. enable: Enable user. expire: Account expiration (Unix epoch, 0 = never). |
| update_userB | Update an existing user. Args: userid: User ID (format: 'user@realm'). email: Email address. firstname: First name. lastname: Last name. groups: Comma-separated group list. comment: Description. enable: Enable/disable user. expire: Account expiration (Unix epoch, 0 = never, -1 = don't change). append: Append groups instead of replacing. |
| delete_userB | Delete a user. Args: userid: User ID to delete (format: 'user@realm'). |
| list_user_tokensA | List API tokens for a user. Args: userid: User ID (format: 'user@realm'). |
| get_user_tokenA | Get details for a specific API token. Args: userid: User ID (format: 'user@realm'). tokenid: Token ID. |
| create_user_tokenA | Create a new API token for a user. Returns the token value (shown only once). Args: userid: User ID (format: 'user@realm'). tokenid: Token ID (alphanumeric). comment: Token description. privsep: Enable privilege separation (token has own permissions, not user's full permissions). expire: Expiration (Unix epoch, 0 = never). |
| delete_user_tokenB | Delete an API token. Args: userid: User ID (format: 'user@realm'). tokenid: Token ID. |
| list_groupsA | List all user groups. |
| get_groupB | Get group details. Args: groupid: Group ID. |
| create_groupC | Create a new group. Args: groupid: Group ID. comment: Description. |
| update_groupC | Update a group. Args: groupid: Group ID. comment: Description. |
| delete_groupC | Delete a group. Args: groupid: Group ID. |
| list_rolesA | List all available roles. |
| get_roleB | Get role details and its privileges. Args: roleid: Role ID. |
| create_roleC | Create a new role with specific privileges. Args: roleid: Role ID. privs: Comma-separated list of privileges (e.g. 'VM.Allocate,VM.Config.Disk,VM.PowerMgmt'). |
| update_roleA | Update role privileges. Args: roleid: Role ID. privs: Comma-separated list of privileges. append: Append privileges instead of replacing. |
| delete_roleC | Delete a role. Args: roleid: Role ID. |
| get_aclA | Get the full ACL (access control list) — shows all permission assignments. |
| update_aclA | Add or remove ACL entries (permission assignments). Args: path: Object path (e.g. '/', '/vms/100', '/storage/local', '/pool/mypool'). roles: Comma-separated role list. users: Comma-separated user list (format: 'user@realm'). groups: Comma-separated group list. tokens: Comma-separated token list (format: 'user@realm!tokenid'). propagate: Propagate permissions to child objects. delete: Remove the ACL entry instead of adding. |
| list_auth_domainsA | List configured authentication realms/domains (PAM, PVE, LDAP, AD, OpenID). |
| get_auth_domainB | Get authentication domain configuration. Args: realm: Realm ID (e.g. 'pam', 'pve', 'my-ldap'). |
| sync_auth_domainA | Sync users/groups from an external auth domain (LDAP/AD). Args: realm: Realm ID to sync. dry_run: Only show what would change. full: Full sync (not just incremental). enable_new: Enable newly synced users. remove_vanished: Comma-separated: 'entry' (remove users), 'properties' (clear), 'acl' (remove ACLs). |
| list_tfaB | List TFA (two-factor auth) entries. Args: userid: Filter by user ID (empty = all users). |
| get_permissionsB | Check effective permissions for a user on a given path. Args: userid: User to check (empty = current user). path: Object path to check (empty = root). |
| change_passwordC | Change a user's password. Args: userid: User ID (format: 'user@realm'). password: New password. |
| list_backup_jobsA | List all scheduled backup jobs (vzdump) in the cluster. |
| get_backup_jobC | Get details of a specific backup job. Args: id: Backup job ID. |
| get_backup_job_included_volumesB | Get volumes included in a backup job. Args: id: Backup job ID. |
| create_backup_jobB | Create a scheduled backup job. Args: storage: Target storage ID for backups. schedule: Schedule in systemd calendar format (e.g. 'daily', 'weekly', '02:00'). all_guests: Backup all guests. vmid: Comma-separated VMIDs to back up (if not all_guests). node: Only back up guests on this node. mode: Backup mode: 'snapshot', 'suspend', 'stop'. compress: Compression: 'none', 'lzo', 'gzip', 'zstd'. mailnotification: 'always' or 'failure'. mailto: Comma-separated email addresses. maxfiles: Max backup files to keep (0 = unlimited, deprecated - use prune_backups). prune_backups: Retention schedule (e.g. 'keep-daily=7,keep-weekly=4'). notes_template: Template for backup notes. enabled: Enable the job. comment: Description. |
| update_backup_jobB | Update a scheduled backup job. Args: id: Backup job ID. storage: Target storage ID. schedule: Schedule in systemd calendar format. all_guests: Backup all guests. vmid: Comma-separated VMIDs. node: Node filter. mode: Backup mode. compress: Compression. enabled: Enable/disable. delete: Comma-separated properties to delete. |
| delete_backup_jobB | Delete a scheduled backup job. Args: id: Backup job ID. |
| create_vzdumpA | Start an immediate backup (vzdump) on a node. Args: node: The node to run the backup on. vmid: Comma-separated VMIDs (required if not all_guests). all_guests: Back up all guests on the node. storage: Target storage (empty = default). mode: Backup mode: 'snapshot', 'suspend', 'stop'. compress: Compression: 'none', 'lzo', 'gzip', 'zstd'. stdout: Write to stdout instead of storage. |
| get_vzdump_defaultsC | Get the default vzdump configuration for a node. Args: node: The node name. |
| get_vzdump_extractconfigB | Extract the guest configuration from a vzdump backup archive. Args: node: The node name. volume: Backup volume ID (e.g. 'local:backup/vzdump-qemu-100-2024_01_01-00_00_00.vma.zst'). |
| list_backup_file_restoreB | List files in a vzdump backup for single-file restore. Args: node: The node name. storage: Storage ID. volume: Backup volume ID. filepath: Path within the backup (default '/'). |
| download_file_restoreC | Download a file from a vzdump backup. Args: node: The node name. storage: Storage ID. volume: Backup volume ID. filepath: Path of the file to download from the backup. |
| get_versionA | Get the Proxmox VE API version information. |
| get_cluster_statusB | Get cluster status (nodes online, quorum, HA state). |
| get_cluster_resourcesA | List all resources across the cluster (VMs, containers, storage, nodes). Args: type: Filter by type: 'vm', 'storage', 'node', 'sdn', 'pool' (empty = all). |
| get_cluster_tasksC | List recent tasks across all nodes in the cluster. Args: limit: Maximum number of tasks to return. |
| get_cluster_logC | Get the cluster log (recent events). Args: max_entries: Max log entries. |
| get_next_vmidA | Get the next available VMID in the cluster. Args: vmid: Specific VMID to check availability for (0 = auto-assign). |
| get_cluster_optionsA | Get datacenter/cluster-wide options (keyboard layout, console, language, etc.). |
| update_cluster_optionsB | Update datacenter/cluster-wide options. Args: keyboard: Keyboard layout (e.g. 'en-us', 'de'). language: Default language. console: Default console viewer: 'applet', 'vv', 'html5', 'xtermjs'. http_proxy: HTTP proxy URL. email_from: Default email sender address. max_workers: Max parallel workers. description: Datacenter description. delete: Comma-separated settings to delete. |
| get_cluster_configA | Get the current cluster configuration (corosync, nodes, join info). |
| get_cluster_config_nodesB | List nodes configured in the cluster. |
| get_cluster_join_infoA | Get info needed to join a node to this cluster. |
| join_clusterA | Join a node to an existing cluster. Args: hostname: Hostname/IP of existing cluster node. fingerprint: SSL fingerprint of the cluster node. password: Root password of the cluster node. nodeid: Force specific node ID. force: Force join even with warnings. |
| get_cluster_totemB | Get the corosync totem configuration. |
| list_replication_jobsA | List all replication jobs in the cluster. |
| get_replication_jobA | Get a specific replication job configuration. Args: id: Replication job ID (format: GUEST-JOBNUM, e.g. '100-0'). |
| create_replication_jobA | Create a storage replication job. Args: id: Job ID (format: GUEST-JOBNUM, e.g. '100-0'). target: Target node. type: Replication type (currently only 'local'). schedule: Schedule in systemd calendar format (default '*/15' = every 15 min). comment: Description. rate: Rate limit in mbps. disable: Create disabled. |
| delete_replication_jobB | Delete a replication job. Args: id: Replication job ID. force: Force removal (skip cleanup). keep: Keep replicated data on target. |
| list_metric_serversA | List configured metric servers (InfluxDB, Graphite). |
| get_metric_serverB | Get metric server configuration. Args: id: Metric server ID. |
| list_notification_endpointsB | List all configured notification endpoints (sendmail, gotify, smtp, webhook). |
| list_notification_targetsC | List all notification targets. |
| list_notification_matchersA | List all notification matchers (rules that route notifications). |
| test_notification_targetC | Send a test notification to a target. Args: name: Target name. |
| bulk_start_guestsA | Bulk start guests across the cluster. Args: vms: Comma-separated list of VMIDs (empty = all). |
| bulk_shutdown_guestsB | Bulk shutdown guests across the cluster. Args: vms: Comma-separated list of VMIDs (empty = all). |
| bulk_migrate_guestsC | Bulk migrate guests to a target node. Args: target: Target node name. vms: Comma-separated VMIDs. |
| get_ceph_status_clusterA | Get Ceph cluster status (health, monitors, OSDs, PGs). |
| get_ceph_metadataA | Get Ceph metadata (versions, services across nodes). |
| get_ceph_flagsA | Get Ceph global flags (noout, noscrub, etc.). |
| set_ceph_flagsB | Set a Ceph global flag. Args: flag: Flag name (noout, noscrub, nobackfill, norebalance, nodown, noup, etc.). value: True to set, False to unset. |
| get_ceph_status_nodeB | Get Ceph status from a specific node's perspective. Args: node: The node name. |
| list_ceph_osdsB | List Ceph OSDs on a node. Args: node: The node name. |
| create_ceph_osdA | Create a new Ceph OSD on a device. Args: node: The node name. dev: Block device for the OSD (e.g. '/dev/sdb'). db_dev: Separate block device for DB. wal_dev: Separate block device for WAL. encrypted: Encrypt the OSD. |
| list_ceph_poolsC | List Ceph pools. Args: node: The node name. |
| create_ceph_poolB | Create a new Ceph pool. Args: node: The node name. name: Pool name. size: Number of replicas (default 3). min_size: Minimum replicas for I/O (default 2). pg_num: Number of placement groups (default 128). application: Pool application (rbd, cephfs, rgw). |
| list_ceph_monitorsB | List Ceph monitors. Args: node: The node name. |
| list_ceph_managersC | List Ceph managers. Args: node: The node name. |
| list_ceph_mdsC | List Ceph metadata servers (MDS, for CephFS). Args: node: The node name. |
| list_ceph_fsB | List CephFS filesystems. Args: node: The node name. |
| get_ceph_configC | Get the raw Ceph configuration. Args: node: The node name. |
| get_ceph_crush_rulesC | Get Ceph CRUSH rules. Args: node: The node name. |
| list_scheduled_jobsA | List all scheduled cluster jobs (realm-sync, etc.). |
| list_realm_sync_jobsB | List realm synchronization jobs. |
| list_pci_mappingsA | List PCI device mappings for passthrough. |
| list_usb_mappingsA | List USB device mappings for passthrough. |
| list_dir_mappingsB | List directory mappings. |
| get_cluster_firewall_optionsA | Get cluster-wide firewall options (enable, policy_in, policy_out, etc.). |
| set_cluster_firewall_optionsA | Set cluster-wide firewall options. Args: enable: 1 to enable, 0 to disable, -1 to not change. policy_in: Default input policy: 'ACCEPT', 'REJECT', 'DROP'. policy_out: Default output policy: 'ACCEPT', 'REJECT', 'DROP'. log_ratelimit: Log rate limit (e.g. 'enable=1,rate=1/second,burst=5'). ebtables: 1 to enable ebtables rules, 0 to disable, -1 to not change. delete: Comma-separated options to delete. |
| list_cluster_firewall_rulesA | List cluster-level firewall rules. |
| get_cluster_firewall_ruleB | Get a specific cluster firewall rule. Args: pos: Rule position number. |
| create_cluster_firewall_ruleA | Create a cluster-level firewall rule. Args: action: 'ACCEPT', 'DROP', 'REJECT'. type: 'in', 'out', 'group'. enable: 1 = enabled, 0 = disabled. source: Source address/range (CIDR or alias). dest: Destination address/range. proto: Protocol (tcp, udp, icmp, etc.). sport: Source port(s). dport: Destination port(s). iface: Network interface. macro: Use predefined macro (e.g. 'SSH', 'HTTP', 'HTTPS', 'Ping'). comment: Description. log: Log level: 'emerg', 'alert', 'crit', 'err', 'warning', 'notice', 'info', 'debug', 'nolog'. pos: Rule position (-1 = append). |
| update_cluster_firewall_ruleC | Update a cluster-level firewall rule. Args: pos: Rule position to update. action: 'ACCEPT', 'DROP', 'REJECT'. enable: 1 = enabled, 0 = disabled, -1 = don't change. source: Source address/range. dest: Destination address/range. proto: Protocol. sport: Source port(s). dport: Destination port(s). macro: Predefined macro. comment: Description. moveto: Move rule to this position. delete: Comma-separated properties to delete. |
| delete_cluster_firewall_ruleB | Delete a cluster-level firewall rule. Args: pos: Rule position to delete. |
| list_firewall_groupsA | List firewall security groups (reusable sets of rules). |
| get_firewall_group_rulesB | List rules in a firewall security group. Args: group: Security group name. |
| create_firewall_groupC | Create a new firewall security group. Args: group: Group name. comment: Description. |
| create_firewall_group_ruleB | Add a rule to a firewall security group. Args: group: Security group name. action: 'ACCEPT', 'DROP', 'REJECT'. type: 'in', 'out'. enable: 1 = enabled, 0 = disabled. source: Source address/range. dest: Destination address/range. proto: Protocol. sport: Source port(s). dport: Destination port(s). macro: Predefined macro. comment: Description. |
| list_firewall_aliasesA | List cluster firewall aliases (named IP addresses/ranges). |
| create_firewall_aliasB | Create a firewall alias (named IP address or CIDR). Args: name: Alias name. cidr: IP address or CIDR (e.g. '10.0.0.0/24' or '192.168.1.1'). comment: Description. |
| delete_firewall_aliasC | Delete a firewall alias. Args: name: Alias name. |
| list_firewall_ipsetsA | List cluster firewall IP sets (named groups of IPs). |
| create_firewall_ipsetC | Create a new firewall IP set. Args: name: IP set name. comment: Description. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/GethosTheWalrus/proxmox-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server