From d7e96959599e179dcb67255836b4764ece437883 Mon Sep 17 00:00:00 2001 From: tobjend Date: Sun, 21 Jun 2026 17:58:20 +0200 Subject: [PATCH] feat: add semaphore-mcp Docker image (native HTTP, no proxy) --- .woodpecker.yml | 11 ++++++++++ semaphore/Dockerfile | 11 ++++++++++ semaphore/README.md | 48 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 semaphore/Dockerfile create mode 100644 semaphore/README.md diff --git a/.woodpecker.yml b/.woodpecker.yml index 9ae1e4e..72dba7b 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -23,3 +23,14 @@ pipeline: - docker login forgejo.corentic.eu -u tobi -p $FORGEJO_REGISTRY_TOKEN - docker build -t forgejo.corentic.eu/corentic/mcp-fleet-woodpecker:latest -f woodpecker/Dockerfile woodpecker/ - docker push forgejo.corentic.eu/corentic/mcp-fleet-woodpecker:latest + + build-semaphore: + image: docker:latest + volumes: + - /var/run/docker.sock:/var/run/docker.sock + secrets: + - forgejo_registry_token + commands: + - docker login forgejo.corentic.eu -u tobi -p $FORGEJO_REGISTRY_TOKEN + - docker build -t forgejo.corentic.eu/corentic/mcp-fleet-semaphore:latest -f semaphore/Dockerfile semaphore/ + - docker push forgejo.corentic.eu/corentic/mcp-fleet-semaphore:latest diff --git a/semaphore/Dockerfile b/semaphore/Dockerfile new file mode 100644 index 0000000..b56d6e4 --- /dev/null +++ b/semaphore/Dockerfile @@ -0,0 +1,11 @@ +FROM python:3.12-slim + +RUN pip install --no-cache-dir semaphore-mcp + +ENV MCP_TRANSPORT=http \ + MCP_HOST=0.0.0.0 \ + MCP_PORT=8103 + +EXPOSE 8103 + +CMD ["semaphore-mcp"] diff --git a/semaphore/README.md b/semaphore/README.md new file mode 100644 index 0000000..093f09c --- /dev/null +++ b/semaphore/README.md @@ -0,0 +1,48 @@ +# semaphore-mcp + +MCP server for interacting with SemaphoreUI (Ansible automation). + +Source: [cloin/semaphore-mcp](https://github.com/cloin/semaphore-mcp) + +## Environment Variables + +| Variable | Required | Description | +|----------|----------|-------------| +| `SEMAPHORE_URL` | Yes | Base URL of the SemaphoreUI instance (e.g. `https://semaphore.corentic.eu`) | +| `SEMAPHORE_API_TOKEN` | Yes | API token from SemaphoreUI user settings | +| `MCP_PORT` | No | Port for the MCP HTTP server (default: 8000) | +| `MCP_TRANSPORT` | No | Transport mode (`http` or `stdio`, default: `http`) | +| `MCP_HOST` | No | Bind address (default: `0.0.0.0`) | + +## Usage + +```bash +docker run -d \ + --name semaphore-mcp \ + -p 8103:8103 \ + -e SEMAPHORE_URL=https://semaphore.corentic.eu \ + -e SEMAPHORE_API_TOKEN=your_token_here \ + forgejo.corentic.eu/corentic/mcp-fleet-semaphore:latest +``` + +This MCP uses HTTP transport natively (no mcp-proxy wrapper). Connect via: + +``` +http://host:8103/mcp +``` + +## Tools + +- `create_project`, `get_project`, `update_project`, `delete_project`, `list_projects` +- `create_template`, `get_template`, `update_template`, `delete_template`, `list_templates` +- `create_inventory`, `get_inventory`, `update_inventory`, `delete_inventory`, `list_inventory` +- `create_repository`, `get_repository`, `update_repository`, `delete_repository`, `list_repositories` +- `create_environment`, `get_environment`, `update_environment`, `delete_environment`, `list_environments` +- `create_access_key`, `get_access_key`, `update_access_key`, `delete_access_key`, `list_access_keys` +- `create_schedule`, `get_schedule`, `update_schedule`, `delete_schedule`, `list_schedules` +- `create_view`, `get_view`, `update_view`, `delete_view`, `list_views` +- `run_task`, `get_task`, `get_task_raw_output`, `list_tasks` +- `get_latest_failed_task`, `filter_tasks` +- `list_events`, `get_last_events` +- `stop_task`, `bulk_stop_tasks`, `stop_all_template_tasks` +- `get_project_role`, `update_project_user`, `list_project_users`