Nylas Email & Calendar API as Python library, LangChain tools, and MCP server
Server has 12 well-named tools with complete input schemas and descriptions. All tools follow verb_noun naming (list_emails, send_email, etc.). Descriptions are present and adequate (50-150 chars typical), exceeding the 20-char minimum. Input parameters have types and descriptions. However, output schemas are not documented, responses are JSON-serialized but the structure of returned objects is not specified in tool definitions. Error handling is minimal; no recovery guidance or categorization. No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. Missing pagination guidance for list tools. No idempotency guarantees stated.
Check free/busy availability for participants.
Create a new calendar event.
Delete a calendar event.
Get full details of a specific email.
Get details of a specific calendar event.
List all calendars for the connected account.
List contacts from the address book.
Output schemas not documented. Tools return JSON but structure of email, event, contact objects is not specified. LLMs cannot reliably extract fields for downstream calls.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk levels are documented in metadata but not exposed in tool definitions. Agents cannot infer safety properties.
No error handling guidance. Tools return JSON but do not document what errors are possible, how to recover, or what the LLM should do next (retry, ask user, abort).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
List emails from the inbox with optional filters.
List upcoming calendar events.
Mark an email as read or unread.
Search emails using Nylas search.
Send an email.
List tools (list_emails, list_events, list_contacts) lack pagination guidance. No mention of offset/cursor, total count, or how to handle large result sets. Default limits exist but behavior on overflow is undocumented.
Destructive operation (delete_event) has no confirmation or dry-run option. Agents can permanently delete events without a safety gate.