FireCMS Cloud について
FireCMS Cloud MCP サーバーは、AI アシスタントから Firebase プロジェクトを FireCMS Cloud に接続し、Firestore のデータ、コレクションのスキーマ、プロジェクト設定、ユーザーを管理できるようにします。書き込み操作には admin ロールが必要で、ホスト版とローカル版(stdio)があります。
主な機能
- 01既存の Firestore データからコレクションを推定
- 02ドキュメントの参照、作成、更新、削除
- 03コレクションスキーマとプロパティの編集
- 04プロジェクト設定とユーザーロールの管理
- 05ブラウザー OAuth でサインインするホスト版
活用シーン
- 01既存の Firebase プロジェクトを FireCMS Cloud に接続
- 02自然言語によるコレクションスキーマの生成と変更
- 03Firestore コレクションデータの一括インポートとエクスポート
MCP 対応
このプロジェクトは MCP サーバーであり、Firestore ドキュメント、スキーマ、プロジェクト設定、ユーザー管理のツールと、複数のリソース URI を MCP クライアントに公開します。ホスト版は https://api.firecms.co/mcp で提供され、ローカル版は stdio で動作します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://api.firecms.co/mcpclaude mcp add --transport http co-firecms https://api.firecms.co/mcp{"mcpServers":{"co-firecms":{"type":"http","url":"https://api.firecms.co/mcp"}}}Cursor で開く{"servers":{"co-firecms":{"type":"http","url":"https://api.firecms.co/mcp"}}}VS Code で開く{"mcpServers":{"co-firecms":{"type":"http","url":"https://api.firecms.co/mcp"}}}{"mcpServers":{"co-firecms":{"serverUrl":"https://api.firecms.co/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
@firecms/mcp-server
FireCMS Cloud 用の MCP サーバーです。AI アシスタントを Firebase プロジェクトに接続し、Firestore にすでにあるデータからコレクションを推測して、CMS を管理できます。データの閲覧や編集、コレクションのスキーマとプロパティの定義、プロジェクトの設定、ユーザーの管理が可能です。
管理者専用:すべての書き込み操作には、認証済みユーザーが対象プロジェクトで
adminロールを持っている必要があります。読み取り操作は、認証済みのプロジェクトメンバーなら誰でも利用できます。オンボーディングツールはプロジェクトの作成前に実行されるため、代わりに Google Cloud へのアクセス権によって制限されます。
同じサーバーを 2 か所で実行できます。
- ホステッド:
https://api.firecms.co/mcpで、誰でも利用できます。クライアントはブラウザーで OAuth ログインするため、インストールは不要です。Google Cloud の認証情報は保持しないため、新しい Firebase プロジェクトの接続はウェブアプリに引き継がれます。FireCMS バックエンドは@firecms/mcp-server/hostedエントリーポイントを通じてサーバーをマウントします。 - ローカル:stdio 経由(
npx @firecms/mcp-server)で実行します。Google アカウントでログインする(firecms_login)ため、API の有効化、Firestore データベースの作成、プロジェクトのエンドツーエンドの接続も行えます。
ホステッドサーバー
Claude(claude.ai または Claude Desktop)では、Settings → Connectors → Add custom connector を選択し、https://api.firecms.co/mcp を貼り付けます。
Claude Code では:
claude mcp add --transport http firecms https://api.firecms.co/mcp
URL でリモートサーバーを指定できるその他のクライアントでは:
{
"mcpServers": {
"firecms": { "url": "https://api.firecms.co/mcp" }
}
}
ローカルサーバー
セットアップ
cd packages/mcp_server && npm install && npm run build
Claude Desktop
claude_desktop_config.json に追加します:
{
"mcpServers": {
"firecms": {
"command": "node",
"args": ["/path/to/packages/mcp_server/dist/cli.js"]
}
}
}
または、npx を使用します(ビルド不要):
{
"mcpServers": {
"firecms": {
"command": "npx",
"args": ["@firecms/mcp-server"]
}
}
}
プロンプトが表示されたら firecms_login を使ってログインします。トークンは FireCMS CLI と共有されます(~/.firecms/tokens.json)。
既存の Firebase プロジェクトの接続
典型的な最初のセッションです。ここでの操作はすべて、ログインに使用した Google アカウントによって実行されます。
1. list_firebase_projects → see which projects you can connect, and what they still need
2. get_project_setup_status → check one project in detail (optional)
3. enable_project_apis → only if apisEnabled is false
4. enable_firestore → only if firestoreEnabled is false (location is permanent)
5. connect_project_to_firecms → service account, admin user, and the security rules
6. setup_all_collections → infer every root collection from the existing data
手順 5 の前に、プロジェクトで Firebase Authentication を有効にする必要があります。API がない唯一の前提条件なので、Firebase コンソールで有効にしてください。手順 5 では、プロジェクトの Firestore ルールと Storage ルールに FireCMS のアクセスルールを追加します。これがないと、CMS は「Missing Firestore Security Rules」と報告して何も開かず、ここにあるツールもそれを検知できません。これらのツールはすべて、セキュリティルールをバイパスするバックエンドのサービスアカウント経由で読み取るためです。
手順 6 で、既存のプロジェクトが実際に使える CMS になります。FireCMS は各ルートコレクションのドキュメントをサンプリングし、プロパティの型を推測して、LLM を使って表示名、単数形の名前、アイコン、ナビゲーショングループを選びます。
既存データからコレクションを作成する
| ツール | 説明 |
|---|---|
get_root_collections | プロジェクトの Firestore ルートコレクションを一覧表示します(ライブデータを読み取り) |
list_subcollections | ドキュメントのサブコレクションを一覧表示し、ネストされたデータを確認します |
list_databases | Firestore データベースを一覧表示します((default) 以外の場合のみ必要) |
preview_inferred_schema | サンプリングしたドキュメントからスキーマを推測します (保存せずに) |
infer_collections_from_data 🔒 | 選択したパスのコレクションを推測して保存します |
setup_all_collections 🔒 | マッピングされていないすべてのルートコレクションを推測して保存します |
preview_inferred_schema は、データを変更しない方法です。最大 200 件のドキュメントをサンプリングし、型、列挙値、バリデーションをローカルで推測して、編集後に save_collection_schema で保存できる下書きを返します。サブコレクションや、一括ツールでスキップされるパスにも対応しています。
infer_collections_from_data と setup_all_collections はバックエンドを経由します。バックエンドで LLM による処理を追加し、結果をプロジェクトに直接書き込みます。すでにコレクションにマッピングされているパスはどちらもスキップするため、データベースの拡大に合わせて安全に再実行できます。
ツール
認証
| ツール | 説明 |
|---|---|
firecms_login 💻 | ブラウザー経由でログインします(Google OAuth) |
firecms_logout 💻 | ログアウトします |
firecms_get_current_user | 現在のユーザーを表示します |
オンボーディング
| ツール | 説明 |
|---|---|
list_firebase_projects 💻 | アクセス可能な Google Cloud プロジェクトと、FireCMS の準備状況フラグ |
get_project_setup_status 💻 | 1 つのプロジェクトの詳細な準備状況 |
list_firestore_locations 💻 | 新しい Firestore データベースで利用可能なロケーション |
enable_project_apis 💻 | FireCMS が必要とする Google Cloud API を有効化 |
enable_firestore 💻 | デフォルトの Firestore データベースを作成(ロケーションは後から変更できません) |
connect_project_to_firecms | 既存の Firebase プロジェクトを接続し、必要なセキュリティルールを適用します。ホスト型の場合は、ウェブアプリで接続するためのリンクを返します |
apply_firestore_security_rules 🔒 | Firestore と Storage に FireCMS のアクセスルールを追加します(冪等) |
create_firecms_webapp 🔒 | 接続中に失敗した場合、ウェブアプリの作成を再試行します |
プロジェクトとルートコレクション
| ツール | 説明 |
|---|---|
list_projects | FireCMS Cloud プロジェクトの一覧 |
get_root_collections | Firestore のルートコレクションの一覧 |
list_subcollections | ドキュメントのサブコレクションの一覧 |
プロジェクト設定 🔒
| ツール | 説明 |
|---|---|
get_project_config | プロジェクト設定全体を取得(名前、色、プラン、機能) |
update_project_name | プロジェクト名を変更 |
update_project_colors | ブランドのプライマリカラー/セカンダリカラーを更新 |
update_default_locale | デフォルトのロケールを変更 |
toggle_text_search | ローカルのテキスト検索を有効化/無効化 |
toggle_entity_history | エンティティの変更履歴追跡を有効化/無効化 |
ユーザー 🔒
| ツール | 説明 |
|---|---|
list_users | プロジェクトのユーザーとロールの一覧 |
add_user | ユーザーを招待 |
update_user_roles | ユーザーのロールを変更 |
remove_user | ユーザーを削除 |
コレクションスキーマ 🔒
| ツール | 説明 |
|---|---|
list_collection_schemas | 保存済みのコレクションスキーマをすべて一覧表示 |
get_collection_schema | コレクションのスキーマ全体を取得 |
save_collection_schema | コレクションスキーマを作成または置換 |
update_collection_schema | コレクションスキーマを部分的に更新 |
delete_collection_schema | コレクションスキーマを削除(データは変更されません) |
save_property | コレクションの単一のプロパティを追加または更新 |
delete_property | コレクションスキーマからプロパティを削除 |
AI によるスキーマ生成
| ツール | 説明 |
|---|---|
generate_collection | プロンプトから AI でコレクションスキーマを生成 |
modify_collection | プロンプトから既存のスキーマを AI で変更 |
ドキュメント(Firestore CRUD)
| ツール | 説明 |
|---|---|
list_documents | ドキュメントをクエリ(フィルター、並べ替え、ページネーション) |
get_document | パスを指定してドキュメントを取得 |
create_document | 新しいドキュメントを作成 |
update_document | ドキュメントを部分的に更新 |
delete_document | ドキュメントを削除 |
count_documents | コレクション内のドキュメント数をカウント |
データのインポートとエクスポート
| ツール | 説明 |
|---|---|
export_collection | コレクションデータを JSON としてエクスポート |
import_documents 🔒 | ドキュメントを一括インポート(1 回の呼び出しにつき最大 500 件) |
🔒 = 管理者専用の操作 · 💻 = ローカルサーバーのみ
各ツールには title と readOnlyHint が指定されています。また、書き込みを行うツールには destructiveHint も指定されています。追加のみを行うツール(ドキュメントの作成、ユーザーの招待)は false、上書きまたは削除が可能な操作は true です。
リソース
| URI | 説明 |
|---|---|
firecms://projects/{id}/collections | Firestore のルートレベルのコレクション |
firecms://projects/{id}/users | プロジェクトのユーザーとロール |
firecms://projects/{id}/schemas | すべてのコレクションスキーマ(設定ツリー全体) |
firecms://projects/{id}/config | プロジェクト設定のスナップショット |
ワークフローの例
既存の Firebase プロジェクトを FireCMS に取り込む
1. list_firebase_projects → pick a project that is not yet connected
2. connect_project_to_firecms → provision it
3. setup_all_collections → infer collections from the data already there
コレクションをゼロから作成する
1. firecms_login → authenticate
2. list_projects → pick your project
3. save_collection_schema → define the schema
4. import_documents → seed with initial data
スキーマを確定する前に形を整える
1. preview_inferred_schema → draft a schema from real documents, nothing saved
2. save_property → adjust individual fields
3. save_collection_schema → persist the result
AI を活用したスキーマ作成
1. generate_collection → describe what you want in natural language
2. save_collection_schema → persist the generated schema
アーキテクチャ
セッション:ローカルとホスト型
プロセス全体の状態から認証情報を読み取る処理はありません。すべての API 呼び出しは FireCMSSession(session.ts)を経由します。ユーザーのメールアドレス、firecms-backend の Firebase ID トークン、および存在する場合は Google アクセストークンを createFireCMSMcpServer() に渡します。
- ローカル(
cli.ts):localSessionは CLI のトークンファイルを読み取り、Google ID トークンをバックエンドトークンに交換します(後述)。ログイン/ログアウトツールは CLI のみで登録されます。 - ホスト型(
hosted.ts):バックエンドは各リクエストの OAuth ベアラートークンからユーザーを特定し、そのユーザーのバックエンド ID トークンを発行するセッションを渡します。Google トークンがないため、Google Cloud ツールはウェブアプリへのリンクを提供するconnect_project_to_firecmsに置き換えられます。リクエストごとに専用のサーバーとトランスポート(ステートレスな Streamable HTTP)が作成されるため、あるユーザーのセッションがそのユーザーのリクエスト後も残ることはありません。hosted.tsは CLI のログインフローをインポートしません。この状態を維持するため、テストでインポートグラフをたどって確認しています。
認証
FireCMS Cloud API は異なる 2 種類のトークンを必要とし、サーバーはウェブアプリが送信するものと同じ組み合わせの両方を送信します。
| ヘッダー | トークン | 使用先 |
|---|---|---|
Authorization | firecms-backend が発行した Firebase ID トークン | firebaseAuthorization() で保護されたエンドポイント — API の大部分 |
x-admin-authorization | Google OAuth アクセストークン(cloud-platform スコープ) | googleCloudAuthentication() で保護されたエンドポイント — GCP のプロビジョニング。ローカルセッションのみ |
firecms login で取得できるのは Google の認証情報のみです。Google の ID トークンは Firebase ID トークンではありません。Google OAuth クライアント向けに accounts.google.com が発行するため、verifyIdToken() では拒否されます。そのため backend-auth.ts は、Identity Toolkit の signInWithIdp を通じて、Google ID トークンを実際の firecms-backend トークンに交換します。これは、ウェブアプリの signInWithPopup(auth, GoogleAuthProvider) に相当するヘッドレス方式です。交換後のトークンは、有効期限が切れる少し前までメモリ内にキャッシュされます。
コレクション設定の保存場所
FireCMS Cloud は、バックエンドの Firestore にある projects/{projectId}/collections/{collectionId} からコレクション設定を読み取ります。FireCMSCloudApp.tsx の useFirestoreCollectionsConfigController を参照してください。これはクライアントプロジェクトの __FIRECMS/config/collections とは異なります。後者はセルフホスト用の構成であり、Cloud から読み取られることはありません。
バックエンドはこのストア向けの REST エンドポイントを公開していません。ウェブアプリは Firebase SDK を使って直接書き込むため、backend-firestore.ts は交換済みの Firebase トークンを使って Firestore REST API にアクセスします。バックエンドのセキュリティルールはそのまま適用されます。
ドキュメントの CRUD は異なります。プロジェクトの委任サービスアカウントを使って、バックエンドがクライアントの Firestore にプロキシします。
キャッシュを考慮したコレクションの検出
バックエンドの firestore_root_collections エンドポイントは、プロジェクトごとに結果を 5 分間キャッシュするため、直近の検索以降に作成されたコレクションを見落とします。これには、接続したばかりのプロジェクトのすべてのコレクションも含まれます。そのため、検出にはキャッシュされない admin/collections/list エンドポイントを使用します。また、setup_all_collections はパスの解決を initial_setup に委ねず、自身で行います。initial_setup に委ねると、同じキャッシュを通じてパスが解決されるためです。
infer_collections_from_data は、ドキュメントがないパスも拒否します。バックエンドはそれでも LLM の処理を実行し、サンプリング対象がない場合、モデルはパス名だけからスキーマをでっち上げます。空の articles パスから、データ内には存在しない title/slug/status/author フィールドがもっともらしく生成されます。
stdout は予約済みです
stdio トランスポートでは stdout が JSON-RPC ストリームに使われるため、cli.ts は起動前にすべての console チャネルを stderr に振り向けます。依存関係もログを出力します。@firecms/schema_inference はプロパティの推論中にログを出力するため、console.log が 1 つ紛れ込むだけでプロトコルストリームが破損します。
セキュリティ
- ホスト型認証:FireCMS バックエンドに対する PKCE を使用した OAuth 2.1 です。ユーザーはウェブアプリで各クライアントを承認します。バックエンドはトークンをハッシュとしてのみ保存し、リフレッシュトークンをローテーションし、Google Cloud の認証情報を保持しません
- ローカル認証:ブラウザー経由の Google OAuth です。
firecms loginCLI と同じです - 認可:書き込み操作では、プロジェクトごとに管理者ロールのチェックを実施します
- トークンの保存:
~/.firecms/tokens.json(CLI と共有)です。交換後のバックエンドトークンはメモリ内にのみ保持され、ログアウト時に破棄されます - 管理者キャッシュ:ロールチェックはプロジェクトごとに 5 分間キャッシュされます
- 認証情報の衛生管理:
list_projectsは出力から各プロジェクトのサービスアカウントを除外するため、認証情報がモデルのコンテキストにシリアライズされることはありません
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。