Semaphore UI MCP server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SEMAPHORE_URL | Yes | Server root URL or URL ending in /api; reverse-proxy path prefixes are supported. Required. | |
| MCP_HTTP_TOKEN | No | Bearer token protecting Streamable HTTP. Required for non-loopback bindings, optional on loopback. | |
| MCP_ALLOWED_HOSTS | No | Comma-separated allowed HTTP host patterns. Include the hostname used by external clients. | |
| SEMAPHORE_TIMEOUT | No | Upstream HTTP request timeout in seconds. | 30 |
| SEMAPHORE_PASSWORD | No | Password paired with SEMAPHORE_USERNAME. | |
| SEMAPHORE_USERNAME | No | Username for session login when no API token is configured. | |
| MCP_ALLOWED_ORIGINS | No | Optional comma-separated origin allowlist for the MCP SDK's DNS rebinding protection. | |
| SEMAPHORE_API_TOKEN | No | Semaphore API token. Prefer a dedicated account with the permissions needed for your workflow. Unset by default. | |
| SEMAPHORE_CA_BUNDLE | No | Path to a PEM CA bundle for a private certificate authority. | |
| SEMAPHORE_READ_ONLY | No | Disable management mutations and job execution. | false |
| SEMAPHORE_VERIFY_TLS | No | Validate Semaphore's HTTPS certificate. Disable only for a deliberately trusted development environment. | true |
| SEMAPHORE_PROJECT_IDS | No | Comma-separated positive project IDs. Restrict project access and block global administration. | |
| SEMAPHORE_TOOL_PROFILE | No | core exposes everyday inspection and task tools; full exposes the management catalogue. | full |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| activate_subscriptionB | activate subscription. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /subscription. Supply API fields in body; JSON-encoded string fields must remain strings. |
| attach_template_inventoryC | Attach Inventory. POST /project/{project_id}/templates/{template_id}/inventory/{inventory_id}/attach. |
| clear_cluster_tasksC | clear Cluster Tasks. DELETE /cluster/tasks. Supply API fields in body; JSON-encoded string fields must remain strings. |
| clear_global_runner_cacheC | Clear global runner cache. DELETE /runners/{runner_id}/cache. |
| clear_project_cacheC | Clear Cache. DELETE /project/{project_id}/cache. |
| clear_project_runner_cacheC | Clear project runner cache. DELETE /project/{project_id}/runners/{runner_id}/cache. |
| clear_server_cacheC | clear Cache. DELETE /cache. |
| confirm_taskC | Confirm Task. POST /project/{project_id}/tasks/{task_id}/confirm. |
| create_access_keyC | Add access key. POST /project/{project_id}/keys. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_api_tokenC | Create an API token. POST /user/tokens. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_environmentC | Add environment. POST /project/{project_id}/environment. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_global_roleB | create global role. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /roles. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_global_runnerC | Add global runner. POST /runners. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_integrationB | create a new integration. POST /project/{project_id}/integrations. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_integration_aliasC | Create a new alias for an integration. POST /project/{project_id}/integrations/{integration_id}/aliases. |
| create_integration_matcherB | Add Integration Matcher. POST /project/{project_id}/integrations/{integration_id}/matchers. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_integration_valueB | Add Integration Extracted Value. POST /project/{project_id}/integrations/{integration_id}/values. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_inventoryC | create inventory. POST /project/{project_id}/inventory. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_projectB | Create a new project. POST /projects. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_project_integration_aliasC | Create a new integration alias for the project. POST /project/{project_id}/integrations/aliases. |
| create_project_roleB | create project role. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /project/{project_id}/roles. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_project_runnerC | Add project runner. POST /project/{project_id}/runners. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_project_userC | Link user to project. POST /project/{project_id}/users. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_repositoryC | Add repository. POST /project/{project_id}/repositories. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_scheduleC | create schedule. POST /project/{project_id}/schedules. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_secret_storageC | Add. POST /project/{project_id}/secret_storages. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_taskB | Start an automation task. Ansible and Terraform switches belong in body.params; environment and arguments are JSON-encoded strings. This executes code on managed infrastructure. POST /project/{project_id}/tasks. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_templateC | create template. POST /project/{project_id}/templates. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_template_permissionC | Add Template Perm. POST /project/{project_id}/templates/{template_id}/perms. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_terraform_aliasC | create terraform alias. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /project/{project_id}/inventory/{inventory_id}/terraform/aliases. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_userB | Creates a user. POST /users. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_viewB | create view. POST /project/{project_id}/views. Supply API fields in body; JSON-encoded string fields must remain strings. |
| create_workflowB | Add workflow. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /project/{project_id}/workflows. Supply API fields in body; JSON-encoded string fields must remain strings. |
| delete_access_keyC | Removes access key. DELETE /project/{project_id}/keys/{key_id}. |
| delete_api_tokenC | Expires API token. DELETE /user/tokens/{token_id}. |
| delete_appC | delete App. DELETE /apps/{app_id}. |
| delete_environmentC | Removes environment. DELETE /project/{project_id}/environment/{environment_id}. |
| delete_global_roleC | delete global role. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. DELETE /roles/{role_slug}. |
| delete_global_runnerC | Delete global runner. DELETE /runners/{runner_id}. |
| delete_global_taskB | Stop or remove a task from the global running/queued task pool (administrator only). DELETE /tasks/{task_id}. |
| delete_integrationB | Remove integration. DELETE /project/{project_id}/integrations/{integration_id}. |
| delete_integration_aliasB | Remove integration alias. DELETE /project/{project_id}/integrations/{integration_id}/aliases/{alias_id}. |
| delete_integration_matcherC | Removes integration matcher. DELETE /project/{project_id}/integrations/{integration_id}/matchers/{matcher_id}. |
| delete_integration_valueC | Removes integration extract value. DELETE /project/{project_id}/integrations/{integration_id}/values/{value_id}. |
| delete_inventoryC | Removes inventory. DELETE /project/{project_id}/inventory/{inventory_id}. |
| delete_projectC | Delete project. DELETE /project/{project_id}. |
| delete_project_integration_aliasB | Remove integration alias. DELETE /project/{project_id}/integrations/aliases/{alias_id}. |
| delete_project_roleB | delete project role. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. DELETE /project/{project_id}/roles/{role_slug}. |
| delete_project_runnerC | Delete project runner. DELETE /project/{project_id}/runners/{runner_id}. |
| delete_project_userB | Removes user from project. DELETE /project/{project_id}/users/{user_id}. |
| delete_repositoryC | Removes repository. DELETE /project/{project_id}/repositories/{repository_id}. |
| delete_scheduleC | Deletes schedule. DELETE /project/{project_id}/schedules/{schedule_id}. |
| delete_secret_storageC | Remove. DELETE /project/{project_id}/secret_storages/{storage_id}. |
| delete_subscriptionA | delete subscription. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. DELETE /subscription. |
| delete_taskB | Deletes task (including output). DELETE /project/{project_id}/tasks/{task_id}. |
| delete_templateC | Removes template. DELETE /project/{project_id}/templates/{template_id}. |
| delete_template_permissionC | Delete Template Perm. DELETE /project/{project_id}/templates/{template_id}/perms/{perm_id}. |
| delete_terraform_aliasA | delete terraform alias. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. DELETE /project/{project_id}/inventory/{inventory_id}/terraform/aliases/{alias_id}. |
| delete_terraform_stateA | delete terraform state. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. DELETE /project/{project_id}/inventory/{inventory_id}/terraform/states/{state_id}. |
| delete_userC | Deletes user. DELETE /users/{user_id}. |
| delete_viewC | Removes view. DELETE /project/{project_id}/views/{view_id}. |
| delete_workflowB | Remove workflow. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. DELETE /project/{project_id}/workflows/{workflow_id}. |
| detach_template_inventoryC | Detach Inventory. POST /project/{project_id}/templates/{template_id}/inventory/{inventory_id}/detach. |
| disable_user_totpC | Disable Totp. DELETE /users/{user_id}/2fas/totp/{totp_id}. |
| enable_user_totpD | Enable Totp. POST /users/{user_id}/2fas/totp. |
| get_access_keyC | Get Keys. GET /project/{project_id}/keys/{key_id}. |
| get_access_key_referencesD | Get Key Refs. GET /project/{project_id}/keys/{key_id}/refs. |
| get_admin_infoC | get Admin Info. GET /admin/info. |
| get_appC | get App. GET /apps/{app_id}. |
| get_cluster_statusC | get Cluster Status. GET /cluster. |
| get_current_userA | Fetch logged in user. GET /user. |
| get_environmentC | Get environment. GET /project/{project_id}/environment/{environment_id}. |
| get_environment_referencesC | Get Environment Refs. GET /project/{project_id}/environment/{environment_id}/refs. |
| get_global_roleA | get global role. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /roles/{role_slug}. |
| get_global_runnerC | Get global runner. GET /runners/{runner_id}. |
| get_global_taskA | Inspect the global task pool. Upstream v2.19.17 returns the full pool even for this task-specific route; use get_task for a single project task. GET /tasks/{task_id}. |
| get_integrationC | Get Integration. GET /project/{project_id}/integrations/{integration_id}. |
| get_integration_matcherC | Get Integration Matcher. GET /project/{project_id}/integrations/{integration_id}/matchers/{matcher_id}. |
| get_integration_matcher_referencesD | Get Integration Matcher Refs. GET /project/{project_id}/integrations/{integration_id}/matchers/{matcher_id}/refs. |
| get_integration_referencesC | Get Integration Refs. GET /project/{project_id}/integrations/{integration_id}/refs. |
| get_integration_valueC | Get Integration Extract Value. GET /project/{project_id}/integrations/{integration_id}/values/{value_id}. |
| get_integration_value_referencesC | Get Integration Extract Value Refs. GET /project/{project_id}/integrations/{integration_id}/values/{value_id}/refs. |
| get_inventoryD | Get inventory. GET /project/{project_id}/inventory/{inventory_id}. |
| get_inventory_referencesD | Get Inventory Refs. GET /project/{project_id}/inventory/{inventory_id}/refs. |
| get_latest_terraform_stateA | get latest terraform state. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/inventory/{inventory_id}/terraform/states/latest. |
| get_projectC | Fetch project. GET /project/{project_id}. |
| get_project_backupC | Backup A Project. GET /project/{project_id}/backup. |
| get_project_permissionsB | Fetch permissions of the current user for project. GET /project/{project_id}/role. |
| get_project_roleA | get project role. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/roles/{role_slug}. |
| get_project_runnerC | Get project runner. GET /project/{project_id}/runners/{runner_id}. |
| get_project_task_statsC | Get Task Stats. GET /project/{project_id}/stats. |
| get_project_userC | Get Users. GET /project/{project_id}/users/{user_id}. |
| get_repositoryC | Get repository. GET /project/{project_id}/repositories/{repository_id}. |
| get_repository_referencesD | Get Repository Refs. GET /project/{project_id}/repositories/{repository_id}/refs. |
| get_scheduleC | Get schedule. GET /project/{project_id}/schedules/{schedule_id}. |
| get_secret_storageC | Get Secret Storage. GET /project/{project_id}/secret_storages/{storage_id}. |
| get_secret_storage_referencesC | Get Refs. GET /project/{project_id}/secret_storages/{storage_id}/refs. |
| get_server_optionsC | get Options. GET /options. |
| get_subscriptionA | get subscription. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /subscription. |
| get_system_infoC | you must be authenticated to use this. GET /info. |
| get_taskC | Get a single task. GET /project/{project_id}/tasks/{task_id}. |
| get_task_outputA | Get every persisted task log line as structured output; upstream does not support output pagination. GET /project/{project_id}/tasks/{task_id}/output. |
| get_task_raw_outputB | Get complete task logs as plain text with ANSI escape codes removed. GET /project/{project_id}/tasks/{task_id}/raw_output. |
| get_templateC | Get template. GET /project/{project_id}/templates/{template_id}. |
| get_template_permissionC | Get Template Perm. GET /project/{project_id}/templates/{template_id}/perms/{perm_id}. |
| get_template_referencesC | Get Template Refs. GET /project/{project_id}/templates/{template_id}/refs. |
| get_template_task_statsC | Get Task Stats. GET /project/{project_id}/templates/{template_id}/stats. |
| get_terraform_aliasA | get terraform alias. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/inventory/{inventory_id}/terraform/aliases/{alias_id}. |
| get_terraform_stateB | get terraform state. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/inventory/{inventory_id}/terraform/states/{state_id}. |
| get_userC | Fetches a user profile. GET /users/{user_id}. |
| get_user_optionsA | Returns the per-user options of the authenticated user as a key/value map. Keys are returned without the internal |
| get_user_totp_qrD | Totp Qr. GET /users/{user_id}/2fas/totp/{totp_id}/qr. |
| get_viewC | Get view. GET /project/{project_id}/views/{view_id}. |
| get_workflowA | Get workflow. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/workflows/{workflow_id}. |
| get_workflow_runB | Get workflow run details. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/workflows/{workflow_id}/runs/{run_id}. |
| get_workflow_run_artifactsA | Get merged workflow run artifacts. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/workflows/{workflow_id}/runs/{run_id}/artifacts. |
| leave_projectC | Left Project. DELETE /project/{project_id}/me. |
| list_access_keysC | Get access keys linked to project. GET /project/{project_id}/keys. |
| list_api_tokensB | Fetch API tokens for user. GET /user/tokens. |
| list_appsC | Get apps. GET /apps. |
| list_available_project_rolesA | list available project roles. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/roles/all. |
| list_cluster_tasksC | get Cluster Tasks. GET /cluster/tasks. |
| list_environmentsC | Get environment. GET /project/{project_id}/environment. |
| list_eventsB | Get Events related to Semaphore and projects you are part of. GET /events. |
| list_global_rolesA | list global roles. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /roles. |
| list_global_runner_tagsB | Get global runner tags. GET /runner_tags. |
| list_global_runnersB | Get all global runners. GET /runners. |
| list_global_tasksC | Get Tasks. GET /tasks. |
| list_integration_aliasesB | Get all aliases for an integration. GET /project/{project_id}/integrations/{integration_id}/aliases. |
| list_integration_matchersC | Get Integration Matcher linked to integration extractor. GET /project/{project_id}/integrations/{integration_id}/matchers. |
| list_integration_valuesB | Get Integration Extracted Values linked to integration extractor. GET /project/{project_id}/integrations/{integration_id}/values. |
| list_integrationsC | get all integrations. GET /project/{project_id}/integrations. |
| list_inventoriesC | Get inventory. GET /project/{project_id}/inventory. |
| list_project_eventsB | Get Events related to this project. GET /project/{project_id}/events. |
| list_project_integration_aliasesB | Get all integration aliases for the project. GET /project/{project_id}/integrations/aliases. |
| list_project_rolesB | list project roles. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/roles. |
| list_project_runner_tagsC | Get project runner tags. GET /project/{project_id}/runner_tags. |
| list_project_runnersA | Returns runners owned by the project together with global runners that have tags. GET /project/{project_id}/runners. |
| list_project_usersC | Get users linked to project. GET /project/{project_id}/users. |
| list_projectsC | Get projects. GET /projects. |
| list_recent_eventsA | Get last 200 Events related to Semaphore and projects you are part of. GET /events/last. |
| list_recent_project_eventsD | get Last Events. GET /project/{project_id}/events/last. |
| list_recent_tasksB | List recent tasks, newest first. Use count and before (the last task id) for cursor pagination; the response X-Has-Next header indicates more pages. GET /project/{project_id}/tasks/last. |
| list_recent_template_tasksA | List recent tasks, newest first. Use count and before (the last task id) for cursor pagination; the response X-Has-Next header indicates more pages. GET /project/{project_id}/templates/{template_id}/tasks/last. |
| list_repositoriesC | Get repositories. GET /project/{project_id}/repositories. |
| list_repository_branchesC | Get Repository Branches. GET /project/{project_id}/repositories/{repository_id}/branches. |
| list_repository_playbooksC | Get Repository Playbooks. GET /project/{project_id}/repositories/{repository_id}/playbooks. |
| list_schedulesC | Get Project Schedules. GET /project/{project_id}/schedules. |
| list_secret_storagesC | Get Secret Storages. GET /project/{project_id}/secret_storages. |
| list_task_ansible_errorsC | Get Ansible Task Errors. GET /project/{project_id}/tasks/{task_id}/ansible/errors. |
| list_task_ansible_hostsC | Get Ansible Task Hosts. GET /project/{project_id}/tasks/{task_id}/ansible/hosts. |
| list_task_stagesC | Get Task Stages. GET /project/{project_id}/tasks/{task_id}/stages. |
| list_tasksA | List up to 1000 project tasks. Use list_recent_tasks or list_recent_template_tasks for supported cursor pagination. GET /project/{project_id}/tasks. |
| list_template_permissionsC | Get Template Perms. GET /project/{project_id}/templates/{template_id}/perms. |
| list_template_schedulesC | Get Template Schedules. GET /project/{project_id}/templates/{template_id}/schedules. |
| list_template_tasksA | List up to 1000 project tasks. Use list_recent_tasks or list_recent_template_tasks for supported cursor pagination. GET /project/{project_id}/templates/{template_id}/tasks. |
| list_templatesC | Get template. GET /project/{project_id}/templates. |
| list_terraform_aliasesA | list terraform aliass. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/inventory/{inventory_id}/terraform/aliases. |
| list_terraform_statesA | list terraform states. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/inventory/{inventory_id}/terraform/states. |
| list_usersB | Fetches all users. GET /users. |
| list_view_templatesC | Get View Templates. GET /project/{project_id}/views/{view_id}/templates. |
| list_viewsC | Get view. GET /project/{project_id}/views. |
| list_workflow_run_approvalsA | Get workflow run approvals. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/workflows/{workflow_id}/runs/{run_id}/approvals. |
| list_workflow_runsB | Get workflow runs. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/workflows/{workflow_id}/runs. |
| list_workflowsB | Get workflows. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/workflows. |
| pingB | PING test. GET /ping. |
| refresh_subscriptionA | refresh subscription. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /subscription/refresh. |
| regenerate_global_runner_registration_tokenA | Regenerate the one-time registration token of an unregistered global runner. POST /runners/{runner_id}/registration-token. |
| regenerate_project_runner_registration_tokenA | Regenerate the one-time registration token of an unregistered project runner. POST /project/{project_id}/runners/{runner_id}/registration-token. |
| reject_taskC | Reject Task. POST /project/{project_id}/tasks/{task_id}/reject. |
| resolve_workflow_approvalB | Resolve workflow approval. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /project/{project_id}/workflows/{workflow_id}/runs/{run_id}/approvals/{node_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| restore_projectC | Restore Project. POST /projects/restore. Supply API fields in body; JSON-encoded string fields must remain strings. |
| run_workflowB | Run workflow. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /project/{project_id}/workflows/{workflow_id}/run. Supply API fields in body; JSON-encoded string fields must remain strings. |
| set_app_activeC | set App Active. POST /apps/{app_id}/active. Supply API fields in body; JSON-encoded string fields must remain strings. |
| set_global_runner_activeB | Set global runner active state. POST /runners/{runner_id}/active. Supply API fields in body; JSON-encoded string fields must remain strings. |
| set_project_runner_activeC | Set project runner active state. POST /project/{project_id}/runners/{runner_id}/active. Supply API fields in body; JSON-encoded string fields must remain strings. |
| set_schedule_activeC | Set Schedule Active. PUT /project/{project_id}/schedules/{schedule_id}/active. Supply API fields in body; JSON-encoded string fields must remain strings. |
| set_server_optionC | set Option. POST /options. Supply API fields in body; JSON-encoded string fields must remain strings. |
| set_template_default_inventoryC | Set Template Inventory. POST /project/{project_id}/templates/{template_id}/inventory/{inventory_id}/set_default. |
| set_user_optionA | Stores one option for the authenticated user. The |
| set_view_positionsC | Set View Positions. POST /project/{project_id}/views/positions. Supply API fields in body; JSON-encoded string fields must remain strings. |
| stop_taskC | Stop a job. POST /project/{project_id}/tasks/{task_id}/stop. Supply API fields in body; JSON-encoded string fields must remain strings. |
| stop_template_tasksC | Stop all active tasks of template. POST /project/{project_id}/templates/{template_id}/stop_all_tasks. Supply API fields in body; JSON-encoded string fields must remain strings. |
| stop_workflow_runA | stop workflow run. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /project/{project_id}/workflows/{workflow_id}/runs/{run_id}/stop. Supply API fields in body; JSON-encoded string fields must remain strings. |
| sync_environmentC | Sync Environment. POST /project/{project_id}/environment/{environment_id}/sync. |
| sync_secret_storageC | Sync Secrets. POST /project/{project_id}/secret_storages/{storage_id}/sync. Supply API fields in body; JSON-encoded string fields must remain strings. |
| test_project_notificationA | Sends a test notification to all enabled messengers for the project. POST /project/{project_id}/notifications/test. |
| update_access_keyC | Updates access key. PUT /project/{project_id}/keys/{key_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_appC | set App. PUT /apps/{app_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_environmentC | Update environment. PUT /project/{project_id}/environment/{environment_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_global_roleB | update global role. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. PUT /roles/{role_slug}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_global_runnerC | Update global runner. PUT /runners/{runner_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_integrationC | Update Integration. PUT /project/{project_id}/integrations/{integration_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_integration_matcherC | Updates Integration Matcher. PUT /project/{project_id}/integrations/{integration_id}/matchers/{matcher_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_integration_valueC | Updates Integration ExtractValue. PUT /project/{project_id}/integrations/{integration_id}/values/{value_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_inventoryC | Updates inventory. PUT /project/{project_id}/inventory/{inventory_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_projectC | Update project. PUT /project/{project_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_project_roleB | update project role. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. PUT /project/{project_id}/roles/{role_slug}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_project_runnerC | Update project runner. PUT /project/{project_id}/runners/{runner_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_project_userC | Update user role. PUT /project/{project_id}/users/{user_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_repositoryC | Updates repository. PUT /project/{project_id}/repositories/{repository_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_scheduleC | Updates schedule. PUT /project/{project_id}/schedules/{schedule_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_secret_storageC | Update. PUT /project/{project_id}/secret_storages/{storage_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_templateC | Updates template. PUT /project/{project_id}/templates/{template_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_template_descriptionB | Update Template Description. PUT /project/{project_id}/templates/{template_id}/description. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_template_permissionC | Update Template Perm. PUT /project/{project_id}/templates/{template_id}/perms/{perm_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_terraform_aliasB | update terraform alias. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. PUT /project/{project_id}/inventory/{inventory_id}/terraform/aliases/{alias_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_userC | Updates user details. PUT /users/{user_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_user_passwordC | Updates user password. POST /users/{user_id}/password. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_viewC | Updates view. PUT /project/{project_id}/views/{view_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| update_workflowA | Update workflow. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. PUT /project/{project_id}/workflows/{workflow_id}. Supply API fields in body; JSON-encoded string fields must remain strings. |
| validate_scheduleC | Validate Schedule Cron Format. POST /project/{project_id}/schedules/validate. Supply API fields in body; JSON-encoded string fields must remain strings. |
| wait_for_taskA | Poll a task until success, error, stopped, or timeout. Does not start or stop jobs. Output tail is optional; timeout leaves the job running. The initial status read and optional output read use SEMAPHORE_TIMEOUT separately from the polling budget. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| investigate_task | Diagnose a task from its status and logs. |
| plan_template_run | Inspect a template and prepare an execution plan. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Semaphore MCP capabilities | |
| Accessible Semaphore projects |
TDQS
Scored across 213 tools
Most tools are distinguished by resource + scope (global vs project vs template), and several descriptions explicitly disambiguate near-duplicates (e.g. get_global_task warns to use get_task). However, there are genuine near-overlaps an agent can easily mix up: get_task_output vs get_task_raw_output, list_tasks vs list_recent_tasks vs list_global_tasks, list_integrations vs list_project_integration_aliases, and confirm_task/reject_task vs wait_for_task. With 213 tools, selection pressure is high and several boundaries are only clear after reading the full description.
The surface follows a very predictable verb_noun snake_case convention (list_/get_/create_/update_/delete_/set_) with clear resource nouns. Minor deviations exist in noun ordering for a few tools (detach_template_inventory, set_template_default_inventory, stop_template_tasks) and one-off verbs (ping, leave_project, test_project_notification), but overall it is highly readable.
213 tools is an extreme mismatch for any coherent agent-facing surface; this is a 1:1 dump of the Semaphore REST API, including edition-gated routes that return 404 in Community. Many tools (permissions, terraform aliases, TOTP, subscription, cluster) will rarely or never be needed, creating enormous selection cost.
Coverage is essentially exhaustive: full CRUD for projects, templates, tasks, repositories, inventories, integrations, runners, roles, users, views, workflows, and even reference lookups, task polling, and cron validation. No obvious lifecycle gap exists for the Semaphore domain.