mcpField
F
FireCMS Cloud

FireCMS Cloud

リモート
firecms.coデータベース1.3k1 日前に更新
リポジトリ公式サイト

FireCMS Cloud について

FireCMS Cloud MCP サーバーは、AI アシスタントから Firebase プロジェクトを FireCMS Cloud に接続し、Firestore のデータ、コレクションのスキーマ、プロジェクト設定、ユーザーを管理できるようにします。書き込み操作には admin ロールが必要で、ホスト版とローカル版(stdio)があります。

主な機能

  1. 01既存の Firestore データからコレクションを推定
  2. 02ドキュメントの参照、作成、更新、削除
  3. 03コレクションスキーマとプロパティの編集
  4. 04プロジェクト設定とユーザーロールの管理
  5. 05ブラウザー OAuth でサインインするホスト版

活用シーン

  1. 01既存の Firebase プロジェクトを FireCMS Cloud に接続
  2. 02自然言語によるコレクションスキーマの生成と変更
  3. 03Firestore コレクションデータの一括インポートとエクスポート

MCP 対応

このプロジェクトは MCP サーバーであり、Firestore ドキュメント、スキーマ、プロジェクト設定、ユーザー管理のツールと、複数のリソース URI を MCP クライアントに公開します。ホスト版は https://api.firecms.co/mcp で提供され、ローカル版は stdio で動作します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://api.firecms.co/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npm@firecms/mcp-server3.5.1

ツール

詳細

@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_databasesFirestore データベースを一覧表示します((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_projectsFireCMS Cloud プロジェクトの一覧
get_root_collectionsFirestore のルートコレクションの一覧
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}/collectionsFirestore のルートレベルのコレクション
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 種類のトークンを必要とし、サーバーはウェブアプリが送信するものと同じ組み合わせの両方を送信します。

ヘッダートークン使用先
Authorizationfirecms-backend が発行した Firebase ID トークンfirebaseAuthorization() で保護されたエンドポイント — API の大部分
x-admin-authorizationGoogle 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 login CLI と同じです
  • 認可:書き込み操作では、プロジェクトごとに管理者ロールのチェックを実施します
  • トークンの保存:~/.firecms/tokens.json(CLI と共有)です。交換後のバックエンドトークンはメモリ内にのみ保持され、ログアウト時に破棄されます
  • 管理者キャッシュ:ロールチェックはプロジェクトごとに 5 分間キャッシュされます
  • 認証情報の衛生管理:list_projects は出力から各プロジェクトのサービスアカウントを除外するため、認証情報がモデルのコンテキストにシリアライズされることはありません

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。