Firebase Crashlytics MCP Server
by tjdam007
README.md
# š„ Firebase Crashlytics MCP Server
[](https://opensource.org/licenses/MIT)
[](https://nodejs.org/)
[](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