MCP server for Gmail, Google Calendar, and LinkedIn communication workflows
17 tools with consistent naming (verb_noun pattern), clear descriptions (avg 80-120 chars), and complete JSON schemas with type definitions and parameter descriptions. All tools properly registered with input schemas. However, output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal; no recovery guidance or actionable error messages. Missing tool annotations (readOnlyHint, destructiveHint). Some parameter descriptions lack format/constraint details (e.g., email format not enforced in descriptions). No batch variants for tools called in loops (e.g., gmail_modify_message could batch multiple message IDs).
Schedule an event on Google Calendar.
Delete an event from Google Calendar.
Read busy periods for one or more calendars in a date/time range.
List Google Calendar events in a date/time range.
Update fields on an existing Google Calendar event.
Read one Gmail message with headers and decoded body text.
Output schemas not documented. LLMs cannot predict response structure for any of the 17 tools. Responses are returned as text JSON without formal schema declarations, forcing LLMs to parse unstructured output and guess field names for downstream tool chaining.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Destructive tools (calendar_delete_event, linkedin_delete_post) and write tools (gmail_send_message, linkedin_publish_text) lack explicit hints. LLMs cannot distinguish safe reads from irreversible operations without reading descriptions.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | <=2025-11-25 | v2 |
Add or remove Gmail labels such as UNREAD, STARRED, INBOX, or TRASH.
Reply to a Gmail message in its existing thread.
Search Gmail using Gmail query syntax and return message summaries.
Send a plain-text email from the authenticated Gmail account.
Permanently delete a LinkedIn post owned by the authenticated member.
Read available like and comment metrics for a LinkedIn post.
Read one LinkedIn post by its full URN.
Read the authenticated LinkedIn member profile.
List posts authored by the authenticated LinkedIn member.
Upload a local GIF, JPEG, or PNG and publish it with text to LinkedIn.
Publish a text post to the authenticated LinkedIn member feed.
Minimal error handling and no recovery guidance. Tools return raw API errors without actionable next steps. E.g., 'User not found' should suggest 'Try search_users() with a partial name.' No error categorization (retryable vs user-fixable vs fatal).
Parameter descriptions lack format/constraint details. Email parameters (attendees, to, cc, bcc) are typed as string arrays but descriptions do not explicitly state 'RFC 5322 email format' or validation rules. LLMs may pass invalid emails.
No batch variants for tools called in loops. gmail_modify_message accepts one messageId at a time. Agents calling this 50 times waste tokens and latency. A batch variant (messageIds array) would be more efficient.