Skip to main content
Glama
tjdam007

Firebase Crashlytics MCP Server

by tjdam007
README.md
# šŸ”„ Firebase Crashlytics MCP Server

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Node.js](https://img.shields.io/badge/node.js-18%2B-green)](https://nodejs.org/)
[![MCP](https://img.shields.io/badge/MCP-Compatible-blue)](https://modelcontextprotocol.io/)

A clean, simple **Model Context Protocol (MCP)** server that integrates Firebase Crashlytics with BigQuery for AI-powered crash analysis. Built for use with Claude Code and other MCP-compatible AI assistants.

## ✨ Features

- šŸ” **Simple Tools**: Clean, single-responsibility tools for crash analysis
- šŸ“± **App Discovery**: Automatically discover all apps in your Firebase project
- šŸ’„ **Fatal Crash Analysis**: Get detailed fatal crashes with stack traces
- šŸ› **ANR Issue Detection**: Analyze Application Not Responding issues
- šŸ”§ **Easy Setup**: Simple configuration with environment variables
- šŸ¤– **AI-Optimized**: Structured output perfect for AI analysis and debugging

## šŸš€ Quick Start

### Prerequisites

- Node.js 18+ 
- Firebase project with Crashlytics enabled
- BigQuery export enabled for Crashlytics
- Google Cloud service account with BigQuery access

### Installation

1. **Clone the repository:**
```bash
git clone https://github.com/your-username/mcp-crashlytics-server.git
cd mcp-crashlytics-server
```

2. **Install dependencies:**
```bash
npm install
```

3. **Build the project:**
```bash
npm run build
```

### Configuration

1. **Create environment file:**
```bash
cp .env.example .env
```

2. **Configure your environment variables:**
```bash
# Google Cloud Service Account (choose one method)
GOOGLE_SERVICE_ACCOUNT_KEY=/path/to/your-service-account.json
# OR base64-encoded: GOOGLE_SERVICE_ACCOUNT_KEY=eyJhbGciOiJIUzI1...

# Your Firebase project settings
BIGQUERY_PROJECT_ID=your-firebase-project-id
BIGQUERY_DATASET_ID=firebase_crashlytics

# Optional: Default limit for crash queries
DEFAULT_CRASH_LIMIT=10
```

### Setup Firebase & BigQuery

1. **Enable Crashlytics BigQuery Export:**
   - Go to Firebase Console → Project Settings → Integrations
   - Enable BigQuery integration for Crashlytics
   - Data will be exported to `firebase_crashlytics` dataset

2. **Create Service Account:**
   - Go to [Google Cloud Console](https://console.cloud.google.com/)
   - Navigate to IAM & Admin → Service Accounts
   - Create service account with these roles:
     - `BigQuery Data Viewer`
     - `BigQuery Job User`
   - Download JSON key file

### Register with AI Agents

#### Claude Code
```bash
# Register the MCP server
claude mcp add crashlytics -- node /path/to/mcp-crashlytics-server/dist/index.js

# Verify it's working
claude mcp list
```

#### Cursor
Add to your `.cursorrules` or cursor settings:
```json
{
  "mcpServers": {
    "crashlytics": {
      "command": "node",
      "args": ["/path/to/mcp-crashlytics-server/dist/index.js"],
      "env": {
        "GOOGLE_SERVICE_ACCOUNT_KEY": "/path/to/your-service-account.json",
        "BIGQUERY_PROJECT_ID": "your-firebase-project-id",
        "BIGQUERY_DATASET_ID": "firebase_crashlytics"
      }
    }
  }
}
```

#### Windsurf
Add to your Windsurf settings or `.windsurfrules`:
```json
{
  "mcp": {
    "servers": {
      "crashlytics": {
        "command": "node",
        "args": ["/path/to/mcp-crashlytics-server/dist/index.js"],
        "env": {
          "GOOGLE_SERVICE_ACCOUNT_KEY": "/path/to/your-service-account.json",
          "BIGQUERY_PROJECT_ID": "your-firebase-project-id", 
          "BIGQUERY_DATASET_ID": "firebase_crashlytics"
        }
      }
    }
  }
}
```

#### Other MCP-Compatible IDEs
For other MCP-compatible tools, add this server configuration:
- **Command**: `node`
- **Args**: `["/path/to/mcp-crashlytics-server/dist/index.js"]` 
- **Environment Variables**: Same as above (.env file values)

## šŸ› ļø Available Tools

### 1. `list_available_apps`
**Discover all apps** in your Firebase Crashlytics dataset.
- **Parameters**: None
- **Returns**: List of apps with crash counts

```javascript
// Usage in Claude Code/Cursor
"What apps are available in my crashlytics data?"
```

### 2. `get_fatal_crashes` 
**Get fatal crashes** for a specific app.
- **Parameters**: 
  - `app_package` (required): App package name (e.g., "com.example.myapp")
  - `limit` (optional): Number of crashes (1-50, default: 10)

```javascript
// Usage in Claude Code/Cursor  
"Get the 10 most recent fatal crashes for com.example.myapp"
```

### 3. `get_anr_issues`
**Get ANR (Application Not Responding)** issues for a specific app.
- **Parameters**:
  - `app_package` (required): App package name
  - `limit` (optional): Number of issues (1-50, default: 10)

```javascript
// Usage in Claude Code/Cursor
"Show me ANR issues for com.example.myapp, limit to 5"
```

## šŸ“‹ Example Usage

Once set up, you can ask Claude Code natural questions like:

```bash
# Discover your apps
"What apps do I have crash data for?"

# Get fatal crashes
"Show me the latest fatal crashes for my Android app"
"Get 5 fatal crashes for com.mycompany.myapp"

# Analyze ANR issues  
"What ANR issues does my app have?"
"Show ANR problems for com.mycompany.myapp from the last week"
```

## šŸ—ļø Project Structure

```
mcp-crashlytics-server/
ā”œā”€ā”€ src/
│   ā”œā”€ā”€ index.ts              # Main MCP server
│   ā”œā”€ā”€ bigquery-client.ts    # BigQuery integration  
│   ā”œā”€ā”€ crash-processor.ts    # Crash data processing
│   ā”œā”€ā”€ impact-analyzer.ts    # Impact analysis
│   └── types.ts             # TypeScript definitions
ā”œā”€ā”€ dist/                    # Built JavaScript files
ā”œā”€ā”€ package.json
ā”œā”€ā”€ tsconfig.json
ā”œā”€ā”€ .env.example            # Environment template
└── README.md
```

## šŸ”§ Development

### Running in Development Mode
```bash
npm run dev
```

### Building
```bash
npm run build
```

### Linting
```bash
npm run lint
```

### Testing
```bash
npm test
```

## šŸ› Troubleshooting

### Common Issues

**1. "No MCP servers configured"**
- Make sure to register the server: `claude mcp add crashlytics -- node /path/to/dist/index.js`
- Restart Claude Code/Cursor IDE

**2. "Authentication Failed"**
- Verify service account JSON file path is correct
- Ensure service account has BigQuery permissions
- Check project ID matches your Firebase project

**3. "No crashes returned"**
- Confirm Crashlytics BigQuery export is enabled
- Wait 24-48 hours for initial data export
- Verify your app is actually sending crash data

**4. "Table not found"**
- Check that `BIGQUERY_DATASET_ID` is correct (usually `firebase_crashlytics`)
- Ensure crashes exist in your Firebase project
- Verify BigQuery export is working in Firebase Console

### Debug Mode

Enable verbose logging:
```bash
DEBUG=mcp-crashlytics-server npm start
```

## šŸ¤ Contributing

1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Make your changes
4. Add tests for new functionality  
5. Commit your changes (`git commit -m 'Add amazing feature'`)
6. Push to the branch (`git push origin feature/amazing-feature`)
7. Open a Pull Request

## šŸ“„ License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## šŸ”’ Security Considerations

- āš ļø **Never expose service account credentials** in logs or version control
- šŸ” Use **least-privilege permissions** for service accounts
- šŸ”‘ Store credentials securely using environment variables
- 🚫 Add `.env` to `.gitignore` (already included)

## šŸ“š Resources

- [Model Context Protocol Documentation](https://modelcontextprotocol.io/)
- [Claude Code Documentation](https://docs.anthropic.com/en/docs/claude-code)
- [Firebase Crashlytics](https://firebase.google.com/products/crashlytics)
- [BigQuery Documentation](https://cloud.google.com/bigquery/docs)

## šŸ’” Need Help?

- šŸ› **Found a bug?** [Open an issue](https://github.com/your-username/mcp-crashlytics-server/issues)
- šŸ’¬ **Have questions?** [Start a discussion](https://github.com/your-username/mcp-crashlytics-server/discussions)
- šŸš€ **Want a feature?** [Request it here](https://github.com/your-username/mcp-crashlytics-server/issues/new?template=feature_request.md)

---

**Made with ā¤ļø for the MCP community**

TDQS

B3.2/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct aspect of crash analysis: apps, trends, fatal crashes, ANR issues, and crash details. No functional overlap.

Naming Consistency5/5

All five tools follow a consistent verb_noun pattern in snake_case (e.g., list_available_apps, get_fatal_crashes), making naming predictable and clear.

Tool Count4/5

Five tools is a reasonable size for a focused Crashlytics server, covering core read operations without being too bare or excessive.

Completeness3/5

The set covers trends, fatal crashes, ANR issues, and crash details but lacks non-fatal crashes and any mutation capabilities, which are notable gaps for a crash analysis server.

Maintenance

ActivityInactive
ResponsivenessNo issues