MCP tools
firenook mcp serves these 54 tools to a coding agent, in this order. The
list is what the server answers to tools/list in 0.2.0. To connect
an agent, see Connect your coding agent.
Two marks recur below:
- needs the console: the tool goes through the engine’s Console API,
which the suite serves on the UI port. While the UI is off
(
emulators.ui.enabled: false), the tool answers with an error that says so. The other tools talk to the emulators’ own ports. - destructive: the tool deletes emulator data.
Each group says the name --only takes for it, so
npx firenook mcp --only firestore,auth serves the status tools and those
two groups. Firestore values are plain JSON, with {"$timestamp"},
{"$ref"}, {"$geo"} and {"$bytes"} for the types JSON lacks, so a
document read back can be written again unchanged. A call with a missing or
unknown parameter fails before it reaches the emulators, with the reason.
Status
Section titled “Status”Always served, whatever --only says.
firenook_status
The running Firenook suite: how the project was found, hub locator, hub status, the emulators listing (host and port per service) and the CLI version; with no project, the suites whose locators answer.
No parameters.
emulators_export
Export the running Firestore, Auth and Storage data to a directory outside the project (firenook emulators:export).
pathrequiredstring- Destination directory
forceboolean- Overwrite a non-empty foreign directory
Firestore
Section titled “Firestore”Served with --only firestore.
firestore_get
Read one Firestore document by path (collection/document[/subcollection/document]); returns its fields as plain JSON or exists:false.
pathrequiredstring- Document path, e.g. users/alice
databasestring- Firestore database id; default (default)
firestore_query
Run a structured query over one collection, or with collectionGroup over every collection with that id (Firestore runQuery): optional where filters, ordering and limit; returns matching documents as plain JSON.
collectionrequiredstring- Collection path, e.g. users or users/alice/posts; with collectionGroup a collection id (posts) or a path whose parent bounds it
databasestring- Firestore database id; default (default)
wherearray of objects- Filters combined with AND
fieldrequiredstringField pathoprequired== | != | < | <= | > | >= | array-contains | array-contains-any | in | not-inComparison operatorvaluerequiredany JSONPlain JSON value ({"$timestamp":...}, {"$ref":...} sentinels allowed)
orderByarray of objects- Sort keys
fieldrequiredstringField pathdirectionasc | descDefault asc
limitinteger, at least 1- Maximum documents; default 50
collectionGroupboolean- Collection-group query: every collection with the last segment's id at any depth under the parent (the database root for a bare id, e.g. posts; users/alice/posts for one document's descendants)
firestore_count
Count the documents of a collection, or with collectionGroup of every collection with that id, that match optional where filters (a COUNT aggregation; no documents are read back).
collectionrequiredstring- Collection path, or a collection id with collectionGroup
databasestring- Firestore database id; default (default)
wherearray of objects- Filters combined with AND
fieldrequiredstringField pathoprequired== | != | < | <= | > | >= | array-contains | array-contains-any | in | not-inComparison operatorvaluerequiredany JSONPlain JSON value ({"$timestamp":...}, {"$ref":...} sentinels allowed)
collectionGroupboolean- Collection-group query: every collection with the last segment's id at any depth under the parent (the database root for a bare id, e.g. posts; users/alice/posts for one document's descendants)
firestore_set
Write a Firestore document from plain JSON: replaces it, or with merge:true updates only the given top-level fields.
pathrequiredstring- Document path
datarequiredobject- Fields as plain JSON
mergeboolean- Merge into the existing document
databasestring- Firestore database id; default (default)
firestore_delete
Delete a document (recursive:true also its subcollections) or a collection (its documents; recursive:true everything beneath) through the emulator delete route.
pathrequiredstring- Document or collection path
recursiveboolean- Also delete nested collections
databasestring- Firestore database id; default (default)
firestore_list_collections
List collection ids at the database root or under a document (listCollectionIds).
pathstring- Document path; omit for the root collections
databasestring- Firestore database id; default (default)
Authentication
Section titled “Authentication”Served with --only auth.
auth_list_users
List Auth emulator accounts (accounts:batchGet) with uid, email, phone, display name, claims and provider data.
maxResultsinteger, at least 1- Page size; default 100
pageTokenstring- Continue a previous listing
auth_get_user
Look up one Auth account by uid, email or phone number (accounts:lookup).
uidstring- Account id (localId)
emailstring- Email address
phoneNumberstring- Phone number in E.164 form
auth_create_user
Create an Auth emulator account with a synthetic email/password, phone number or display name (never real credentials).
uidstring- Account id to assign
emailstringpasswordstring- Password
phoneNumberstring- Phone number
displayNamestring- Display name
photoUrlstring- Photo URL
emailVerifiedboolean- Mark the email verified
disabledboolean- Create the account disabled
auth_delete_user
Delete one Auth emulator account by uid (accounts:delete).
uidrequiredstring- Account id
auth_oob_codes
The pending out-of-band codes (email verification, password reset, sign-in links) the Auth emulator holds instead of sending email.
No parameters.
auth_verification_codes
The pending phone verification codes the Auth emulator holds instead of sending SMS.
No parameters.
auth_mint_token
needs the consoleMint a Firebase ID token (valid one hour) and refresh token for an existing Auth emulator user, so an agent can call a function or the REST API as that user; claims replace the custom claims for this token only.
uidrequiredstring- Account id
tenantstring- Tenant id; omit for a project-level user
claimsobject- Custom claims for this token only (nothing is stored); omit for the user's own
providerstring- Sign-in provider the token names, e.g. password or phone; default the user's first
auth_set_claims
needs the consoleSet an Auth emulator user's custom claims: replace them (as the Admin SDK's setCustomUserClaims does) or with mode merge change only the given keys (a null value removes that key).
uidstring- Account id
uidsarray of string- Several account ids (instead of uid)
tenantstring- Tenant id; omit for a project-level user
claimsrequiredobject- Custom claims as JSON
modereplace | merge- Default replace
auth_remove_claims
needs the consoleRemove the named custom claim keys from an Auth emulator user, keeping its other claims.
uidstring- Account id
uidsarray of string- Several account ids (instead of uid)
tenantstring- Tenant id; omit for a project-level user
keysrequiredarray of string- Claim names to remove
auth_disable_user
needs the consoleDisable an Auth emulator account: its sign-ins and token refreshes fail until it is enabled again.
uidstring- Account id
uidsarray of string- Several account ids (instead of uid)
tenantstring- Tenant id; omit for a project-level user
auth_enable_user
needs the consoleEnable a disabled Auth emulator account again.
uidstring- Account id
uidsarray of string- Several account ids (instead of uid)
tenantstring- Tenant id; omit for a project-level user
auth_revoke_tokens
needs the consoleRevoke an Auth emulator user's refresh tokens (validSince moves to now), so its existing sessions must sign in again.
uidstring- Account id
uidsarray of string- Several account ids (instead of uid)
tenantstring- Tenant id; omit for a project-level user
auth_list_tenants
needs the consoleList the Auth emulator's tenants (multi-tenancy) with their user counts and sign-in settings.
qstring- Match tenant id or display name (substring)
limitinteger, 1 to 500- At most this many; default 500
Cloud Storage
Section titled “Cloud Storage”Served with --only storage.
storage_list
List Storage objects and folder prefixes under a prefix (one level, like listAll).
bucketstring- Storage bucket; default <project>.appspot.com
prefixstring- Folder prefix, e.g. uploads/ (a trailing slash is added)
maxResultsinteger, at least 1- Page size; default 100
pageTokenstring- Continue a previous listing
storage_get_metadata
The metadata of one Storage object (content type, size, timestamps, custom metadata, download tokens) or exists:false.
bucketstring- Storage bucket; default <project>.appspot.com
pathrequiredstring- Object path, e.g. uploads/photo.png
storage_read
needs the consoleRead a Storage object's content: text inline (text, JSON, XML, SVG...), anything else as base64; at most maxBytes are returned and truncated says whether there is more.
bucketstring- Storage bucket; default the suite's default bucket
pathrequiredstring- Object path, e.g. products/shoe.png
maxBytesinteger, 1 to 1048576- Most bytes to return; default 65536, at most 1048576
encodingauto | text | base64- Auto (default) picks text for textual content types
storage_upload
needs the consoleUpload (create or replace) a Storage object from text or base64 bytes with a content type and custom metadata, as the Admin SDK would (rules skipped; finalize triggers run).
bucketstring- Storage bucket; default the suite's default bucket
pathrequiredstring- Object path, e.g. products/shoe.png
textstring- Content as text (sent as UTF-8)
base64string- Content as base64 bytes (instead of text)
contentTypestring- Content type; default text/plain for text, application/octet-stream for base64
customMetadataobject- String metadata
cacheControlstring- Cache-Control
ifNotExistsboolean- Refuse to replace an existing object
storage_delete
needs the consoledestructiveDelete one Storage object, or with a path ending in / every object under that folder.
bucketstring- Storage bucket; default the suite's default bucket
pathrequiredstring- Object path, or a folder ending in /
storage_copy
needs the consoleCopy a Storage object (or a folder, a path ending in /) to a new path, in the same or another bucket; refuses to overwrite unless overwrite is true.
bucketstring- Storage bucket; default the suite's default bucket
pathrequiredstring- Source object path, or a folder ending in /
torequiredstring- Destination path (a folder ends in /)
toBucketstring- Destination bucket; default the source bucket
overwriteboolean- Replace an existing destination
storage_move
needs the consoleMove (rename) a Storage object or a folder (a path ending in /), in the same or another bucket; refuses to overwrite unless overwrite is true.
bucketstring- Storage bucket; default the suite's default bucket
pathrequiredstring- Source object path, or a folder ending in /
torequiredstring- Destination path (a folder ends in /)
toBucketstring- Destination bucket; default the source bucket
overwriteboolean- Replace an existing destination
Cloud Functions
Section titled “Cloud Functions”Served with --only functions.
functions_list
The functions loaded by the running suite: name, region, generation, trigger kind, event type or schedule, and the HTTPS URL of request/callable functions.
No parameters.
functions_invoke
Invoke a loaded function: an HTTPS/callable request with data, or with eventData a background event (Firestore before/after, Storage object, Pub/Sub message, Auth user, schedule, Eventarc custom event, task queue payload) shaped as the official functions shell sends it.
namerequiredstring- Function name
regionstring- Region when the name is deployed in several
dataany JSON- Callable payload (sent as {"data": ...})
eventDataany JSON- Background event payload; its shape depends on the trigger
resourcestring- Firestore document path or the legacy resource name
paramsobject- Wildcard values for the trigger pattern
authobject- {"uid","token"} or {"admin":true} for first-generation events
eventTypestring- Override the CloudEvent type for Eventarc custom events
methodstring- HTTP method for plain HTTPS functions; default POST
functions_list_calls
needs the consoleRecent function calls, newest first: trigger kind and cause, outcome (succeeded, failed, timedOut, crashed...), HTTP status, duration and the first line of the error.
functionstring- Only this function: its name or <region>-<name> id
kindhttp | callable | firestore | storage | auth | pubsub | schedule | eventarc | tasks | blocking | alerts | other- Only this trigger kind
outcomesucceeded | failed | skipped | running- Only calls that ended this way
qstring- Extra filter terms, e.g. took:>200ms status:>=500 is:cold
limitinteger, 1 to 500- At most this many; default 20
cursorstring- NextCursor of a previous listing
functions_get_call
needs the consoleOne function call in full: its cause, request (method, path, headers, body), response (status, body), event payload, the error with its stack trace, the call's console output and timings.
idrequiredstring- Call id from functions_list_calls
maxBodyCharsinteger, 1 to 262144- Cut each body at this many characters; default 16384
functions_replay_call
needs the consoleRun a recorded function call again with the same request or event (after a fix, say) and report the new call: outcome, status, response body and its id for functions_get_call.
idrequiredstring- Call id from functions_list_calls
maxBodyCharsinteger, 1 to 262144- Cut the response body at this many characters; default 16384
Served with --only logs.
logs_search
needs the consoleSearch the suite's log (every emulator and every function's console output) by service, level, function, call, text and time; returns the newest matching lines, oldest first.
servicearray of hub | firestore | auth | storage | functions | pubsub | eventarc | tasks- Only these services (any of)
levelarray of debug | info | warn | error- Only these levels (any of), e.g. ["warn","error"]
functionstring- Only this function's lines: its name or <region>-<name> id
executionstring- Only one function call's lines: the call id from functions_list_calls
textstring- Case-insensitive text the message or payload contains
qstring- Extra filter terms in the console's grammar, e.g. kind:rules.denied payload.orderId:o1 -level:debug
fromstring- Lines at or after: RFC 3339, YYYY-MM-DD, today, reload (since the last Functions reload) or relative like -15m
tostring- Lines at or before, in the same forms
limitinteger, 1 to 2000- At most this many lines; default 50
beforestring- The older cursor of a previous search, for the lines before it
logs_facets
needs the consoleCount the log lines matching a filter by level, service, function, codebase, extension instance and kind, to see where errors and warnings come from before reading them.
servicearray of hub | firestore | auth | storage | functions | pubsub | eventarc | tasks- Only these services (any of)
levelarray of debug | info | warn | error- Only these levels (any of), e.g. ["warn","error"]
functionstring- Only this function's lines: its name or <region>-<name> id
executionstring- Only one function call's lines: the call id from functions_list_calls
textstring- Case-insensitive text the message or payload contains
qstring- Extra filter terms in the console's grammar, e.g. kind:rules.denied payload.orderId:o1 -level:debug
fromstring- Lines at or after: RFC 3339, YYYY-MM-DD, today, reload (since the last Functions reload) or relative like -15m
tostring- Lines at or before, in the same forms
Security Rules
Section titled “Security Rules”Served with --only rules.
rules_get
needs the consoleThe Security Rules in force: the Firestore rules of a database and the Storage rules of a bucket (source, whether they are enforced, the file and its problems).
servicefirestore | storage- Only firestore or storage; default both
databasestring- Firestore database id; default (default)
bucketstring- Storage bucket; default the default bucket
rules_evaluate
needs the consoleAsk the rules in force (or a draft) whether a request would be allowed: get, list, create, update or delete on a Firestore path or Storage object as a given user or unauthenticated; returns the verdict, the rule line that decided it and each evaluated expression's value. Nothing is written.
servicefirestore | storage- Which rules: firestore (default) or storage
methodrequiredget | list | create | update | delete- The operation
pathrequiredstring- Firestore document path (a collection path for list), or the Storage object name (a folder ending in / for list)
uidstring- Act as this signed-in user; omit for an unauthenticated request
claimsobject- Request.auth.token: custom claims and token fields (email, firebase.sign_in_provider...)
idTokenstring- Act as the user of this emulator ID token (from auth_mint_token) instead of uid/claims
dataobject- Firestore create/update: the written fields as plain JSON (update: the fields set over the existing document)
existingobject | null- Firestore: the document before the request as plain JSON, or null for none; default the stored document
wherearray of objects- Filters combined with AND
fieldrequiredstringField pathoprequired== | != | < | <= | > | >= | array-contains | array-contains-any | in | not-inComparison operatorvaluerequiredany JSONPlain JSON value ({"$timestamp":...}, {"$ref":...} sentinels allowed)
orderByarray of objects- Sort keys
fieldrequiredstringField pathdirectionasc | descDefault asc
limitinteger, at least 1- Firestore list: the query limit
collectionGroupboolean- Firestore list: a collection-group query on the path's last collection id
objectobject- Storage create/update: the proposed object
sizeinteger, at least 0BytescontentTypestringContent typecustomMetadataobjectString metadata
timestring- Request.time as RFC 3339; default now
sourcestring- Evaluate this draft rules source instead of the rules in force
databasestring- Firestore database id; default (default)
bucketstring- Storage bucket; default the default bucket
rules_list_denials
needs the consoleRecent requests the Security Rules denied (app clients only; admin and owner requests skip the rules), newest last; with explain, the rule lines that denied each one.
servicefirestore | storage- Only firestore or storage; default both
pathstring- Only paths starting with this
uidstring- Only this user's requests
fromstring- Denials at or after: RFC 3339, today or relative like -15m
limitinteger, 1 to 200- At most this many; default 20
explainboolean- Fetch the deciding rule lines of each denial (at most 20)
Pub/Sub
Section titled “Pub/Sub”Served with --only pubsub.
pubsub_publish
Publish a message to a Pub/Sub emulator topic: string data as given, other JSON as its text (base64-encoded on the wire), plus attributes.
topicrequiredstring- Topic name (or projects/<p>/topics/<name>)
dataany JSON- Message data
attributesobject- String attributes
orderingKeystring- Ordering key
pubsub_list_topics
needs the consoleThe Pub/Sub emulator's topics with their published counts, subscriptions and the functions they trigger (schedule topics included).
No parameters.
pubsub_list_subscriptions
needs the consoleEvery Pub/Sub subscription (of every topic, and detached ones) with its delivery type, filter, dead-letter topic and backlog.
topicstring- Only this topic's subscriptions (id or full name)
pubsub_peek
needs the consolePeek at a subscription's backlog in delivery order without pulling, leasing or acking anything: each message's state, attempts, attributes and data.
subscriptionrequiredstring- Subscription id or full name
stateavailable | outstanding | pushing | acked- Only messages in this state; default every state
limitinteger, 1 to 500- At most this many; default 20
fullboolean- Return each message's whole data instead of a 256-character preview
cursorstring- NextCursor of a previous peek
Cloud Tasks
Section titled “Cloud Tasks”Served with --only tasks.
tasks_stats
Queue statistics of the Cloud Tasks emulator (queueStats).
No parameters.
tasks_list
needs the consoleThe Cloud Tasks queues (with their pending and running counts) and the tasks waiting in them; with queue, only that queue's tasks, optionally in one state.
queuestring- Queue id, key (queue:<project>-<location>-<id>) or its function name
statepending | held | dispatching | running | backoff- Only tasks in this state
limitinteger, 1 to 500- Tasks per queue; default 20
tasks_run
needs the consoleDispatch one waiting Cloud Tasks task now instead of at its schedule time (it is sent on the next tick).
queuerequiredstring- Queue id, key or its function name
idrequiredstring- Task id from tasks_list
Schedules
Section titled “Schedules”Served with --only schedules.
schedules_list
needs the consoleThe scheduled functions (onSchedule, pubsub.schedule): expression, time zone, next runs, paused state and the latest runs with their delivery.
No parameters.
schedules_run
needs the consoleRun a scheduled function now: publish one tick to its schedule topic, as Cloud Scheduler would, and report the run.
functionrequiredstring- Function name or its region-qualified id, e.g. nightlyReport or us-central1-nightlyReport
Eventarc
Section titled “Eventarc”Served with --only eventarc.
eventarc_publish
needs the consolePublish a custom CloudEvent to an Eventarc channel (default the project's Firebase channel), as getEventarc().channel().publish() does, and report which functions received it and how each call ended.
typerequiredstring- CloudEvent type, e.g. com.example.order.shipped
dataany JSON- Event data as JSON
textstring- Event data as plain text (instead of data)
sourcestring- CloudEvent source; default firenook-mcp
subjectstring- CloudEvent subject
channelstring- Full channel name or google; default projects/<project>/locations/us-central1/channels/firebase
attributesobject- Extension attributes (lowercase names, string values)
eventarc_list_events
needs the consoleThe Eventarc events the suite received, newest first (custom events, replays and the Firebase services' own), with how many functions matched, received or failed each.
channelstring- Full channel name or google; default every channel
qstring- Filter, e.g. type:com.example.* or delivery:failed
limitinteger, 1 to 500- At most this many; default 20
cursorstring- NextCursor of a previous listing
eventarc_get_event
needs the consoleOne Eventarc event with its attributes, data and every function delivery (outcome, duration, invocation id for functions_get_call).
idrequiredstring- The event id from eventarc_list_events (<nonce>-<seq>), not the CloudEvent id
eventarc_replay_event
needs the consoleDeliver a received Eventarc event again to the functions it matches (a new event, origin replay) and report the new deliveries.
idrequiredstring- The event id from eventarc_list_events (<nonce>-<seq>), not the CloudEvent id
keepIdboolean- Keep the original CloudEvent id; default a new one
Extensions
Section titled “Extensions”Served with --only extensions.
extensions_list
needs the consoleThe Firebase Extensions instances the suite runs: reference and version, state (running, loading, failed) with the load error, and their function count.
No parameters.
extensions_reload
needs the consoleReload one Extensions instance (re-read its .env parameters and source, restart its functions) and report its state and functions afterwards.
instancerequiredstring- Instance id, e.g. resize-images
Served with --only reset. Clearing one service needs nothing more.
Clearing two or more is refused unless confirmProject names the project
id. The refusal says what to pass, and the engine checks the same rule
again:
Clearing 2 services (firestore, auth) deletes all their data; to confirm, pass confirmProject: "demo-shop" (the project id)emulators_clear
needs the consoledestructiveDelete all data of the chosen services (every Firestore document, every Auth user and tenant, every Storage object, every Pub/Sub topic, subscription, schema and message, every Cloud Tasks task and its history). Clearing more than one service needs confirmProject set to the project id.
sectionsrequiredarray of firestore | auth | storage | pubsub | tasks- Services to clear
confirmProjectstring- The project id, required when clearing more than one service (the console's safeguard)
runTriggersboolean- Firestore only: run the delete triggers of the cleared documents; default false
Connect your coding agent sets the server up, and the MCP page shows an agent using it.