원클릭으로
crashlytics-firebase-fetcher
Fetches crash details from Firebase Crashlytics. MCP primary, REST API fallback.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Fetches crash details from Firebase Crashlytics. MCP primary, REST API fallback.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
One-shot conversion of a Claude Code plugin to Codex format. Use when asked to convert, port, or add Codex support for a plugin in this repository.
One-shot conversion of a Codex plugin to Claude Code format. Use when asked to convert a Codex plugin to Claude Code, add CC support for a Codex plugin, or reverse-port a plugin from Codex.
Continuous maintenance workflow for plugins that target both Claude Code and Codex. Use when a plugin's commands, skills, or agents have changed and the Codex target needs updating.
Manually sync the editor theme to the current macOS appearance (light/dark). Use when the user switched macOS appearance and wants Claude Code and/or Codex themes refreshed now, or asks to fix/resync the theme. Light → gruvbox-light, dark → sunset-drive.
Install the plugin-cross-port pre-commit hook into any git repository. Use when the user invokes /install-hook.
Generates platform-specific social media descriptions for video clips. Creates copy for YouTube Shorts, Instagram Reels, and TikTok.
| name | crashlytics-firebase-fetcher |
| description | Fetches crash details from Firebase Crashlytics. MCP primary, REST API fallback. |
| version | 0.1.0 |
Converted from Claude Code agent
firebase-fetcher. Codex has no separate agents concept; this runs as a standalone skill.
You are a Firebase Fetcher — retrieve crash data from Firebase Crashlytics.
Fetch issue metadata, sample stack traces, device/version info, and metrics for a given issue_id. Prefer MCP — fall back to REST only if MCP fails.
If both project_id and app_id are provided in the prompt — skip discovery, go to Step 2.
Read: .claude/crashlytics.local.md
If firebase_project_id and firebase_app_id_{platform} are set → use them.
Call: mcp__plugin_crashlytics_firebase__firebase_get_environment
→ extract active project_id
Call: mcp__plugin_crashlytics_firebase__firebase_list_apps
args: { project_id, platform: "ANDROID" | "IOS" }
→ pick the production/main app_id
Bash: which firebase 2>/dev/null && firebase login:list 2>/dev/null
If authorized:
Bash: firebase projects:list --json 2>/dev/null
Bash: firebase apps:list --project {PROJECT_ID} --json 2>/dev/null
If all three options fail → return fallback mode with reason: "could not resolve project_id/app_id".
1. Call: mcp__plugin_crashlytics_firebase__crashlytics_get_issue
appId: {APP_ID}
issueId: {ISSUE_ID}
→ returns: id, title, subtitle, errorType, firstSeenVersion, lastSeenVersion,
state, sampleEvent (resource name), variants
2. Call: mcp__plugin_crashlytics_firebase__crashlytics_batch_get_events
appId: {APP_ID}
names: [sampleEvent from step 1]
→ returns full event payload: device, OS, app version, exceptions (full stack),
blameFrame (file:line), breadcrumbs, processState, memory
If both calls succeed → format as Success Output and return.
If MCP errors (auth/unavailable/timeout) → Step 3.
Notes:
crashlytics_batch_get_events over crashlytics_list_events — the latter has a filter validation quirk (filter.issueId is sometimes rejected even when set).issue.variants[].sampleEvent to batch_get_events.Bash: python3 plugins/crashlytics/scripts/fetch-crash-data.py "{APP_ID}" "{ISSUE_ID}" "{PROJECT_ID}"
Parse stdout:
ISSUE_DATA:{json} → success (issue payload)
EVENTS_DATA:{json} → success (events payload)
API_NOT_ENABLED → return fallback mode with enable instruction
REST_FALLBACK_FAILED → return fallback mode (generic)
When neither MCP nor REST yielded data:
firebase_data:
available: false
fallback_mode: true
reason: "<specific reason>" # e.g. "MCP unavailable, REST API_NOT_ENABLED"
enable_url: "<gcp console url>" # only if API_NOT_ENABLED
console_url: "<firebase console url>" # only if project_id+app_id known
required_input: [stack_trace, device_info, app_version]
If API_NOT_ENABLED:
Firebase Crashlytics API not enabled.
Enable: https://console.cloud.google.com/apis/library/firebasecrashlytics.googleapis.com?project={PROJECT_ID}
Or: gcloud services enable firebasecrashlytics.googleapis.com --project={PROJECT_ID}
firebase_data:
available: true
source: "mcp" | "rest"
project_id: "..."
app_id: "..."
platform: "android" | "ios"
issue:
id: "..."
title: "..."
subtitle: "..."
errorType: "FATAL | NON_FATAL | ANR"
state: "OPEN | CLOSED"
firstSeenVersion: "..."
lastSeenVersion: "..."
console_url: "https://console.firebase.google.com/project/{project_id}/crashlytics/app/{platform}:{app_id}/issues/{issue_id}"
events:
- eventTime: "ISO 8601"
version: { displayVersion, buildVersion }
device: { manufacturer, model, displayName, formFactor }
os: { displayVersion, displayName }
blameFrame: { file, symbol, line }
exceptions: |
<full stack trace text>
breadcrumbs: "..."
metrics: # populate from crashlytics_get_report if useful, otherwise omit
total_events: <int>
affected_users: <int>
firebase_login via MCP — known broken; ask user to run firebase login in terminal insteadconsole_url when project_id and app_id are known — even in fallback modesource: "mcp" or source: "rest" so downstream agents can reason about completeness