github Python analyzed 87caf1a

Showdown76py/BeaconMCP

github

Remote MCP server for Proxmox VE clusters and BMC-managed hardware.

maintainer
Showdown76py
license
NOASSERTION
first seen
2026-06-11
last seen
2026-07-29
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 49 tools
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
skills & danger signals github-tarball
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

danger signals1

code evidence vHEAD · github-tarball
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@*