A consolidated server for Google Apps Script handling both Model Context Protocol (MCP) and Agent-to-Agent (A2A) communications. Provides extensive integration with Google Workspace (Gmail, Drive, Calendar, Classroom, Docs, Sheets, Slides, Analytics) and associated Google APIs through dynamic tool registration and execution.
This server exhibits severe definition quality issues across nearly all dimensions. 15 of 21 tools have completely empty input schemas (type:object with no properties), making parameter guidance impossible. Most tool descriptions lack the specificity required for LLM selection, they are generic statements without WHEN to use, WHAT it returns, or HOW to disambiguate from similar tools. Tool naming violates verb_noun conventions (e.g., 'analytics_admin_accountSummaries_list' instead of 'list_analytics_accounts'; 'auto_new_draft_creation_Gmail' instead of 'create_draft_email'). No tool declares output schemas. Error handling is absent, no recovery guidance, no actionable error messages, no classification of retryable vs fatal failures. The server conflates multiple responsibilities in single tools (e.g., 'call_google_api' is a generic pass-through that accepts ANY Google API method). Parameter descriptions are almost entirely missing, for example, 'call_google_api' has 7 parameters but most lack guidance on format, constraints, or defaults. Only 2 tools (get_exchange_rate, get_current_weather) have partially documented parameters; the remaining 19 have little to no parameter annotation. Security: no evidence of permission gating, least-privilege scoping, or audit trail declarations. No mention of how credentials are handled (likely exposed server-side, but not documented). Composition: tools like 'call_google_api' and 'classroom_courses_announcements_*' operate at different abstraction levels, creating confusion about which to use when. Descriptions include example IDs (e.g., 'thread ID "12345abcde"', 'property "properties/123456"'), violating the pattern of not embedding examples in docstrings.
Add labels to threads of Gmail. Don't use the invalid thread IDs.
Use to retrieve a list of all Google Analytics accounts accessible by the current user. Each entry provides key details for the account and a summary of its properties, making it useful for discovering available data streams and managing permissions.
Use to get detailed information about a single Google Analytics property, providing essential details for management and analysis. Use this to confirm property settings or to retrieve its metadata.
Use to generate a customized report of real-time event data from a Google Analytics property, showing events and user activity that occurred within the last 30 minutes. Useful for monitoring live traffic and immediate user behavior.
Use to fetch a custom report from a Google Analytics property. Specify the metrics (e.g., active users, event count) and dimensions (e.g., country, event name) to retrieve specific user activity data. This tool is best for answering questions about user behavior, such as "How many active users did we have in Japan last month?" or "What are the top 5 most popular events?"
15 of 21 tools have empty input schemas (type: object with no properties defined). This violates pattern:constrained-input and pattern:tool. LLMs cannot infer which parameters to pass.
Tool naming violates verb_noun convention. Examples: 'analytics_admin_accountSummaries_list' (should be 'list_analytics_accounts'), 'auto_new_draft_creation_Gmail' (should be 'create_draft_email'), 'classroom_courses_aliases_create' (should be 'create_course_alias'). LLMs cannot reliably parse intent from these names.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 32 | 2026-07-28+ | v2 |
Create automatically drafted emails in Gmail. This function returns the value, including the message ID and the draft ID. When creating the draft email, confirm the owner's name and insert the sender's name into the footer. Don't use '[Your Name]'. If you have no information about the sender's email, don't include the footer of sender's name in the email.
Create automatically drafted reply emails in Gmail. Don't use the invalid message IDs. This function returns the value including the message ID, the draft ID, the URL of the mail.
Executes raw Google API dynamic calls via GoogleApiApp. Features automatic pagination aggregation and supports all standard Google Workspace REST services. Note: Method names must follow the fully qualified resource.method format (e.g., 'files.list').
Use to change the permission of a file or folder on Google Drive for a specific user by providing the item ID, user email, and desired role. As a sample situation, when URLs of the files are included in an email, it is required to add the permission to the recipient user to allow the user to read or write the file.
Answer general conversation, identity, location, and secret code questions based on the chat history.
Use to create an alias for a course.
Use to delete an alias of a course.
Use to get a list of aliases.
Use to creates an announcement using the "courses.announcements.create" method of Google Classroom API.
Use to delete an announcement.
Use to return an announcement.
Use to return a list of announcements that the requester is permitted to view.
Use to modify assignee mode and options of an announcement using the "courses.announcements.modifyAssignees" method of Google Classroom API.
Use this to get the weather using the latitude and the longitude. At that time, convert the location to the latitude and the longitude and provide them to the function. The date is required to be included. The date format is "yyyy-MM-dd HH:mm". If you cannot know the location, decide the location using the timezone.
Use this to get current exchange rate.
Fetches critical financial data for a specified corporation.
No output schemas documented for any tool. Pattern:tool requires that tools declare what fields are returned. LLMs cannot plan downstream calls or extract relevant data without knowing the response structure.
Descriptions lack WHEN to use, WHAT it returns, and disambiguation from similar tools. Examples: 'Use to create an alias for a course' (classroom_courses_aliases_create) does not explain when to use this vs directly creating a course. 'Add labels to threads of Gmail' does not specify thread ID format, label creation requirements, or return values.
Descriptions embed example IDs and values (e.g., 'thread ID "12345abcde"', 'property "properties/123456"', 'alias "d:math_101"'). LLMs tend to reuse these examples literally in real API calls, causing failures. Should use formal constraints (enums, patterns, formats) instead.
No error handling guidance. No recovery messages, no actionable error messages for LLMs, no classification of retryable vs fatal failures. Tools like 'add_label_to_Gmail' warn 'Don't use invalid thread IDs' but provide no mechanism to discover valid thread IDs or recover from invalid input.
'call_google_api' is an overly generic pass-through that accepts ANY Google API method as a string. This violates pattern:tool (one responsibility per tool) and pattern:tool-chain (tools should compose cleanly). An LLM invoking this tool must reason about raw API semantics, namespace, method naming, and request body structure, defeating the purpose of high-level MCP tools.
No tool annotations present. toolAnnotations feature is false, meaning tools do not declare readOnlyHint, destructiveHint, or idempotentHint. Tools like 'classroom_courses_announcements_delete' and 'change_permission_of_file_on_google_drive' perform WRITE and DESTRUCTIVE operations but are not annotated, making it impossible for clients to reason about safety or retry eligibility.
No parameter descriptions for 15 tools with empty schemas. Even tools with partial schemas like 'call_google_api' lack descriptions for parameters like 'path' and 'query', an LLM cannot know what to pass without examples.
No security declarations: no permission gating, no scope declarations (e.g., 'requires write:email'), no audit trail guidance, no mention of credential handling. WRITE and DESTRUCTIVE tools like 'auto_new_draft_creation_Gmail' and 'classroom_courses_announcements_delete' are unguarded.
Tool composition is loose. 16 tools are for Google services (Gmail, Classroom, Analytics, Drive) but there is no guide on which to use when (e.g., 'send email' could use 'auto_new_draft_creation_Gmail' or 'call_google_api' with 'gmail.users.messages.send'). LLMs waste reasoning cycles on ambiguity.