io.github.AgiMaulana/CodemagicMcp
Codemagic CI/CD MCP Server — manage builds, apps, artifacts, and caches from your AI
Open source Open in the app JSON README (API)
About
Codemagic CI/CD MCP Server — manage builds, apps, artifacts, and caches from your AI
Details
- Kind
- MCP servers
- Topic
- Cloud & DevOps
- Publisher
- agimaulana
- Origin
- official
- Category
- ferramentas
- Transport
- local
- Version
- 0.6.2
- Stars
- 2
- Last push
- 2026-04-23T16:27:37Z
- Repository state
- ativo
- Language
- Python
- License
- MIT
- Added
- 2026-08-29 03:01:40
- Updated
- 2026-08-29 03:01:40
- Origin id
io.github.AgiMaulana/CodemagicMcp
README
# Codemagic MCP Server
[](https://registry.modelcontextprotocol.io/servers/io.github.AgiMaulana/CodemagicMcp)
A local Python MCP server that exposes the [Codemagic CI/CD REST API](https://docs.codemagic.io/rest-api/overview/) as Claude-callable tools. Trigger builds, manage apps, download artifacts, and clear caches — all from Claude Code or Claude Desktop without leaving the chat.
[](https://glama.ai/mcp/servers/AgiMaulana/CodemagicMcp)
[](https://glama.ai/mcp/servers/AgiMaulana/CodemagicMcp)
[](https://lobehub.com/mcp/agimaulana-codemagicmcp)
[](LICENSE)
## Tools
### Apps
| Tool | Description |
|------|-------------|
| `list_apps` | List all applications in your Codemagic account |
| `get_app` | Get details of a specific application |
| `add_app` | Add a public repository to Codemagic |
| `add_private_app` | Add a private repository using an SSH key |
| `delete_app` ⚠️ | Delete an application from Codemagic |
### Builds
| Tool | Description |
|------|-------------|
| `list_builds` | List builds, optionally filtered by app |
| `get_build` | Get build details with step count summary; pass `include_steps=True` for full step list |
| `trigger_build` | Trigger a new build for an application |
| `cancel_build` ⚠️ | Cancel a running build |
| `get_build_logs` | Get a step-by-step status summary of a build (filterable by status) |
| `get_step_logs` | Get raw logs inline or create/update a managed temp file for a specific build step |
| `get_step_log_artifact` | Check whether a managed local step-log artifact still exists for a specific build step |
| `list_build_artifacts` | List all artifacts produced by a build |
### Artifacts
| Tool | Description |
|------|-------------|
| `get_artifact_url` | Get the download URL for a build artifact |
| `create_artifact_public_url` | Create a time-limited public URL for an artifact |
### Caches
| Tool | Description |
|------|-------------|
| `list_caches` | List all build caches for an application |
| `delete_cache` ⚠️ | Delete a specific build cache |
| `delete_all_caches` ⚠️ | Delete all build caches for an application |
### Environment Variables
| Tool | Description |
|------|-------------|
| `list_variables` | List all environment variables for an application |
| `add_variable` | Add an environment variable to an application |
| `update_variable` | Update an existing environment variable |
| `delete_variable` ⚠️ | Delete an environment variable |
### Webhooks
| Tool | Description |
|------|-------------|
| `list_webhooks` | List all webhooks for an application |
| `add_webhook` | Add a webhook to an application |
| `delete_webhook` ⚠️ | Delete a webhook |
> ⚠️ These tools are marked as destructive and will prompt for confirmation before executing.
## Quick Start
The fastest way to get running with Claude Code — no separate install step needed:
```bash
# 1. Add the server (uses uvx to run it on-demand)
claude mcp add codemagic -e CODEMAGIC_API_KEY=your-api-key-here -- uvx codemagic-mcp
# 2. Restart Claude Code — tools will appear in /tools
```
That's it. See [Configuration](#configuration) for optional settings like `CODEMAGIC_DEFAULT_APP_ID`.
---
## Installation
**Requirements:** Python 3.11+
### Option 1 — uvx (recommended, no install needed)
```bash
uvx codemagic-mcp
```
### Option 2 — pip
```bash
pip install codemagic-mcp
```
### Option 3 — from source
```bash
git clone https://github.com/AgiMaulana/CodemagicMcp.git
cd CodemagicMcp
python3 -m venv .venv
.venv/bin/pip install -e .
```
## Configuration
Get your API token from [Codemagic User Settings → Integrations → Codemagic API](https://codemagic.io/settings).
You can provide settings as environment variables or via a `.env` file:
```bash
# .env
CODEMAGIC_API_KEY=your-api-key-here
# Optional: set a default app so you don't have to specify it every time
CODEMAGIC_DEFAULT_APP_ID=your-app-id-here
# Optional: customize managed temp log storage for get_step_logs(..., delivery="file")
CODEMAGIC_LOG_TEMP_DIR=/tmp/codemagic-mcp
CODEMAGIC_LOG_TTL_SECONDS=3600
CODEMAGIC_LOG_CLEANUP_INTERVAL_SECONDS=300
CODEMAGIC_LOG_MAX_TOTAL_BYTES=524288000
CODEMAGIC_LOG_MAX_FILE_COUNT=200
```
### Default App ID
`CODEMAGIC_DEFAULT_APP_ID` is optional but recommended if you work primarily with one app. When set, the AI will use it automatically whenever a tool requires an `app_id` and none was specified. If it is not set, the AI will:
1. Call `list_apps` to discover available apps.
2. Use the app automatically if only one exists.
3. Present the list and ask you to choose if multiple apps are found.
### Step Log File Delivery
`get_step_logs` supports two delivery modes:
- `delivery="file"` is the default and writes the log to a managed local temp file, returning metadata such as `artifact_id`, `file_path`, `bytes`, `line_count`, and `expires_at`.
- `delivery="inline"` returns the raw step log text directly.
The local file mode is useful when a step log is too large to comfortably return inline. Managed log files are stored under `CODEMAGIC_LOG_TEMP_DIR` and expired files are cleaned up opportunistically whenever a new log file is written. The default retention window is controlled by `CODEMAGIC_LOG_TTL_SECONDS` and defaults to `3600` seconds.
The server also runs a startup cleanup pass and a periodic background cleanup loop. The loop interval is controlled by `CODEMAGIC_LOG_CLEANUP_INTERVAL_SECONDS` and defaults to `300` seconds. As an additional safety backstop, the managed temp directory is capped by `CODEMAGIC_LOG_MAX_TOTAL_BYTES` and `CODEMAGIC_LOG_MAX_FILE_COUNT`; when either cap is exceeded, the oldest files are evicted first.
`get_step_log_artifact(build_id, step_id)` checks whether that managed artifact still exists without calling Codemagic again or returning the file contents. The artifact metadata includes a deterministic `artifact_id` in this format:
```text
artifact_<build_id>_<step_id>
```
If the artifact is missing, the server returns `status="missing"` with reason `not_generated_or_expired`, which means the file was either never generated or it expired and was deleted.
## Register with Claude Code
Run the following command to add the server:
```bash
claude mcp add codemagic -- codemagic-mcp
```
Then set your API key in the MCP env config, or export it in your shell before starting Claude Code:
```bash
export CODEMAGIC_API_KEY=your-api-key-here
```
Alternatively, add it manually to `~/.claude.json`:
```json
{
"mcpServers": {
"codemagic": {
"command": "codemagic-mcp",
"env": {
"CODEMAGIC_API_KEY": "your-api-key-here",
"CODEMAGIC_DEFAULT_APP_ID": "your-app-id-here"
}
}
}
}
```
### Using uvx (no prior installation needed)
```json
{
"mcpServers": {
"codemagic": {
"command": "uvx",
"args": ["codemagic-mcp"],
"env": {
"CODEMAGIC_API_KEY": "your-api-key-here",
"CODEMAGIC_DEFAULT_APP_ID": "your-app-id-here"
}
}
}
}
```
Restart Claude Code — the tools will appear in `/tools`.
## Register with Claude Desktop
Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
```json
{
"mcpServers": {
"codemagic": {
"command": "codemagic-mcp",
"env": {
"CODEMAGIC_API_KEY": "your-api-key-here",
"CODEMAGIC_DEFAULT_APP_ID": "your-app-id-here"
}
}
}
}
```
Restart Claude Desktop to pick up the changes.
## Project Structure
```
codemagic_mcp/
├── config.py # pydantic-settings config (validates API key at startup)
├── client.py # httpx async client, one method per endpoint
├── server.py # FastMCP instance
└── tools/
├── apps.py
├── builds.py
├── artifacts.py
├── caches.py
├── variables.py
└── webhooks.py
```
## Adding New Tools
1. Add a method to `client.py`
2. Add the tool function to the relevant `tools/*.py` file
3. That's it — `server.py` never needs to change