A multi-agent orchestrator system that delegates email, calendar, and Zoom meeting operations through MCP servers. Provides FastAPI endpoints for chat interactions and Google OAuth authentication.
This server has 15 tools with basic schemas and descriptions, but significant quality gaps prevent production use. Most tool descriptions are adequate (50-150 chars), but parameter descriptions are sparse or missing entirely. Many tools lack output schema documentation. No error handling guidance, no recovery patterns, and no tool annotations (readOnlyHint/destructiveHint). The server mixes calendar, email, and Zoom APIs without clear composition or chaining support. Critical security issue: credentials appear to be managed via environment variables in server.py, but no evidence of secret injection into tool parameters, however, the OAuth flow in server.py suggests tokens are stored in .env, which is a major risk if exposed.
Adds a label to a message.
Create a draft email.
Create a new calendar event. Times must be in ISO format (e.g. '2023-10-27T10:00:00Z').
Create a new Zoom meeting.
Deletes an event.
Finds the nearest free time slots (Mon-Fri, 8am-5pm) using Google Calendar FreeBusy API.
List recent email threads from Gmail.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., event_id after create_event, thread_id after list_emails). Responses are unstructured.
Destructive tools (delete_event, send_email, reply_to_thread, create_meeting) lack confirmation/dry-run patterns and have no error recovery guidance. No destructiveHint annotations present.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | <=2025-11-25 | v2 |
List upcoming calendar events.
List upcoming Zoom meetings.
Marks a message as read.
Marks a message as unread.
Read the content of an email thread.
Removes a label from a message.
Replies to an email thread.
Send an email immediately.
Parameter descriptions are minimal or missing. 'event_id', 'thread_id', 'message_id', 'label_id' lack format guidance (are they UUIDs? Opaque strings?). LLMs cannot validate inputs before calling.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. LLMs cannot infer which tools are safe to retry, which modify state, or which are read-only without explicit hints.
No error handling guidance. Tools do not document what errors are retryable, user-fixable, or fatal. No recovery suggestions (e.g., 'If event not found, call list_events() first').