woodpecker-mcp
An MCP server for Woodpecker CI, generated from the Woodpecker OpenAPI spec with fastmcp and served over streamable HTTP.
The tool surface is a curated allowlist, not the full API: all the reads an agent needs to answer "why is my build red / stuck", plus exactly five write operations (trigger, restart, cancel, approve, decline pipeline). Everything else, repo/secret/cron/agent CRUD, forge and system administration, is not exposed.
Tools
| Area | Tools |
|---|---|
| Repos | list_repos, lookup_repo, get_repo, get_repo_permissions, list_branches, list_pull_requests |
| Pipelines | list_pipelines, get_pipeline, get_pipeline_config, get_pipeline_metadata |
| Pipeline ops (write) | trigger_pipeline, restart_pipeline, cancel_pipeline, approve_pipeline, decline_pipeline |
| Logs | get_step_logs, plain-text step logs, base64-decoded, tailed (default 200 lines) |
| Orgs | lookup_org, get_org, get_org_permissions |
| Queue & agents | get_queue_info, list_agents, get_agent, list_agent_tasks |
| Secrets & registries (metadata only) | list_repo_secrets, list_org_secrets, list_repo_registries, list_org_registries |
Configuration
| Variable | Required | Description |
|---|---|---|
WOODPECKER_SERVER |
yes | Base URL of the Woodpecker server, e.g. https://ci.example.com (/api is appended) |
WOODPECKER_TOKEN |
yes | Personal access token used for upstream API calls |
WOODPECKER_MCP_READ_ONLY |
no | true/1/yes/on removes the five write tools entirely |
WOODPECKER_MCP_TRANSPORT |
no | http (default) or stdio |
HOST |
no | Bind address (http only), default 0.0.0.0 |
PORT |
no | Bind port (http only), default 8000 |
An MCP client may act as a different Woodpecker user by sending an
X-Woodpecker-Token header; it overrides WOODPECKER_TOKEN for that request.
The server performs no authentication of its own, deploy it on a trusted
network. token fields in upstream responses (e.g. agent registration
tokens, which Woodpecker returns in cleartext to admin PATs) are redacted
before reaching the client.
Running
Docker (streamable HTTP)
docker run -p 8000:8000 \
-e WOODPECKER_SERVER=https://ci.example.com \
-e WOODPECKER_TOKEN=... \
ghcr.io/rtuszik/woodpecker-mcp:latest
The MCP endpoint is http://<host>:8000/mcp (streamable HTTP).
uvx (stdio)
The package is published to PyPI as
woodpecker-ci-mcp. With
WOODPECKER_MCP_TRANSPORT=stdio the server speaks MCP over stdin/stdout, so a
client can spawn it directly. Register it with e.g. Claude Code:
claude mcp add woodpecker \
--env WOODPECKER_SERVER=https://ci.example.com \
--env WOODPECKER_TOKEN=... \
--env WOODPECKER_MCP_TRANSPORT=stdio \
-- uvx woodpecker-ci-mcp
or in a generic MCP client config:
{
"mcpServers": {
"woodpecker": {
"command": "uvx",
"args": ["woodpecker-ci-mcp"],
"env": {
"WOODPECKER_SERVER": "https://ci.example.com",
"WOODPECKER_TOKEN": "...",
"WOODPECKER_MCP_TRANSPORT": "stdio"
}
}
}
}
In stdio mode the per-request X-Woodpecker-Token override does not apply;
the configured token is always used.
Development
uv sync # install
uv run pytest # tests
mise run check # format, lint, typecheck, tests
The bundled spec lives at src/woodpecker_mcp/openapi.yaml; the allowlist that
defines the tool surface is src/woodpecker_mcp/spec.py.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file woodpecker_ci_mcp-0.1.0.tar.gz.
File metadata
- Download URL: woodpecker_ci_mcp-0.1.0.tar.gz
- Upload date:
- Size: 16.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.11.31 {"installer":{"name":"uv","version":"0.11.31","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6a028eb4012dcb733b1ff16802e3f0abb4cd0d46116e9f790b6a3fb396dd5f3
|
|
| MD5 |
47f9fb447e6720ad2e4477141e9c4c98
|
|
| BLAKE2b-256 |
8466ebb4693a84215f3055ce9dbcfb7a9a82f6eeb484625bf9e091e9b1ebdef0
|
File details
Details for the file woodpecker_ci_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: woodpecker_ci_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 18.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.11.31 {"installer":{"name":"uv","version":"0.11.31","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04a7f87532ba1ac769f6cd945808a7a6f0c7ed5ac1485920f2dd3c69fa7809df
|
|
| MD5 |
90d5bbc52cd9f73b987a37b260f63654
|
|
| BLAKE2b-256 |
7310f25949fa381882c27da87786b7305ee77fa63a505b73a675c5202ec04373
|