Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions fern/pages/integrations/ai-sdk.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,19 @@ The toolkit exposes more than 40 tools covering the AgentMail API. The main ones
| --- | --- |
| `get_attachment` | Get an attachment's metadata and download URL, plus extracted text for PDF and DOCX files |

### Calendar

| Tool | Description |
| --- | --- |
| `get_agenda` | List an inbox's events in a time window, including each date of recurring events |
| `get_event` | Get one event with its description, attendees, and their responses |
| `create_event` | Create a one-off or recurring event, emailing invitations with `sendInvites` |
| `update_event` | Change an event, one date of a recurring event, or that date and every later one |
| `delete_event` | Delete an event, or cancel dates of a recurring one |
| `respond_to_invitation` | Accept, decline, or tentatively accept an emailed invitation, emailing the organizer by default |
| `get_calendar` | Get an inbox's calendar settings, including its default time zone |
| `update_calendar` | Set the default time zone for events created without one |

Additional tools cover files, allow and block lists, and the rest of the API. Call `getTools()` and inspect the returned keys for the full list.

## Resources
Expand Down
2 changes: 1 addition & 1 deletion fern/pages/integrations/claude-agent-sdk.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ allowed_tools=["mcp__agentmail__send_message", "mcp__agentmail__list_messages"],

## Available tools

