Connects Firebase projects to FireCMS, infers collection schemas from Firestore data, and manages CMS data, users and configuration.
Also known as firecmsco/firecms, mcp, @firecms/mcp-server
- Stars
- 1,283
- Tools
- 31
- Downloads, 30 days
- 1,366
- Latest version
- 3.5.2
- Last commit
- Nov 13, 2026
- License
- —
What is FireCMS Cloud MCP?
FireCMS Cloud connects Firebase projects to FireCMS, infers collection schemas from Firestore data, and manages CMS data, users and configuration. It exposes 31 tools, such as firecms_get_current_user, connect_project_to_firecms, list_projects.
Summary generated from the project's README
About FireCMS Cloud MCP server
Developers managing Firebase projects can use this server to bridge their Firestore data with the FireCMS interface through AI assistants. It allows for the automated discovery of existing data structures by inferring collection schemas directly from Firestore documents. This process includes using large language models to automatically assign display names, icons, and navigation groupings to your collections.
The server operates in two modes depending on your needs. A hosted version is available via a remote URL for easy connection to clients like Claude Desktop or Claude Code using OAuth. A local version runs via stdio and uses a Google account login to perform administrative tasks such as enabling Google Cloud APIs, creating Firestore databases, and connecting projects end to end.
While read operations are accessible to any authenticated project member, write operations and project provisioning require an admin role. Users can manage the entire lifecycle of a CMS, from initial onboarding and security rule application to fine-tuning collection properties and managing user roles and project configurations.
What you can do with it
- 1Automated project onboardingConnect a new Firebase project to FireCMS and automatically set up the necessary infrastructure and security rules.
- 2Schema inference from dataGenerate collection schemas by sampling existing Firestore documents to automatically determine property types and display settings.
- 3AI-driven schema designCreate or modify collection structures using natural language prompts instead of manual configuration.
Written from the project's README. Every use case is checked against a quote from it.
How to install FireCMS Cloud MCP
Formats verified 10 Nov 2026Install FireCMS Cloud MCP in Claude Code
$ claude mcp add mcp -- npx -y @firecms/mcp-serverInstall FireCMS Cloud MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@firecms/mcp-server"
]
}
}
}Install FireCMS Cloud MCP in VS Code
.vscode/mcp.json
{
"servers": {
"mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@firecms/mcp-server"
]
}
}
}Install FireCMS Cloud MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@firecms/mcp-server"
]
}
}
}Install FireCMS Cloud MCP in Codex
~/.codex/config.toml
[mcp_servers.mcp] command = "npx" args = ["-y", "@firecms/mcp-server"]
Install FireCMS Cloud MCP in Gemini CLI
~/.gemini/settings.json
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@firecms/mcp-server"
]
}
}
}FireCMS Cloud MCP tools 31
Detected from the READMEfirecms_get_current_userconnect_project_to_firecmslist_projectsget_root_collectionslist_subcollectionsget_project_configupdate_project_nameupdate_project_colorsupdate_default_localetoggle_text_searchtoggle_entity_historylist_users
| firecms_get_current_user | — | |
| connect_project_to_firecms | — | |
| list_projects | — | |
| get_root_collections | — | |
| list_subcollections | — | |
| get_project_config | — | |
| update_project_name | — | |
| update_project_colors | — | |
| update_default_locale | — | |
| toggle_text_search | — | |
| toggle_entity_history | — | |
| list_users | — |
Show all 31 toolsShow fewer tools
add_userupdate_user_rolesremove_userlist_collection_schemasget_collection_schemasave_collection_schemaupdate_collection_schemadelete_collection_schemasave_propertydelete_propertygenerate_collectionmodify_collectionlist_documentsget_documentcreate_documentupdate_documentdelete_documentcount_documentsexport_collection
| 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 | — | |
| generate_collection | — | |
| modify_collection | — | |
| list_documents | — | |
| get_document | — | |
| create_document | — | |
| update_document | — | |
| delete_document | — | |
| count_documents | — | |
| export_collection | — |
Automated checks
Ran Nov 12, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachablePass
- Open source license (OSI)No licenseFinding
- Commit or release in the last yearPass
- Package name not close to a popular packagePass
- Remote endpoint uses HTTPSPass
- Destructive tools are labelledNot checked
- No hidden instructions to the modelPass
- No critical advisory in the package or its dependenciesPass
README
View on GitHub@firecms/mcp-server
MCP server for FireCMS Cloud. Lets AI assistants connect a Firebase project to FireCMS, infer collections from the data already in Firestore, and then manage the CMS — browse and edit data, shape collection schemas and properties, configure the project, and manage users.
Admin-only: All write operations require the authenticated user to have the
adminrole on the target project. Read operations are available to any authenticated project member. Onboarding tools run before a project exists, so they are gated by Google Cloud access instead.
The same server runs in two places:
- Hosted, at
https://api.firecms.co/mcp, for everyone. Clients sign in with OAuth in the browser; nothing to install. It holds no Google Cloud credentials, so connecting a new Firebase project is handed off to the web app. The FireCMS backend mounts it through the@firecms/mcp-server/hostedentry point. - Local, over stdio (
npx @firecms/mcp-server). It signs in with your Google account (firecms_login), so it can also enable APIs, create Firestore databases and connect projects end to end.
Hosted server
In Claude (claude.ai or Claude Desktop): Settings → Connectors → Add custom connector, and paste https://api.firecms.co/mcp.
In Claude Code:
claude mcp add --transport http firecms https://api.firecms.co/mcp
Any other client that takes remote servers by URL:
{
"mcpServers": {
"firecms": { "url": "https://api.firecms.co/mcp" }
}
}
Local server
Setup
cd packages/mcp_server && npm install && npm run build
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"firecms": {
"command": "node",
"args": ["/path/to/packages/mcp_server/dist/cli.js"]
}
}
}
Or use npx (no build required):
{
"mcpServers": {
"firecms": {
"command": "npx",
"args": ["@firecms/mcp-server"]
}
}
}
Use firecms_login to sign in when prompted. Tokens are shared with the FireCMS CLI (~/.firecms/tokens.json).
Connecting an existing Firebase project
The typical first session. Everything here is driven by the Google account you logged in with.
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
Firebase Authentication must be enabled on the project before step 5 — it is the one prerequisite with no API, so turn it on in the Firebase console. Step 5 then adds FireCMS's access rule to the project's Firestore and Storage rules; without it the CMS reports "Missing Firestore Security Rules" and opens nothing, and no tool here would notice, because they all read through the backend's service account, which bypasses security rules.
Step 6 is where an existing project becomes a working CMS: FireCMS samples the documents at each root collection, infers the property types, and uses an LLM to pick display names, a singular name, an icon and a navigation group.
Building collections from existing data
| Tool | Description |
|---|---|
get_root_collections |
List the Firestore root collections of a project (read live) |
list_subcollections |
List the subcollections of a document, to explore nested data |
list_databases |
List Firestore databases (only needed beyond (default)) |
preview_inferred_schema |
Infer a schema from sampled documents without saving |
infer_collections_from_data 🔒 |
Infer and save collections for chosen paths |
setup_all_collections 🔒 |
Infer and save every unmapped root collection |
preview_inferred_schema is the non-destructive option: it samples up to 200 documents, infers types, enums and validation locally, and hands back a draft you can edit and then persist with save_collection_schema. It also works for subcollections and any path the bulk tools skip.
infer_collections_from_data and setup_all_collections go through the backend, which adds the LLM pass and writes the result straight into the project. Both skip paths that already map to a collection, so they are safe to re-run as the database grows.
Tools
Auth
| Tool | Description |
|---|---|
firecms_login 💻 |
Sign in via browser (Google OAuth) |
firecms_logout 💻 |
Sign out |
firecms_get_current_user |
Show current user |
Onboarding
| Tool | Description |
|---|---|
list_firebase_projects 💻 |
Google Cloud projects you can access, with FireCMS readiness flags |
get_project_setup_status 💻 |
Detailed readiness of one project |
list_firestore_locations 💻 |
Locations available for a new Firestore database |
enable_project_apis 💻 |
Enable the Google Cloud APIs FireCMS requires |
enable_firestore 💻 |
Create the default Firestore database (location is permanent) |
connect_project_to_firecms |
Connect an existing Firebase project, and apply the security rules it needs. Hosted: returns the link to connect it in the web app |
apply_firestore_security_rules 🔒 |
Add FireCMS's access rule to Firestore and Storage (idempotent) |
create_firecms_webapp 🔒 |
Retry web app creation if it failed during connect |
Projects & Root Collections
| Tool | Description |
|---|---|
list_projects |
List FireCMS Cloud projects |
get_root_collections |
List Firestore root collections |
list_subcollections |
List the subcollections of a document |
Project Configuration 🔒
| Tool | Description |
|---|---|
get_project_config |
Get full project config (name, colors, plan, features) |
update_project_name |
Rename a project |
update_project_colors |
Update primary/secondary brand colors |
update_default_locale |
Change the default locale |
toggle_text_search |
Enable/disable local text search |
toggle_entity_history |
Enable/disable entity history tracking |
Users 🔒
| Tool | Description |
|---|---|
list_users |
List project users and roles |
add_user |
Invite a user |
update_user_roles |
Change user roles |
remove_user |
Remove a user |
Collection Schemas 🔒
| Tool | Description |
|---|---|
list_collection_schemas |
List all persisted collection schemas |
get_collection_schema |
Get full schema for a collection |
save_collection_schema |
Create or replace a collection schema |
update_collection_schema |
Partially update a collection schema |
delete_collection_schema |
Delete a collection schema (data untouched) |
save_property |
Add or update a single property in a collection |
delete_property |
Remove a property from a collection schema |
AI Schema Generation
| Tool | Description |
|---|---|
generate_collection |
AI-generate a collection schema from a prompt |
modify_collection |
AI-modify an existing schema from a prompt |
Documents (Firestore CRUD)
| Tool | Description |
|---|---|
list_documents |
Query documents (filters, ordering, pagination) |
get_document |
Get a document by path |
create_document |
Create a new document |
update_document |
Partial update of a document |
delete_document |
Delete a document |
count_documents |
Count documents in a collection |
Data Import & Export
| Tool | Description |
|---|---|
export_collection |
Export collection data as JSON |
import_documents 🔒 |
Bulk import documents (max 500/call) |
🔒 = Admin-only operation · 💻 = local server only
Every tool declares a title and a readOnlyHint, plus a destructiveHint when it writes: false for tools that only add (create a document, invite a user), true for anything that can overwrite or delete.
Resources
| URI | Description |
|---|---|
firecms://projects/{id}/collections |
Firestore root-level collections |
firecms://projects/{id}/users |
Project users and roles |
firecms://projects/{id}/schemas |
All collection schemas (full config tree) |
firecms://projects/{id}/config |
Project configuration snapshot |
Example Workflows
Bring an existing Firebase project into 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
Create a collection from scratch
1. firecms_login → authenticate
2. list_projects → pick your project
3. save_collection_schema → define the schema
4. import_documents → seed with initial data
Shape a schema before committing to it
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-assisted schema creation
1. generate_collection → describe what you want in natural language
2. save_collection_schema → persist the generated schema
Architecture
Sessions: local and hosted
Nothing reads credentials from process-wide state. Every API call goes through a FireCMSSession (session.ts) — the user's email, a Firebase ID token on firecms-backend, and a Google access token when there is one — passed to createFireCMSMcpServer():
- Local (
cli.ts):localSessionreads the CLI's tokens file and exchanges the Google ID token for a backend token (below). The login/logout tools are registered by the CLI only. - Hosted (
hosted.ts): the backend resolves each request's OAuth bearer token to a user and passes a session that mints that user's backend ID token. There is no Google token, so the Google Cloud tools are replaced by aconnect_project_to_firecmsthat links to the web app. Every request gets its own server and transport (stateless Streamable HTTP), so nothing of one person's session outlives their request.hosted.tsnever imports the CLI's login flow; a test walks its import graph to keep it that way.
Authentication
The FireCMS Cloud API expects two different tokens, and the server sends both — the same pair the web app sends:
| Header | Token | Used by |
|---|---|---|
Authorization |
Firebase ID token issued by firecms-backend |
endpoints gated by firebaseAuthorization() — most of the API |
x-admin-authorization |
Google OAuth access token (cloud-platform scope) |
endpoints gated by googleCloudAuthentication() — GCP provisioning. Local sessions only |
firecms login only produces the Google credentials. The Google ID token is not a Firebase ID token — it is issued by accounts.google.com for the Google OAuth client, so verifyIdToken() rejects it. backend-auth.ts therefore exchanges it for a real firecms-backend token through Identity Toolkit signInWithIdp, which is the headless equivalent of the web app's signInWithPopup(auth, GoogleAuthProvider). The exchanged token is cached in memory until shortly before it expires.
Where collection configurations live
FireCMS Cloud reads collection configurations from the backend Firestore, at projects/{projectId}/collections/{collectionId} — see useFirestoreCollectionsConfigController in FireCMSCloudApp.tsx. That is not the client project's __FIRECMS/config/collections, which is the self-hosted layout and is never read by Cloud.
The backend exposes no REST endpoints for that store — the web app writes to it directly with the Firebase SDK — so backend-firestore.ts talks to the Firestore REST API with the exchanged Firebase token. The backend's security rules apply unchanged.
Document CRUD is different: it is proxied by the backend into the client's Firestore using the project's delegated service account.
Cache-aware collection discovery
The backend's firestore_root_collections endpoint caches its answer for 5 minutes per project, so it misses collections created since the last lookup — including every collection of a project connected moments ago. Discovery therefore goes through the uncached admin/collections/list endpoint, and setup_all_collections resolves the paths itself rather than delegating to initial_setup, which resolves them through that same cache.
infer_collections_from_data also refuses paths with no documents. The backend runs its LLM pass regardless, and with nothing to sample the model invents a schema from the path name alone — an empty articles path yields plausible title/slug/status/author fields that exist nowhere in the data.
stdout is reserved
On a stdio transport, stdout carries the JSON-RPC stream, so cli.ts routes every console channel to stderr before starting. Dependencies do log — @firecms/schema_inference logs while inferring properties — and a single stray console.log would corrupt the protocol stream.
Security
- Hosted authentication: OAuth 2.1 with PKCE against the FireCMS backend; the person approves each client in the web app. The backend stores tokens only as hashes, rotates refresh tokens, and never holds Google Cloud credentials
- Local authentication: Google OAuth via browser, same as
firecms loginCLI - Authorization: Write operations enforce admin role check per project
- Token storage:
~/.firecms/tokens.json(shared with CLI); the exchanged backend token is held in memory only and dropped on logout - Admin cache: Role checks are cached for 5 minutes per project
- Credential hygiene:
list_projectsstrips each project's service account from its output, so credentials are never serialised into the model's context
FireCMS Cloud MCP questions
How do I add FireCMS Cloud MCP to Claude Code?
Run claude mcp add mcp -- npx -y @firecms/mcp-server in your terminal. Add --scope user to make it available in every project.
How do I add FireCMS Cloud MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
What tools does FireCMS Cloud MCP provide?
It exposes 31 tools, including firecms_get_current_user, connect_project_to_firecms, list_projects, get_root_collections, list_subcollections.
How do I connect my existing Firebase project to FireCMS with MCP?
Run list_firebase_projects, enable the required APIs and Firestore if needed, then connect_project_to_firecms and finally setup_all_collections to infer collections from existing data.
Can I preview an inferred collection schema without saving it?
Yes. preview_inferred_schema samples up to 200 documents, infers types, enums and validation locally, and returns an editable draft without saving anything.
Which operations require an admin role?
All write operations require the authenticated user to have the admin role on the target project, while read operations are available to any authenticated project member.
Can the MCP server read and edit Firestore documents?
Yes, it provides document tools to list, get, create, update, delete and count documents, plus export and bulk import.