Connect Superhuman Mail to Claude, and build powerful workflows for email and calendar. Find anything in your inbox, draft replies that sound like you for every recipient, check read statuses, set reminders, schedule meetings, and send — all without leaving Claude.
Protocol
MCP 2025-11-25
Server version
v0.2.0
Supports
Tools
Resources
Logging
Overall score
B
Overall quality score: 82 out of 10082/100
Server metadata
4 of 8 fields50/1004 / 8 pts
Identity, discovery, and usage metadata advertised during the MCP handshake.
This session may have more than one Superhuman account linked. For any request that could span accounts — inbox triage or "prioritize my day", any overview of your day, agenda, or schedule ("what's on my agenda today", "what's on my plate this week"), finding a message or calendar event that could be in any account, or totals/aggregates across mail or calendar — first call list_accounts, then run the query once per linked account using the acting_email parameter and combine the results; never answer from only the primary account when multiple are linked. After calling list_accounts, make independent per-account tool calls in parallel when possible. If only one account is linked, ignore this and proceed normally.
Protocol
Pass100/10016 / 16 pts
Connection, authentication, and protocol compatibility.
How to fix: Set the top-level tool.title to a short human-readable label (for example, "Search catalog"). Claude directory submission requires tool titles; annotations.title remains accepted only as a legacy fallback.
App resources, metadata, and rendering requirements.
Tool invocation metadata present
1 tool(s) missing openai/toolInvocation metadata
How to fix: For tools that render a UI resource, add openai/toolInvocation with string fields invoking and invoked (present-tense labels shown while the tool runs and after it finishes, e.g. "Searching…" / "Searched").
How to fix: Use a ui:// URI and text/html;profile=mcp-app. For mcp-use servers, set the widget description in widgetMetadata; other stacks can use _meta.ui.widgetDescription or the OpenAI compatibility alias.
How to fix: For ChatGPT submission, set one exact HTTPS origin such as "https://app.example.com" on every view via _meta.ui.domain (or openai/widgetDomain). Paths are not valid and all views in one app must share the origin.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Start linking an additional Superhuman Mail account to this session so it can be acted on alongside the current account. Returns a URL the user must open: they sign in as the account they want to add and approve. Once the user confirms they have approved, call list_accounts to verify the account was added, then retry the original action passing that account's email.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
{
"name": "add_account",
"description": "Start linking an additional Superhuman Mail account to this session so it can be acted on alongside the current account. Returns a URL the user must open: they sign in as the account they want to add and approve. Once the user confirms they have approved, call list_accounts to verify the account was added, then retry the original action passing that account's email.",
"inputSchema": {
"type": "object",
"properties": {}
},
"outputSchema": {
"type": "object",
"required": [
"continueUrl",
"expiresAt",
"message"
],
"properties": {
"message": {
"type": "string"
},
"expiresAt": {
"type": "string"
},
"continueUrl": {
"type": "string"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
}
Add a human-readable title so users do not have to interpret the tool identifier.
Description98/100
Compose an email on behalf of the user. Uses the user's writing style, tone, and personalization to produce a polished draft. Returns the composed email — use send_draft separately to send it. The draft is saved to the user's Superhuman Mail Drafts list. The response includes a draft object with draft_id and thread_id — pass draft_id to send_draft to send the email. To update an existing draft (e.g. after user feedback), pass the previous draft_id and thread_id — the existing draft's content (recipients, subject, body) is loaded so the writer can revise it based on your instructions rather than composing from scratch. The draft will be updated in place instead of creating a duplicate. Forward drafts are a temporary exception: use body, not instructions, and provide only your intro text — the server appends the forwarded message automatically.
The description explains the capability, when to use it, and what to expect.
Inputs91/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
bcc
BCC recipients email
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
body
Email body in HTML format. Use this as a fallback to directly create a draft with the exact text provided, bypassing the AI writer. When body is provided, the draft is saved as-is without style or tone adjustments. Prefer instructions over body for a polished result, except for forward drafts where body is required and should contain only your intro text.
Clear enough to supply this argument.
cc
CC recipients email
Explain the meaning of this value, not just its name.
draft_id
Draft ID from a previous create_or_update_draft response. When provided with thread_id, the existing draft's content is loaded as context for revision and the draft is updated in place instead of creating a new one.
Clear enough to supply this argument.
from
Email address to send from. Must be one of the user's verified aliases. When omitted, reply drafts prefer the alias that matches the original message and otherwise fall back to the default send-as alias. When updating an existing draft, the previously set from address is preserved if omitted.
Clear enough to supply this argument.
instructions
What the email should say or accomplish — e.g. 'thank Sarah for the update and ask about next steps'. This is the preferred way to compose emails: the tool uses the user's writing style, tone, and personalization to produce a polished draft. Either instructions or body must be provided. Forward drafts do not support instructions; use body instead.
Clear enough to supply this argument.
message_id
Message ID within a thread to reply to. When omitted, replies to the last message in the thread.
Clear enough to supply this argument.
subject
Email subject line (optional — will be auto-generated if not provided)
Clear enough to supply this argument.
thread_id
Thread ID for replies/forwards, or the draft's thread_id when updating an existing draft.
Clear enough to supply this argument.
to
Recipient emails. If omitted may be auto-resolved or asked in clarification.
{
"name": "create_or_update_draft",
"description": "Compose an email on behalf of the user. Uses the user's writing style, tone, and personalization to produce a polished draft. Returns the composed email — use send_draft separately to send it. The draft is saved to the user's Superhuman Mail Drafts list. The response includes a draft object with draft_id and thread_id — pass draft_id to send_draft to send the email. To update an existing draft (e.g. after user feedback), pass the previous draft_id and thread_id — the existing draft's content (recipients, subject, body) is loaded so the writer can revise it based on your instructions rather than composing from scratch. The draft will be updated in place instead of creating a duplicate. Forward drafts are a temporary exception: use body, not instructions, and provide only your intro text — the server appends the forwarded message automatically.",
"inputSchema": {
"type": "object",
"required": [
"type"
],
"properties": {
"cc": {
"type": "array",
"items": {
"type": "string"
},
"description": "CC recipients email"
},
"to": {
"type": "array",
"items": {
"type": "string"
},
"description": "Recipient emails. If omitted may be auto-resolved or asked in clarification."
},
"bcc": {
"type": "array",
"items": {
"type": "string"
},
"description": "BCC recipients email"
},
"body": {
"type": "string",
"description": "Email body in HTML format. Use this as a fallback to directly create a draft with the exact text provided, bypassing the AI writer. When body is provided, the draft is saved as-is without style or tone adjustments. Prefer instructions over body for a polished result, except for forward drafts where body is required and should contain only your intro text."
},
"from": {
"type": "string",
"description": "Email address to send from. Must be one of the user's verified aliases. When omitted, reply drafts prefer the alias that matches the original message and otherwise fall back to the default send-as alias. When updating an existing draft, the previously set from address is preserved if omitted."
},
"type": {
"enum": [
"new",
"forward",
"reply",
"reply_all"
],
"type": "string",
"description": "The kind of email to compose."
},
"subject": {
"type": "string",
"description": "Email subject line (optional — will be auto-generated if not provided)"
},
"draft_id": {
"type": "string",
"description": "Draft ID from a previous create_or_update_draft response. When provided with thread_id, the existing draft's content is loaded as context for revision and the draft is updated in place instead of creating a new one."
},
"thread_id": {
"type": "string",
"description": "Thread ID for replies/forwards, or the draft's thread_id when updating an existing draft."
},
"message_id": {
"type": "string",
"description": "Message ID within a thread to reply to. When omitted, replies to the last message in the thread."
},
"acting_email": {
"type": "string",
"description": "Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts."
},
"instructions": {
"type": "string",
"description": "What the email should say or accomplish — e.g. 'thank Sarah for the update and ask about next steps'. This is the preferred way to compose emails: the tool uses the user's writing style, tone, and personalization to produce a polished draft. Either instructions or body must be provided. Forward drafts do not support instructions; use body instead."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"draft"
],
"properties": {
"draft": {
"type": "object",
"required": [
"draft_id",
"thread_id",
"to",
"subject",
"body"
],
"properties": {
"cc": {
"type": [
"null",
"array"
],
"items": {
"type": [
"null",
"object"
],
"required": [
"email",
"name"
],
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
}
},
"additionalProperties": false
}
},
"to": {
"type": [
"null",
"array"
],
"items": {
"type": [
"null",
"object"
],
"required": [
"email",
"name"
],
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
}
},
"additionalProperties": false
}
},
"bcc": {
"type": [
"null",
"array"
],
"items": {
"type": [
"null",
"object"
],
"required": [
"email",
"name"
],
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
}
},
"additionalProperties": false
}
},
"body": {
"type": "string"
},
"from": {
"type": "string"
},
"action": {
"type": "string"
},
"subject": {
"type": "string"
},
"draft_id": {
"type": "string"
},
"open_url": {
"type": "string"
},
"reply_to": {
"type": [
"null",
"object"
],
"required": [
"message_id",
"subject",
"from",
"to",
"date",
"body_snippet"
],
"properties": {
"cc": {
"type": [
"null",
"array"
],
"items": {
"type": [
"null",
"object"
],
"required": [
"email",
"name"
],
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
}
},
"additionalProperties": false
}
},
"to": {
"type": [
"null",
"array"
],
"items": {
"type": [
"null",
"object"
],
"required": [
"email",
"name"
],
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
}
},
"additionalProperties": false
}
},
"date": {
"type": "string"
},
"from": {
"type": [
"null",
"object"
],
"required": [
"email",
"name"
],
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
}
},
"additionalProperties": false
},
"subject": {
"type": "string"
},
"message_id": {
"type": "string"
},
"body_snippet": {
"type": "string"
}
},
"additionalProperties": false
},
"thread_id": {
"type": "string"
},
"in_reply_to": {
"type": "string"
},
"acting_email": {
"type": "string"
},
"provider_message_id": {
"type": "string"
}
},
"additionalProperties": false
},
"clarification_needed": {
"type": "string"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Create a new calendar event or edit an existing one. If event_id is provided, updates the existing event. Otherwise creates a new event. Note: newly created or updated events may take up to a minute to appear in search and query results.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs82/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
attendees
List of attendee email addresses
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
calendar_id
Calendar ID (defaults to primary calendar)
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
conference
Whether to add a video meeting link
Clear enough to supply this argument.
description
Event description (HTML supported)
Clear enough to supply this argument.
end
End time in RFC3339 format (e.g. 2024-03-15T10:00:00-07:00)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
event_id
The event ID to update (omit to create a new event)
Clear enough to supply this argument.
is_all_day
Whether this is an all-day event
Clear enough to supply this argument.
location
Event location
Explain the meaning of this value, not just its name.
recurrence › pattern › daysOfWeek
Required for weekly, relativeMonthly and relativeYearly. relativeMonthly/relativeYearly support only a single day.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
recurrence › pattern › index
Used with relativeMonthly/relativeYearly. Defaults to first.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
recurrence › pattern › interval
Repeat every N periods (e.g. 2 for biweekly with type=weekly). Must be at least 1.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
recurrence › pattern › month
Only for relativeYearly: the month (1-12) the event recurs in. Defaults to the event's start month.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
recurrence › pattern › type
How often the event repeats.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
recurrence › range › endDate
Required when type=endDate: last day of the series, YYYY-MM-DD.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
recurrence › range › numberOfOccurrences
Required when type=numbered: total number of occurrences.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
recurrence › range › type
How the series ends.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
reminders › items › method
Reminder method: email or popup
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
reminders › items › minutes
Minutes before the event to send the reminder
Clear enough to supply this argument.
start
Start time in RFC3339 format (e.g. 2024-03-15T09:00:00-07:00)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"name": "create_or_update_event",
"description": "Create a new calendar event or edit an existing one. If event_id is provided, updates the existing event. Otherwise creates a new event. Note: newly created or updated events may take up to a minute to appear in search and query results.",
"inputSchema": {
"type": "object",
"required": [
"title",
"start",
"end",
"timezone"
],
"properties": {
"end": {
"type": "string",
"description": "End time in RFC3339 format (e.g. 2024-03-15T10:00:00-07:00)"
},
"start": {
"type": "string",
"description": "Start time in RFC3339 format (e.g. 2024-03-15T09:00:00-07:00)"
},
"title": {
"type": "string",
"description": "Event title"
},
"event_id": {
"type": "string",
"description": "The event ID to update (omit to create a new event)"
},
"location": {
"type": "string",
"description": "Event location"
},
"timezone": {
"type": "string",
"description": "IANA timezone name (e.g. America/New_York)"
},
"attendees": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of attendee email addresses"
},
"reminders": {
"type": "array",
"items": {
"type": "object",
"required": [
"method",
"minutes"
],
"properties": {
"method": {
"type": "string",
"description": "Reminder method: email or popup"
},
"minutes": {
"type": "integer",
"description": "Minutes before the event to send the reminder"
}
}
},
"description": "Custom reminders for the event. Each reminder specifies a method (email or popup) and how many minutes before the event to trigger."
},
"conference": {
"type": "boolean",
"description": "Whether to add a video meeting link"
},
"is_all_day": {
"type": "boolean",
"description": "Whether this is an all-day event"
},
"recurrence": {
"type": "object",
"required": [
"pattern",
"range"
],
"properties": {
"range": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"noEnd",
"numbered",
"endDate"
],
"type": "string",
"description": "How the series ends."
},
"endDate": {
"type": "string",
"description": "Required when type=endDate: last day of the series, YYYY-MM-DD."
},
"numberOfOccurrences": {
"type": "integer",
"description": "Required when type=numbered: total number of occurrences."
}
},
"description": "How long the series lasts."
},
"pattern": {
"type": "object",
"required": [
"type",
"interval"
],
"properties": {
"type": {
"enum": [
"daily",
"weekly",
"absoluteMonthly",
"relativeMonthly",
"absoluteYearly",
"relativeYearly"
],
"type": "string",
"description": "How often the event repeats."
},
"index": {
"enum": [
"first",
"second",
"third",
"fourth",
"last"
],
"type": "string",
"description": "Used with relativeMonthly/relativeYearly. Defaults to first."
},
"month": {
"type": "integer",
"description": "Only for relativeYearly: the month (1-12) the event recurs in. Defaults to the event's start month."
},
"interval": {
"type": "integer",
"description": "Repeat every N periods (e.g. 2 for biweekly with type=weekly). Must be at least 1."
},
"daysOfWeek": {
"type": "array",
"items": {
"enum": [
"sunday",
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday"
],
"type": "string"
},
"description": "Required for weekly, relativeMonthly and relativeYearly. relativeMonthly/relativeYearly support only a single day."
}
},
"description": "How often the event repeats."
}
},
"description": "Makes this a recurring event. The series is anchored to the event's own start/end, so pattern.dayOfMonth, pattern.month and range.startDate are not needed. Only supported when creating a new event: editing the recurrence of an existing recurring event is not supported yet, and updating one only changes its first occurrence."
},
"calendar_id": {
"type": "string",
"description": "Calendar ID (defaults to primary calendar)"
},
"description": {
"type": "string",
"description": "Event description (HTML supported)"
},
"acting_email": {
"type": "string",
"description": "Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"event_id",
"title",
"start",
"end",
"created"
],
"properties": {
"end": {
"type": "string"
},
"start": {
"type": "string"
},
"title": {
"type": "string"
},
"created": {
"type": "boolean"
},
"event_id": {
"type": "string"
},
"location": {
"type": "string"
},
"attendees": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"required": [
"email"
],
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"status": {
"type": "string"
}
},
"additionalProperties": false
}
},
"calendar_id": {
"type": "string"
},
"meeting_url": {
"type": "string"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Create or reschedule a reminder on a Superhuman Mail thread. By default the thread is removed from the inbox and returns to the top at remind_at (Superhuman's Remind Me); pass mark_done=false to keep it in the inbox and only re-surface it at remind_at. A thread can have at most one reminder, so if it already has one this replaces it (reschedules to the new time). The reminder cancels automatically if someone replies to the thread before it triggers. Use discard_reminder to remove a reminder, and list_reminders to see existing ones.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
mark_done
Whether to remove the thread from the inbox when the reminder is set (it returns at remind_at). Defaults to true, matching Superhuman's Remind Me. Set false to leave the thread in the inbox and only re-surface it at remind_at.
Clear enough to supply this argument.
remind_at
When the reminder should trigger, as an RFC3339 datetime (e.g. 2026-01-15T09:00:00Z).
Clear enough to supply this argument.
thread_id
Thread to remind on (provider thread ID, e.g. from list_threads).
{
"name": "create_or_update_reminder",
"description": "Create or reschedule a reminder on a Superhuman Mail thread. By default the thread is removed from the inbox and returns to the top at remind_at (Superhuman's Remind Me); pass mark_done=false to keep it in the inbox and only re-surface it at remind_at. A thread can have at most one reminder, so if it already has one this replaces it (reschedules to the new time). The reminder cancels automatically if someone replies to the thread before it triggers. Use discard_reminder to remove a reminder, and list_reminders to see existing ones.",
"inputSchema": {
"type": "object",
"required": [
"thread_id",
"remind_at"
],
"properties": {
"mark_done": {
"type": "boolean",
"default": true,
"description": "Whether to remove the thread from the inbox when the reminder is set (it returns at remind_at). Defaults to true, matching Superhuman's Remind Me. Set false to leave the thread in the inbox and only re-surface it at remind_at."
},
"remind_at": {
"type": "string",
"description": "When the reminder should trigger, as an RFC3339 datetime (e.g. 2026-01-15T09:00:00Z)."
},
"thread_id": {
"type": "string",
"description": "Thread to remind on (provider thread ID, e.g. from list_threads)."
},
"acting_email": {
"type": "string",
"description": "Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"reminder_id",
"thread_id",
"remind_at"
],
"properties": {
"remind_at": {
"type": "string"
},
"thread_id": {
"type": "string"
},
"reminder_id": {
"type": "string"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description82/100
Save a reusable Superhuman Mail snippet (an email template). Omit id to create a new snippet; pass an id from list_snippets to update that snippet's content in place. name and body (HTML) are required; subject and default to/cc/bcc recipients are optional. Set shared to true to share a new snippet with the user's team, or to promote an existing personal snippet to a team snippet (requires being on a team). Updating a team snippet requires write access. This tool cannot un-share, rename-only, or delete a snippet.
Describe the returned information so the agent knows whether it will answer the request.
Inputs94/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
bcc
Optional default Bcc recipients.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
body
The snippet's content as HTML.
Clear enough to supply this argument.
cc
Optional default Cc recipients.
Clear enough to supply this argument.
id
The id of an existing snippet (from list_snippets) to update in place. Omit to create a new snippet.
Clear enough to supply this argument.
name
The snippet's name (its title in the snippet list).
Clear enough to supply this argument.
shared
When true, share the snippet with the user's team (requires being on a team). On update, promotes a personal snippet to a team snippet. Defaults to false. Cannot un-share an existing team snippet.
Clear enough to supply this argument.
subject
Optional email subject line applied when the snippet is used.
Clear enough to supply this argument.
to
Optional default To recipients (email addresses) filled in when the snippet is used.
{
"name": "create_or_update_snippet",
"description": "Save a reusable Superhuman Mail snippet (an email template). Omit id to create a new snippet; pass an id from list_snippets to update that snippet's content in place. name and body (HTML) are required; subject and default to/cc/bcc recipients are optional. Set shared to true to share a new snippet with the user's team, or to promote an existing personal snippet to a team snippet (requires being on a team). Updating a team snippet requires write access. This tool cannot un-share, rename-only, or delete a snippet.",
"inputSchema": {
"type": "object",
"required": [
"name",
"body"
],
"properties": {
"cc": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional default Cc recipients."
},
"id": {
"type": "string",
"description": "The id of an existing snippet (from list_snippets) to update in place. Omit to create a new snippet."
},
"to": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional default To recipients (email addresses) filled in when the snippet is used."
},
"bcc": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional default Bcc recipients."
},
"body": {
"type": "string",
"description": "The snippet's content as HTML."
},
"name": {
"type": "string",
"description": "The snippet's name (its title in the snippet list)."
},
"shared": {
"type": "boolean",
"description": "When true, share the snippet with the user's team (requires being on a team). On update, promotes a personal snippet to a team snippet. Defaults to false. Cannot un-share an existing team snippet."
},
"subject": {
"type": "string",
"description": "Optional email subject line applied when the snippet is used."
},
"acting_email": {
"type": "string",
"description": "Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"id",
"name",
"shared",
"updated"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"shared": {
"type": "boolean"
},
"updated": {
"type": "boolean"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Discard a user-owned Superhuman Mail draft by draft_id so it disappears from the user's Drafts list.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Add a human-readable title so users do not have to interpret the tool identifier.
Description96/100
Discard (cancel) a reminder on a Superhuman Mail thread so it no longer brings the thread back to the top of the inbox. Pass the thread_id and reminder_id from list_reminders. Idempotent and safe to retry: if no matching reminder is found it returns discarded=false rather than an error.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
{
"name": "discard_reminder",
"description": "Discard (cancel) a reminder on a Superhuman Mail thread so it no longer brings the thread back to the top of the inbox. Pass the thread_id and reminder_id from list_reminders. Idempotent and safe to retry: if no matching reminder is found it returns discarded=false rather than an error.",
"inputSchema": {
"type": "object",
"required": [
"thread_id",
"reminder_id"
],
"properties": {
"thread_id": {
"type": "string",
"description": "Thread the reminder is on (from list_reminders)."
},
"reminder_id": {
"type": "string",
"description": "Reminder to discard (from list_reminders)."
},
"acting_email": {
"type": "string",
"description": "Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"thread_id",
"reminder_id",
"discarded"
],
"properties": {
"discarded": {
"type": "boolean"
},
"thread_id": {
"type": "string"
},
"reminder_id": {
"type": "string"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description100/100
Remove a saved Superhuman Mail snippet, identified by the id from list_snippets. A personal snippet is discarded (returns discarded=true, unshared=false). A team (shared) snippet is first un-shared — this ends team sharing and moves it back to you (requires write access; read-only members are rejected) — and then discarded, so it is fully removed for everyone (returns discarded=true, unshared=true). Idempotent and safe to retry: if no matching snippet is found it returns discarded=false rather than an error.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
{
"name": "discard_snippet",
"description": "Remove a saved Superhuman Mail snippet, identified by the id from list_snippets. A personal snippet is discarded (returns discarded=true, unshared=false). A team (shared) snippet is first un-shared — this ends team sharing and moves it back to you (requires write access; read-only members are rejected) — and then discarded, so it is fully removed for everyone (returns discarded=true, unshared=true). Idempotent and safe to retry: if no matching snippet is found it returns discarded=false rather than an error.",
"inputSchema": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The snippet to discard, from list_snippets."
},
"acting_email": {
"type": "string",
"description": "Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"id",
"discarded",
"unshared"
],
"properties": {
"id": {
"type": "string"
},
"unshared": {
"type": "boolean"
},
"discarded": {
"type": "boolean"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
Add a human-readable title so users do not have to interpret the tool identifier.
Description98/100
Retrieve email attachments. For images and audio files, returns both the file content (for direct processing) and a download URL. For other file types, returns a download URL only. Download URLs expire after 1 hour. Requires a message_id obtained from get_message or get_thread.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
attachment_name
Optional: only return attachments matching this exact filename, otherwise returns all message attachments.
Clear enough to supply this argument.
message_id
The message ID containing attachments.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
Add a human-readable title so users do not have to interpret the tool identifier.
Description90/100
Find available meeting times for a group of participants. Resolves names to emails, checks availability, and returns proposed time slots. Use create_or_update_event afterward to create the meeting.
Describe the returned information so the agent knows whether it will answer the request.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
duration_minutes
Desired meeting duration in minutes. Default: 30.
Clear enough to supply this argument.
end_date
End of the time window to search in RFC3339 format (e.g. 2026-04-07T23:59:59-07:00).
Clear enough to supply this argument.
participants
Email addresses of participants to find availability for.
Clear enough to supply this argument.
start_date
Start of the time window to search in RFC3339 format (e.g. 2026-04-01T00:00:00-07:00).
Clear enough to supply this argument.
timezone
IANA timezone name (e.g. America/New_York). Defaults to the user's timezone.
Clear enough to supply this argument.
working_hours_only
Only return slots during business hours (9am–5pm in the user's timezone). Default: true.
Add a human-readable title so users do not have to interpret the tool identifier.
Description90/100
Fetch a single Superhuman Mail draft by draft_id, including its full body and quoted content. Use list_drafts to discover draft_ids.
Describe the returned information so the agent knows whether it will answer the request.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
draft_id
Draft ID, e.g. from list_drafts or create_or_update_draft.
Add a human-readable title so users do not have to interpret the tool identifier.
Description100/100
Read-only check of a Superhuman Mail draft's send state. Returns idle (no send queued, or a prior send failed/was aborted and the draft is sendable again), pending (send queued, undo window still open — includes undo_token), or closed (delivery underway past the undo window, delivered, or draft discarded). Intended for the compose widget to poll so it can reflect sends initiated elsewhere; agents should prefer undo_send for cancellation.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
draft_id
Draft ID returned by create_or_update_draft.
Clear enough to supply this argument.
thread_id
Thread ID returned by create_or_update_draft. Pass it to skip a lookup on this frequently-polled tool.
{
"name": "get_draft_send_status",
"description": "Read-only check of a Superhuman Mail draft's send state. Returns idle (no send queued, or a prior send failed/was aborted and the draft is sendable again), pending (send queued, undo window still open — includes undo_token), or closed (delivery underway past the undo window, delivered, or draft discarded). Intended for the compose widget to poll so it can reflect sends initiated elsewhere; agents should prefer undo_send for cancellation.",
"inputSchema": {
"type": "object",
"required": [
"draft_id"
],
"properties": {
"draft_id": {
"type": "string",
"description": "Draft ID returned by create_or_update_draft."
},
"thread_id": {
"type": "string",
"description": "Thread ID returned by create_or_update_draft. Pass it to skip a lookup on this frequently-polled tool."
},
"acting_email": {
"type": "string",
"description": "Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"state"
],
"properties": {
"state": {
"type": "string"
},
"draft_id": {
"type": "string"
},
"message_id": {
"type": "string"
},
"undo_token": {
"type": "string"
},
"closed_reason": {
"type": "string"
},
"undo_expires_at": {
"type": "string"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Fetch a single email message by its message ID. Returns full message details including body text. Use include_raw_html to also retrieve the original HTML. Requires a message_id obtained from list_email or get_thread.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
include_raw_html
When true, includes the raw HTML body. Defaults to false.
Clear enough to supply this argument.
message_id
The message ID to fetch.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Get a feed of read receipts for emails you've sent — who opened them, when, and on what device. Returns events newest first. By default scans the last 14 days of sent mail (up to 500 messages) and returns read events from the last 24 hours.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
cursor
Opaque pagination cursor from a previous response's next_cursor.
Clear enough to supply this argument.
limit
Max events to return (default 50, max 200).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
since
ISO 8601 datetime. Only reads that occurred at or after this time are returned. Defaults to 24 hours ago.
Clear enough to supply this argument.
thread_id
If set, returns read events for the most recent message you sent in this thread instead of the cross-thread feed.
Add a human-readable title so users do not have to interpret the tool identifier.
Description96/100
Fetch a saved Superhuman Mail snippet's full content — its HTML body, optional subject, and any default to/cc/bcc recipients — so it can be used in a draft. Covers the user's personal snippets and team snippets shared with them. Identify the snippet by the id from list_snippets; call list_snippets first to discover snippets. Apply a snippet to a draft the way Superhuman does: on a new, empty draft, load everything — set the subject and to/cc/bcc, and use the body. On an existing draft that already has content, leave the subject unchanged and append the rest — add the snippet's recipients to the existing ones and append its body to the existing body. create_or_update_draft replaces the to/cc/bcc fields rather than merging them, so to add the snippet's recipients you must pass the full combined list: take the draft's current recipients (from the draft you are updating, or via get_draft), union them with the snippet's to/cc/bcc, dedupe by email, and pass that complete list. Omitting a recipient field leaves the draft's existing recipients unchanged and drops the snippet's.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
{
"name": "get_snippet",
"description": "Fetch a saved Superhuman Mail snippet's full content — its HTML body, optional subject, and any default to/cc/bcc recipients — so it can be used in a draft. Covers the user's personal snippets and team snippets shared with them. Identify the snippet by the id from list_snippets; call list_snippets first to discover snippets. Apply a snippet to a draft the way Superhuman does: on a new, empty draft, load everything — set the subject and to/cc/bcc, and use the body. On an existing draft that already has content, leave the subject unchanged and append the rest — add the snippet's recipients to the existing ones and append its body to the existing body. create_or_update_draft replaces the to/cc/bcc fields rather than merging them, so to add the snippet's recipients you must pass the full combined list: take the draft's current recipients (from the draft you are updating, or via get_draft), union them with the snippet's to/cc/bcc, dedupe by email, and pass that complete list. Omitting a recipient field leaves the draft's existing recipients unchanged and drops the snippet's.",
"inputSchema": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The snippet id returned by list_snippets."
},
"acting_email": {
"type": "string",
"description": "Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"id",
"name",
"body",
"preview",
"usage_count"
],
"properties": {
"cc": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
}
},
"id": {
"type": "string"
},
"to": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
}
},
"bcc": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
}
},
"body": {
"type": "string"
},
"name": {
"type": "string"
},
"preview": {
"type": "string"
},
"subject": {
"type": "string"
},
"shared_by": {
"type": "string"
},
"usage_count": {
"type": "integer"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Fetch a specific email thread by its thread ID. Returns structured message data including bodies, recipients, attachments, and any internal team comments on the thread. Requires a thread_id obtained from query_email_and_calendar or list_threads.
The description explains the capability, when to use it, and what to expect.
Inputs90/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
include_comments
Whether to include comments on the thread (default true).
Clear enough to supply this argument.
include_drafts
Whether to include draft messages (default true).
Clear enough to supply this argument.
message_limit
Max messages to return (default 50, max 100). When the thread is longer, the first message (thread root) and the newest message_limit-1 messages are returned; middle messages are dropped.
Clear enough to supply this argument.
thread_id
The thread ID to fetch.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
Add a human-readable title so users do not have to interpret the tool identifier.
Description93/100
List the Superhuman Mail accounts linked to this session. Each entry has the account email, whether it is the primary (default) account actions run as when no account is specified, and when it was linked.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
List the user's active Superhuman Mail email drafts — both drafts composed natively in Superhuman and drafts created via create_or_update_draft. Covers compose, reply, reply-all, forward, and edit-subject-line replies; excludes snippets, signatures, comments, and other non-email drafts. Returns lightweight rows (recipients, subject, snippet); use get_draft to fetch a draft's full body and quoted content. Optionally filter to a specific thread. Paginated: pass next_cursor to fetch more; its absence means there are no more.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
cursor
Opaque pagination cursor from a previous response's next_cursor.
Clear enough to supply this argument.
limit
Max drafts to return (default 25, max 50).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
thread_id
Restrict results to drafts on this thread (provider thread ID or draft thread ID).
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
List all labels available on the user's email account. Returns user-created labels that can be used with list_threads (labels filter) and update_thread (add_labels / remove_labels).
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Add a human-readable title so users do not have to interpret the tool identifier.
Description97/100
List the user's Superhuman Mail reminders. A reminder brings a thread back to the top of the inbox at a set time. Returns active (not yet triggered) and/or already-triggered reminders, each with its thread subject and trigger time. Use create_or_update_reminder to set one and discard_reminder to remove one.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
limit
Max reminders to return (default 25, max 50).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
since
Only reminders scheduled to trigger at or after this RFC3339 datetime.
Clear enough to supply this argument.
status
Which reminders to return: "active" (default, not yet triggered), "triggered" (already fired), or "all".
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
List the user's saved Superhuman Mail snippets — reusable email templates. Includes the user's personal snippets and, when the user is on a team, snippets shared with that team. Returns lightweight rows (id, name, preview, usage count, and who shared a team snippet); use get_snippet to fetch a snippet's full body. Optionally search by text or filter to team snippets shared by a particular person.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
include_team
Whether to include team (shared) snippets alongside the user's personal snippets. Defaults to true.
Clear enough to supply this argument.
query
Case-insensitive search over snippet name, preview, and body.
Clear enough to supply this argument.
shared_by
Filter to team snippets shared by this person, matched against the sharer's name or email. Personal snippets have no sharer and are excluded when this is set.
{
"name": "list_snippets",
"description": "List the user's saved Superhuman Mail snippets — reusable email templates. Includes the user's personal snippets and, when the user is on a team, snippets shared with that team. Returns lightweight rows (id, name, preview, usage count, and who shared a team snippet); use get_snippet to fetch a snippet's full body. Optionally search by text or filter to team snippets shared by a particular person.",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Case-insensitive search over snippet name, preview, and body."
},
"shared_by": {
"type": "string",
"description": "Filter to team snippets shared by this person, matched against the sharer's name or email. Personal snippets have no sharer and are excluded when this is set."
},
"acting_email": {
"type": "string",
"description": "Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts."
},
"include_team": {
"type": "boolean",
"description": "Whether to include team (shared) snippets alongside the user's personal snippets. Defaults to true."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"snippets"
],
"properties": {
"snippets": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"required": [
"id",
"name",
"preview",
"usage_count"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"preview": {
"type": "string"
},
"shared_by": {
"type": "string"
},
"usage_count": {
"type": "integer"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
List the user's inbox splits. Splits organize the inbox into sections like Important, Other, and user-created categories (VIP, News, Team, etc.). Returns each split's name, filter criteria, and thread/unread counts. Use split names with the list_threads tool's split filter to view threads in a specific split. Note: counts reflect the last mailbox sync and may be a few seconds behind.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Add a human-readable title so users do not have to interpret the tool identifier.
Description97/100
Search email threads with structured filters. Returns thread metadata with participants, labels, and a snippet of the latest message. Supports pagination for large result sets. No filters returns the most recent threads. Note: recently sent or received messages may take up to a minute to appear in results.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
body_contains
Filter by body substring, case-insensitive.
Clear enough to supply this argument.
cursor
Opaque pagination cursor from a previous response's next_cursor.
Clear enough to supply this argument.
end_date
Threads with messages on or before this date. ISO 8601 format.
Clear enough to supply this argument.
from
Filter by sender email addresses, case-insensitive substring match (OR logic).
Clear enough to supply this argument.
has_attachment
Filter to threads containing messages with attachments.
Clear enough to supply this argument.
is_starred
Filter to starred threads (true) or unstarred threads (false).
Clear enough to supply this argument.
is_unread
Filter to unread threads (true) or read threads (false).
Clear enough to supply this argument.
labels
Filter by labels (OR logic). Includes system labels like UNREAD, STARRED, INBOX, SENT, DRAFT. Use list_labels to discover available user-created labels.
Clear enough to supply this argument.
limit
Max threads to return (default 25, max 50).
Clear enough to supply this argument.
sort
Order the returned threads by most recent message date: 'newest' first (default) or 'oldest' first. Applies to the returned page, not the whole mailbox.
Clear enough to supply this argument.
split
Filter to threads belonging to a specific split. Accepts a split name (e.g., 'Important', 'Other', 'GitHub', case-insensitive) or ID from list_splits. When set, threads are retrieved from the pre-computed split membership rather than searching the email provider. Results reflect the last mailbox sync and may be a few seconds behind.
Clear enough to supply this argument.
start_date
Threads with messages on or after this date. ISO 8601 format (e.g., '2024-01-01' or '2024-01-01T00:00:00Z').
Clear enough to supply this argument.
subject_contains
Filter by subject substring, case-insensitive.
Clear enough to supply this argument.
to
Filter by recipient email addresses in to/cc/bcc, case-insensitive substring match (OR logic).
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Mark an email thread as spam by thread ID. When also_block_sender or also_block_domain is set, the sender or domain is blocked and a bulk action runs in the background to mark all existing inbox threads from that sender or domain as spam.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs90/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
also_block_domain
When true, block the sender's entire domain instead of just the email address, and mark all existing inbox threads from that domain as spam in the background. Defaults to false.
Clear enough to supply this argument.
also_block_sender
When true, also block the sender and mark all their existing inbox threads as spam in the background. Defaults to false.
Clear enough to supply this argument.
also_trash
When true, also move the thread to trash after marking as spam. Defaults to false.
Clear enough to supply this argument.
thread_id
The thread ID to mark as spam.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
{
"name": "mark_spam",
"description": "Mark an email thread as spam by thread ID. When also_block_sender or also_block_domain is set, the sender or domain is blocked and a bulk action runs in the background to mark all existing inbox threads from that sender or domain as spam.",
"inputSchema": {
"type": "object",
"required": [
"thread_id"
],
"properties": {
"thread_id": {
"type": "string",
"description": "The thread ID to mark as spam."
},
"also_trash": {
"type": "boolean",
"description": "When true, also move the thread to trash after marking as spam. Defaults to false."
},
"acting_email": {
"type": "string",
"description": "Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts."
},
"also_block_domain": {
"type": "boolean",
"description": "When true, block the sender's entire domain instead of just the email address, and mark all existing inbox threads from that domain as spam in the background. Defaults to false."
},
"also_block_sender": {
"type": "boolean",
"description": "When true, also block the sender and mark all their existing inbox threads as spam in the background. Defaults to false."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"success",
"thread_id",
"sender_blocked"
],
"properties": {
"success": {
"type": "boolean"
},
"thread_id": {
"type": "string"
},
"sender_blocked": {
"type": "boolean"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}
}
Add a human-readable title so users do not have to interpret the tool identifier.
Description83/100
Answer natural-language questions about the user's emails, calendar, contacts, and knowledge base. Best for open-ended, exploratory, or ambiguous requests — inbox triage, summarizing conversations, checking schedules, or any question that spans multiple sources. Understands context and reasons across email and calendar together. Note: recently sent emails or newly created calendar events may take up to a minute to appear in results.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
question
The question to answer — can be about emails, calendar events, contacts, or company knowledge
Add a human-readable title so users do not have to interpret the tool identifier.
Description87/100
Unlink a previously added Superhuman Mail account from this session by its email. The primary (default) account cannot be removed — set a different account as the default first.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
account_email
The email address of the linked account to remove.
Add a human-readable title so users do not have to interpret the tool identifier.
Description91/100
Send an existing Superhuman Mail draft. Pass draft_id from create_or_update_draft. Optionally use smart_send to schedule at the best engagement time, send_at to schedule at a specific time, or undo_timeout to delay sending by up to 10 minutes so the send can be cancelled via undo_send. When no scheduling option is provided, send_draft applies a default 1-minute undo-send delay. Note: after sending, the message may take up to a minute to appear in search results or thread listings.
Describe the returned information so the agent knows whether it will answer the request.
Inputs90/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
draft_id
Draft ID returned by create_or_update_draft.
Clear enough to supply this argument.
send_at
RFC3339 datetime to schedule the send. Must be in the future. Mutually exclusive with smart_send and undo_timeout.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
smart_send
When true, schedules the email at the optimal send time based on recipient engagement data. Mutually exclusive with send_at and undo_timeout.
Clear enough to supply this argument.
undo_timeout
Number of minutes (1–10) to delay the send, allowing cancellation via undo_send. Returns undo_token and undo_expires_at. When omitted, send_draft uses the default 1-minute undo-send delay. Mutually exclusive with smart_send and send_at.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"name": "send_draft",
"description": "Send an existing Superhuman Mail draft. Pass draft_id from create_or_update_draft. Optionally use smart_send to schedule at the best engagement time, send_at to schedule at a specific time, or undo_timeout to delay sending by up to 10 minutes so the send can be cancelled via undo_send. When no scheduling option is provided, send_draft applies a default 1-minute undo-send delay. Note: after sending, the message may take up to a minute to appear in search results or thread listings.",
"inputSchema": {
"type": "object",
"required": [
"draft_id"
],
"properties": {
"send_at": {
"type": "string",
"description": "RFC3339 datetime to schedule the send. Must be in the future. Mutually exclusive with smart_send and undo_timeout."
},
"draft_id": {
"type": "string",
"description": "Draft ID returned by create_or_update_draft."
},
"smart_send": {
"type": "boolean",
"description": "When true, schedules the email at the optimal send time based on recipient engagement data. Mutually exclusive with send_at and undo_timeout."
},
"acting_email": {
"type": "string",
"description": "Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts."
},
"undo_timeout": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Number of minutes (1–10) to delay the send, allowing cancellation via undo_send. Returns undo_token and undo_expires_at. When omitted, send_draft uses the default 1-minute undo-send delay. Mutually exclusive with smart_send and send_at."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"success",
"message_id",
"thread_id",
"sent_at"
],
"properties": {
"sent_at": {
"type": "string"
},
"success": {
"type": "boolean"
},
"conflict": {
"type": "boolean"
},
"open_url": {
"type": "string"
},
"thread_id": {
"type": "string"
},
"message_id": {
"type": "string"
},
"undo_token": {
"type": "string"
},
"undo_expires_at": {
"type": "string"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}
}
Add a human-readable title so users do not have to interpret the tool identifier.
Description89/100
Make a linked Superhuman Mail account the default (primary) account that actions run as when no specific account is given. The account must already be linked to this session.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
account_email
The email address of the linked account to make the default.
{
"name": "set_default_account",
"description": "Make a linked Superhuman Mail account the default (primary) account that actions run as when no specific account is given. The account must already be linked to this session.",
"inputSchema": {
"type": "object",
"required": [
"account_email"
],
"properties": {
"account_email": {
"type": "string",
"description": "The email address of the linked account to make the default."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"success",
"accountEmail",
"message"
],
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
},
"accountEmail": {
"type": "string"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
}
Add a human-readable title so users do not have to interpret the tool identifier.
Description93/100
Move an email thread to trash by thread ID. This is a destructive operation, the thread will be removed from the inbox and placed in the trash folder.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
thread_id
The thread ID to trash.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
{
"name": "trash_thread",
"description": "Move an email thread to trash by thread ID. This is a destructive operation, the thread will be removed from the inbox and placed in the trash folder.",
"inputSchema": {
"type": "object",
"required": [
"thread_id"
],
"properties": {
"thread_id": {
"type": "string",
"description": "The thread ID to trash."
},
"acting_email": {
"type": "string",
"description": "Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"success",
"thread_id",
"trashed_at"
],
"properties": {
"success": {
"type": "boolean"
},
"thread_id": {
"type": "string"
},
"trashed_at": {
"type": "string"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Check whether a draft was queued for sending and cancel it if so. Call this whenever the user asks to undo, unsend, or cancel ANY draft — sends often happen via the UI without going through chat, so calling this is the only reliable way to know if a draft is still local or has been queued. The tool returns success (canceled), `already_sent` (past the undo window), or 'send not found' (still just a draft, nothing to undo) — all are valid outcomes, so calling this is always safe. Prefer passing the `undo_token` returned by `send_draft` when available, since it is the most specific identifier for canceling that queued send. If the `undo_token` is unavailable, pass the `message_id` from a prior `create_or_update_draft` or `send_draft` tool call instead.
The description explains the capability, when to use it, and what to expect.
Inputs91/100
Input documentation gives an agent enough context to populate the arguments.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
message_id
message_id returned by send_draft. Alternative to undo_token when the token is unavailable.
Clear enough to supply this argument.
undo_token
Token returned by send_draft when undo_timeout was set. Cancels the send.
{
"name": "undo_send",
"description": "Check whether a draft was queued for sending and cancel it if so. Call this whenever the user asks to undo, unsend, or cancel ANY draft — sends often happen via the UI without going through chat, so calling this is the only reliable way to know if a draft is still local or has been queued. The tool returns success (canceled), `already_sent` (past the undo window), or 'send not found' (still just a draft, nothing to undo) — all are valid outcomes, so calling this is always safe. Prefer passing the `undo_token` returned by `send_draft` when available, since it is the most specific identifier for canceling that queued send. If the `undo_token` is unavailable, pass the `message_id` from a prior `create_or_update_draft` or `send_draft` tool call instead.",
"inputSchema": {
"type": "object",
"properties": {
"message_id": {
"type": "string",
"description": "message_id returned by send_draft. Alternative to undo_token when the token is unavailable."
},
"undo_token": {
"type": "string",
"description": "Token returned by send_draft when undo_timeout was set. Cancels the send."
},
"acting_email": {
"type": "string",
"description": "Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"success"
],
"properties": {
"reason": {
"type": "string"
},
"success": {
"type": "boolean"
},
"restored_draft_id": {
"type": "string"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
Add a human-readable title so users do not have to interpret the tool identifier.
Description89/100
Unsubscribe from a mailing list by thread ID based on the List-Unsubscribe header of the latest message in the thread. Optionally trash the thread and/or block the sender.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs89/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
also_block
When true, also block the sender. Defaults to false.
Clear enough to supply this argument.
also_domain
When true and also_block is true, block the sender's entire domain instead of just the email address.
Clear enough to supply this argument.
also_trash
When true, also trash the thread. Defaults to false.
Clear enough to supply this argument.
thread_id
The email thread ID to unsubscribe from.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
{
"name": "unsubscribe",
"description": "Unsubscribe from a mailing list by thread ID based on the List-Unsubscribe header of the latest message in the thread. Optionally trash the thread and/or block the sender.",
"inputSchema": {
"type": "object",
"required": [
"thread_id"
],
"properties": {
"thread_id": {
"type": "string",
"description": "The email thread ID to unsubscribe from."
},
"also_block": {
"type": "boolean",
"description": "When true, also block the sender. Defaults to false."
},
"also_trash": {
"type": "boolean",
"description": "When true, also trash the thread. Defaults to false."
},
"also_domain": {
"type": "boolean",
"description": "When true and also_block is true, block the sender's entire domain instead of just the email address."
},
"acting_email": {
"type": "string",
"description": "Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"success",
"unsubscribed_from",
"method_used",
"thread_trashed",
"sender_blocked"
],
"properties": {
"success": {
"type": "boolean"
},
"method_used": {
"type": "string"
},
"sender_blocked": {
"type": "boolean"
},
"thread_trashed": {
"type": "boolean"
},
"unsubscribed_from": {
"type": "string"
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description71/100
Update the user's personalization based on natural language feedback. Use this when the user wants to correct their writing style, update personal facts, change greeting/sign-off preferences, or adjust any personalization setting.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
feedback
The user's feedback — e.g. 'I prefer casual greetings like Hey instead of Dear', 'My title is now VP of Engineering', 'I like shorter emails'
The title clearly communicates the tool’s action and subject. Keep it concise.
Description73/100
Update an email thread: mark done/not done, star/unstar, read/unread, move between Important and Other, add or remove labels, or move to a folder. Multiple changes can be made in a single call.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs85/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
acting_email
Optional. Email of the linked account to act as for this call. Omit to use the session's default (primary) account; call list_accounts to see linked accounts.
Clear enough to supply this argument.
add_labels
Labels to add to the thread. Use list_labels to discover available labels.
Clear enough to supply this argument.
last_message_id
The ID of the last message in the thread (used for consistency checks)
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
mark_done
Set to true to archive/mark done, false to move back to inbox
Clear enough to supply this argument.
mark_important
Set to true to move the thread to Important (Gmail) / Focused (Microsoft), false to move to Other. On Gmail, honors the user's Restrictive Important setting.
Clear enough to supply this argument.
mark_read
Set to true to mark as read, false to mark as unread
Clear enough to supply this argument.
mark_starred
Set to true to star, false to unstar
Clear enough to supply this argument.
move_to_folder
Folder to move the thread to
Explain the meaning of this value, not just its name.
remove_labels
Labels to remove from the thread. Use list_labels to discover available labels.
Clear enough to supply this argument.
thread_id
The email thread ID to update
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
get_attachmentmark_spamlist_splitscreate_or_update_draftcreate_or_update_eventdiscard_draftget_availabilityget_labelsget_messageget_read_statusesget_threadlist_threads+7 more
superhuman-mcp setup, tools, quality score, publishing readiness, and alternatives.
How do I add superhuman-mcp to Claude, ChatGPT, or Cursor?
Add superhuman-mcp to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://mcp.mail.superhuman.com/mcp. This server requires OAuth, so complete the login prompt after you connect.
Is superhuman-mcp MCP ready for ChatGPT and Claude?
As of October 6, 2026, superhuman-mcp scores 86/100 on Manufact's MCP publishing checklist. The scan does not yet meet ChatGPT publishing checks and does not yet meet Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is superhuman-mcp's MCP tool documentation?
As of October 6, 2026, superhuman-mcp scores 81/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 33 of 33 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What tools does the superhuman-mcp MCP server provide?
superhuman-mcp lists 19 MCP tools, including get_attachment, mark_spam, list_splits, create_or_update_draft, create_or_update_event, discard_draft, get_availability, get_labels, get_message, get_read_statuses, get_thread, and list_threads.
What are the best alternatives to superhuman-mcp?
As of October 20, 2026, alternatives to superhuman-mcp in communication on the Manufact MCP leaderboard include AgentLine: Phone Numbers for AI Agents, Fleet Connected Apps, JooVoice, OpenMail, and Granola.
Does superhuman-mcp MCP require authentication?
superhuman-mcp requires authentication. Connect it in Claude, ChatGPT, or Cursor and complete the OAuth login prompt.
How can superhuman-mcp improve its MCP documentation?
trash_thread is the lowest-scoring reviewed tool at 73/100. Add a human-readable title so users do not have to interpret the tool identifier. Open its review for feedback and a copyable fix prompt, then rerun the documentation review after updating your tool metadata.
Who develops superhuman-mcp?
superhuman-mcp is developed by Superhuman Mail. It is listed as partner on the Claude connector directory.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.