Skip to main content
Glama
cloin

SemaphoreUI MCP Server

by cloin

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MCP_HOSTNoHost to bind to0.0.0.0
MCP_PORTNoPort to listen on8000
MCP_LOG_LEVELNoLog level (e.g., DEBUG)INFO
MCP_TRANSPORTNoTransport mode: http or stdiohttp
SEMAPHORE_URLYesURL to your SemaphoreUI instance
SEMAPHORE_API_TOKENYesAPI token from SemaphoreUI

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_eventsA

List global events visible to the current user.

Args: limit: Return only the most recent N events; 0 returns all events

Returns: Dictionary containing the list of events

get_last_eventsA

List the last global events visible to the current user.

Semaphore returns the last 200 events. The optional limit trims that response further on the MCP side.

Args: limit: Return only the most recent N events; 0 returns all returned events

Returns: Dictionary containing the list of events

list_project_eventsA

List events related to a project.

Args: project_id: ID of the project limit: Return only the most recent N events; 0 returns all events

Returns: Dictionary containing the list of project events

summarize_project_activityA

Summarize recent project activity from Semaphore events.

Args: project_id: ID of the project limit: Number of most recent events to analyze recent_limit: Number of recent event objects to include

Returns: Counts and recent event details for project activity

list_projectsA

List all projects in SemaphoreUI.

Returns: A dictionary containing the list of projects.

get_projectA

Get details of a specific project.

Args: project_id: ID of the project to fetch

Returns: Project details

create_projectA

Create a new project.

Args: name: Project name alert: Enable alerts (default: False) alert_chat: Chat channel for alerts (optional) max_parallel_tasks: Maximum parallel tasks, 0 = unlimited (default: 0) project_type: Project type (optional) demo: Create demo resources (default: False)

Returns: Created project details

update_projectB

Update an existing project.

Args: project_id: ID of the project to update name: Project name (optional) alert: Enable alerts (optional) alert_chat: Chat channel for alerts (optional) max_parallel_tasks: Maximum parallel tasks (optional) project_type: Project type (optional)

Returns: Empty dict on success

delete_projectB

Delete a project.

Args: project_id: ID of the project to delete

Returns: Empty dict on success

backup_projectA

Export a Semaphore project backup.

Args: project_id: ID of the project to back up

Returns: Backup payload and a resource summary.

restore_project_backupA

Restore a Semaphore project from a backup payload.

Args: backup: Backup payload returned by backup_project project_name: Optional name override for the restored project validate: Validate payload shape and references before restore

Returns: Created project and summary of the restored backup payload.

validate_project_backupA

Validate a project backup before attempting restore.

Args: backup: Backup payload to inspect

Returns: Validation result, errors, warnings, and a summary.

summarize_project_backupA

Summarize the resources contained in a project backup.

Args: backup: Backup payload to summarize

Returns: Counts, names, and secret-reference indicators for the backup.

clone_projectA

Clone a project by backing it up and restoring it with a new name.

Args: project_id: ID of the source project name: Name for the cloned project validate: Validate backup payload before restore

Returns: Source project ID, created clone, and backup summary.

get_project_roleA

Get the current user's role and permissions for a project.

Args: project_id: ID of the project

Returns: Role and permissions for the current user

list_project_usersA

List users linked to a project.

Args: project_id: ID of the project sort: Field to sort by: name, username, email, or role order: Sort order: asc or desc

Returns: Dictionary containing the list of project users

add_project_userA

Link a user to a project with a role.

Args: project_id: ID of the project user_id: ID of the user to link role: Project role: owner, manager, task_runner, or guest

Returns: Empty dict on success

update_project_userA

Update a linked user's project role.

Args: project_id: ID of the project user_id: ID of the linked user role: Project role: owner, manager, task_runner, or guest

Returns: Empty dict on success

remove_project_userB

Remove a user from a project.

Args: project_id: ID of the project user_id: ID of the user to remove

Returns: Empty dict on success

list_viewsB

List all views for a project.

Args: project_id: ID of the project

Returns: Dictionary containing the list of views

get_viewB

Get details of a specific view.

Args: project_id: ID of the project view_id: ID of the view to fetch

Returns: View details

create_viewC

Create a new view.

