Remote MCP server for Proxmox VE clusters and BMC-managed hardware.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · streamable-http · http counts 49 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
beaconmcp_check_update
-
beaconmcp_self_update
-
bmc_get_event_log
-
bmc_health_status
-
bmc_list_devices
-
bmc_power_off
-
bmc_power_on
-
bmc_power_reset
-
bmc_power_status
-
bmc_server_info
-
cluster_health
-
cluster_overview
-
cluster_overview_interactive
-
proxmox_backup_create
-
proxmox_backup_list
-
proxmox_backup_restore
-
proxmox_delete_transfer
-
proxmox_download_file
-
proxmox_get_logs
-
proxmox_get_tasks
-
proxmox_list_nodes
-
proxmox_list_transfers
-
proxmox_list_vms
-
proxmox_logs_panel
-
proxmox_network_config
-
proxmox_node_status
-
proxmox_read_file
-
proxmox_run
-
proxmox_snapshot_create
-
proxmox_snapshot_delete
-
proxmox_snapshot_list
-
proxmox_snapshot_rollback
-
proxmox_storage_status
-
proxmox_upload_file
-
proxmox_vm_clone
-
proxmox_vm_config
-
proxmox_vm_create
-
proxmox_vm_migrate
-
proxmox_vm_panel
-
proxmox_vm_restart
-
proxmox_vm_start
-
proxmox_vm_status
-
proxmox_vm_stop
-
proxmox_write_file
-
security_end_session
-
ssh_list_sessions
-
ssh_run
-
vm_bulk_action
-
vm_find
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 87caf1a · analyzer v33 · 5d ago
skills & prompt files 1
- agent-rules Showdown76py-BeaconMCP-87caf1a/CLAUDE.md
danger signals1
- over-broad OAuth scope https://mail.google.com/ Showdown76py-BeaconMCP-87caf1a/tests/test_trusted_redirect.py :87
"https://mail.google.com/oauth/cb",
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 82
filesystem 31
- fs Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/__main__.py :7
from pathlib import Path - fs Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/auth.py :32
from pathlib import Path - fs Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/config.py :23
from pathlib import Path - fs Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/dashboard/app.py :15
from pathlib import Path - fs Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/dashboard/db.py :12
from pathlib import Path - fs Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/maintenance/tools.py :5
from pathlib import Path - fs Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/panel.py :25
from pathlib import Path - fs Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/system.py :10
from pathlib import Path - fs Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/server.py :4
from pathlib import Path - fs Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/updates.py :31
import shutil - fs Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/wizard.py :23
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_audit_log_wiring.py :7
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_cloudflare_diagnostic.py :18
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_config_yaml.py :7
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_dashboard_chat.py :9
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_dashboard_integration.py :14
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_dashboard_mcp_apps.py :17
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_dashboard_unit.py :13
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_dashboard_usage.py :8
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_dynamic_registration.py :16
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_integration.py :36
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_mcp_apps_panel.py :12
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_passkeys.py :22
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_proxmox_client.py :13
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_security_hardening.py :12
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_token_persistence.py :6
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_token_store.py :15
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_totp_replay.py :17
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_trusted_redirect.py :11
from pathlib import Path - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_updates.py :19
import shutil - fs (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_wizard.py :5
from pathlib import Path
shell / exec 2
- shell Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/updates.py :32
import subprocess - shell (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_updates.py :20
import subprocess
network 5
- net Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/__main__.py :1079
from urllib.parse import urlencode, urlparse - net Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/auth.py :34
from urllib.parse import urlparse - net Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/bmc/redfish.py :27
import httpx - net Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/client.py :10
from requests.exceptions import ConnectionError, Timeout - net (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_proxmox_client.py :16
from requests.exceptions import ConnectionError as RequestsConnectionError
secrets 4
- secrets Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/__main__.py :2231
chat_status = "enabled" if os.environ.get("GEMINI_API_KEY") else "disabled, tokens only" - secrets Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/config.py :325
"password": os.environ.get("ILO_PASSWORD", ""), - secrets Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/dashboard/__init__.py :33
return is_enabled() and bool(os.environ.get("GEMINI_API_KEY")) - secrets Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/dashboard/session.py :33
raw = os.environ.get("BEACONMCP_SESSION_KEY", "").strip()
database 4
- db Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/auth.py :25
import sqlite3 - db Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/dashboard/db.py :10
import sqlite3 - db Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/dashboard/dyn_reg.py :21
import sqlite3 - db (weak) Showdown76py-BeaconMCP-87caf1a/tests/test_dashboard_unit.py :669
import sqlite3
tool registrations 49
- bmc_list_devices Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/bmc/tools.py :49
- bmc_server_info Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/bmc/tools.py :62
- bmc_health_status Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/bmc/tools.py :83
- bmc_power_status Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/bmc/tools.py :104
- bmc_power_on Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/bmc/tools.py :121
- bmc_power_off Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/bmc/tools.py :138
- bmc_power_reset Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/bmc/tools.py :159
- bmc_get_event_log Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/bmc/tools.py :176
- beaconmcp_check_update Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/maintenance/tools.py :29
- beaconmcp_self_update Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/maintenance/tools.py :61
- cluster_overview Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/aggregators.py :249
- cluster_health Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/aggregators.py :273
- vm_find Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/aggregators.py :318
- vm_bulk_action Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/aggregators.py :340
- proxmox_list_nodes Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/monitoring.py :14
- proxmox_node_status Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/monitoring.py :60
- proxmox_list_vms Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/monitoring.py :90
- proxmox_vm_status Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/monitoring.py :132
- proxmox_get_logs Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/monitoring.py :182
- proxmox_get_tasks Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/monitoring.py :226
- proxmox_vm_panel Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/panel.py :99
- proxmox_logs_panel Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/panel.py :121
- cluster_overview_interactive Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/panel.py :172
- proxmox_read_file Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/system.py :141
- proxmox_write_file Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/system.py :192
- proxmox_upload_file Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/system.py :216
- proxmox_download_file Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/system.py :369
- proxmox_list_transfers Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/system.py :579
- proxmox_delete_transfer Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/system.py :606
- proxmox_storage_status Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/system.py :623
- proxmox_network_config Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/system.py :664
- proxmox_run Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/system.py :760
- proxmox_vm_start Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/vms.py :70
- proxmox_vm_stop Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/vms.py :87
- proxmox_vm_restart Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/vms.py :105
- proxmox_vm_create Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/vms.py :123
- proxmox_vm_clone Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/vms.py :141
- proxmox_vm_migrate Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/vms.py :169
- proxmox_vm_config Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/vms.py :192
- proxmox_snapshot_list Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/vms.py :228
- proxmox_snapshot_create Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/vms.py :244
- proxmox_snapshot_rollback Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/vms.py :284
- proxmox_snapshot_delete Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/vms.py :303
- proxmox_backup_create Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/vms.py :321
- proxmox_backup_list Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/vms.py :349
- proxmox_backup_restore Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/proxmox/vms.py :381
- security_end_session Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/security/tools.py :11
- ssh_run Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/ssh/tools.py :38
- ssh_list_sessions Showdown76py-BeaconMCP-87caf1a/src/beaconmcp/ssh/tools.py :107
declared dependencies 19
- mcp@>=1.0,<2
- proxmoxer@*
- requests@*
- python-hpilo@*
- asyncssh@*
- python-dotenv@*
- pyyaml@*
- pyotp@*
- webauthn@>=2,<4
- qrcode@*
- cryptography@>=42
- jinja2@>=3
- google-genai@>=1.0
- httpx@>=0.27
- anyio@>=4
- textual@>=0.85
- pytest@*
- pytest-asyncio@*
- ruff@*