MCP server for Gmail, Google Drive, and GitHub integration with LLM routing and tool execution
This MCP server has significant definition quality gaps across 26 tools. While tool names follow verb_noun conventions reasonably well (e.g., list_repos, create_repo, read_file_from_repo), most descriptions lack sufficient detail and actionable guidance for LLM tool selection. Parameter descriptions are present but often generic ('repository name', 'email subject'). Critical issues: (1) Many parameters lack type specifications in schemas, most show only 'string' type without format, pattern, or constraint information. (2) Output schemas are not documented, LLMs have no visibility into what fields are returned from these tools. (3) Error handling is absent, no guidance on recovery paths or error classification. (4) No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear read/write semantic differences. (5) Description lengths are inconsistent; some tools have bare one-liners while others have slightly more detail, but none approach LLM-optimized 50-200 character sweet spot. The GitHub tools (19 tools) and Google integration tools (7 tools) are present with basic parameter coverage, but lack the sophistication expected for production-grade agent toolkits.
Add an issue to a GitHub project.
Create a new branch in a GitHub repository.
Create a new GitHub issue.
Create a new issue in a GitHub project.
Create a new GitHub pull request.
Create a new GitHub repository for the authenticated user. name: repository name (no spaces — use hyphens). description: short description (optional). private: 'true' for private, 'false' for public (default 'false'). auto_init: 'true' to initialize with README (default 'true').
No output schemas documented for any tool. LLMs cannot infer what fields are returned, forcing them to guess or make wasteful follow-up calls.
Minimal descriptions for 18+ tools. Many are single-line with no context on when to use them, what they return, or prerequisites. E.g., 'Read details of a GitHub issue' does not explain what fields are included or how the result chains to downstream tools.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 37 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 37 | - | v1 |
Get columns for a GitHub project.
List branches in a GitHub repository.
List emails from Gmail inbox with pagination support. max_results: number of emails to return (default 10). query: optional filter like 'from:someone@gmail.com' or 'subject:hello'. page_token: pass next_page_token from previous result to get next page. Returns: {emails, next_page_token, has_more}
List files and folders in a Google Drive folder.
List GitHub issues for a repository.
List issues in a GitHub project.
List GitHub projects for the authenticated user.
List GitHub pull requests for a repository.
List files and directories in a GitHub repository. repo: full repo name like 'username/repo-name' OR short name (auto-resolved). path: internal path (empty for root). branch: optional.
List the authenticated user's GitHub repositories. limit: number of repos to return (default 10).
Move an issue to a different column in a GitHub project.
Read the full content of an email by its ID. Use the exact id string from list_emails results.
Read the content of a file from Google Drive.
Read the content of a file from a GitHub repository. repo: full repo name like 'username/repo-name' OR short name. file_path: path to the file e.g. 'README.md', 'agent/orchestrator.py'. branch: optional, defaults to default branch.
Read details of a GitHub issue.
Search for files in Google Drive.
Search GitHub repositories by keyword. query: search keyword like 'machine learning python'. limit: number of results (default 5).
Send an email with optional CC and BCC. to: recipient email address. subject: email subject — leave empty if not yet collected from user. body: email body text — leave empty if not yet collected from user. cc: comma separated CC email addresses (optional). bcc: comma separated BCC email addresses (optional). If subject and body are both empty, this tool will ask the user for them. Example: send_email(to='a@gmail.com', subject='Hi', body='Hello', cc='b@gmail.com')
Update custom fields on an issue in a GitHub project.
Upload a file to Google Drive.
All input schemas use bare 'string' type with no format, pattern, or enum constraints. Parameters like 'private', 'auto_init' use string type instead of boolean, and 'limit' is string not integer. This forces LLMs to guess valid formats.
No error handling guidance. Tools lack descriptions of what can go wrong, how to recover, or what the LLM should do if a call fails. No distinction between retryable vs. fatal errors.
No tool annotations present. Create/delete/update tools lack destructiveHint or idempotentHint. Read-only tools lack readOnlyHint. This prevents agents from correctly classifying tool safety and side effects.
Parameter naming inconsistencies. Some tools expect repo names in 'repo' param (string), others may auto-resolve short names. No canonical guidance on whether to pass 'username/repo', short name, or both.
Pagination support mentioned for list_emails but not consistently documented across other list_* tools. No pagination parameters (limit, offset, next_cursor) defined for list_repos, list_issues, list_pull_requests, list_branches, etc.
No confirmation or dry-run mechanism for destructive operations. create_repo, create_issue, send_email, upload_file_to_drive lack any safeguard against accidental execution.