A Firebase Admin SDK MCP (Model-Controller-Provider) server that provides a set of tools for managing Firebase Authentication and Firestore operations. This server can be used with Cursor IDE or Claude Desktop for seamless integration with AI assistants.
create_user: Create new Firebase usersget_users: List all users in Firebase Authget_user: Get specific user detailsupdate_user: Update user properties (email, display name, password)delete_user: Remove users from Firebase Authverify_email: Generate email verification linksreset_password: Generate password reset links
get_collections: List all Firestore collectionsget_documents: List all documents in a collectionget_document: Get specific document datacreate_document: Create new documentsupdate_document: Update existing documentsdelete_document: Remove documents from Firestorebatch_write: Perform multiple write operations atomically
- Python 3.7 or higher
 - Firebase project with Admin SDK enabled
 - Firebase service account key
 - Cursor IDE or Claude Desktop (for AI assistant integration)
 
- 
Create a Firebase Project
- Go to Firebase Console
 - Create a new project or select an existing one
 - Enable Authentication and Firestore services
 
 - 
Get Firebase Admin SDK Credentials
- In Firebase Console, go to Project Settings > Service Accounts
 - Click "Generate New Private Key"
 - Save the JSON file as 
service-account-key.jsonin your project root 
 - 
Install Dependencies
pip install firebase-admin fastmcp
 - 
Configure the Server
- Update the service account key path in 
firebase.py:cred = credentials.Certificate("path/to/your/service-account-key.json")
 
 - Update the service account key path in 
 
- 
Start the MCP Server
You can run the server in several ways:
# Using the MCP CLI (recommended) mcp dev firebase.py # With environment variables mcp dev firebase.py -v FIREBASE_KEY=path/to/key.json # With custom name mcp dev firebase.py --name "Firebase Tools Server" # Load environment variables from file mcp dev firebase.py -f .env
 - 
Install in Claude Desktop
# Basic installation mcp install firebase.py # Install with custom name mcp install firebase.py --name "Firebase Tools" # Install with environment variables mcp install firebase.py -v FIREBASE_KEY=path/to/key.json -v OTHER_VAR=value mcp install firebase.py -f .env
 - 
Direct Execution
For advanced scenarios, you can run the server directly:
from mcp.server.fastmcp import FastMCP mcp = FastMCP("Firebase Tools") if __name__ == "__main__": mcp.run()
Then run with:
python firebase.py # or mcp run firebase.py 
- 
Server Logs
The MCP server provides detailed logging. You can enable debug logs by setting the environment variable:
mcp dev firebase.py -v MCP_LOG_LEVEL=debug
 - 
Lifespan Management
For debugging initialization and cleanup, implement the lifespan API:
from contextlib import asynccontextmanager from collections.abc import AsyncIterator from mcp.server import Server @asynccontextmanager async def server_lifespan(server: Server) -> AsyncIterator[dict]: # Initialize Firebase on startup firebase_app = initialize_firebase() try: yield {"firebase": firebase_app} finally: # Cleanup on shutdown await firebase_app.delete() # Pass lifespan to server server = Server("firebase-tools", lifespan=server_lifespan)
 - 
Tool Testing
You can test individual tools using the MCP CLI:
# Test a specific tool mcp test firebase.py --tool create_user # Test with specific arguments mcp test firebase.py --tool create_user --args '{"email": "[email protected]"}'
 - 
Integration Testing
For testing the full server integration:
# Start server in test mode mcp dev firebase.py --test # In another terminal, run integration tests mcp test-integration firebase.py
 
# Create a new user
await create_user(email="[email protected]", password="securepassword123")
# Update user properties
await update_user(
    user_id="user123",
    email="[email protected]",
    display_name="New Name"
)
# Send email verification
await verify_email(
    user_id="user123",
    action_url="https://yourapp.com/verified"
)
# Generate password reset link
await reset_password(
    email="[email protected]",
    action_url="https://yourapp.com/reset-complete"
)# Create a document
await create_document(
    collection_id="users",
    document_id="user123",
    data={
        "name": "John Doe",
        "age": 30
    }
)
# Update a document
await update_document(
    collection_id="users",
    document_id="user123",
    data={
        "age": 31
    }
)
# Get document data
await get_document(
    collection_id="users",
    document_id="user123"
)
# Perform atomic batch operations
await batch_write(operations=[
    {
        "type": "create",
        "collection_id": "users",
        "document_id": "user1",
        "data": {
            "name": "John Doe",
            "email": "[email protected]"
        }
    },
    {
        "type": "update",
        "collection_id": "profiles",
        "document_id": "profile1",
        "data": {
            "age": 30,
            "occupation": "Developer"
        }
    },
    {
        "type": "delete",
        "collection_id": "temp",
        "document_id": "temp1"
    }
])All tools return responses in a consistent format:
# Success response
{
    "success": True,
    "data": {...}  # or relevant success data
    "message": "Operation completed successfully"
}
# Error response
{
    "success": False,
    "error": "Error message details"
}- 
Service Account Key
- Never commit your 
service-account-key.jsonto version control - Add it to 
.gitignore - Use environment variables in production
 
 - Never commit your 
 - 
Authentication
- Always validate user input
 - Implement proper error handling
 - Follow Firebase security best practices
 
 
- Fork the repository
 - Create a feature branch
 - Commit your changes
 - Push to the branch
 - Create a Pull Request
 
This project is licensed under the MIT License - see the LICENSE file for details.
For issues and feature requests, please create an issue in the GitHub repository.