The server exposes 43 tools covering inboxes, threads, messages, drafts, attachments, allow and block lists, and agent sign-up. See the [MCP integration](https://docs.agentmail.to/integrations/mcp#available-tools) for the full list.
The server exposes tools covering inboxes, threads, messages, drafts, attachments, calendar, allow and block lists, and agent sign-up. See the [MCP integration](https://docs.agentmail.to/integrations/mcp#available-tools) for the full list.

## Claude Code

Expand Down
4 changes: 2 additions & 2 deletions fern/pages/integrations/mcp.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ description: Connect AgentMail to Claude, ChatGPT, Cursor, and other MCP clients

## Overview

The Model Context Protocol (MCP) is an open standard that lets AI clients call external tools. AgentMail runs a hosted MCP server at `https://mcp.agentmail.to/mcp` that exposes inbox, message, thread, draft, and attachment tools to any compatible client, plus [AgentID](/agentid-in-assistants) tools that create accounts for your agent at services like Firecrawl. Clients that support [MCP Events](/integrations/mcp-events), such as ChatGPT, can also subscribe to new mail and act on it as it arrives.
The Model Context Protocol (MCP) is an open standard that lets AI clients call external tools. AgentMail runs a hosted MCP server at `https://mcp.agentmail.to/mcp` that exposes inbox, message, thread, draft, attachment, and calendar tools to any compatible client, plus [AgentID](/agentid-in-assistants) tools that create accounts for your agent at services like Firecrawl. Clients that support [MCP Events](/integrations/mcp-events), such as ChatGPT, can also subscribe to new mail and act on it as it arrives.

The server supports two authentication paths:

Expand Down Expand Up @@ -98,7 +98,7 @@ MCP clients discover the live tool catalog from the hosted server. The canonical

**Claude says it cannot access AgentMail.** The connector is not installed or not connected. Follow the Claude Desktop setup steps above and confirm the connector shows as connected in **Settings**, then **Connectors**.

**The assistant does not list the AgentID tools.** Disconnect and reconnect the AgentMail connector so the client reloads the tool list, then ask `List AgentID apps`.
**The assistant does not list the AgentID or calendar tools.** Disconnect and reconnect the AgentMail connector so the client reloads the tool list, then ask `List AgentID apps`.

**OAuth opens `console.agentmail.to` but says you do not have an account.** Sign up at [console.agentmail.to](https://console.agentmail.to) first, then retry the connector flow.

Expand Down
17 changes: 15 additions & 2 deletions fern/snippets/mcp-tool-catalog.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{/* Generated by scripts/generate_mcp_tool_catalog.py from manifest sha256:3e183d0dc18d402ce3df4da0d83e08f3bc5d1aab2f71528c8f597cd02bd784ca. Do not edit. */}
{/* Generated by scripts/generate_mcp_tool_catalog.py from manifest sha256:ebe6f984120053e0616176c6a17db0d006f7de9d4919333b5c18e58754fbaf96. Do not edit. */}

The server exposes **39 tools**, grouped by resource. OAuth sessions also receive **2 organization-selection tools**.
The server exposes **47 tools**, grouped by resource. OAuth sessions also receive **2 organization-selection tools**.

### Inboxes

Expand Down Expand Up @@ -53,6 +53,19 @@ The server exposes **39 tools**, grouped by resource. OAuth sessions also receiv
| --- | --- |
| `get_attachment` | Get an attachment from a thread. Returns metadata and a download URL, plus extracted text for PDF/DOCX. |

### Calendar

| Tool | Description |
| --- | --- |
| `get_agenda` | List what is on an inbox's calendar in a time window: one-off events and each date of recurring events, by start time. |
| `get_event` | Get a calendar event by ID, with its description, attendees, and their responses. |
| `create_event` | Create a one-off or recurring event on an inbox's calendar. `sendInvites` emails every attendee an invitation. |
| `update_event` | Change an event, one date of a recurring event, or that date and every later one. Pass `sendInvites` again to email attendees the change (events this inbox organizes only). |
| `delete_event` | Delete an event, or cancel dates of a recurring one. `sendInvites` emails attendees a cancellation, for events this inbox organizes; to turn down an invitation, use `respond_to_invitation`. |
| `respond_to_invitation` | Accept, decline, or tentatively accept a calendar invitation the inbox received by email, and email the answer to the organizer (`sendReply: false` records it only on the calendar). |
| `get_calendar` | Get an inbox's calendar: its default time zone and how many events it holds. |
| `update_calendar` | Set an inbox's calendar default time zone for events created without one. |

### Allow and block lists

| Tool | Description |
Expand Down
Binary file not shown.
12 changes: 11 additions & 1 deletion scripts/generate_mcp_tool_catalog.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,14 @@ def load_manifest():
return manifest


# A string keyword matches tool names containing it; a set matches exactly the names in it. The first group that matches wins.
GROUPS = [
("Inboxes", "inbox"),
("Threads", "thread"),
("Messages", "message"),
("Drafts", "draft"),
("Attachments", "attachment"),
("Calendar", {"get_agenda", "get_event", "create_event", "update_event", "delete_event", "respond_to_invitation", "get_calendar", "update_calendar"}),
("Allow and block lists", "entr"),
("Agent sign-up", "agent"),
("Apps", "_app"),
Expand Down Expand Up @@ -100,6 +102,14 @@ def load_manifest():
"send_draft": "Send a draft immediately (converted to a sent message and deleted).",
"delete_draft": "Delete a draft. Also cancels a scheduled send.",
"get_attachment": "Get an attachment from a thread. Returns metadata and a download URL, plus extracted text for PDF/DOCX.",
"get_agenda": "List what is on an inbox's calendar in a time window: one-off events and each date of recurring events, by start time.",
"get_event": "Get a calendar event by ID, with its description, attendees, and their responses.",
"create_event": "Create a one-off or recurring event on an inbox's calendar. `sendInvites` emails every attendee an invitation.",
"update_event": "Change an event, one date of a recurring event, or that date and every later one. Pass `sendInvites` again to email attendees the change (events this inbox organizes only).",
"delete_event": "Delete an event, or cancel dates of a recurring one. `sendInvites` emails attendees a cancellation, for events this inbox organizes; to turn down an invitation, use `respond_to_invitation`.",
"respond_to_invitation": "Accept, decline, or tentatively accept a calendar invitation the inbox received by email, and email the answer to the organizer (`sendReply: false` records it only on the calendar).",
"get_calendar": "Get an inbox's calendar: its default time zone and how many events it holds.",
"update_calendar": "Set an inbox's calendar default time zone for events created without one.",
"list_list_entries": "List the entries on one of an inbox's allow or block lists (send, receive, or reply).",
"get_list_entry": "Get one entry from an inbox's allow or block list, by email address or domain.",
"create_list_entry": "Add an email address or domain to an inbox's allow or block list. The first allow entry turns that list on.",
Expand All @@ -120,7 +130,7 @@ def load_manifest():

def group_for(name):
for title, keyword in GROUPS:
if keyword in name:
if (name in keyword) if isinstance(keyword, set) else (keyword in name):
return title
raise ValueError(f"tool {name} matches no resource group; update GROUPS")

Expand Down
Loading
Loading