Args: project_id: ID of the project title: View title position: View ordering position

Returns: Created view details

update_viewC

Update an existing view.

Args: project_id: ID of the project view_id: ID of the view to update title: View title position: View ordering position

Returns: Empty dict on success

delete_viewB

Delete a view.

Args: project_id: ID of the project view_id: ID of the view to delete

Returns: Empty dict on success

list_templatesA

List all templates for a project.

Args: project_id: ID of the project

Returns: A list of templates for the project

get_templateB

Get details of a specific template.

Args: project_id: ID of the project template_id: ID of the template to fetch

Returns: Template details

create_templateA

Create a new template.

Args: project_id: ID of the project name: Template name playbook: Playbook file path (e.g., "playbook.yml") inventory_id: Inventory ID repository_id: Repository ID environment_id: Environment ID description: Template description (optional) arguments: Extra arguments as JSON string (optional) allow_override_args_in_task: Allow overriding arguments in task (default: False) suppress_success_alerts: Suppress success alerts (default: False) app: Application type (default: "ansible") git_branch: Git branch to use (optional) survey_vars: Survey variables for prompting (optional) vaults: Vault configurations (optional) template_type: Template type - "", "build", or "deploy" (optional) start_version: Start version (optional) build_template_id: Build template ID for deploy templates (optional) autorun: Enable autorun (default: False) view_id: View ID (optional) task_params: App-specific task parameters (optional). For Ansible templates: - allow_override_limit: Allow task-level --limit override (required for run_task limit) - allow_override_inventory: Allow task-level inventory override - allow_override_tags: Allow task-level --tags override - allow_override_skip_tags: Allow task-level --skip-tags override - limit: Default limit (list of hosts/groups) - tags: Default tags (list) - skip_tags: Default skip tags (list)

Returns: Created template details

update_templateA

Update an existing template.

Args: project_id: ID of the project template_id: ID of the template to update name: Template name (optional) playbook: Playbook file path (optional) inventory_id: Inventory ID (optional) repository_id: Repository ID (optional) environment_id: Environment ID (optional) description: Template description (optional) arguments: Extra arguments (optional) allow_override_args_in_task: Allow overriding arguments (optional) suppress_success_alerts: Suppress success alerts (optional) app: Application type (optional) git_branch: Git branch (optional) survey_vars: Survey variables (optional) vaults: Vault configurations (optional) template_type: Template type (optional) start_version: Start version (optional) build_template_id: Build template ID (optional) autorun: Enable autorun (optional) view_id: View ID (optional) task_params: App-specific task parameters (optional). For Ansible templates: - allow_override_limit: Allow task-level --limit override (required for run_task limit) - allow_override_inventory: Allow task-level inventory override - allow_override_tags: Allow task-level --tags override - allow_override_skip_tags: Allow task-level --skip-tags override - limit: Default limit (list of hosts/groups) - tags: Default tags (list) - skip_tags: Default skip tags (list)

Returns: Empty dict on success

delete_templateC

Delete a template.

Args: project_id: ID of the project template_id: ID of the template to delete

Returns: Empty dict on success

stop_all_template_tasksC

Stop all running tasks for a template.

Args: project_id: ID of the project template_id: ID of the template

Returns: Empty dict on success

list_schedulesB

List all schedules for a project.

Args: project_id: ID of the project

Returns: Dictionary containing list of schedules

list_template_schedulesA

List schedules attached to a template.

Args: project_id: ID of the project template_id: ID of the template

Returns: Dictionary containing list of template schedules

get_scheduleA

Get details of a specific schedule.

Args: project_id: ID of the project schedule_id: ID of the schedule to fetch

Returns: Schedule details

create_scheduleC

Create a new schedule.

Args: project_id: ID of the project template_id: ID of the template to run name: Schedule name cron_format: Cron expression for recurring schedules active: Whether the schedule is enabled schedule_type: Schedule type: "" for cron, or "run_at" for one-time runs run_at: RFC3339 timestamp for one-time schedules task_params: Optional task parameters to pass when the schedule runs delete_after_run: Delete the one-time schedule after it runs repository_id: Optional repository ID for commit-check schedules

Returns: Created schedule details

update_scheduleB

Update an existing schedule.

