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) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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