get_build_logs
Retrieve a step-by-step status summary of a Codemagic build, including each step's name, ID, and status (success, failed, skipped, canceled). Optionally filter results by status.
Instructions
Get a step-by-step status summary of a Codemagic build.
Returns each build step with its name, ID, and status (✅ success, ❌ failed, ⏭ skipped).
Args: build_id: The Codemagic build ID. statuses: Optional list of statuses to filter by. Valid values: "success", "failed", "skipped", "canceled". If omitted, all steps are returned.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| build_id | Yes | ||
| statuses | No |
Implementation Reference
- codemagic_mcp/tools/builds.py:86-101 (handler)The MCP tool handler for 'get_build_logs'. Defines the tool with @mcp.tool(), takes build_id and optional statuses filter, delegates to CodemagicClient.get_build_logs.
@mcp.tool() async def get_build_logs( build_id: str, statuses: list[str] | None = None, ) -> Any: """Get a step-by-step status summary of a Codemagic build. Returns each build step with its name, ID, and status (✅ success, ❌ failed, ⏭ skipped). Args: build_id: The Codemagic build ID. statuses: Optional list of statuses to filter by. Valid values: "success", "failed", "skipped", "canceled". If omitted, all steps are returned. """ async with CodemagicClient() as client: return await client.get_build_logs(build_id, statuses=statuses) - codemagic_mcp/client.py:233-250 (helper)The actual implementation logic in CodemagicClient. Fetches build data from /builds/{build_id}, extracts buildActions, formats each step with emoji, name, ID, and status.
async def get_build_logs(self, build_id: str, statuses: list[str] | None = None) -> str: build_data = await self._get(f"/builds/{build_id}") actions = build_data.get("build", {}).get("buildActions", []) status_emoji = { "success": "✅", "failed": "❌", "skipped": "⏭", "canceled": "🚫", } lines = [] for action in actions: status = action.get("status") or "unknown" if statuses and status not in statuses: continue emoji = status_emoji.get(status, "⏳") lines.append(f"{emoji} {action.get('name')}") lines.append(f" ID: {action.get('_id')} status: {status}") return "\n".join(lines) - codemagic_mcp/tools/__init__.py:6-12 (registration)Registration entry point. register_all_tools calls builds.register(mcp), which triggers the @mcp.tool() decorator on get_build_logs.
def register_all_tools(mcp: FastMCP) -> None: apps.register(mcp) builds.register(mcp) artifacts.register(mcp) caches.register(mcp) variables.register(mcp) webhooks.register(mcp) - codemagic_mcp/tools/builds.py:9-9 (registration)The register function in builds.py where @mcp.tool() decorators (including get_build_logs) are applied.
def register(mcp: FastMCP) -> None: