Self-hosted MCP servers on localhost — privacy-first, zero third-party exposure
34 tools with consistent verb-noun naming (read_, update_, create_, etc.) and complete input schemas. Descriptions present but generic, most are 20-80 chars, below the 194-char baseline for A+ tools. Parameter descriptions are minimal (5-15 chars typical). No output schemas documented. Error handling is basic (McpError for format_doc_text, but most tools lack recovery guidance). Security: OAuth token injection via _get_token() is server-side (good), but no permission gates or audit logging visible. Composition is sound, tools are single-responsibility and chainable (e.g., search_files → get_file_metadata → download_file). Major gap: no documented return types or pagination for list_files/search_files.
Add a comment to a Google Drive file.
Add a conditional formatting rule to a Google Sheet range.
Add data validation to a Google Sheet range.
Add a new sheet tab to a Google Spreadsheet.
Create a new Google Doc.
Create a folder in Google Drive.
Create a new Google Sheet.
No output schemas documented. Tools return dicts/lists but LLMs cannot predict field names, types, or structure for downstream chaining. E.g., get_doc_content returns list[dict] with 'startIndex', 'endIndex', 'type', 'elements', not documented.
Descriptions are generic and under 100 chars (baseline 194). E.g., 'List files in a Google Drive folder' lacks context on pagination, sorting, or when to use vs search_files. LLMs cannot distinguish list_files from search_files.
No pagination support visible. list_files accepts page_size but no cursor/offset or total_count returned. Large result sets will blow context window. No limit enforcement documented.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 70 | <=2025-11-25 | v2 |
Delete a range of content in a Google Doc.
Delete a sheet tab from a Google Spreadsheet by name.
Download file content as a string (text files only).
Find and replace text across a Google Doc.
Format cells in a Google Sheet range.
Apply paragraph formatting in a Google Doc.
Apply text formatting in a Google Doc. Use text_to_find or start_index+end_index.
Get structured content of a Google Doc with text indices.
Get metadata for a file.
Insert text at a specific index in a Google Doc.
List comments on a Google Drive file.
List files in a Google Drive folder.
List all permissions on a file.
List all sheet tabs in a Google Spreadsheet.
Merge cells in a Google Sheet range.
Read the plain-text content of a Google Doc.
Read values from a Google Sheet range.
Token cleared. Re-authenticate on next request.
Rename a sheet tab in a Google Spreadsheet.
Search for files in Google Drive.
Set borders on a range of cells in a Google Sheet.
Share a file with a user by email.
Move a Google Drive file to trash (recoverable).
Replace all content in a Google Doc with the given text.
Update an existing permission on a file.
Write values to a Google Sheet range.
Upload a text file to Google Drive.
Destructive operations (delete_range, delete_sheet, trash_file) lack confirmation or dry-run support. Agents can irreversibly delete content without safeguards.
Error handling is minimal. format_doc_text raises McpError for invalid params, but most tools lack recovery guidance. E.g., 'document_id not found' should suggest search_files or list_files.