Args: project_id: ID of the project schedule_id: ID of the schedule to update template_id: ID of the template to run name: Schedule name cron_format: Cron expression for recurring schedules active: Whether the schedule is enabled schedule_type: Schedule type: "" for cron, or "run_at" for one-time runs run_at: RFC3339 timestamp for one-time schedules task_params: Optional task parameters to pass when the schedule runs delete_after_run: Delete the one-time schedule after it runs repository_id: Optional repository ID for commit-check schedules

Returns: Updated schedule details or empty dict on success

set_schedule_activeA

Enable or disable a schedule.

Args: project_id: ID of the project schedule_id: ID of the schedule to update active: Whether the schedule should be active

Returns: Empty dict on success

delete_scheduleC

Delete a schedule.

Args: project_id: ID of the project schedule_id: ID of the schedule to delete

Returns: Empty dict on success

validate_schedule_cron_formatC

Validate a cron expression for Semaphore schedules.

Args: project_id: ID of the project cron_format: Cron expression to validate

Returns: Empty dict on success

list_tasksA

List tasks for a project with a default limit of 5 to avoid overloading context windows.

Args: project_id: ID of the project limit: Maximum number of tasks to return (default: 5) status: Optional status filter (e.g., 'success', 'error', 'running') tags: Optional list of tags to filter by

Returns: A list of tasks for the project, limited by the specified count

get_taskB

Get details of a specific task.

Args: project_id: ID of the project task_id: ID of the task to fetch

Returns: Task details

run_taskA

Run a task from a template with optional 30-second monitoring.

Args: template_id: ID of the template to run project_id: Optional project ID (if not provided, will attempt to determine from template) environment: Optional environment variables for the task as dictionary limit: Restrict execution to specific hosts/groups (Ansible --limit) dry_run: Run without making changes (Ansible --check) diff: Show differences when changing files (Ansible --diff) debug: Enable verbose debug output playbook: Override playbook file path git_branch: Override git branch to use message: Task description/message arguments: Additional CLI arguments inventory_id: Override inventory to use follow: Enable 30-second monitoring for startup verification (default: False)

Returns: Task execution result with immediate web URLs and optional monitoring summary

Template Override Requirements: Some parameters require the template to have overrides enabled in task_params. Use create_template() or update_template() with task_params to enable:

- limit: requires task_params={"allow_override_limit": true}
- inventory_id: requires task_params={"allow_override_inventory": true}

Without these settings, the parameter will be ignored silently.

Examples: # Just start the task and get URLs result = await run_task(template_id=5)

# Start task with 30-second monitoring and get URLs
result = await run_task(template_id=5, follow=True)

# Run with limit to specific hosts (template must allow override)
result = await run_task(template_id=5, limit="webservers")

# Dry run with diff to preview changes
result = await run_task(template_id=5, dry_run=True, diff=True)
get_latest_failed_taskB

Get the most recent failed task for a project.

Args: project_id: ID of the project

Returns: The most recent failed task or a message if no failed tasks are found

filter_tasksB

Filter tasks by multiple criteria with bulk operation support.

Args: project_id: ID of the project status: List of statuses to filter by (e.g., ['success', 'error']) limit: Maximum number of tasks to return use_last_tasks: Use efficient last 200 tasks endpoint

Returns: Filtered tasks with statistics

stop_taskB

Stop a running task.

Args: project_id: ID of the project task_id: ID of the task to stop

Returns: Task stop result

bulk_stop_tasksA

Stop multiple tasks with confirmation.

Args: project_id: ID of the project task_ids: List of task IDs to stop confirm: Set to True to execute the bulk stop operation

Returns: Confirmation details or bulk stop results

get_waiting_tasksA

Get all tasks in waiting state for bulk operations.

Args: project_id: ID of the project

Returns: List of waiting tasks with bulk operation guidance

get_task_raw_outputA

Get raw output from a completed task for LLM analysis.

Args: project_id: ID of the project task_id: ID of the task

Returns: Raw task output as plain text

analyze_task_failureA

Analyze a failed task for LLM processing, gathering comprehensive failure context.

Args: project_id: ID of the project task_id: ID of the task to analyze

Returns: Comprehensive failure analysis data including task details, template context, and outputs

bulk_analyze_failuresA

