get_build_logs
Retrieve step-by-step status summaries for Codemagic builds to monitor progress and identify issues. Filter results by success, failed, skipped, or canceled statuses.
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
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| build_id | Yes | ||
| statuses | No |
Implementation Reference
- codemagic_mcp/tools/builds.py:87-101 (handler)The MCP tool registration for 'get_build_logs' which delegates to the CodemagicClient.
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:230-247 (handler)The actual implementation of fetching and formatting the build logs.
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)