mcp-ecc
mcp-ecc is a self-hosted MCP server that lets AI assistants read, write, and manage email, calendar, and contacts across multiple providers from one interface.
Manage email: list/search emails, fetch message bodies, send plain text/HTML email, archive/read/unread/star, and delete messages.
Manage calendars: list events in a time range, create/update/delete events with attendees and descriptions.
Manage contacts: search contacts by name/query, create contacts with name/email/phone, and delete contacts.
Connect multiple account types: authenticate Google, Microsoft 365/Outlook, Zoho, IMAP/SMTP, plus CalDAV/CardDAV accounts.
Support multi-user and secure operation: per-user API keys, encrypted credentials at rest, and a web admin UI/REST API plus MCP endpoint.
Integrates with Gmail as part of Google Workspace for email, calendar, and contacts.
Integrates with Google Workspace (Gmail, Google Calendar, Google Contacts) via OAuth 2.0 Device Authorization Grant, allowing email management, calendar events, and contact operations.
Supports iCloud mail via IMAP/SMTP with app passwords for email operations.
Integrates with Zoho Mail for email, calendar, and contacts via their API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-eccshow my calendar events for today"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-ecc
Email · Calendar · Contacts — one MCP server for all your accounts
A Model Context Protocol (MCP) server that lets AI assistants read, write and manage your email, calendar and contacts — across Google, Microsoft 365/Outlook, Zoho, and any IMAP/SMTP, CalDAV or CardDAV account — from a single interface.
mcp-ecc aggregates your mail, calendar and contacts into standardised MCP tools (mail.*, calendar.*, contacts.*, accounts.*) so any MCP client — Claude, Cursor, and others — can work with all of them uniformly.
One OAuth consent per cloud provider covers mail + calendar + contacts
Multi-user — users self-manage their own accounts, each with a per-user MCP API key
Credentials encrypted at rest (AES-256-GCM)
Self-hostable — single container serving a web admin UI, REST API and the MCP endpoint on one port
Quick start
Docker
docker run -d --name mcp-ecc \
-p 3001:3001 \
-e MCP_ENCRYPTION_KEY="$(openssl rand -hex 32)" \
karljsamuel/mcp-ecc:betaOpen http://localhost:3001 → create the admin account → add your provider accounts.
CLI (npm)
npm install -g mcp-ecc
mcp-ecc # interactive TUI — login, add accounts, manage everything
mcp-ecc start # stdio MCP server for agent hostsFrom source
git clone https://github.com/karljsamuel/mcp-ecc.git
cd mcp-ecc
npm install
npm run build
node packages/cli/dist/bin.js --helpRelated MCP server: outlook-mcp-server
Connecting an MCP client
Point your client at the HTTP endpoint with your per-user API key (shown in the web UI under Settings):
{
"mcpServers": {
"mcp-ecc": {
"type": "http",
"url": "http://localhost:3001/mcp",
"headers": { "Authorization": "Bearer <your-api-key>" }
}
}
}Agents can read SKILL.md or llms.txt for guided, automated setup.
Providers
Provider | Calendar | Contacts | Authentication | |
Google (Gmail, Calendar, People) | ✅ | ✅ | ✅ | OAuth 2.0 |
Microsoft 365 / Outlook (Graph) | ✅ | ✅ | ✅ | OAuth 2.0 |
Zoho (Mail, Calendar, Contacts) | ✅ | ✅ | ✅ | OAuth 2.0 |
IMAP / SMTP (any mail server) | ✅ | ❌ | ❌ | App password |
CalDAV (Nextcloud, Radicale, BAIKAL) | ❌ | ✅ | ❌ | Password |
CardDAV | ❌ | ❌ | ✅ | Password |
Microsoft 365: app passwords are being retired — use OAuth (Microsoft Graph) only.
CalDAV/CardDAV compatibility: the providers implement standard WebDAV (CalDAV RFC 4791, CardDAV RFC 6352) with Basic auth and should work with any standards-compliant server. Tested against Radicale 3.7.8. Not tested against other servers; OAuth-only providers (e.g. iCloud without an app-specific password) are not supported.
Deployment notes: Google/Microsoft/Zoho run everywhere; IMAP/SMTP, CalDAV and CardDAV require a Node.js runtime (CLI or Docker), not Cloudflare Workers.
MCP tools
mail.listFolders · mail.listMessages · mail.getMessage · mail.sendMessage
mail.searchMessages · mail.moveMessage · mail.setFlags · mail.deleteMessage
calendar.listCalendars · calendar.listEvents · calendar.getEvent · calendar.freeBusy
calendar.createEvent · calendar.updateEvent · calendar.deleteEvent
contacts.list · contacts.get · contacts.create · contacts.update
contacts.delete · contacts.search
accounts.list · accounts.get · accounts.add · accounts.remove · accounts.syncFull reference with input schemas: docs/mcp-tools.md
Documentation
Getting started — overview and quick start
CLI reference — every
mcp-ecccommand and workflowAuth & users — multi-user model, bootstrap, per-user API keys
Accounts & identity — name vs slug
Deployment — CLI · Docker · Cloudflare Workers
Providers — Google · Microsoft 365 · Zoho · IMAP/SMTP · CalDAV/CardDAV
Contributing
Feature branches off dev; PRs against dev. Run npm run build to compile all packages. Keep Changelog.md and docs/ in sync.
Support & Contributions
If you find mcp-ecc useful, consider supporting its development:
PayPal: paypal.me/KarlJosephSamuel
GitHub Sponsors: github.com/sponsors/karljsamuel
Ko-fi: ko-fi.com/karljsamuel
Patreon: patreon.com/karljsamuel
Buy Me a Coffee: buymeacoffee.com/karljsamuel
License
Available Tools
13 toolsauthenticate_accountB
Authenticate and register a Google, Microsoft, Zoho, or IMAP/SMTP account. Supports headless OAuth (device code flow) with custom client/tenant configurations.
| Name | Required | Description | Default |
|---|---|---|---|
| config | No | Additional configurations (e.g., host/ports for IMAP/SMTP or redirect URIs) | |
| clientId | No | OAuth Client ID (required for Google, Microsoft, Zoho) | |
| provider | Yes | ||
| tenantId | No | Microsoft Tenant ID (optional, defaults to common; use organizations for M365 accounts) | |
| accountId | Yes | Unique identifier / email address for this account | |
| appPassword | No | Plain text App Password (required for IMAP/SMTP) | |
| clientSecret | No | OAuth Client Secret (optional/required depending on provider) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions headless OAuth and custom configs but does not disclose side effects, error handling, rate limits, or what happens upon successful authentication (e.g., token storage). This is insufficient for a tool that modifies system state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loading the core purpose and a key feature (headless OAuth). Every sentence is relevant, with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, nested object, no output schema), the description lacks crucial context. It does not explain return values, account creation behavior, where to obtain OAuth credentials, or provider-specific differences. This leaves significant gaps for an agent to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (86%), so baseline is 3. The description adds minimal value beyond the schema, only providing a brief example for the config object. Other parameters are not further elaborated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: authenticating and registering email accounts for four specific providers. It uses specific verbs ('authenticate', 'register') and resources, and the tool is clearly distinct from sibling tools which handle email/calendar/contact data operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for account setup but provides no explicit guidance on when to use this tool versus alternatives or when not to use it. It does not mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_create_eventC
Create a calendar event.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| endTime | Yes | ISO 8601 end time | |
| accountId | Yes | ||
| attendees | No | ||
| startTime | Yes | ISO 8601 start time | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits. It only states 'create', implying mutation but fails to mention side effects (e.g., whether attendees receive notifications), idempotency, or required permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at one sentence, but it is under-specified. While there is no wasted text, the brevity sacrifices clarity and completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters (4 required), no output schema, and no annotations, the description is entirely inadequate. It does not explain return values, error states, or behavior, leaving the agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, with only startTime and endTime having descriptions. The tool description adds no parameter meaning, failing to compensate for the low coverage. The critical parameter accountId and optional fields like attendees and description are left entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool creates a calendar event, which is a clear verb+resource. However, given sibling tools like calendar_update_event and calendar_list_events, there is no differentiation or context about what distinguishes creation from other operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as when to create versus update an event. No prerequisites or conditions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_delete_eventC
Delete/remove a calendar event.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | ||
| accountId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does not disclose behavioral traits beyond the obvious destructive action. It omits details on irreversibility, side effects, or required authentication, which are critical for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence, which is concise. However, it is too short to be useful, sacrificing completeness for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with two parameters and no output schema, the description could be complete with minimal explanation, but it lacks details on expected behavior (e.g., whether non-existent event causes error, success confirmation).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, and the description does not explain the parameters (eventId, accountId). It adds no meaning beyond their names, failing to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Delete/remove a calendar event' uses a specific verb ('delete/remove') and resource ('calendar event'), clearly distinguishing it from sibling tools like calendar_create_event or calendar_update_event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool, prerequisites (e.g., event existence, permissions), or when not to use it. It lacks any context for decision-making among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_list_eventsB
View scheduled events/appointments within a time range.
| Name | Required | Description | Default |
|---|---|---|---|
| endTime | No | ISO 8601 string end time | |
| accountId | Yes | ||
| startTime | No | ISO 8601 string start time (defaults to now) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It only states 'View' but does not disclose important details like whether it is read-only, requires authentication, handles pagination, or returns event details. The description is too minimal for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the core action. No unnecessary words; every part is relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema and the simplicity of the tool, the description should provide more context about returned data (e.g., event summary, time order, recurrence handling) and the required accountId. Currently it is too sparse for an agent to use confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% (two of three parameters have descriptions). The description adds no meaning beyond the schema; it does not explain the 'accountId' parameter, which is required and critical for specifying the calendar to list. The description aligns with startTime and endTime but adds no new insight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'View' and the resource 'scheduled events/appointments' within a time range. It effectively distinguishes from sibling tools like calendar_create_event, calendar_delete_event, and calendar_update_event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for viewing events in a time range but does not explicitly state when to use this tool over alternatives or when not to use it. No exclusions or alternative tool references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_update_eventC
Modify an existing calendar event.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | ||
| patches | Yes | ||
| accountId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description does not disclose behavioral traits such as validation of patches, error handling (e.g., if event not found), or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very brief (one sentence), but under-specification means it is not usefully concise; misses critical information about parameters and usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 required parameters including a nested object, no output schema, and no annotations, the description is severely incomplete, lacking details on how to construct patches, constraints, or expected outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no meaning beyond the schema: it doesn't explain the 'patches' object or the purpose of 'eventId' and 'accountId'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Modify an existing calendar event' with a clear verb and resource, distinguished from sibling tools calendar_create_event, calendar_delete_event, and calendar_list_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, no prerequisites mentioned (e.g., needing eventId from list_events), and no exclusions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
contacts_create_contactC
Inject a new contact into the address book.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| Yes | |||
| phone | No | ||
| accountId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as idempotency, duplicate handling, required permissions, or side effects beyond creating a contact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no waste, but it is arguably too minimal, sacrificing utility for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, and low parameter documentation, the description fails to provide complete context. The agent lacks information on return value, error cases, or required state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds no extra meaning to the parameters. While parameter names like 'name' and 'email' are clear, the description does not clarify formats, constraints, or relationships.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Inject a new contact into the address book' uses a specific verb 'Inject' and identifies the resource 'contact' and container 'address book'. It clearly distinguishes from siblings like contacts_delete_contact and contacts_search_contacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as when to use contacts_search_contacts for finding existing contacts or whether prerequisites like authentication are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
contacts_delete_contactC
Remove a contact entry.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | ||
| contactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It only states 'Remove' which implies deletion but lacks details on irreversibility, required authentication (accountId), or impact on related data. The description is too minimal to inform safe usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (one sentence) but at the cost of completeness. It lacks structure and any elaboration, making it only minimally acceptable for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has two required parameters and no output schema, the description is severely incomplete. It fails to explain the result of the operation, any side effects, or the context in which this tool should be used, leaving the AI agent with insufficient information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no meaning to the parameters beyond their names. Schema description coverage is 0%, and the one-line description does not explain what accountId and contactId represent or how they should be obtained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool removes a contact entry, using a specific verb and resource. It distinguishes from sibling tools like contacts_create_contact and contacts_search_contacts, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as prerequisites (e.g., must have contactId from a search) or when not to use it. The AI agent has no context for appropriate invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
contacts_search_contactsC
Find contact entries by name or query term.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| accountId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It implies a read-only operation but does not explicitly state non-destructiveness, idempotency, or potential side effects. The behavioral traits are minimal and vague.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise with a single sentence, no wasted words. However, it could be slightly more informative without losing conciseness (e.g., mentioning accountId). It is appropriately front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description should explain return values or result format, which it does not. It also does not mention pagination, result limits, or scope (per account). The context is adequate but not fully complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description adds meaning to 'query' as 'name or query term', but does not explain 'accountId' at all. While it partially compensates for the missing schema descriptions, it fails to document the required accountId parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'find' and resource 'contact entries', with the method 'by name or query term'. It effectively distinguishes from sibling tools like contacts_create_contact and contacts_delete_contact, though it could be more precise by mentioning the required accountId.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives, such as listing all contacts or other search methods. The description implies usage for searching but lacks context about preconditions or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_delete_emailC
Move email to Trash or delete permanently.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | ||
| messageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden but only states the action vaguely. Does not disclose prerequisites (e.g., permissions), irreversibility, or what happens on failure. The dual action (trash vs permanent) is unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, very concise. Could be improved by separating purpose from details, but achieves brevity without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, no annotations, and description omits return values, error conditions, or when each deletion mode applies. Incomplete for a destructive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, and description adds no meaning to the parameters accountId and messageId. Agent cannot infer their format or purpose from the text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (move to Trash or delete permanently) and the resource (email). It distinguishes from siblings like email_list_emails and email_send_email, though not from email_manage_email which might also handle deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like email_manage_email. No differentiation between moving to Trash and permanent deletion, or when each action occurs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_get_emailC
Fetch the body and metadata of a specific email.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | ||
| messageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist. The description only states 'fetch', hinting at a read operation, but does not disclose behavioral details such as authentication requirements, rate limits, or if fetching marks the email as read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no extraneous words. It is front-loaded but could include more detail without sacrificing brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is too minimal. It does not mention what constitutes 'metadata' or if the response includes attachments, headers, or other fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not explain the parameters. 'accountId' and 'messageId' are not elaborated upon. With 0% schema coverage, the description adds no semantic value to the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fetch') and resource ('body and metadata of a specific email'). It distinguishes this tool from siblings like email_list_emails and email_delete_email by specifying it retrieves a single email's details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not explain when to choose it over email_list_emails or mention prerequisites like requiring a messageId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_list_emailsC
Search or view recent emails.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Search keywords or parameters | |
| folder | No | INBOX | |
| accountId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description does not disclose behavioral traits such as whether it's read-only (likely), rate limits, or any side effects. 'Recent' is ambiguous and not defined.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise but overly brief, lacking structured information that would aid an agent without additional context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and only 25% parameter documentation, the description fails to explain return values, sorting, or pagination, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only the 'query' parameter has a generic description. With 25% schema coverage, the description adds no insight into 'limit', 'folder', or 'accountId' beyond the schema defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Search or view recent emails' clearly indicates the tool is for listing emails with search capability, distinguishing it from singular retrieval tools like email_get_email.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., email_get_email for individual emails) or any constraints like pagination or permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_manage_emailB
Archive, mark read/unread, or star an email.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| accountId | Yes | ||
| messageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It names the actions but does not disclose behavioral details such as whether 'archive' moves to a specific folder, whether 'star' is reversible, or whether actions are idempotent. The description is minimally transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no extraneous information. It is front-loaded with the action verb and clearly communicates the tool's main function without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 required parameters, no output schema, and no annotations, the description provides insufficient context. It omits any discussion of side effects, required permissions, return values, or interaction with other tools. For a multi-action tool, more detail would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description adds no parameter-level details beyond the schema's enum. It does not explain what accountId or messageId represent, nor does it clarify the effect of each action value (e.g., 'archive' vs 'read'). The description adds minimal semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Archive, mark read/unread, or star' and the resource 'an email'. It effectively distinguishes from sibling tools like email_delete_email (deletion) and email_send_email (sending) by specifying the exact actions this tool performs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for managing email state (archive, read/unread, star) but provides no explicit guidance on when to use this tool versus siblings. For example, it does not differentiate from email_delete_email for removal or email_get_email for reading. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_send_emailC
Send a plain text or HTML email.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | Yes | ||
| bcc | No | ||
| body | Yes | ||
| subject | Yes | ||
| accountId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only states the obvious sending action, with no disclosure of behavioral traits like authentication needs, error handling, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise at one sentence, with no wasted words. However, the conciseness sacrifices useful detail, making it less effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, no output schema, and no annotations, the description is insufficient. It fails to explain key parameters like accountId or the overall sending context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds only a hint that the body can be plain text or HTML. No parameter-specific explanations are provided, leaving meaning inferred from parameter names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action 'Send' and the resource 'email', and specifies support for plain text or HTML. However, it does not explicitly distinguish from sibling tools, though the verb 'send' is unique among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool, prerequisites (e.g., authentication via authenticate_account), or when not to use it. The description lacks any usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
13 tool updates
v1.0.0- First observed
authenticate_account - First observed
calendar_create_event - First observed
calendar_delete_event - First observed
calendar_list_events - First observed
calendar_update_event - First observed
contacts_create_contact - First observed
contacts_delete_contact - First observed
contacts_search_contacts - First observed
email_delete_email - First observed
email_get_email - First observed
email_list_emails - First observed
email_manage_email - First observed
email_send_email
TDQS
Tools are clearly grouped by domain (calendar, contacts, email) with distinct actions per domain. There is no overlap in functionality, and each tool serves a unique purpose.
All tools follow a consistent 'domain_action' pattern (e.g., calendar_create_event, email_send_email) with only 'authenticate_account' lacking a prefix, which is acceptable as a singleton.
13 tools cover authentication, calendar, contacts, and email comprehensively without being overwhelming. The count is well-scoped for a multi-domain server.
Calendar and email have full CRUD-like coverage; contacts lack an update tool, which is a minor gap. Overall, the tool surface covers core workflows effectively.
Maintenance
Related MCP Connectors
MCP server for Nylas — read email, calendars, events and contacts, and send email or create events.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Hosted MCP server with managed OAuth for 15+ toolkits: Google Workspace, Fitbit, Oura, Kalshi, etc.
Streamable HTTP MCP server for Google Calendar and Sheets with OAuth login.
Related MCP Servers
- FlicenseAqualityCmaintenanceLocal-first MCP server for agents that need to work across multiple Gmail and Microsoft 365 accounts without cloud token storage.6-
- FlicenseAqualityDmaintenanceA lightweight MCP server for personal Microsoft Outlook/Hotmail accounts, enabling email search, reading, attachment management, and folder operations via Microsoft Graph API with OAuth device-code flow.61-
- AlicenseNot gradedqualityDmaintenanceA self-hosted MCP server for managing email, calendar, and cloud storage across Microsoft 365, Google Workspace, and IMAP accounts, enabling natural language interaction through any MCP client.1MIT
- AlicenseNot gradedqualityAmaintenanceA unified MCP server for email access across Gmail, Outlook, iCloud, and generic IMAP providers, enabling search, send, organize, and batch operations.39719MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/karljsamuel/mcp-ecc'
If you have feedback or need assistance with the MCP directory API, please join our Discord server