Skip to content

Sync upstream v0.4.9 + port proxmox-skill integration#1

Open
Skippy-the-Magnificent-one wants to merge 108 commits into
mainfrom
feat/upstream-sync-plus-skill-integration
Open

Sync upstream v0.4.9 + port proxmox-skill integration#1
Skippy-the-Magnificent-one wants to merge 108 commits into
mainfrom
feat/upstream-sync-plus-skill-integration

Conversation

@Skippy-the-Magnificent-one

Copy link
Copy Markdown
Collaborator

What this does

Part 1: Upstream sync (RekklesNA/ProxmoxMCP-Plus v0.4.9)

  • 108 commits, 134 files changed
  • Persistent job store and OpenAPI job routes
  • VM cloning tool (clone_vm)
  • Container exec via SSH (PR #30)
  • Security hardening (command policy gateway)
  • Observability/metrics module
  • Streamable HTTP Docker mode
  • Home Assistant schema compatibility
  • Plugin registry and tool registration system
  • PyPI + GHCR publishing support
  • 14 releases of bug fixes (v0.1.0 through v0.4.9)

Part 2: rodaddy/proxmox-skill port (1,349 new lines)

Ported from rodaddy/proxmox-skill (TypeScript → Python):

Module Lines What
core/cluster_ssh.py 348 Cluster-aware SSH routing -- connect to primary node, Proxmox routes pct exec automatically
core/node_discovery.py 341 Parallel multi-node container/VM discovery via asyncio
tools/streaming_exec.py 178 MCP tools: execute_container_command_streaming + execute_node_command
tools/monitor.py 233 MCP tool: get_cluster_overview -- real-time cluster snapshot
container_manager.py enhanced Cluster-aware fallback when node is unknown

All backward-compatible. SSH tools only activate when SSH is configured. Registered via plugin system.

solanoepalacio and others added 30 commits March 4, 2026 19:01
  The Proxmox REST API has no endpoint for executing commands inside LXC
  containers (unlike QEMU VMs which use the guest agent). This adds support
  by SSHing to the Proxmox node and invoking .

  Changes:
  - config/models.py: Add SSHConfig model (user, port, key_file, password,
    host_overrides, use_sudo) and attach it to the root Config
  - tools/console/container_manager.py: New ContainerConsoleManager class
    that verifies container state, opens a per-call paramiko SSH connection
    to the appropriate node, and runs pct exec
  - tools/containers.py: Add execute_command() method (single-target
    selector); wire ContainerConsoleManager into ContainerTools.__init__
  - tools/definitions.py: Add EXECUTE_CONTAINER_COMMAND_DESC
  - server.py: Register execute_container_command tool; pass config.ssh to
    ContainerTools
  - pyproject.toml: Add paramiko>=3.0.0,<4.0.0 dependency
  - tests/test_container_console.py: 7 unit tests covering success,
    non-zero exit, stopped container, SSH failure, host_overrides,
    use_sudo, and password auth fallback
Add `execute_container_command` tool
Implements robust support for distributing the server as a self-bootstrapping .mcpb bundle. Includes absolute import path normalization, automatic dependency installation via main.py wrapper, and enhanced configuration handling for MCP Hub environments (capitalization normalization, path injection). Also adds Github Actions CI for manifest validation.

# Conflicts:
#	pyproject.toml
#	setup.py
#	src/proxmox_mcp/__init__.py
#	src/proxmox_mcp/server.py
#	src/proxmox_mcp/tools/containers.py
#	start_openapi.sh
#	tests/test_server.py
feat: add comprehensive MCP Bundle (.mcpb) support
Fix hatch wheel package selection for CI installs
Implement three new tools for LXC container management:
- get_container_config: retrieves full configuration via Proxmox API
- get_container_ip: extracts current IP addresses from interfaces
- update_container_ssh_keys: injects or replaces root SSH keys

These additions include a bug fix for SSH key path expansion, updated
documentation, and comprehensive test coverage for both API-based and
SSH-based tools.
Add [project.scripts] entry point in pyproject.toml and OpenCode
configuration examples enabling users to run ProxmoxMCP-Plus directly
from GitHub without cloning.

*Co-authored with AI: OpenCode (ollama-cloud/glm-5)*

Co-authored-by: OpenCode (ollama-cloud/glm-5) <noreply@opencode.ai>
Co-authored-by: Michael Conrad <michael@newsrx.com>
feat: add LXC onboot and nesting options to create_container
RekklesNA and others added 27 commits April 24, 2026 21:57
* Add persistent job store and release v0.3.0

* Clean up root documentation layout

* Fix CI typing issues for v0.3.0 release

* Reject unknown Paramiko SSH host keys

* Hide internal job route error details
Reorganize tests and docs support files
Prepare ProxmoxMCP-Plus v0.4.0 for release.
Release 0.4.1 with safer defaults and packaging/docs fixes.
Fix Home Assistant get_containers schema compatibility
Release 0.4.6 with API tunnel routing, cross-process job refresh, safer LXC retry persistence, safer snapshot rollback, and real-node storage status lookups.
…lease

Release 0.4.7 streamable HTTP Docker mode
Merge release branch after CI and CodeQL passed.
Adds cluster-aware SSH routing, streaming exec, parallel node discovery,
and real-time cluster monitoring -- ported from rodaddy/proxmox-skill
(TypeScript) into this Python project.

New modules:
- core/cluster_ssh.py: Connect to primary node, Proxmox routes pct exec
  to the correct node automatically. Streaming + buffered exec modes.
- core/node_discovery.py: Parallel multi-node container/VM discovery
  via asyncio + ThreadPoolExecutor.
- tools/streaming_exec.py: MCP tools execute_container_command_streaming
  and execute_node_command with cluster-aware routing.
- tools/monitor.py: MCP tool get_cluster_overview for real-time cluster
  snapshot (per-node resources + aggregate stats).

Enhanced:
- container_manager.py: Optional cluster-aware fallback when node is
  unknown or direct SSH fails. Fully backward-compatible.
- Registered via plugin system (StreamingExecToolsPlugin, MonitorToolsPlugin)
- SSH tools activate only when SSH is configured (matching existing pattern)
- Monitor tools work without SSH (API-only for discovery)

Attribution: https://github.com/rodaddy/proxmox-skill
Syncs rodaddy/ProxmoxMCP-Plus to RekklesNA v0.4.9 including:
- Persistent job store and OpenAPI job routes
- VM cloning tool
- Container exec via SSH (PR #30)
- Security hardening (command policy gateway)
- Observability/metrics
- Streamable HTTP Docker mode
- Home Assistant schema compat
- Plugin registry and tool registration system
- PyPI and GHCR publishing
- 14 releases worth of bug fixes and improvements
Adds cluster-aware SSH routing, streaming exec, parallel node discovery,
and real-time cluster monitoring -- ported from rodaddy/proxmox-skill.

New MCP tools:
- execute_container_command_streaming (no node required)
- execute_node_command (raw SSH to nodes)
- get_cluster_overview (real-time cluster snapshot)

Enhanced:
- container_manager.py: cluster-aware fallback when node unknown
- All registered via plugin system, backward-compatible

Attribution: https://github.com/rodaddy/proxmox-skill
@gitguardian

gitguardian Bot commented May 9, 2026

Copy link
Copy Markdown

⚠️ GitGuardian has uncovered 2 secrets following the scan of your pull request.

Please consider investigating the findings and remediating the incidents. Failure to do so may lead to compromising the associated services or software components.

🔎 Detected hardcoded secrets in your pull request
GitGuardian id GitGuardian status Secret Commit Filename
32693062 Triggered Generic Password aedf48b tests/test_container_console.py View secret
32693062 Triggered Generic Password d280b3d tests/test_container_console.py View secret
🛠 Guidelines to remediate hardcoded secrets
  1. Understand the implications of revoking this secret by investigating where it is used in your code.
  2. Replace and store your secrets safely. Learn here the best practices.
  3. Revoke and rotate these secrets.
  4. If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.

To avoid such incidents in the future consider


🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.

@github-advanced-security

Copy link
Copy Markdown

You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool.

What Enabling Code Scanning Means:

  • The 'Security' tab will display more code scanning analysis results (e.g., for the default branch).
  • Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results.
  • You will be able to see the analysis results for the pull request's branch on this overview once the scans have completed and the checks have passed.

For more information about GitHub Code Scanning, check out the documentation.

if self._ssh_config.strict_host_key_checking:
client.set_missing_host_key_policy(paramiko.RejectPolicy())
else:
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants