Semaphore MCP Server
A Model Context Protocol (MCP) server for Semaphore UI - the modern open-source alternative to Ansible Tower/AWX.
This server enables AI assistants and MCP-compatible tools to interact with Semaphore UI for managing Ansible, Terraform, and other automation workflows.
Features
- Project Management — List, create, and delete projects
- Task Management — Launch, monitor, stop, and retrieve output of tasks
- Template Management — CRUD operations on job templates
- Inventory Management — Manage Ansible inventories
- Repository Management — Manage Git repositories
- Environment Management — Manage environment variable sets
- Key Store — List and manage SSH keys and credentials
- Schedule Management — Create and manage cron-based schedules
- User & Events — Get user info and project event logs
- Server Info — Check server health and version
Installation
pip install -e .
Or with the semaphore client from a local path:
pip install -e /path/to/python3-semaphore-client
pip install -e .
Configuration
Copy .env.example to .env and configure:
cp .env.example .env
Required environment variables:
| Variable | Description |
|---|---|
SEMAPHORE_URL |
Base URL of your Semaphore UI instance (e.g., http://localhost:3000) |
SEMAPHORE_TOKEN |
API Bearer token (create via Semaphore UI or API) |
Optional environment variables:
| Variable | Default | Description |
|---|---|---|
READ_ONLY |
true |
Set to false to enable write operations |
DEBUG |
(unset) | Set to true for verbose logging |
Creating an API Token
- Via Web UI (Semaphore 2.14+): Go to your user settings and create a token
- Via API:
# Login curl -c /tmp/semaphore-cookie -XPOST \ -H 'Content-Type: application/json' \ -d '{"auth": "YOUR_LOGIN", "password": "YOUR_PASSWORD"}' \ http://localhost:3000/api/auth/login # Generate token curl -b /tmp/semaphore-cookie -XPOST \ http://localhost:3000/api/user/tokens
Usage
Running the MCP Server
semaphore-mcp
MCP Configuration
Add to your MCP client configuration (e.g., VS Code mcp.json):
{
"servers": {
"semaphore": {
"command": "semaphore-mcp",
"env": {
"SEMAPHORE_URL": "http://localhost:3000",
"SEMAPHORE_TOKEN": "your-token-here",
"READ_ONLY": "false"
}
}
}
}
Or for Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"semaphore": {
"command": "semaphore-mcp",
"env": {
"SEMAPHORE_URL": "http://localhost:3000",
"SEMAPHORE_TOKEN": "your-token-here"
}
}
}
}
Available Tools
| Tool | Description |
|---|---|
project_list |
List all projects |
project_get |
Get project details |
project_create |
Create a new project |
project_delete |
Delete a project |
task_list |
List tasks in a project |
task_get |
Get task details |
task_launch |
Launch a task from a template |
task_stop |
Stop a running task |
task_output |
Get task output/log |
task_delete |
Delete a task |
template_list |
List templates in a project |
template_get |
Get template details |
template_create |
Create a new template |
template_delete |
Delete a template |
inventory_list |
List inventories in a project |
inventory_get |
Get inventory details |
inventory_create |
Create a new inventory |
inventory_delete |
Delete an inventory |
repository_list |
List repositories in a project |
repository_get |
Get repository details |
repository_create |
Create a new repository |
repository_delete |
Delete a repository |
environment_list |
List environments in a project |
environment_get |
Get environment details |
environment_create |
Create a new environment |
environment_delete |
Delete an environment |
key_list |
List keys/credentials in a project |
key_get |
Get key details |
key_delete |
Delete a key |
schedule_list |
List schedules in a project |
schedule_create |
Create a new schedule |
schedule_delete |
Delete a schedule |
user_get_current |
Get current user info |
user_tokens |
List user API tokens |
event_list |
List project events |
server_info |
Get server version/info |
server_ping |
Check server connectivity |
Dependencies
This project uses python3-semaphore-client — an OpenAPI-generated Python client library for the Semaphore UI API (v2.16.14).
Development
# Install in development mode
pip install -e ".[dev]"
# Run directly
python -m src.semaphore_mcp_server
License
MIT
Metadata
Release files for semaphore-mcp-server 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| semaphore_mcp_server-0.1.1.tar.gz | 9.7 kB | Without provenance | Details for semaphore_mcp_server-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| semaphore_mcp_server-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for semaphore_mcp_server-0.1.1-py3-none-any.whl |
Total release size: 18.1 kB
Release files / semaphore_mcp_server-0.1.1.tar.gz
| Download URL | semaphore_mcp_server-0.1.1.tar.gz |
|---|---|
| Size | 9.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
aa90b36de018377e5f18bef01282605bb137c4d7fb4cf670501114b38ff9de19
|
|
BLAKE2b-256 checksum How to use checksums |
5c286ecaf5ae9bec01c10f26a7f061629db5ad56fc9d56331d671633d8408615
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Release files / semaphore_mcp_server-0.1.1-py3-none-any.whl
| Download URL | semaphore_mcp_server-0.1.1-py3-none-any.whl |
|---|---|
| Size | 8.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
aea0cb9391f85e4c446c6129c419d02371aba067aa4a8f206fc53a0453602f0f
|
|
BLAKE2b-256 checksum How to use checksums |
5086a143584fe5bed6aa04c3f81b460d07d40550e0187b2577ea0322d48abe17
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Security for semaphore-mcp-server 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.