You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Action catalog for the system extension's MCP surface. Lists every system_*, system_sdwan_*, kubernetes_*, and docker_* action callable via the Powernode MCP server.
Audience: AI Concierge prompt authors, external operators integrating with the platform's MCP server, contributors adding new actions.
Where actions are registered (architecture note)
Architecture: The MCP registry (action-name → tool-class mapping) lives in the parent platform at server/app/services/ai/tools/platform_api_tool_registry.rb. The tool class implementations live in the extension at extensions/system/server/app/services/ai/tools/. Rails autoloading resolves the class names across both locations.
To add a new MCP action: register the action-name → class-name mapping in the parent's registry file, then implement the action method in the corresponding tool class inside the extension. Both repos commit; bump the submodule pointer.
To regenerate the parent's full tool catalog with parameter schemas:
cd server && bundle exec rails mcp:generate_tool_catalog
# → writes to docs/platform/MCP_TOOL_CATALOG.md (gitignored)
This document is the system-extension subset of that catalog — manually curated, scannable for operator workflows.
Permission model
Every action requires a permission grant on the calling user/agent. Permissions follow the schema <resource>.<verb> (e.g., system.nodes.read, system.modules.write). The mapping lives in server/db/migrate/*_permissions.rb (parent platform). Agents have permissions assigned via Ai::AgentPermission.
Action catalog
system_* — Fleet, lifecycle, modules (42 actions)
Backed by Ai::Tools::SystemFleetTool (parent platform) + Ai::Tools::DockerProvisioningTool (managed Docker runtimes).
Nodes + instances
Action
What it does
Audience
system_list_nodes
List Node rows (filter by status, lifecycle_class, etc.)
Trigger provider VM creation; creates Task; returns NodeInstance
operator, agent
system_terminate_instance
Destroy provider VM; cascade-FK cleanup
operator, agent
system_drift_report
Compare running module digests vs assigned modules
operator, agent
Templates + modules
Action
What it does
system_list_templates
List NodeTemplates
system_get_template
Fetch a Template + its module assignments
system_assign_module_to_template
Add a module to a Template (with optional metadata like target_cluster_id)
system_list_modules
List NodeModules
system_get_module
Fetch a Module + its categories + dependencies
system_list_module_versions
List versions of a module
system_promote_module_version
Move a version through lifecycle states (draft → staging → blessed → live)
Tasks
Action
What it does
system_list_tasks
List Tasks (filter by status, type)
system_cancel_task
Cancel a pending or in-flight Task
Instance pools (slice 7)
Action
What it does
system_list_instance_pools
List InstancePools
system_get_instance_pool
Fetch a pool + its members
system_create_instance_pool
Create a new pool (target_size, min, max, region, type, template)
system_drain_instance_pool
Stop replenishing + destroy/release members
system_acquire_pooled_instance
Atomic claim of a ready member
system_replenish_instance_pool
Manual trigger of the reaper for this pool
Container runtimes
Action
What it does
system_provision_docker_runtime
Phase 1 Docker daemon provisioning on a NodeInstance
system_decommission_docker_runtime
Destroy managed DockerHost row + Vault TLS material
system_mark_docker_ready
Agent-side ack endpoint (mostly internal)
system_list_managed_docker_hosts
List Powernode-managed Docker hosts (excludes externally-registered)
Package repositories + catalog
Backed by Ai::Tools::SystemPackageRepositoryTool. Manages apt/rpm package repositories, browses the synced catalog with rich filtering, and materializes packages into NodeModules with full dependency closure.
Action
What it does
Audience
system_list_package_repositories
List accessible apt/rpm repositories (account-scoped + shared); filter by kind and node_platform_ids[]. Each row carries embedding_pending_count for catalog coverage.
operator, agent
system_get_package_repository
Fetch one repository with detail (apt_config, rpm_config, linked NodePlatforms)
operator, agent
system_create_package_repository
Register a new apt/rpm/dnf repository (visibility: shared requires system.package_repositories.manage_shared)
M:N link/unlink between repository and NodePlatform
operator
system_search_packages
Search the synced catalog. Hybrid trigram+embedding ranking (default), pure lexical, or pure semantic. Filters: q, mode (lexical/semantic/hybrid), repository_ids[], kind, architectures[] (canonical, cross-kind expanded), sections[], license, provides (capability lookup), sort, page, per_page. Back-compat with singular repository_id/architecture/section. Response includes similarity (when mode ≠ lexical), provides_names, license, applied_filters echo. total is null under semantic/hybrid (exact COUNT prohibitive on vector-filtered sets).
operator, agent
system_discover_packages
Intent-based semantic discovery — describe a capability ("reverse proxy", "distributed cache") and get ranked packages. Pure cosine-distance ranking via pgvector. Inputs: intent (required), repository_ids[], kind, architectures[], license, top_k (1-50, default 10). Returns {results: [{package_id, name, version, architecture, summary, similarity, repository_id, reason}], seed_count, confidence (high/medium/low)}. Use system_search_packages instead when you already know the package name.
operator, agent
system_get_package
Fetch one Package row with full metadata (depends, recommends, provides, conflicts, license, maintainer)
operator, agent
system_resolve_package_dependencies
Preview the dependency closure of a package without writes — required + recommends candidates the operator can opt into
operator, agent
system_create_module_from_package
Materialize a package + transitive deps as NodeModule rows + ModuleDependency edges; dispatches CI build per architecture
operator, agent
system_list_package_module_links
Auditable provenance — which NodeModules came from which packages, top-level vs auto-generated
operator, agent
system_refresh_package_module
Re-materialize a NodeModule when upstream drifts (replays persisted recommends_chosen for deterministic refreshes)
operator, agent
system_suggest_architectures_for_fleet
T2.B — fleet-aware architecture suggestion for materialization; intersects repo's archs with NodePlatform coverage
operator, agent
Embedding pipeline:Package.embedding (pgvector 1536-dim) is populated by SystemPackageEmbeddingJob (worker-side). The job is auto-enqueued after every sync that upserts ≥1 row, and can be manually run via rake system:packages:backfill_embeddings. Without embeddings, hybrid mode contributes only the trigram leg — search still works, just without semantic ranking.
List KubernetesNodes for a cluster (control-plane + workers)
kubernetes_decommission_cluster
Cascade-delete cluster + its KubernetesNodes (NodeInstances NOT terminated)
kubernetes_get_kubeconfig
Retrieve kubeconfig YAML + api_endpoint VIP
docker_* — Docker daemon management (52 actions)
Backed by 7 tool classes: DockerContainerTool, DockerServiceTool, DockerStackTool, DockerClusterTool, DockerHostTool, DockerImageTool, DockerNetworkVolumeTool. Works on both managed (Powernode-provisioned) and external (operator-registered) hosts. Per memory powernode.docker_mcp_tools.