Firenook
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Tools act on the local Firenook emulator suite only: the project of the folder the server runs in, or, with no firebase.json there and no --project, the one running suite. Firestore values use plain JSON with {"$timestamp"}, {"$ref"}, {"$geo"} and {"$bytes"} sentinels. Tools marked destructive change or delete emulator data. Nothing is sent to any cloud service.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| firenook_statusB | 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. |
| emulators_exportB | Export the running Firestore, Auth and Storage data to a directory outside the project (firenook emulators:export). |
| firestore_getA | Read one Firestore document by path (collection/document[/subcollection/document]); returns its fields as plain JSON or exists:false. |
| firestore_queryA | 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. |
| firestore_countA | 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). |
| firestore_setA | Write a Firestore document from plain JSON: replaces it, or with merge:true updates only the given top-level fields. |
| firestore_deleteA | Delete a document (recursive:true also its subcollections) or a collection (its documents; recursive:true everything beneath) through the emulator delete route. |
| firestore_list_collectionsA | List collection ids at the database root or under a document (listCollectionIds). |
| auth_list_usersA | List Auth emulator accounts (accounts:batchGet) with uid, email, phone, display name, claims and provider data. |
| auth_get_userB | Look up one Auth account by uid, email or phone number (accounts:lookup). |
| auth_create_userA | Create an Auth emulator account with a synthetic email/password, phone number or display name (never real credentials). |
| auth_delete_userC | Delete one Auth emulator account by uid (accounts:delete). |
| auth_oob_codesA | The pending out-of-band codes (email verification, password reset, sign-in links) the Auth emulator holds instead of sending email. |
| auth_verification_codesB | The pending phone verification codes the Auth emulator holds instead of sending SMS. |
| auth_mint_tokenA | Mint 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. |
| auth_set_claimsA | Set 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). |
| auth_remove_claimsA | Remove the named custom claim keys from an Auth emulator user, keeping its other claims. |
| auth_disable_userA | Disable an Auth emulator account: its sign-ins and token refreshes fail until it is enabled again. |
| auth_enable_userB | Enable a disabled Auth emulator account again. |
| auth_revoke_tokensA | Revoke an Auth emulator user's refresh tokens (validSince moves to now), so its existing sessions must sign in again. |
| auth_list_tenantsB | List the Auth emulator's tenants (multi-tenancy) with their user counts and sign-in settings. |
| storage_listA | List Storage objects and folder prefixes under a prefix (one level, like listAll). |
| storage_get_metadataA | The metadata of one Storage object (content type, size, timestamps, custom metadata, download tokens) or exists:false. |
| storage_readA | Read 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. |
| storage_uploadA | Upload (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). |
| storage_deleteA | DESTRUCTIVE: delete one Storage object, or with a path ending in / every object under that folder. |
| storage_copyA | Copy 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. |
| storage_moveA | Move (rename) a Storage object or a folder (a path ending in /), in the same or another bucket; refuses to overwrite unless overwrite is true. |
| functions_listA | The functions loaded by the running suite: name, region, generation, trigger kind, event type or schedule, and the HTTPS URL of request/callable functions. |
| functions_invokeA | 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. |
| functions_list_callsB | Recent function calls, newest first: trigger kind and cause, outcome (succeeded, failed, timedOut, crashed...), HTTP status, duration and the first line of the error. |
| functions_get_callB | One 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. |
| functions_replay_callA | Run 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. |
| logs_searchA | Search 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. |
| logs_facetsA | Count 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. |
| rules_getB | The 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). |
| rules_evaluateA | Ask 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. |
| rules_list_denialsA | Recent 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. |
| pubsub_publishB | 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. |
| pubsub_list_topicsB | The Pub/Sub emulator's topics with their published counts, subscriptions and the functions they trigger (schedule topics included). |
| pubsub_list_subscriptionsA | Every Pub/Sub subscription (of every topic, and detached ones) with its delivery type, filter, dead-letter topic and backlog. |
| pubsub_peekA | Peek at a subscription's backlog in delivery order without pulling, leasing or acking anything: each message's state, attempts, attributes and data. |
| tasks_statsB | Queue statistics of the Cloud Tasks emulator (queueStats). |
| tasks_listA | The 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. |
| tasks_runA | Dispatch one waiting Cloud Tasks task now instead of at its schedule time (it is sent on the next tick). |
| schedules_listB | The scheduled functions (onSchedule, pubsub.schedule): expression, time zone, next runs, paused state and the latest runs with their delivery. |
| schedules_runB | Run a scheduled function now: publish one tick to its schedule topic, as Cloud Scheduler would, and report the run. |
| eventarc_publishB | Publish 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. |
| eventarc_list_eventsA | The Eventarc events the suite received, newest first (custom events, replays and the Firebase services' own), with how many functions matched, received or failed each. |
| eventarc_get_eventA | One Eventarc event with its attributes, data and every function delivery (outcome, duration, invocation id for functions_get_call). |
| eventarc_replay_eventA | Deliver a received Eventarc event again to the functions it matches (a new event, origin replay) and report the new deliveries. |
| extensions_listC | The Firebase Extensions instances the suite runs: reference and version, state (running, loading, failed) with the load error, and their function count. |
| extensions_reloadA | Reload one Extensions instance (re-read its .env parameters and source, restart its functions) and report its state and functions afterwards. |
| emulators_clearA | DESTRUCTIVE: delete 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 54 tools
Tools are grouped by service prefix (firestore_, auth_, storage_, pubsub_, tasks_, schedules_, eventarc_, functions_, rules_, logs_, extensions_, emulators_) and each action within a group is distinct (get vs query vs count, copy vs move, list vs get_call). A few pairs could still be confused at a glance: auth_mint_token vs auth_set_claims (token-only claims vs stored custom claims), pubsub_peek vs pubsub_list_subscriptions (both expose backlog), and firestore_delete vs emulators_clear (scoped vs global destructive wipe). These are resolved by the descriptions, so ambiguity is minor rather than systemic.
Names follow a predictable service_verb_noun snake_case pattern (firestore_get, auth_list_users, storage_upload, functions_replay_call), which makes the set easy to scan and predict. A handful of deviations drop the verb (auth_oob_codes, auth_verification_codes, tasks_stats) and a few are noun-first (firestore_list_collections, functions_list_calls), but the service prefix keeps everything readable.
54 tools is heavy by any standard, though the surface genuinely spans a dozen Firebase sub-domains (Firestore, Auth, Storage, Pub/Sub, Tasks, Schedules, Eventarc, Functions, Rules, Logs, Extensions, Emulators), averaging ~4-5 tools each. Per-domain scope is tight, but the overall count makes discovery and selection cost high for an agent. It sits at the borderline of 'large but justified' rather than clearly well-scoped.
Coverage is unusually deep: full CRUD for Firestore documents, Auth users, Storage objects, plus inspection/replay for functions, Eventarc events, scheduled runs, rules evaluation and logs. Notable gaps remain: no user profile update (email/password/display name), no Pub/Sub topic/subscription creation or message pull/ack, no rules deployment (rules_get is read-only), and no emulator start/stop/import to pair with emulators_export and emulators_clear. Most gaps are workaroundable but some block common emulator-management workflows.