Analyze multiple failed tasks to identify patterns and common issues.

Args: project_id: ID of the project limit: Maximum number of failed tasks to analyze (default: 10)

Returns: Analysis of multiple failed tasks with pattern detection

list_environmentsA

List all environments for a project.

Args: project_id: ID of the project

Returns: A list of environments for the project

get_environmentA

Get details of a specific environment.

Args: project_id: ID of the project environment_id: ID of the environment to fetch

Returns: Environment details

create_environmentB

Create a new environment.

Args: project_id: ID of the project name: Environment name env_data: Environment variables as key-value pairs

Returns: Created environment details

update_environmentB

Update an existing environment.

Args: project_id: ID of the project environment_id: ID of the environment to update name: Environment name (optional) env_data: Environment variables as key-value pairs (optional)

Returns: Updated environment details

delete_environmentC

Delete an environment.

Args: project_id: ID of the project environment_id: ID of the environment to delete

Returns: Deletion result

list_inventoryA

List all inventory items for a project.

Args: project_id: ID of the project

Returns: A list of inventory items for the project

get_inventoryB

Get details of a specific inventory item.

Args: project_id: ID of the project inventory_id: ID of the inventory item to fetch

Returns: Inventory item details

create_inventoryA

Create a new inventory item.

Args: project_id: ID of the project name: Inventory name inventory_data: Inventory content (for "static") or file path on the Semaphore server (for "file") inventory_type: Semaphore inventory type, such as "static", "static-yaml", or "file". Defaults to "static".

Returns: Created inventory item details

update_inventoryB

Update an existing inventory item.

Args: project_id: ID of the project inventory_id: ID of the inventory item to update name: Inventory name (optional) inventory_data: Inventory content for "static", or file path for "file" (optional) inventory_type: Semaphore inventory type, such as "static", "static-yaml", or "file". Defaults to "static"; pass the existing type if you don't intend to change it.

Returns: Updated inventory item details

delete_inventoryB

Delete an inventory item.

Args: project_id: ID of the project inventory_id: ID of the inventory item to delete

Returns: Deletion result

list_repositoriesA

List all repositories for a project.

Args: project_id: ID of the project

Returns: A list of repositories for the project

get_repositoryB

Get details of a specific repository.

Args: project_id: ID of the project repository_id: ID of the repository to fetch

Returns: Repository details

create_repositoryC

Create a new repository.

Args: project_id: ID of the project name: Repository name git_url: Git repository URL git_branch: Git branch to use ssh_key_id: SSH key ID for authentication

Returns: Created repository details

update_repositoryB

Update an existing repository.

Args: project_id: ID of the project repository_id: ID of the repository to update name: Repository name (optional) git_url: Git repository URL (optional) git_branch: Git branch to use (optional) ssh_key_id: SSH key ID for authentication (optional)

Returns: Updated repository details

delete_repositoryC

Delete a repository.

Args: project_id: ID of the project repository_id: ID of the repository to delete

Returns: Deletion result

list_access_keysA

List all access keys for a project.

Args: project_id: ID of the project key_type: Optional key type filter ("none", "ssh", or "login_password") sort: Sort field ("name" or "type") order: Sort order ("asc" or "desc")

Returns: Dictionary containing list of access keys

get_access_keyB

Get an access key by ID.

Args: project_id: ID of the project key_id: ID of the access key

Returns: Access key details

create_access_keyA

Create a new access key.

Args: project_id: ID of the project name: Name for the access key key_type: Type of key - one of: - "none": For public repositories (no credentials needed) - "ssh": For SSH key authentication - "login_password": For username/password authentication login: Username (for ssh or login_password types) password: Password (for login_password type) private_key: Private key content (for ssh type)

Returns: Created access key details

update_access_keyB

Update an existing access key.

Args: project_id: ID of the project key_id: ID of the access key name: New access key name (optional) key_type: New key type (optional) login: Username for ssh or login_password keys (optional) password: Password for login_password keys (optional) private_key: Private key for ssh keys (optional) override_secret: Force updating stored secret material (optional)

Returns: Empty dict on success

delete_access_keyB

Delete an access key by ID.

Args: project_id: ID of the project key_id: ID of the access key to delete

Returns: Empty dict on success

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cloin/semaphore-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server