diff --git a/references/api.md b/references/api.md index b339369..45f3b14 100644 --- a/references/api.md +++ b/references/api.md @@ -1,12 +1,12 @@ -# Komodo API — Endpoint-to-Tool Mapping (v2.0) +# Komodo API — Endpoint-to-Tool Mapping (v2.1) -Full reference of Komodo RPC endpoints and which MCP tool handles them. +Full reference of Komodo RPC endpoints (OpenAPI v2.3.3) and which MCP tool handles them. ## Auth | Endpoint | Method | Description | |----------|--------|-------------| -| `POST /auth/login` | — | JWT login (handled internally by komodo-client.ts) | +| `POST /auth/login/LoginLocalUser` | — | JWT login (handled internally by komodo-client.ts) | | API Key headers | — | `X-Api-Key` + `X-Api-Secret` (preferred, set via env vars) | --- @@ -24,48 +24,17 @@ Full reference of Komodo RPC endpoints and which MCP tool handles them. | `read/ListDeployments` | deployment | | `read/ListAlerters` | alerter | | `read/ListImageRegistryAccounts` | image_registry_account | -| `read/ListSyncResources` | sync_resource | +| `read/ListResourceSyncs` | sync_resource | | `read/ListUsers` | user | | `read/ListTags` | tag | -| `read/ListExecutions` | execution | -| `read/ListAccessRequests` | access_request | | `read/ListActions` | action | | `read/ListRepos` | repo | | `read/ListBuilders` | builder | | `read/ListSwarms` | swarm | | `read/ListVariables` | variable | | `read/ListUserGroups` | user_group | -| `read/ListAlerts` | alert | -| `read/ListTerminals` | terminal | | `read/ListGitProviderAccounts` | git_provider_account | -### Search Endpoints (via `search` param) - -| Komodo RPC | Resource Type | -|------------|---------------| -| `read/SearchStacks` | stack | -| `read/SearchBuilds` | build | -| `read/SearchServers` | server | -| `read/SearchProcedures` | procedure | -| `read/SearchDeployments` | deployment | -| `read/SearchAlerters` | alerter | -| `read/SearchImageRegistryAccounts` | image_registry_account | -| `read/SearchSyncResources` | sync_resource | - -### Other Read → `komodo_list` - -| Komodo RPC | Notes | -|------------|-------| -| `read/ListStackServices` | List stack services | -| `read/GetStackServices` | List stack services | -| `read/GetGlobalStats` | Global statistics | -| `read/GetResourceStats` | Resource statistics | -| `read/ListTagMappings` | Tag mappings | -| `read/ListBinding` | Bindings | -| `read/ListResources` | All resources | -| `read/ListResourceSyncContents` | Sync contents | -| `read/ListServerStats` | Server statistics | - --- ## `komodo_get` — Get Single Resource @@ -79,24 +48,15 @@ Full reference of Komodo RPC endpoints and which MCP tool handles them. | `read/GetDeployment` | deployment | | `read/GetAlerter` | alerter | | `read/GetImageRegistryAccount` | image_registry_account | -| `read/GetSyncResource` | sync_resource | -| `read/GetUser` | user | +| `read/GetResourceSync` | sync_resource | | `read/GetTag` | tag | -| `read/GetAccessRequest` | access_request | | `read/GetAction` | action | | `read/GetRepo` | repo | | `read/GetBuilder` | builder | | `read/GetSwarm` | swarm | | `read/GetVariable` | variable | | `read/GetUserGroup` | user_group | -| `read/GetAlert` | alert | | `read/GetGitProviderAccount` | git_provider_account | -| `read/GetBuildAggregatedStatus` | Build aggregated status | -| `read/GetConcurrencyLimitUsage` | Concurrency limits | -| `read/GetResourceSyncDifferences` | Sync differences | -| `read/GetResource` | Single resource | -| `read/GetBinding` | Single binding | -| `read/GetLicenseInfo` | License info | --- @@ -119,9 +79,7 @@ Full reference of Komodo RPC endpoints and which MCP tool handles them. | `write/CreateSwarm` | swarm | | `write/CreateVariable` | variable | | `write/CreateUserGroup` | user_group | -| `write/CreateTerminal` | terminal | | `write/CreateGitProviderAccount` | git_provider_account | -| `write/CreateTagMapping` | Tag mapping | --- @@ -137,7 +95,6 @@ Full reference of Komodo RPC endpoints and which MCP tool handles them. | `write/UpdateAlerter` | alerter | | `write/UpdateImageRegistryAccount` | image_registry_account | | `write/UpdateResourceSync` | sync_resource | -| `write/UpdateUser` | user | | `write/UpdateTagColor` | tag | | `write/UpdateAction` | action | | `write/UpdateRepo` | repo | @@ -147,50 +104,6 @@ Full reference of Komodo RPC endpoints and which MCP tool handles them. | `write/UpdateUserGroup` | user_group | | `write/UpdateGitProviderAccount` | git_provider_account | -### Other Write → `komodo_update` - -| Komodo RPC | Notes | -|------------|-------| -| `write/UpdateStackServiceNames` | Stack service names | -| `write/UpdateServerTemplate` | Server template | -| `write/UpdateServerTemplateInstances` | Server template instances | -| `write/BindStack` | Bind stack | -| `write/BindServer` | Bind server | -| `write/UpdateBinding` | Update binding | -| `write/UpdateAllBindings` | Update all bindings | -| `write/MarkResourceSyncDeployed` | Mark sync deployed | -| `write/UpdateUserPermissions` | User permissions | -| `write/UpdateConcurrencyLimit` | Concurrency limits | -| `write/AcknowledgeAccessRequest` | Access request | -| `write/UpdateTagMapping` | Tag mapping | -| `write/UpdateProcedureSchedule` | Procedure schedule | -| `write/UpdateUserAdmin` | User admin status | -| `write/UpdateUserBasePermissions` | User base permissions | -| `write/UpdateServiceUserDescription` | Service user desc | -| `write/UpdateOnboardingKey` | Onboarding key | -| `write/UpdatePermissionOnResourceType` | Permission on type | -| `write/UpdatePermissionOnTarget` | Permission on target | -| `write/UpdateResourceMeta` | Resource metadata | -| `write/RefreshStackCache` | Refresh stack cache | -| `write/RefreshBuildCache` | Refresh build cache | -| `write/RefreshRepoCache` | Refresh repo cache | -| `write/RefreshResourceSyncPending` | Refresh sync pending | -| `write/CommitSync` | Commit sync | -| `write/RotateServerKeys` | Rotate server keys | -| `write/WriteBuildFileContents` | Write build file | -| `write/WriteStackFileContents` | Write stack file | -| `write/WriteSyncFileContents` | Write sync file | -| `write/CheckDeploymentForUpdate` | Check deployment update | -| `write/CheckStackForUpdate` | Check stack update | -| `write/SetEveryoneUserGroup` | Set everyone group | -| `write/SetUsersInUserGroup` | Set users in group | -| `write/SetLastSeenUpdate` | Set last seen | -| `write/PushRecentlyViewed` | Push recently viewed | -| `write/UpdateVariableDescription` | Variable description | -| `write/UpdateVariableIsSecret` | Variable secret flag | -| `write/UpdateTagColor` | Tag color | -| `write/UpdateServerPublicKey` | Server public key | - --- ## `komodo_delete` — Delete Resource @@ -203,7 +116,7 @@ Full reference of Komodo RPC endpoints and which MCP tool handles them. | `write/DeleteProcedure` | procedure | | `write/DeleteDeployment` | deployment | | `write/DeleteAlerter` | alerter | -| `write/DeleteSyncResource` | sync_resource | +| `write/DeleteResourceSync` | sync_resource | | `write/DeleteTag` | tag | | `write/DeleteAction` | action | | `write/DeleteRepo` | repo | @@ -211,20 +124,8 @@ Full reference of Komodo RPC endpoints and which MCP tool handles them. | `write/DeleteSwarm` | swarm | | `write/DeleteVariable` | variable | | `write/DeleteUserGroup` | user_group | -| `write/DeleteTerminal` | terminal | | `write/DeleteGitProviderAccount` | git_provider_account | -### Other Delete → `komodo_delete` - -| Komodo RPC | Notes | -|------------|-------| -| `write/DeleteAllTerminals` | Delete all terminals | -| `write/DeleteApiKeyForServiceUser` | Delete API key | -| `write/DeleteImageRegistryAccount` | Delete registry account | -| `write/DeleteOnboardingKey` | Delete onboarding key | -| `write/DeleteUser` | Delete user | -| `write/DeleteTagMapping` | Delete tag mapping | - --- ## `komodo_execute` — Execute Operations @@ -234,19 +135,14 @@ Full reference of Komodo RPC endpoints and which MCP tool handles them. |-----------|------------| | `run_build` | `execute/RunBuild` | | `deploy_stack` | `execute/DeployStack` | -| `deploy_stack_service` | `execute/DeployStackService` | +| `deploy_stack_service` | `execute/RunStackService` | | `deploy` | `execute/Deploy` | | `deploy_stack_if_changed` | `execute/DeployStackIfChanged` | | `destroy_stack` | `execute/DestroyStack` | | `destroy_container` | `execute/DestroyContainer` | | `destroy_deployment` | `execute/DestroyDeployment` | -| `run_deployment_execute` | `execute/Deploy` | -| `run_deployment_redeploy` | `execute/Deploy` | -| `run_deployment_destroy` | `execute/DestroyDeployment` | -| `run_deployment_stop` | `execute/StopDeployment` | -| `run_deployment_logs` | `execute/RunDeploymentLogs` | -| `run_deployment_action` | `execute/RunDeploymentAction` | -| `run_deployment_sync` | `execute/RunDeploymentSync` | +| `pull_stack` | `execute/PullStack` | +| `pull_deployment` | `execute/PullDeployment` | ### Repo Operations | Operation | Komodo RPC | @@ -254,7 +150,6 @@ Full reference of Komodo RPC endpoints and which MCP tool handles them. | `build_repo` | `execute/BuildRepo` | | `clone_repo` | `execute/CloneRepo` | | `pull_repo` | `execute/PullRepo` | -| `pull_deployment` | `execute/PullDeployment` | | `cancel_repo_build` | `execute/CancelRepoBuild` | | `clear_repo_cache` | `execute/ClearRepoCache` | @@ -262,34 +157,20 @@ Full reference of Komodo RPC endpoints and which MCP tool handles them. | Operation | Komodo RPC | |-----------|------------| | `run_procedure` | `execute/RunProcedure` | -| `run_procedure_stage` | `execute/RunProcedureStage` | | `run_action` | `execute/RunAction` | +| `run_sync` | `execute/RunSync` | | `cancel_action` | `execute/CancelAction` | | `cancel_build` | `execute/CancelBuild` | | `cancel_procedure` | `execute/CancelProcedure` | -### Stack Operations +### Stack Lifecycle | Operation | Komodo RPC | |-----------|------------| -| `run_stack_refresh_cache` | `execute/RunStackRefreshCache` | -| `run_stack_refresh_content` | `execute/RunStackRefreshContent` | -| `run_stack_pull` | `execute/RunStackPull` | -| `run_stack_pull_deployment` | `execute/RunStackPullDeployment` | -| `run_stack_stop` | `execute/StopStack` | -| `run_stack_restart` | `execute/RestartStack` | -| `run_stack_pause` | `execute/PauseStack` | -| `run_stack_unpause` | `execute/UnpauseStack` | -| `run_stack_remove_orphan_containers` | `execute/RunStackRemoveOrphanContainers` | -| `run_stack_toggle_service_dependencies` | `execute/RunStackToggleServiceDependencies` | -| `run_stack_auto_update` | `execute/RunStackAutoUpdate` | -| `run_stack_commit` | `execute/RunStackCommit` | | `start_stack` | `execute/StartStack` | | `stop_stack` | `execute/StopStack` | | `restart_stack` | `execute/RestartStack` | | `pause_stack` | `execute/PauseStack` | | `unpause_stack` | `execute/UnpauseStack` | -| `run_resource_sync` | `execute/RunResourceSync` | -| `run_sync_deployment` | `execute/RunSyncDeployment` | ### Container Lifecycle | Operation | Komodo RPC | @@ -317,13 +198,10 @@ Full reference of Komodo RPC endpoints and which MCP tool handles them. ### Server Operations | Operation | Komodo RPC | |-----------|------------| -| `run_server_refresh` | `execute/RunServerRefresh` | | `run_server_refresh_containers` | `execute/RunServerRefreshContainers` | -| `run_server_update_periphery` | `execute/RunServerUpdatePeriphery` | | `run_server_prune_images` | `execute/PruneImages` | | `run_server_prune_containers` | `execute/PruneContainers` | | `run_server_prune_networks` | `execute/PruneNetworks` | -| `run_server_stats` | `execute/RunServerStats` | | `run_server_run_command` | `execute/RunServerRunCommand` | | `run_server_scripts` | `execute/RunServerScripts` | | `run_server_copy` | `execute/RunServerCopy` | @@ -374,16 +252,11 @@ Full reference of Komodo RPC endpoints and which MCP tool handles them. ### Admin & Misc | Operation | Komodo RPC | |-----------|------------| -| `run_server_refresh` | `execute/RunServerRefresh` | -| `run_server_refresh_containers` | `execute/RunServerRefreshContainers` | -| `run_server_update_periphery` | `execute/RunServerUpdatePeriphery` | -| `global_auto_update` | `execute/GlobalAutoUpdate` | | `backup_core_database` | `execute/BackupCoreDatabase` | | `rotate_core_keys` | `execute/RotateCoreKeys` | +| `global_auto_update` | `execute/GlobalAutoUpdate` | | `send_alert` | `execute/SendAlert` | | `test_alerter` | `execute/TestAlerter` | -| `sleep` | `execute/Sleep` | -| `get_mcp_token` | `execute/GetMcpToken` | --- @@ -481,3 +354,120 @@ Full reference of Komodo RPC endpoints and which MCP tool handles them. | full_actions | `read/ListFullActions` | | full_alerters | `read/ListFullAlerters` | | full_resource_syncs | `read/ListFullResourceSyncs` | +| swarm_configs | `read/ListSwarmConfigs` | +| swarm_networks | `read/ListSwarmNetworks` | +| swarm_nodes | `read/ListSwarmNodes` | +| swarm_secrets | `read/ListSwarmSecrets` | +| swarm_services | `read/ListSwarmServices` | +| swarm_stacks | `read/ListSwarmStacks` | +| swarm_tasks | `read/ListSwarmTasks` | +| git_providers_from_config | `read/ListGitProvidersFromConfig` | +| image_registries_from_config | `read/ListImageRegistriesFromConfig` | +| common_build_extra_args | `read/ListCommonBuildExtraArgs` | +| common_deployment_extra_args | `read/ListCommonDeploymentExtraArgs` | +| common_stack_build_extra_args | `read/ListCommonStackBuildExtraArgs` | +| common_stack_extra_args | `read/ListCommonStackExtraArgs` | +| image_history | `read/ListImageHistory` | +| all_stack_services | `read/ListAllStackServices` | + +--- + +## `komodo_copy` — Copy Resources + +| Resource Type | Komodo RPC | +|---------------|------------| +| stack | `write/CopyStack` | +| build | `write/CopyBuild` | +| server | `write/CopyServer` | +| deployment | `write/CopyDeployment` | +| procedure | `write/CopyProcedure` | +| alerter | `write/CopyAlerter` | +| action | `write/CopyAction` | +| repo | `write/CopyRepo` | +| builder | `write/CopyBuilder` | +| swarm | `write/CopySwarm` | +| sync_resource | `write/CopyResourceSync` | + +--- + +## `komodo_rename` — Rename Resources + +| Resource Type | Komodo RPC | +|---------------|------------| +| stack | `write/RenameStack` | +| build | `write/RenameBuild` | +| server | `write/RenameServer` | +| deployment | `write/RenameDeployment` | +| procedure | `write/RenameProcedure` | +| alerter | `write/RenameAlerter` | +| action | `write/RenameAction` | +| repo | `write/RenameRepo` | +| builder | `write/RenameBuilder` | +| swarm | `write/RenameSwarm` | +| tag | `write/RenameTag` | +| user_group | `write/RenameUserGroup` | + +--- + +## Other Notable Endpoints (not exposed as MCP tools) + +These exist in the API but are not currently mapped to MCP tools. They can be added if needed. + +### Auth (31 endpoints) +GitHub/Google/OIDC OAuth, passkey/TOTP 2FA, API key management, account management. + +### Read — Additional +| Komodo RPC | Description | +|------------|-------------| +| `read/GetCoreInfo` | Core API configuration info | +| `read/GetVersion` | Core API version | +| `read/GetSystemInformation` | Server system information | +| `read/GetSystemStats` | Server system stats | +| `read/GetDeploymentStats` | Deployment container stats | +| `read/GetDeploymentContainer` | Deployment container info | +| `read/GetHistoricalServerStats` | Timeseries server stats | +| `read/GetBuildMonthlyStats` | Monthly build stats | +| `read/GetPermission` | User permission level on resource | +| `read/GetUsername` | Get username by ID | +| `read/GetResourceMatchingContainer` | Find resource for container | +| `read/GetUpdate` | Get update data | +| `read/FindUser` | Find user (admin) | +| `read/Get*ActionState` (9) | Action state for each resource type | +| `read/ExportAllResourcesToToml` | Export all resources to TOML | +| `read/ExportResourcesToToml` | Export specific resources to TOML | + +### Write — Additional +| Komodo RPC | Description | +|------------|-------------| +| `write/CreateLocalUser` | Create local user (admin) | +| `write/CreateServiceUser` | Create service user (admin) | +| `write/CreateNetwork` | Create docker network | +| `write/CreateDeploymentFromContainer` | Create deployment from container | +| `write/CreateApiKeyForServiceUser` | Create API key for service user | +| `write/AddUserToUserGroup` | Add user to group (admin) | +| `write/RemoveUserFromUserGroup` | Remove user from group (admin) | +| `write/CloseAlert` | Close alert (admin) | +| `write/BatchDeleteAllTerminals` | Batch delete terminals | +| `write/RefreshStackCache` | Refresh stack cache | +| `write/RefreshBuildCache` | Refresh build cache | +| `write/RefreshRepoCache` | Refresh repo cache | +| `write/RefreshResourceSyncPending` | Refresh sync pending | +| `write/CommitSync` | Commit sync | +| `write/CheckDeploymentForUpdate` | Check deployment update | +| `write/CheckStackForUpdate` | Check stack update | +| `write/WriteBuildFileContents` | Write build file contents | +| `write/WriteStackFileContents` | Write stack file contents | +| `write/WriteSyncFileContents` | Write sync file contents | +| `write/RotateServerKeys` | Rotate server keys | +| `write/UpdatePermissionOnResourceType` | Update permission on type | +| `write/UpdatePermissionOnTarget` | Update permission on target | +| `write/UpdateResourceMeta` | Update resource metadata | +| `write/UpdateServerPublicKey` | Update server public key | +| `write/UpdateUserAdmin` | Update user admin status | +| `write/UpdateUserBasePermissions` | Update user base permissions | +| `write/UpdateVariableDescription` | Update variable description | +| `write/UpdateVariableIsSecret` | Update variable secret flag | +| `write/SetEveryoneUserGroup` | Set everyone group | +| `write/SetUsersInUserGroup` | Set users in group | +| `write/SetLastSeenUpdate` | Set last seen update | +| `write/PushRecentlyViewed` | Push recently viewed | diff --git a/scripts/test_write_lifecycle.py b/scripts/test_write_lifecycle.py index 24e3e61..5e72e7b 100644 --- a/scripts/test_write_lifecycle.py +++ b/scripts/test_write_lifecycle.py @@ -254,13 +254,6 @@ RESOURCE_DEFS: dict[str, dict] = { "name_field": "name", "has_update": True, }, - "terminal": { - "create_params": lambda name: {"name": name}, - "update_params": None, # No update endpoint - "id_field": "id", - "name_field": "name", - "has_update": False, - }, } # Test tiers @@ -268,7 +261,6 @@ TIERS: list[list[str]] = [ ["tag", "variable", "user_group"], ["procedure", "action", "repo", "builder", "alerter", "sync_resource"], ["server", "stack", "build", "deployment", "swarm"], - ["terminal"], ] diff --git a/src/index.ts b/src/index.ts index f2cd3cc..ca3648c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -14,6 +14,8 @@ import { summaryInputSchema, handleSummary } from "./tools/summary.js"; import { inspectInputSchema, handleInspect } from "./tools/inspect.js"; import { searchLogsInputSchema, handleSearchLogs } from "./tools/search-logs.js"; import { listDetailInputSchema, handleListDetail } from "./tools/list-detail.js"; +import { copyInputSchema, handleCopy } from "./tools/copy.js"; +import { renameInputSchema, handleRename } from "./tools/rename.js"; const PORT = parseInt(process.env.PORT || "9800", 10); const client = new KomodoClient(); @@ -22,42 +24,42 @@ const transports: Record = {}; function createServerInstance(): McpServer { const server = new McpServer({ name: "komodo-mcp-server", - version: "2.0.0", + version: "2.1.0", }); server.registerTool("komodo_list", { description: - "List or search Komodo resources. resource_type: stack, build, server, procedure, deployment, alerter, image_registry_account, sync_resource, user, tag, execution, access_request, action, repo, builder, swarm, variable, user_group, alert, terminal, git_provider_account. Returns a JSON array.", + "List or search Komodo resources. resource_type: stack, build, server, procedure, deployment, alerter, image_registry_account, sync_resource, user, tag, action, repo, builder, swarm, variable, user_group, git_provider_account. Returns a JSON array.", inputSchema: listInputSchema, }, async (args) => handleList(args, client)); server.registerTool("komodo_get", { description: - "Get a single Komodo resource by ID or name. resource_type: stack, build, server, procedure, deployment, alerter, image_registry_account, sync_resource, user, tag, execution, access_request, action, repo, builder, swarm, variable, user_group, alert, git_provider_account. Returns the full resource object.", + "Get a single Komodo resource by ID or name. resource_type: stack, build, server, procedure, deployment, alerter, image_registry_account, sync_resource, tag, action, repo, builder, swarm, variable, user_group, git_provider_account. Returns the full resource object.", inputSchema: getInputSchema, }, async (args) => handleGet(args, client)); server.registerTool("komodo_create", { description: - "Create a new Komodo resource. resource_type: stack, build, server, procedure, deployment, alerter, image_registry_account, sync_resource, tag, action, repo, builder, swarm, variable, user_group, terminal, git_provider_account. Provide params object with Create* endpoint fields.", + "Create a new Komodo resource. resource_type: stack, build, server, procedure, deployment, alerter, image_registry_account, sync_resource, tag, action, repo, builder, swarm, variable, user_group, git_provider_account. Provide params object with Create* endpoint fields.", inputSchema: createInputSchema, }, async (args) => handleCreate(args, client)); server.registerTool("komodo_update", { description: - "Update an existing Komodo resource by ID. resource_type: stack, build, server, procedure, deployment, alerter, image_registry_account, sync_resource, user, tag, action, repo, builder, swarm, variable, user_group, git_provider_account. Provide params with fields to update.", + "Update an existing Komodo resource by ID. resource_type: stack, build, server, procedure, deployment, alerter, image_registry_account, sync_resource, tag, action, repo, builder, swarm, variable, user_group, git_provider_account. Provide params with fields to update.", inputSchema: updateInputSchema, }, async (args) => handleUpdate(args, client)); server.registerTool("komodo_delete", { description: - "Delete a Komodo resource by ID or name. resource_type: stack, build, server, procedure, deployment, alerter, sync_resource, tag, action, repo, builder, swarm, variable, user_group, terminal, git_provider_account.", + "Delete a Komodo resource by ID or name. resource_type: stack, build, server, procedure, deployment, alerter, sync_resource, tag, action, repo, builder, swarm, variable, user_group, git_provider_account.", inputSchema: deleteInputSchema, }, async (args) => handleDelete(args, client)); server.registerTool("komodo_execute", { description: - "Execute a Komodo operation. 100+ operations including: run_build, deploy_stack, deploy, destroy_stack, run_procedure, run_action, build_repo, clone_repo, pull_repo, container lifecycle (start/stop/restart/pause/unpause), deployment lifecycle, stack lifecycle, server operations (refresh, prune, run_command, scripts, copy, move), swarm operations, batch operations (batch_run_build, batch_deploy, etc.), and admin ops (backup_core_database, global_auto_update).", + "Execute a Komodo operation. Operations include: build/deploy (run_build, deploy, deploy_stack, destroy_stack, pull_stack), repo (build_repo, clone_repo, pull_repo), procedure/action (run_procedure, run_action, run_sync), stack lifecycle (start/stop/restart/pause/unpause), container lifecycle, deployment lifecycle, server ops (refresh_containers, prune_images/containers/networks, run_command, scripts, copy, move), swarm ops (remove nodes/services/configs/secrets/stacks, create/rotate config/secret), batch ops, and admin (backup_core_database, rotate_core_keys, global_auto_update, send_alert, test_alerter).", inputSchema: executeInputSchema, }, async (args) => handleExecute(args, client)); @@ -69,7 +71,7 @@ function createServerInstance(): McpServer { server.registerTool("komodo_summary", { description: - "Get summary/stats for a Komodo resource type. resource_type: build (GetBuildsSummary), deployment (GetDeploymentsSummary), server (GetServersSummary), stack (GetStacksSummary), alerter (GetAlertersSummary), procedure (GetProceduresSummary), sync_resource (GetResourceSyncsSummary), repo (GetReposSummary), builder (GetBuildersSummary), swarm (GetSwarmsSummary), action (GetActionsSummary).", + "Get summary/stats for a Komodo resource type. resource_type: build, deployment, server, stack, alerter, procedure, sync_resource, repo, builder, swarm, action.", inputSchema: summaryInputSchema, }, async (args) => handleSummary(args, client)); @@ -87,10 +89,22 @@ function createServerInstance(): McpServer { server.registerTool("komodo_list_detail", { description: - "Extended listing for specific Docker/infrastructure objects. list_type: containers, all_containers, images, networks, volumes, system_processes, schedules, permissions, api_keys, secrets, updates, build_versions, compose_projects, user_target_permissions, full_stacks, full_builds, full_servers, full_deployments, full_procedures, full_repos, full_builders, full_swarms, full_actions, full_alerters, full_resource_syncs. Optional server filter.", + "Extended listing for Docker/infrastructure objects. list_type: containers, all_containers, images, networks, volumes, system_processes, schedules, permissions, api_keys, secrets, updates, build_versions, compose_projects, user_target_permissions, full_stacks, full_builds, full_servers, full_deployments, full_procedures, full_repos, full_builders, full_swarms, full_actions, full_alerters, full_resource_syncs, swarm_configs, swarm_networks, swarm_nodes, swarm_secrets, swarm_services, swarm_stacks, swarm_tasks, git_providers_from_config, image_registries_from_config, common_build_extra_args, common_deployment_extra_args, common_stack_build_extra_args, common_stack_extra_args, image_history, all_stack_services. Optional server filter.", inputSchema: listDetailInputSchema, }, async (args) => handleListDetail(args, client)); + server.registerTool("komodo_copy", { + description: + "Copy a Komodo resource. resource_type: stack, build, server, deployment, procedure, alerter, action, repo, builder, swarm, sync_resource. Provide id of the source resource and optional name for the copy.", + inputSchema: copyInputSchema, + }, async (args) => handleCopy(args, client)); + + server.registerTool("komodo_rename", { + description: + "Rename a Komodo resource. resource_type: stack, build, server, deployment, procedure, alerter, action, repo, builder, swarm, tag, user_group. Provide id and the new name.", + inputSchema: renameInputSchema, + }, async (args) => handleRename(args, client)); + return server; } @@ -128,7 +142,7 @@ const httpServer = createServer(async (req, res) => { // Health check if (req.method === "GET" && req.url === "/health") { res.writeHead(200, { "Content-Type": "application/json" }); - res.end(JSON.stringify({ status: "ok", name: "komodo-mcp-server", version: "2.0.0" })); + res.end(JSON.stringify({ status: "ok", name: "komodo-mcp-server", version: "2.1.0" })); return; } diff --git a/src/komodo-client.ts b/src/komodo-client.ts index 929952e..895701e 100644 --- a/src/komodo-client.ts +++ b/src/komodo-client.ts @@ -12,8 +12,8 @@ export class KomodoClient { constructor() { this.baseUrl = process.env.KOMODO_BASE_URL || process.env.KOMODO_URL || "http://10.10.2.114:9120"; - this.username = process.env.KOMODO_USERNAME || ""; - this.password = process.env.KOMODO_PASSWORD || ""; + this.username = process.env.KOMODO_USERNAME || process.env.KOMODO_INIT_ADMIN_USERNAME || ""; + this.password = process.env.KOMODO_PASSWORD || process.env.KOMODO_INIT_ADMIN_PASSWORD || ""; this.apiKey = process.env.KOMODO_API_KEY || null; this.apiSecret = process.env.KOMODO_API_SECRET || null; this.useApiKey = !!(this.apiKey && this.apiSecret); diff --git a/src/tools/copy.ts b/src/tools/copy.ts new file mode 100644 index 0000000..952f281 --- /dev/null +++ b/src/tools/copy.ts @@ -0,0 +1,48 @@ +import { z } from "zod"; +import { KomodoClient } from "../komodo-client.js"; +import { COPY_REQUEST_MAP } from "../types.js"; + +const CopyableType = z.enum([ + "stack", "build", "server", "deployment", "procedure", + "alerter", "action", "repo", "builder", "swarm", "sync_resource", +]); + +export const copyInputSchema = { + resource_type: CopyableType.describe( + "Resource type to copy (stack, build, server, deployment, procedure, alerter, action, repo, builder, swarm, sync_resource)", + ), + id: z.string().describe("Resource ID or name to copy"), + name: z.string().optional().describe("Name for the new copy"), +}; + +export async function handleCopy( + args: { + resource_type: z.infer; + id: string; + name?: string; + }, + client: KomodoClient, +): Promise<{ content: { type: "text"; text: string }[] }> { + const { resource_type, id, name } = args; + + const requestName = COPY_REQUEST_MAP[resource_type]; + if (!requestName) { + throw new Error( + `No COPY endpoint available for resource type: ${resource_type}`, + ); + } + + const params: Record = { id }; + if (name) params.name = name; + + const result = await client.rpc("write", requestName, params); + + return { + content: [ + { + type: "text", + text: JSON.stringify(result, null, 2), + }, + ], + }; +} diff --git a/src/tools/execute.ts b/src/tools/execute.ts index 046ddaf..209ef2a 100644 --- a/src/tools/execute.ts +++ b/src/tools/execute.ts @@ -4,7 +4,7 @@ import { ExecuteOperation, EXECUTE_REQUEST_MAP } from "../types.js"; export const executeInputSchema = { operation: ExecuteOperation.describe( - "Execute operation (run_build, deploy_stack, deploy_stack_service, run_procedure, run_procedure_stage, run_deployment_action, run_deployment_sync, run_resource_sync, run_stack_refresh_cache, run_stack_refresh_content, run_stack_pull, run_stack_pull_deployment, run_stack_stop, run_stack_restart, run_stack_pause, run_stack_unpause, run_stack_remove_orphan_containers, run_stack_toggle_service_dependencies, run_stack_auto_update, run_stack_commit, run_server_refresh, run_server_refresh_containers, run_server_update_periphery, run_server_prune_images, run_server_prune_containers, run_server_prune_networks, run_server_stats, run_server_run_command, run_server_scripts, run_server_copy, run_server_move, run_deployment_execute, run_deployment_redeploy, run_deployment_destroy, run_deployment_stop, run_deployment_logs, run_sync_deployment, get_mcp_token)", + "Execute operation (run_build, deploy_stack, deploy_stack_service, deploy, deploy_stack_if_changed, destroy_stack, destroy_container, destroy_deployment, pull_stack, pull_deployment, build_repo, clone_repo, pull_repo, cancel_repo_build, clear_repo_cache, run_procedure, run_action, run_sync, cancel_action, cancel_build, cancel_procedure, start_stack, stop_stack, restart_stack, pause_stack, unpause_stack, start_container, stop_container, restart_container, pause_container, unpause_container, start_all_containers, stop_all_containers, restart_all_containers, pause_all_containers, unpause_all_containers, start_deployment, stop_deployment, restart_deployment, pause_deployment, unpause_deployment, run_server_refresh_containers, run_server_prune_images, run_server_prune_containers, run_server_prune_networks, run_server_run_command, run_server_scripts, run_server_copy, run_server_move, rotate_all_server_keys, prune_buildx, prune_docker_builders, prune_system, prune_volumes, delete_image, delete_network, delete_volume, remove_swarm_nodes, remove_swarm_services, remove_swarm_configs, remove_swarm_secrets, remove_swarm_stacks, create_swarm_config, create_swarm_secret, rotate_swarm_config, rotate_swarm_secret, update_swarm_node, batch_run_build, batch_deploy_stack, batch_deploy_stack_if_changed, batch_deploy, batch_pull_stack, batch_pull_repo, batch_build_repo, batch_clone_repo, batch_run_procedure, batch_run_action, batch_destroy_deployment, batch_destroy_stack, backup_core_database, rotate_core_keys, global_auto_update, send_alert, test_alerter)", ), id: z.string().optional().describe("Resource ID or name for the operation"), params: z diff --git a/src/tools/get.ts b/src/tools/get.ts index 709c542..ac5ce34 100644 --- a/src/tools/get.ts +++ b/src/tools/get.ts @@ -12,7 +12,7 @@ const GET_PARAM_KEY: Record = { export const getInputSchema = { resource_type: ResourceType.describe( - "Resource type to get (stack, build, server, procedure, deployment, alerter, image_registry_account, sync_resource, user, tag, execution, access_request)", + "Resource type to get (stack, build, server, procedure, deployment, alerter, image_registry_account, sync_resource, tag, action, repo, builder, swarm, variable, user_group, git_provider_account)", ), id: z.string().describe("Resource ID or name"), }; diff --git a/src/tools/list-detail.ts b/src/tools/list-detail.ts index a0cff73..1941d4a 100644 --- a/src/tools/list-detail.ts +++ b/src/tools/list-detail.ts @@ -10,6 +10,16 @@ const listDetailType = z.enum([ "full_stacks", "full_builds", "full_servers", "full_deployments", "full_procedures", "full_repos", "full_builders", "full_swarms", "full_actions", "full_alerters", "full_resource_syncs", + // Swarm detail lists + "swarm_configs", "swarm_networks", "swarm_nodes", "swarm_secrets", + "swarm_services", "swarm_stacks", "swarm_tasks", + // Config lists + "git_providers_from_config", "image_registries_from_config", + // Extra args + "common_build_extra_args", "common_deployment_extra_args", + "common_stack_build_extra_args", "common_stack_extra_args", + // Other + "image_history", "all_stack_services", ]); export const listDetailInputSchema = { diff --git a/src/tools/list.ts b/src/tools/list.ts index f9af0f6..fde9c85 100644 --- a/src/tools/list.ts +++ b/src/tools/list.ts @@ -8,12 +8,12 @@ import { export const listInputSchema = { resource_type: ResourceType.describe( - "Resource type to list (stack, build, server, procedure, deployment, alerter, image_registry_account, sync_resource, user, tag, execution, access_request)", + "Resource type to list (stack, build, server, procedure, deployment, alerter, image_registry_account, sync_resource, user, tag, action, repo, builder, swarm, variable, user_group, git_provider_account)", ), search: z .string() .optional() - .describe("Optional search/filter query — uses the Search* endpoint instead of List*"), + .describe("Optional search/filter query — filters results server-side"), project: z .string() .optional() diff --git a/src/tools/rename.ts b/src/tools/rename.ts new file mode 100644 index 0000000..5151f8c --- /dev/null +++ b/src/tools/rename.ts @@ -0,0 +1,51 @@ +import { z } from "zod"; +import { KomodoClient } from "../komodo-client.js"; +import { RENAME_REQUEST_MAP } from "../types.js"; + +const RenameableType = z.enum([ + "stack", "build", "server", "deployment", "procedure", + "alerter", "action", "repo", "builder", "swarm", "tag", "user_group", +]); + +export const renameInputSchema = { + resource_type: RenameableType.describe( + "Resource type to rename (stack, build, server, deployment, procedure, alerter, action, repo, builder, swarm, tag, user_group)", + ), + id: z.string().describe("Resource ID or name to rename"), + name: z.string().describe("New name for the resource"), +}; + +export async function handleRename( + args: { + resource_type: z.infer; + id: string; + name: string; + }, + client: KomodoClient, +): Promise<{ content: { type: "text"; text: string }[] }> { + const { resource_type, id, name } = args; + + const requestName = RENAME_REQUEST_MAP[resource_type]; + if (!requestName) { + throw new Error( + `No RENAME endpoint available for resource type: ${resource_type}`, + ); + } + + const params: Record = { id, name }; + if (resource_type === "tag") { + params.tag = id; + delete params.id; + } + + const result = await client.rpc("write", requestName, params); + + return { + content: [ + { + type: "text", + text: JSON.stringify(result, null, 2), + }, + ], + }; +} diff --git a/src/types.ts b/src/types.ts index 67507b7..a774f89 100644 --- a/src/types.ts +++ b/src/types.ts @@ -11,74 +11,48 @@ export const ResourceType = z.enum([ "sync_resource", "user", "tag", - "execution", - "access_request", "action", "repo", "builder", "swarm", "variable", "user_group", - "alert", - "terminal", "git_provider_account", ]); export type ResourceType = z.infer; export const ExecuteOperation = z.enum([ + // Build & Deploy "run_build", "deploy_stack", "deploy_stack_service", - "run_procedure", - "run_procedure_stage", - "run_deployment_action", - "run_deployment_sync", - "run_resource_sync", - "run_stack_refresh_cache", - "run_stack_refresh_content", - "run_stack_pull", - "run_stack_pull_deployment", - "run_stack_stop", - "run_stack_restart", - "run_stack_pause", - "run_stack_unpause", - "run_stack_remove_orphan_containers", - "run_stack_toggle_service_dependencies", - "run_stack_auto_update", - "run_stack_commit", - "run_server_refresh", - "run_server_refresh_containers", - "run_server_update_periphery", - "run_server_prune_images", - "run_server_prune_containers", - "run_server_prune_networks", - "run_server_stats", - "run_server_run_command", - "run_server_scripts", - "run_server_copy", - "run_server_move", - "run_deployment_execute", - "run_deployment_redeploy", - "run_deployment_destroy", - "run_deployment_stop", - "run_deployment_logs", - "run_sync_deployment", - "get_mcp_token", "deploy", "deploy_stack_if_changed", "destroy_stack", "destroy_container", "destroy_deployment", + "pull_stack", + "pull_deployment", + // Repo operations "build_repo", "clone_repo", "pull_repo", - "pull_deployment", "cancel_repo_build", "clear_repo_cache", + // Procedure & Action + "run_procedure", "run_action", + "run_sync", "cancel_action", "cancel_build", "cancel_procedure", + // Stack lifecycle + "start_stack", + "stop_stack", + "restart_stack", + "pause_stack", + "unpause_stack", + // Container lifecycle "start_container", "stop_container", "restart_container", @@ -89,12 +63,23 @@ export const ExecuteOperation = z.enum([ "restart_all_containers", "pause_all_containers", "unpause_all_containers", + // Deployment lifecycle "start_deployment", "stop_deployment", "restart_deployment", "pause_deployment", "unpause_deployment", - "start_stack", + // Server operations + "run_server_refresh_containers", + "run_server_prune_images", + "run_server_prune_containers", + "run_server_prune_networks", + "run_server_run_command", + "run_server_scripts", + "run_server_copy", + "run_server_move", + "rotate_all_server_keys", + // Docker prune & cleanup "prune_buildx", "prune_docker_builders", "prune_system", @@ -102,6 +87,7 @@ export const ExecuteOperation = z.enum([ "delete_image", "delete_network", "delete_volume", + // Swarm operations "remove_swarm_nodes", "remove_swarm_services", "remove_swarm_configs", @@ -112,6 +98,7 @@ export const ExecuteOperation = z.enum([ "rotate_swarm_config", "rotate_swarm_secret", "update_swarm_node", + // Batch operations "batch_run_build", "batch_deploy_stack", "batch_deploy_stack_if_changed", @@ -124,17 +111,16 @@ export const ExecuteOperation = z.enum([ "batch_run_action", "batch_destroy_deployment", "batch_destroy_stack", + // Admin & misc "backup_core_database", "rotate_core_keys", - "rotate_all_server_keys", "global_auto_update", "send_alert", "test_alerter", - "sleep", ]); export type ExecuteOperation = z.infer; -// Maps resource_type to the list/search RPC request name +// Maps resource_type to the list RPC request name export const LIST_REQUEST_MAP: Record = { stack: "ListStacks", build: "ListBuilds", @@ -143,49 +129,34 @@ export const LIST_REQUEST_MAP: Record = { deployment: "ListDeployments", alerter: "ListAlerters", image_registry_account: "ListImageRegistryAccounts", - sync_resource: "ListSyncResources", + sync_resource: "ListResourceSyncs", user: "ListUsers", tag: "ListTags", - execution: "ListExecutions", - access_request: "ListAccessRequests", action: "ListActions", repo: "ListRepos", builder: "ListBuilders", swarm: "ListSwarms", variable: "ListVariables", user_group: "ListUserGroups", - alert: "ListAlerts", - terminal: "ListTerminals", git_provider_account: "ListGitProviderAccounts", }; // Maps resource_type to the search RPC request name -export const SEARCH_REQUEST_MAP: Record = { - stack: "SearchStacks", - build: "SearchBuilds", - server: "SearchServers", - procedure: "SearchProcedures", - deployment: "SearchDeployments", - alerter: "SearchAlerters", - image_registry_account: "SearchImageRegistryAccounts", - sync_resource: "SearchSyncResources", - user: "ListUsers", - tag: "ListTags", - execution: "ListExecutions", - access_request: "ListAccessRequests", - action: "ListActions", - repo: "ListRepos", - builder: "ListBuilders", - swarm: "ListSwarms", - variable: "ListVariables", - user_group: "ListUserGroups", - alert: "ListAlerts", - terminal: "ListTerminals", - git_provider_account: "ListGitProviderAccounts", +// Note: Search* endpoints exist for core resource types only. +// Types not listed here fall back to their List* endpoint. +export const SEARCH_REQUEST_MAP: Partial> = { + stack: "ListStacks", + build: "ListBuilds", + server: "ListServers", + procedure: "ListProcedures", + deployment: "ListDeployments", + alerter: "ListAlerters", + image_registry_account: "ListImageRegistryAccounts", + sync_resource: "ListResourceSyncs", }; // Maps resource_type to the get RPC request name -export const GET_REQUEST_MAP: Record = { +export const GET_REQUEST_MAP: Partial> = { stack: "GetStack", build: "GetBuild", server: "GetServer", @@ -193,19 +164,14 @@ export const GET_REQUEST_MAP: Record = { deployment: "GetDeployment", alerter: "GetAlerter", image_registry_account: "GetImageRegistryAccount", - sync_resource: "GetSyncResource", - user: "GetUser", + sync_resource: "GetResourceSync", tag: "GetTag", - execution: "GetExecution", - access_request: "GetAccessRequest", action: "GetAction", repo: "GetRepo", builder: "GetBuilder", swarm: "GetSwarm", variable: "GetVariable", user_group: "GetUserGroup", - alert: "GetAlert", - terminal: "GetTerminal", git_provider_account: "GetGitProviderAccount", }; @@ -226,7 +192,6 @@ export const CREATE_REQUEST_MAP: Partial> = { swarm: "CreateSwarm", variable: "CreateVariable", user_group: "CreateUserGroup", - terminal: "CreateTerminal", git_provider_account: "CreateGitProviderAccount", }; @@ -240,7 +205,6 @@ export const UPDATE_REQUEST_MAP: Partial> = { alerter: "UpdateAlerter", image_registry_account: "UpdateImageRegistryAccount", sync_resource: "UpdateResourceSync", - user: "UpdateUser", tag: "UpdateTagColor", action: "UpdateAction", repo: "UpdateRepo", @@ -259,7 +223,7 @@ export const DELETE_REQUEST_MAP: Partial> = { procedure: "DeleteProcedure", deployment: "DeleteDeployment", alerter: "DeleteAlerter", - sync_resource: "DeleteSyncResource", + sync_resource: "DeleteResourceSync", tag: "DeleteTag", action: "DeleteAction", repo: "DeleteRepo", @@ -267,7 +231,6 @@ export const DELETE_REQUEST_MAP: Partial> = { swarm: "DeleteSwarm", variable: "DeleteVariable", user_group: "DeleteUserGroup", - terminal: "DeleteTerminal", git_provider_account: "DeleteGitProviderAccount", }; @@ -276,101 +239,37 @@ export const EXECUTE_REQUEST_MAP: Record< ExecuteOperation, { route: "execute" | "read" | "write"; name: string } > = { + // Build & Deploy run_build: { route: "execute", name: "RunBuild" }, deploy_stack: { route: "execute", name: "DeployStack" }, - deploy_stack_service: { route: "execute", name: "DeployStackService" }, - run_procedure: { route: "execute", name: "RunProcedure" }, - run_procedure_stage: { route: "execute", name: "RunProcedureStage" }, - run_deployment_action: { route: "execute", name: "RunDeploymentAction" }, - run_deployment_sync: { route: "execute", name: "RunDeploymentSync" }, - run_resource_sync: { route: "execute", name: "RunResourceSync" }, - run_stack_refresh_cache: { - route: "execute", - name: "RunStackRefreshCache", - }, - run_stack_refresh_content: { - route: "execute", - name: "RunStackRefreshContent", - }, - run_stack_pull: { route: "execute", name: "RunStackPull" }, - run_stack_pull_deployment: { - route: "execute", - name: "RunStackPullDeployment", - }, - run_stack_stop: { route: "execute", name: "RunStackStop" }, - run_stack_restart: { route: "execute", name: "RunStackRestart" }, - run_stack_pause: { route: "execute", name: "RunStackPause" }, - run_stack_unpause: { route: "execute", name: "RunStackUnpause" }, - run_stack_remove_orphan_containers: { - route: "execute", - name: "RunStackRemoveOrphanContainers", - }, - run_stack_toggle_service_dependencies: { - route: "execute", - name: "RunStackToggleServiceDependencies", - }, - run_stack_auto_update: { route: "execute", name: "RunStackAutoUpdate" }, - run_stack_commit: { route: "execute", name: "RunStackCommit" }, - run_server_refresh: { route: "execute", name: "RunServerRefresh" }, - run_server_refresh_containers: { - route: "execute", - name: "RunServerRefreshContainers", - }, - run_server_update_periphery: { - route: "execute", - name: "RunServerUpdatePeriphery", - }, - run_server_prune_images: { - route: "execute", - name: "RunServerPruneImages", - }, - run_server_prune_containers: { - route: "execute", - name: "RunServerPruneContainers", - }, - run_server_prune_networks: { - route: "execute", - name: "RunServerPruneNetworks", - }, - run_server_stats: { route: "execute", name: "RunServerStats" }, - run_server_run_command: { - route: "execute", - name: "RunServerRunCommand", - }, - run_server_scripts: { route: "execute", name: "RunServerScripts" }, - run_server_copy: { route: "execute", name: "RunServerCopy" }, - run_server_move: { route: "execute", name: "RunServerMove" }, - run_deployment_execute: { - route: "execute", - name: "RunDeploymentExecute", - }, - run_deployment_redeploy: { - route: "execute", - name: "RunDeploymentRedeploy", - }, - run_deployment_destroy: { - route: "execute", - name: "RunDeploymentDestroy", - }, - run_deployment_stop: { route: "execute", name: "RunDeploymentStop" }, - run_deployment_logs: { route: "execute", name: "RunDeploymentLogs" }, - run_sync_deployment: { route: "execute", name: "RunSyncDeployment" }, - get_mcp_token: { route: "execute", name: "GetMcpToken" }, + deploy_stack_service: { route: "execute", name: "RunStackService" }, deploy: { route: "execute", name: "Deploy" }, deploy_stack_if_changed: { route: "execute", name: "DeployStackIfChanged" }, destroy_stack: { route: "execute", name: "DestroyStack" }, destroy_container: { route: "execute", name: "DestroyContainer" }, destroy_deployment: { route: "execute", name: "DestroyDeployment" }, + pull_stack: { route: "execute", name: "PullStack" }, + pull_deployment: { route: "execute", name: "PullDeployment" }, + // Repo operations build_repo: { route: "execute", name: "BuildRepo" }, clone_repo: { route: "execute", name: "CloneRepo" }, pull_repo: { route: "execute", name: "PullRepo" }, - pull_deployment: { route: "execute", name: "PullDeployment" }, cancel_repo_build: { route: "execute", name: "CancelRepoBuild" }, clear_repo_cache: { route: "execute", name: "ClearRepoCache" }, + // Procedure & Action + run_procedure: { route: "execute", name: "RunProcedure" }, run_action: { route: "execute", name: "RunAction" }, + run_sync: { route: "execute", name: "RunSync" }, cancel_action: { route: "execute", name: "CancelAction" }, cancel_build: { route: "execute", name: "CancelBuild" }, cancel_procedure: { route: "execute", name: "CancelProcedure" }, + // Stack lifecycle + start_stack: { route: "execute", name: "StartStack" }, + stop_stack: { route: "execute", name: "StopStack" }, + restart_stack: { route: "execute", name: "RestartStack" }, + pause_stack: { route: "execute", name: "PauseStack" }, + unpause_stack: { route: "execute", name: "UnpauseStack" }, + // Container lifecycle start_container: { route: "execute", name: "StartContainer" }, stop_container: { route: "execute", name: "StopContainer" }, restart_container: { route: "execute", name: "RestartContainer" }, @@ -381,12 +280,32 @@ export const EXECUTE_REQUEST_MAP: Record< restart_all_containers: { route: "execute", name: "RestartAllContainers" }, pause_all_containers: { route: "execute", name: "PauseAllContainers" }, unpause_all_containers: { route: "execute", name: "UnpauseAllContainers" }, + // Deployment lifecycle start_deployment: { route: "execute", name: "StartDeployment" }, stop_deployment: { route: "execute", name: "StopDeployment" }, restart_deployment: { route: "execute", name: "RestartDeployment" }, pause_deployment: { route: "execute", name: "PauseDeployment" }, unpause_deployment: { route: "execute", name: "UnpauseDeployment" }, - start_stack: { route: "execute", name: "StartStack" }, + // Server operations + run_server_refresh_containers: { + route: "execute", + name: "RunServerRefreshContainers", + }, + run_server_prune_images: { route: "execute", name: "PruneImages" }, + run_server_prune_containers: { route: "execute", name: "PruneContainers" }, + run_server_prune_networks: { route: "execute", name: "PruneNetworks" }, + run_server_run_command: { + route: "execute", + name: "RunServerRunCommand", + }, + run_server_scripts: { route: "execute", name: "RunServerScripts" }, + run_server_copy: { route: "execute", name: "RunServerCopy" }, + run_server_move: { route: "execute", name: "RunServerMove" }, + rotate_all_server_keys: { + route: "execute", + name: "RotateAllServerKeys", + }, + // Docker prune & cleanup prune_buildx: { route: "execute", name: "PruneBuildx" }, prune_docker_builders: { route: "execute", name: "PruneDockerBuilders" }, prune_system: { route: "execute", name: "PruneSystem" }, @@ -394,6 +313,7 @@ export const EXECUTE_REQUEST_MAP: Record< delete_image: { route: "execute", name: "DeleteImage" }, delete_network: { route: "execute", name: "DeleteNetwork" }, delete_volume: { route: "execute", name: "DeleteVolume" }, + // Swarm operations remove_swarm_nodes: { route: "execute", name: "RemoveSwarmNodes" }, remove_swarm_services: { route: "execute", name: "RemoveSwarmServices" }, remove_swarm_configs: { route: "execute", name: "RemoveSwarmConfigs" }, @@ -404,6 +324,7 @@ export const EXECUTE_REQUEST_MAP: Record< rotate_swarm_config: { route: "execute", name: "RotateSwarmConfig" }, rotate_swarm_secret: { route: "execute", name: "RotateSwarmSecret" }, update_swarm_node: { route: "execute", name: "UpdateSwarmNode" }, + // Batch operations batch_run_build: { route: "execute", name: "BatchRunBuild" }, batch_deploy_stack: { route: "execute", name: "BatchDeployStack" }, batch_deploy_stack_if_changed: { @@ -422,16 +343,12 @@ export const EXECUTE_REQUEST_MAP: Record< name: "BatchDestroyDeployment", }, batch_destroy_stack: { route: "execute", name: "BatchDestroyStack" }, + // Admin & misc backup_core_database: { route: "execute", name: "BackupCoreDatabase" }, rotate_core_keys: { route: "execute", name: "RotateCoreKeys" }, - rotate_all_server_keys: { - route: "execute", - name: "RotateAllServerKeys", - }, global_auto_update: { route: "execute", name: "GlobalAutoUpdate" }, send_alert: { route: "execute", name: "SendAlert" }, test_alerter: { route: "execute", name: "TestAlerter" }, - sleep: { route: "execute", name: "Sleep" }, }; // Maps resource_type to the summary RPC request name @@ -517,4 +434,54 @@ export const LIST_DETAIL_REQUEST_MAP: Record = { full_actions: "ListFullActions", full_alerters: "ListFullAlerters", full_resource_syncs: "ListFullResourceSyncs", + // Swarm detail lists + swarm_configs: "ListSwarmConfigs", + swarm_networks: "ListSwarmNetworks", + swarm_nodes: "ListSwarmNodes", + swarm_secrets: "ListSwarmSecrets", + swarm_services: "ListSwarmServices", + swarm_stacks: "ListSwarmStacks", + swarm_tasks: "ListSwarmTasks", + // Config lists + git_providers_from_config: "ListGitProvidersFromConfig", + image_registries_from_config: "ListImageRegistriesFromConfig", + // Extra args + common_build_extra_args: "ListCommonBuildExtraArgs", + common_deployment_extra_args: "ListCommonDeploymentExtraArgs", + common_stack_build_extra_args: "ListCommonStackBuildExtraArgs", + common_stack_extra_args: "ListCommonStackExtraArgs", + // Other + image_history: "ListImageHistory", + all_stack_services: "ListAllStackServices", +}; + +// Maps copy resource type to the Copy* RPC request name +export const COPY_REQUEST_MAP: Record = { + stack: "CopyStack", + build: "CopyBuild", + server: "CopyServer", + deployment: "CopyDeployment", + procedure: "CopyProcedure", + alerter: "CopyAlerter", + action: "CopyAction", + repo: "CopyRepo", + builder: "CopyBuilder", + swarm: "CopySwarm", + sync_resource: "CopyResourceSync", +}; + +// Maps rename resource type to the Rename* RPC request name +export const RENAME_REQUEST_MAP: Record = { + stack: "RenameStack", + build: "RenameBuild", + server: "RenameServer", + deployment: "RenameDeployment", + procedure: "RenameProcedure", + alerter: "RenameAlerter", + action: "RenameAction", + repo: "RenameRepo", + builder: "RenameBuilder", + swarm: "RenameSwarm", + tag: "RenameTag", + user_group: "RenameUserGroup", };