Firestore MCP has complete input schemas with types and descriptions for all 7 tools, which is a strong foundation. Tool names follow verb_noun convention (getDocument, createDocument, etc.). However, descriptions are generic and lack LLM-optimized guidance on WHEN to use each tool vs alternatives. Parameter descriptions are present but minimal (avg ~40 chars vs baseline 72). Output schemas are not documented, LLMs cannot predict response structure. Error handling is absent; no recovery guidance or actionable error messages. Security concerns: project parameter is exposed as optional input rather than server-side injection. No idempotency hints despite write operations. Composition is sound (single responsibility per tool), but missing pagination guidance for queryDocuments and listPrompts despite returning arrays.
Create a new document in Firestore
Delete a document from Firestore
Get a single document from Firestore
List all collections in a Firestore database
List all prompts stored in Firestore
Query documents from a Firestore collection with filters and ordering
Update an existing document in Firestore
No output schemas documented. LLMs cannot predict response structure (fields, types, pagination). Baseline: 100% of A+ tools document return types.
Descriptions are generic and lack LLM-optimized guidance. 'Get a single document from Firestore' (40 chars) vs baseline 194 chars. Missing WHEN to use, prerequisites, and state-modification warnings for write tools.
No error handling or recovery guidance. Stack traces or raw errors will not help LLMs self-correct. Missing actionable error messages like 'Collection not found. Available collections: [...]'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Project parameter exposed as optional input instead of server-side secret injection. Credentials/project IDs should not appear in tool parameters, they leak into logs and traces.
queryDocuments and listPrompts return arrays but lack pagination guidance. No limit enforcement, no next_cursor, no total count. Large result sets will blow context windows.