firebase-mcp-server について
firebase-mcp-serverは、Firebaseを使う開発者向けに、Firestore、Storage、Auth、Cloud FunctionsログのMCPツールを提供します。スキーマ検証やコレクション検出に対応し、スキーマなしのデータ探索も行えます。
主な機能
- 01Firestoreドキュメントの検索・操作
- 02Storageファイルの管理
- 03Firebase Authユーザーの管理
- 04スキーマ検証とコレクション検出
- 05Cloud Functionsログの検索
- 06MCPツールグループの選択
活用シーン
- 01スキーマに照らしてFirestoreデータを検証
- 02未知のデータベースのコレクションを探索
- 03Firebaseユーザーと保存ファイルを管理
- 04関数ログの絞り込みと集計
MCP 対応
Firestore、Storage、Auth、ログのツールをMCPクライアントに公開し、ツールグループを選択できます。MCPアノテーションは読み書きやリスクの属性を示します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Firebase MCP サーバー
Firebase(Firestore、Storage、Auth、Functions Logging)向けの汎用 Model Context Protocol(MCP)サーバーです。スキーマ駆動の検証と、コンテキスト効率に優れたツールを備えています。
機能
- @ メンション対応 -
@firebase:firestore://users/user-123を使って Firestore ドキュメントを参照できます - スマートオートコンプリート - MRU キャッシュがアクセスしたドキュメントを追跡し、素早く再参照できます
- 自動検出 - スキーマベースのコレクションと検出されたコレクションの両方を表示します
- パスベースのスキーマ - Firebase の
firestore.rulesの規約に従います - スキーマの進化 - フィールドのステータスメタデータ(experimental → official → legacy)
- ホットリロード - ファイルの変更を監視するため、スキーマ変更時に再起動は不要です
- 柔軟な検証 - 3 つのモード:strict、warn(デフォルト)、permissive
- スキーマなしでも動作 - 未知のデータベースを調べるための検出モード
- コンテキスト効率に優れたツール - 大規模なデータセットでトークンを 99% 削減します
- インデックス対応クエリ -
firestore.indexes.jsonに照らしてクエリを検証します - Functions のログ - Cloud Functions のログに対する、集計とラベルフィルタリングに対応した SQL 形式のクエリ
インストール
MCP クライアント(例:Claude Code)に追加します。npx 経由で実行されるため、グローバルインストールは不要です。
{
"mcpServers": {
"firebase": {
"command": "npx",
"args": ["-y", "@dasasian/firebase-mcp-server", "start", "./firestore-schemas.json"]
}
}
}
start には、任意のスキーマ設定パス(デフォルトは ./firestore-schemas.json)と任意のインデックスパス(デフォルトは ./firestore.indexes.json)を指定できます。詳しくはスキーマ形式を参照してください。Firebase 認証には Application Default Credentials を使用します。
または、CLI をグローバルにインストールします。
npm install -g @dasasian/firebase-mcp-server
firebase-mcp start ./firestore-schemas.json
開発(ソースから)
npm install
npm run build
npm run cli -- start --config ./examples/basic/firestore-schemas.json
@ メンション対応(リソース)
Claude Code で Firestore ドキュメントを直接参照できます。
What's the email for @firebase:firestore://users/user-123?
Show me all posts: @firebase:firestore://posts/*
仕組み
Claude Code で @firebase と入力すると:
スキーマベースのコレクションが表示されます(検証あり):
- 📋 Users(ユーザーアカウントのドキュメント)
- 📋 Posts(ブログ投稿のドキュメント)
- 📋 Comments(投稿へのコメント)
さらに、自動検出されたコレクションも表示されます(スキーマなし):
- 🔍 analytics
- 🔍 sessions
- 🔍 audit_logs
設定
# Enable/disable auto-discovery (default: true)
export FIRESTORE_AUTO_DISCOVER=true
# Cache duration in seconds (default: 300 = 5 minutes)
export FIRESTORE_DISCOVERY_CACHE_TTL=300
自動検出のコスト:約 $0.0003/日(わずかです)
ツール
サーバーには 4 つのグループに分かれた 33 個のツールが含まれています。すべてのツールで MCP アノテーション
(readOnlyHint、destructiveHint、idempotentHint、openWorldHint)が宣言されているため、クライアントは読み取りを
自動承認し、書き込みの前に確認を求めることができます。
読み込むツールの選択
33 個すべてのツール定義を読み込むと、毎回のセッションで約 12k トークンのコンテキストを消費します。 必要な機能が一部だけの場合は、対象を絞り込めます。
# Only Firestore (12 tools, ~4.3k tokens)
firebase-mcp start --tools firestore
# Firestore plus Auth
firebase-mcp start --tools firestore,auth
または、MCP クライアントの設定で指定します。
export FIREBASE_MCP_TOOLS=firestore,storage
--tools フラグは環境変数より優先されます。どちらも設定しない場合はすべてのツールが読み込まれるため、
アップグレードしても、すでに使用しているツールが利用できなくなることはありません。無効にしたグループのツールを呼び出すと、
追加すべきグループ名を示すエラーが返されます。
| グループ | ツール数 | 約トークン数 |
|---|---|---|
firestore | 12 | 4,341 |
storage | 14 | 4,152 |
auth | 6 | 2,075 |
logs | 1 | 1,817 |
| すべて(デフォルト) | 33 | 12,387 |
Firestore (12) — --tools firestore
firestore_show_collections— コレクションを表示 (読み取り)firestore_read— ドキュメントを読み取る (読み取り)firestore_export— コレクションをエクスポート (読み取り)firestore_validate— スキーマに照らして検証 (読み取り)firestore_query_select— ドキュメントをクエリ (読み取り)firestore_query_collection_group— コレクショングループをクエリ (読み取り)firestore_count— ドキュメント数をカウント (読み取り)firestore_sum— フィールドを合計 (読み取り)firestore_stats— コレクションの統計情報 (読み取り)firestore_import— ドキュメントをインポート (書き込み、破壊的)firestore_update— ドキュメントを更新 (書き込み、破壊的)firestore_delete— ドキュメントを削除 (書き込み、破壊的)
Firebase Auth (6) — --tools auth
firebase_auth_list_users— ユーザーを一覧表示 (読み取り)firebase_auth_get_user— ユーザーを取得 (読み取り)firebase_auth_create_user— ユーザーを作成 (書き込み)firebase_auth_update_user— ユーザーを更新 (書き込み、破壊的)firebase_auth_delete_user— ユーザーを削除 (書き込み、破壊的)firebase_auth_revoke_sessions— セッションを取り消す (書き込み、破壊的)
Firebase Storage (14) — --tools storage
firebase_storage_list_buckets— バケットを一覧表示 (読み取り)firebase_storage_ls— ファイルを一覧表示 (読み取り)firebase_storage_stat— ファイルのメタデータ (読み取り)firebase_storage_find— ファイルを検索 (読み取り)firebase_storage_get_url— ファイルの URL を取得 (読み取り)firebase_storage_get_access— ファイルのアクセス権を取得 (読み取り)firebase_storage_read— ファイルをローカルの一時パスにダウンロード (書き込み)firebase_storage_upload— ファイルをアップロード (書き込み、破壊的)firebase_storage_rm— ファイルを削除 (書き込み、破壊的)firebase_storage_cp— ファイルをコピー (書き込み、破壊的)firebase_storage_mv— ファイルを移動 (書き込み、破壊的)firebase_storage_sync— バケットをローカルに同期 (書き込み、破壊的)firebase_storage_push— ローカルのファイルをバケットにプッシュ (書き込み、破壊的)firebase_storage_set_access— ファイルのアクセス権を設定 (書き込み、破壊的)
Cloud Logging (1) — --tools logs
firebase_functions_logs— SQL 風構文で Cloud Functions のログをクエリ (書き込み)
firebase_storage_read と firebase_functions_logs は、書き込みを行うため読み取り専用としてマークされていません。前者はローカルの一時ファイルにダウンロードし、後者は自動検出したログスキーマをディスク上で更新します。
関数ログを読み取るには、追加の IAM ロールが必要です。 Firebase Admin SDK のサービスアカウントには、デフォルトで Cloud Logging へのアクセス権がありません。そのため、ほかのすべてのツールが動作していても、
firebase_functions_logsはPERMISSION_DENIED: Permission denied for all log viewsで失敗します。ロールを付与し、反映まで数分お待ちください。gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:firebase-adminsdk-xxxxx@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/logging.viewAccessor"
roles/logging.viewerだけでは不十分な場合があります。エラーには log views とあり、logging.views.access権限はviewAccessorに含まれています。
クエリの例:
// Discover what functions exist
{"distinct": "functionName"}
// Show recent errors
{"where": [{"field": "severity", "operator": "==", "value": "ERROR"}], "limit": 20}
// Top error patterns with counts (use "message" — structured logs have no textPayload)
{"groupBy": ["message"], "aggregates": [{"field": "*", "operation": "count", "alias": "count"}], "where": [{"field": "severity", "operator": "==", "value": "ERROR"}], "orderBy": [{"field": "count", "direction": "desc"}], "limit": 10}
// Filter by custom labels (e.g., user, environment)
{"where": [{"field": "labels.user_id", "operator": "==", "value": "123"}]}
スキーマ形式
スキーマには Firebase のパスベースの規則を使用します。
{
"schemas": {
"/organizations/{organizationId}": {
"description": "Organization documents",
"schema": {
"type": "object",
"required": ["id", "name"],
"properties": {
"id": { "type": "string" },
"name": { "type": "string" }
}
}
},
"/organizations/{organizationId}/products/{productId}": {
"description": "Product catalog",
"schema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"category": {
"type": "string",
"x-status": "legacy",
"x-replacedBy": "productType"
},
"productType": {
"type": "string",
"x-status": "experimental"
}
}
},
"timestampFields": ["createdAt", "updatedAt"]
}
}
}
ドキュメント
- インストールガイド
- @ メンションのサポートガイド -
@firebase:firestore://参照の使用方法 - 設定リファレンス
- スキーマ作成ガイド
- Functions ログガイド - SQL 風構文、集計、カスタムラベルを使用した Cloud Functions ログのクエリ
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。