FastMCP server for Google Docs — read, create, edit, search, share, and comment
This server demonstrates solid fundamentals with 8 well-named, verb-starting tools covering a cohesive Google Docs domain. All tools have descriptions and explicit input schemas with type definitions. However, several critical gaps prevent a higher score: (1) output schemas are undocumented, the rubric requires documented return types for 100% of A+ tools, and none are formally specified; (2) parameter descriptions lack actionable constraints (no enums, format specifications, or range limits); (3) error handling is minimal, no recovery guidance, retry classification, or actionable error messages; (4) some operations modify state (create_document, edit_document, share_document, add_comment) but descriptions lack explicit warnings or confirmation patterns; (5) the server accepts opaque Google Doc IDs but does not document resolution of human-friendly names. Tools like search_documents and list_documents return useful results but lack pagination parameters (offset, limit, next_cursor) despite being discovery tools. Average parameter descriptions are ~50-80 chars, which is below the 72-char baseline for A+ tools. The naming is excellent (verb_noun pattern, clear distinctions), placing it solidly in B range, but output schema documentation and error guidance are the primary gaps holding it back from 70+.
Add a comment to a Google Doc.
Create a new Google Doc with an optional initial body text.
Apply batch edit operations to a Google Doc. Each operation is a dict with one of: - {"insertText": {"index": <int>, "text": "<string>"}} - {"deleteRange": {"startIndex": <int>, "endIndex": <int>}} - {"replaceAllText": {"find": "<string>", "replacement": "<string>"}}
List recent Google Docs, ordered by last modified.
Read all comments on a Google Doc.
Read a Google Doc and return its title and full text content.
Output schemas completely undocumented. Rubric requires 100% of A+ tools have documented return types. All 8 tools lack formal output schema documentation, returns are inferred from implementation code. This violates pattern:tool and blocks LLM planning of downstream operations.
Write operations (create_document, edit_document, share_document, add_comment) lack explicit state-modification warnings in descriptions. Descriptions do not state 'This creates/modifies/deletes a resource' per pattern:command-tool. Agents cannot reliably infer whether an operation is safe to retry or idempotent.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 55 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 56 | - | v1 |
Search Google Docs by name or content keywords.
Share a Google Doc with a user.
Parameter constraints missing or documented only in descriptions. 'role' in share_document should be an enum {reader, commenter, writer}, not a free-form string. 'operations' in edit_document should specify valid operation types as a schema constraint or discriminated union. 'max_results' has no minimum/maximum bounds.
No error handling or recovery guidance. If read_document gets a nonexistent ID, no documented behavior. If edit_document receives malformed operations, no guidance on what went wrong or how to fix it. Pattern:recovery-guide requires errors to answer 'What to do next?', these tools provide none.
Discovery tools (search_documents, list_documents) lack pagination support. Both accept max_results but no offset/next_cursor/page parameters. Per pattern:paginated-result and mxe:enforce-result-limits, tools returning arrays should offer pagination to handle large result sets without blowing context window.
Tool selection clarity at risk. While naming is strong, parameter names could be more explicit. 'email' in share_document is clear, but operations in edit_document accept object items with no inline type hints, LLMs must parse the description to understand structure. Per mxe:chat-data-model, parameters should match what users say; add_comment's 'quoted_text' is vague on whether it must match exactly or be a substring.
No confirmation or dry-run pattern for destructive or side-effecting operations. share_document sends notifications (send_notification defaults to true). create_document is idempotent by nature but edit_document modifies state and could benefit from a review step. Per pattern:confirmation-request, agents make mistakes, reversible operations should support confirmation.
Human-friendly identifiers not supported. All tools require opaque Google Doc IDs (document_id parameter). Per mxe:natural-identifiers, users say 'Open the Budget Document', not 'Open d/1AbCdEfGhIjKlMnOpQrStUvWxYz'. Tools should accept document titles and resolve them internally via search, or at least document that search_documents must be called first.