Skip to main content
Glama
commune-dev

commune-mcp

Official
by commune-dev

Email for Claude Desktop, Cursor & Windsurf

PyPI PyPI Downloads Python 3.9+ Apache-2.0 License MCP Works with Claude Works with Cursor commune.email

Give Claude (or any MCP client) a real email inbox and SMS. Install in 30 seconds — no cloning required.

Your AI agent can:

  • Read email — list threads, search by topic, get full message history

  • Send email — reply in existing threads, compose fresh messages, attach files

  • Manage inboxes — create programmatic inboxes, set up custom domains, triage with tags and status

  • Track delivery — get delivery stats, suppression lists, bounce and complaint events

  • Send and receive SMS — provision phone numbers, send messages, search SMS history

Works with Claude Desktop, Cursor, Windsurf, or any MCP client.


Install via Smithery

Commune is published on Smithery. One-line install for any supported client:

# Install Smithery CLI (once)
npm install -g @smithery/cli@latest

# Add Commune to your client
npx @smithery/cli install commune-dev/commune --client claude      # Claude Desktop
npx @smithery/cli install commune-dev/commune --client cursor      # Cursor
npx @smithery/cli install commune-dev/commune --client windsurf    # Windsurf
npx @smithery/cli install commune-dev/commune --client vscode      # VS Code
npx @smithery/cli install commune-dev/commune --client claude-code # Claude Code
npx @smithery/cli install commune-dev/commune --client cline       # Cline
npx @smithery/cli install commune-dev/commune --client roo-cline   # Roo Code
npx @smithery/cli install commune-dev/commune --client goose       # Goose

Or connect via the Smithery API for agent-to-agent use:

https://commune--commune-dev.run.tools

Related MCP server: Envoi MCP

Example prompts

Once configured, you can give your AI assistant natural language instructions for email and SMS:

Reading email:

  • "Check my support inbox for new emails"

  • "Show me all unread threads in the billing inbox"

  • "Find emails from customers asking about refunds this week"

  • "Search for all threads about the payment issue from last month"

  • "What's the full conversation history for thread conv_abc123?"

  • "Show me all threads that haven't been replied to"

Sending email:

  • "Reply to John's email saying we'll process his refund within 48 hours"

  • "Send an email to alice@example.com with subject 'Meeting tomorrow' and tell her the meeting is moved to 3pm"

  • "Reply to the last message in the support thread about the broken login, staying in thread"

  • "Send a follow-up to all leads from last week who didn't respond"

Organizing and triaging:

  • "Tag this thread as urgent and assign it to the billing team"

  • "Mark all threads older than 30 days with no reply as closed"

  • "Show me the deliverability stats for the past 7 days"

  • "List all suppressed email addresses in the support inbox"

SMS:

  • "Provision a phone number for my agent"

  • "Send an SMS to +14155551234 saying 'Your order has shipped'"

  • "Show me all my SMS conversations"

  • "Search my SMS messages for anything about delivery issues"

Domain and inbox management:

  • "Create a new inbox called 'billing' under example.com"

  • "What DNS records do I need to add to verify example.com?"

  • "Show me all my verified domains"


Setup

1. Get your API key

Create an API key from your Commune dashboard. It starts with comm_.

2. Add to your MCP client

Pick your client and add the Commune server. No local files needed — uvx fetches the package automatically.

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "commune": {
      "command": "uvx",
      "args": ["commune-mcp"],
      "env": {
        "COMMUNE_API_KEY": "comm_your_key_here"
      }
    }
  }
}

Cursor

Open Settings → MCP → Add Server:

{
  "commune": {
    "command": "uvx",
    "args": ["commune-mcp"],
    "env": {
      "COMMUNE_API_KEY": "comm_your_key_here"
    }
  }
}

Windsurf

Open Settings → MCP, same format as Cursor.

Alternative: pip install

If you prefer pip over uvx:

pip install commune-mcp

Then use commune-mcp as the command:

{
  "commune": {
    "command": "commune-mcp",
    "env": {
      "COMMUNE_API_KEY": "comm_your_key_here"
    }
  }
}

How It Works

Once configured, your AI agent can use Commune tools in natural conversation:

You: Check my support inbox for new emails

Agent: (calls list_domainslist_inboxeslist_threads) You have 3 new threads in support@example.com:

  1. "Order not received" — 4 messages, last activity 2h ago

  2. "Billing question" — 1 message, received today

  3. "Feature request" — 2 messages, last activity yesterday

You: What's the order issue about?

Agent: (calls get_thread_messages) Customer john@gmail.com says their order #4521 shipped 5 days ago but hasn't arrived. They've followed up twice asking for tracking info.

You: Reply that we're checking with shipping and will update within 24h

Agent: (calls send_email with thread_id) Done — reply sent to john@gmail.com in the existing thread.

The agent decides which tools to call based on your request. You don't need to specify tool names.


How email flows through Commune MCP

Inbound (you receive email):

  User sends email
       |
       v
  Commune receives at your inbox (support@yourdomain.com)
       |
       v
  Commune fires webhook to your app (8 retries, HMAC signed)
       |
       v
  Your MCP client reads thread via list_threads / get_thread_messages
       |
       v
  You ask Claude: "Reply to John saying we're on it"
       |
       v
  Claude calls send_email with thread_id --> reply appears in John's email thread

Outbound (you send email):

  You: "Send an update email to all VIP customers"
       |
       v
  Claude calls list_threads --> get_thread_messages --> send_email (per thread)
       |
       v
  Commune delivers via DKIM-signed SMTP
       |
       v
  Delivery events tracked: sent --> delivered / bounced / complained

Tools Reference

Domain Tools

These manage your email domains. Domains must be verified via DNS before you can send/receive.

list_domains

List all email domains in your account.

Parameters: None

Output:

[
  {
    "id": "d_abc123",
    "name": "example.com",
    "status": "verified",
    "region": "us-east-1"
  }
]

create_domain

Create a new custom domain. After creating, use get_domain_records to see required DNS entries, then verify_domain to check.

Parameter

Type

Required

Description

name

str

Yes

Domain name (e.g. "example.com")

region

str

No

AWS region (e.g. "us-east-1")

Output: The created domain object with its ID and status.


get_domain_records

Get DNS records you need to add at your registrar before verification passes.

Parameter

Type

Required

Description

domain_id

str

Yes

Domain ID from list_domains

Output:

[
  { "type": "MX", "name": "example.com", "value": "inbound-smtp.us-east-1.amazonaws.com", "status": "pending" },
  { "type": "TXT", "name": "example.com", "value": "v=spf1 include:amazonses.com ~all", "status": "pending" }
]

verify_domain

Trigger DNS verification. Call after adding records at your registrar.

Parameter

Type

Required

Description

domain_id

str

Yes

Domain ID


Inbox Tools

Inboxes are mailboxes under a domain. support under example.comsupport@example.com.

list_inboxes

List inboxes. Without domain_id, lists all inboxes across all domains.

Parameter

Type

Required

Description

domain_id

str

No

Filter by domain (lists all if omitted)

Output:

[
  {
    "id": "i_xyz789",
    "localPart": "support",
    "address": "support@example.com",
    "webhook": { "endpoint": "https://..." }
  }
]

create_inbox

Create a new inbox. Domain is auto-resolved if not provided — no DNS setup needed.

Parameter

Type

Required

Description

local_part

str

Yes

Part before @ (e.g. "support", "billing")

domain_id

str

No

Domain to create under. Auto-resolved if omitted.

name

str

No

Agent name for the inbox

display_name

str

No

Sender display name shown in email clients

webhook_endpoint

str

No

URL for email notifications


delete_inbox

Delete an inbox permanently.

Parameter

Type

Required

Description

domain_id

str

Yes

Domain ID

inbox_id

str

Yes

Inbox ID


set_extraction_schema

Configure structured extraction for an inbox using a JSON Schema.

Parameter

Type

Required

Description

domain_id

str

Yes

Domain ID

inbox_id

str

Yes

Inbox ID

name

str

Yes

Schema name

schema

str

Yes

JSON string of schema object

description

str

No

Human-readable description

enabled

bool

No

Enable extraction (default true)


remove_extraction_schema

Remove structured extraction from an inbox.

Parameter

Type

Required

Description

domain_id

str

Yes

Domain ID

inbox_id

str

Yes

Inbox ID


Thread Tools

Threads are email conversations — groups of related messages. These are the most commonly used tools.

list_threads

List threads for an inbox with cursor-based pagination. Returns newest first by default.

Parameter

Type

Required

Description

inbox_id

str

One of these

Filter by inbox

domain_id

str

required

Filter by domain

limit

int

No

1–100, default 20

cursor

str

No

Pagination cursor from previous response

order

str

No

"desc" (newest first) or "asc"

Output:

{
  "data": [
    {
      "thread_id": "conv_abc123",
      "subject": "Order not received",
      "message_count": 4,
      "last_message_at": "2025-03-15T14:30:00Z",
      "snippet": "Hi, I ordered 5 days ago and still haven't...",
      "last_direction": "inbound",
      "has_attachments": false
    }
  ],
  "next_cursor": "eyJsYXN0...",
  "has_more": true
}

To get the next page, pass next_cursor as the cursor parameter.


get_thread_messages

Get all messages in a thread. Returns oldest first (chronological).

Parameter

Type

Required

Description

thread_id

str

Yes

Thread ID from list_threads

limit

int

No

1–1000, default 50

order

str

No

"asc" (chronological) or "desc"

Output:

[
  {
    "message_id": "msg_001",
    "direction": "inbound",
    "participants": [
      { "role": "sender", "identity": "john@gmail.com" },
      { "role": "to", "identity": "support@example.com" }
    ],
    "content": "Hi, I placed order #4521 five days ago...",
    "metadata": {
      "subject": "Order not received",
      "created_at": "2025-03-10T09:15:00Z"
    }
  },
  {
    "message_id": "msg_002",
    "direction": "outbound",
    "content": "We're looking into this for you...",
    "metadata": {
      "subject": "Re: Order not received",
      "created_at": "2025-03-10T10:30:00Z"
    }
  }
]

Search Tools

search_threads

Search across email threads by subject or content. Uses vector search (semantic) when available, falls back to text matching.

Parameter

Type

Required

Description

query

str

Yes

Search query (natural language)

inbox_id

str

One of these

Filter by inbox

domain_id

str

required

Filter by domain

limit

int

No

1–100, default 20


Triage Tools

Manage thread status, tags, and assignment — agent-native workflow primitives.

get_thread_metadata

Get triage metadata for a thread: tags, status, and assignment.

Parameter

Type

Required

Description

thread_id

str

Yes

Thread ID


set_thread_status

Set the triage status of a thread.

Parameter

Type

Required

Description

thread_id

str

Yes

Thread ID

status

str

Yes

"open", "needs_reply", "waiting", or "closed"


tag_thread

Add tags/labels to a thread. Tags are additive — existing tags are preserved.

Parameter

Type

Required

Description

thread_id

str

Yes

Thread ID

tags

str

Yes

Comma-separated tags (e.g. "urgent,vip,sales-lead")


untag_thread

Remove tags from a thread.

Parameter

Type

Required

Description

thread_id

str

Yes

Thread ID

tags

str

Yes

Comma-separated tags to remove


assign_thread

Assign a thread to an agent or user. Pass empty to unassign.

Parameter

Type

Required

Description

thread_id

str

Yes

Thread ID

assigned_to

str

No

Agent/user identifier (empty to unassign)


Deliverability Tools

get_deliverability_stats

Get delivery metrics: sent, delivered, bounced, complained, failed counts and rates.

Parameter

Type

Required

Description

inbox_id

str

One of these

Filter by inbox

domain_id

str

required

Filter by domain

period

str

No

"24h", "7d", "30d" (default: "7d")


get_suppressions

List suppressed email addresses (bounces, complaints, unsubscribes).

Parameter

Type

Required

Description

inbox_id

str

No

Filter by inbox

domain_id

str

No

Filter by domain

limit

int

No

Max results (default: 50)


get_delivery_events

Get delivery event log for tracking individual emails.

Parameter

Type

Required

Description

message_id

str

No

Filter for a specific message

inbox_id

str

No

Filter by inbox

domain_id

str

No

Filter by domain

event_type

str

No

"sent", "delivered", "bounced", "complained", "failed"

limit

int

No

Max results (default: 50)


Message Tools

send_email

Send an email. Can send fresh emails or reply within an existing thread.

Parameter

Type

Required

Description

to

str

Yes

Recipient(s), comma-separated for multiple

subject

str

Yes

Subject line

html

str

No*

HTML body

text

str

No*

Plain text body

from_address

str

No

Sender address

reply_to

str

No

Reply-to address

thread_id

str

No

Reply in existing thread

inbox_id

str

No

Send from specific inbox

domain_id

str

No

Send from specific domain

attachments

str

No

Comma-separated attachment IDs

*Provide at least html or text.

To reply in a thread, pass the thread_id from list_threads or get_thread_messages. The email will be threaded in the recipient's mailbox.


Attachment Tools

upload_attachment

Upload a file. Returns an attachment_id to use with send_email.

Parameter

Type

Required

Description

content

str

Yes

Base64-encoded file content

filename

str

Yes

Filename (e.g. "report.pdf")

mime_type

str

Yes

MIME type (e.g. "application/pdf")

Output:

{
  "attachment_id": "att_abc123",
  "filename": "report.pdf",
  "mime_type": "application/pdf",
  "size": 45230
}

get_attachment_url

Get a temporary download URL for an attachment.

Parameter

Type

Required

Description

attachment_id

str

Yes

Attachment ID

expires_in

int

No

Seconds until URL expires (default: 3600)

Output:

{
  "url": "https://res.cloudinary.com/...",
  "expires_in": 3600,
  "filename": "report.pdf",
  "mime_type": "application/pdf",
  "size": 45230
}

Phone Number Tools

Manage provisioned phone numbers for SMS.

list_phone_numbers

List all provisioned phone numbers in your account.

Parameters: None


get_phone_number

Get details for a single provisioned phone number.

Parameter

Type

Required

Description

phone_number_id

str

Yes

Phone number ID from list_phone_numbers


list_available_phone_numbers

Browse available phone numbers before purchasing.

Parameter

Type

Required

Description

type

str

No

"TollFree" (default) or "Local"

country

str

No

Two-letter country code (default: "US")

limit

int

No

Max results (default: 10)


provision_phone_number

Purchase a phone number for SMS. Deducts credits from your balance.

Parameter

Type

Required

Description

phone_number

str

No

Specific E.164 number to buy (auto-selected if omitted)

type

str

No

"tollfree" (default) or "local"

friendly_name

str

No

Human-readable label


update_phone_number

Update a phone number's friendly name or auto-reply message.

Parameter

Type

Required

Description

phone_number_id

str

Yes

Phone number ID

friendly_name

str

No

Human-readable label

auto_reply

str

No

Auto-reply text for all inbound SMS (empty string to disable)


release_phone_number

Release a provisioned phone number back to the pool. No credit refund. Message history is retained.

Parameter

Type

Required

Description

phone_number_id

str

Yes

Phone number ID to release


set_phone_number_webhook

Configure a webhook for a phone number to receive SMS event notifications.

Parameter

Type

Required

Description

phone_number_id

str

Yes

Phone number ID

endpoint

str

Yes

HTTPS URL to receive webhook payloads

secret

str

No

Webhook signing secret for payload verification

events

list

No

Event types (default: ["sms.received", "sms.sent"])


set_phone_number_allow_list

Set the allow list for a phone number — only these numbers can send SMS to it. Replaces existing list.

Parameter

Type

Required

Description

phone_number_id

str

Yes

Phone number ID

numbers

list

Yes

E.164 phone numbers to allow (empty list to clear)


set_phone_number_block_list

Set the block list for a phone number — these numbers are rejected. Replaces existing list.

Parameter

Type

Required

Description

phone_number_id

str

Yes

Phone number ID

numbers

list

Yes

E.164 phone numbers to block (empty list to clear)


SMS Tools

send_sms

Send an SMS message.

Parameter

Type

Required

Description

to

str

Yes

Recipient in E.164 format (e.g. "+15551234567")

body

str

Yes

SMS message text

phone_number_id

str

No

Send from a specific phone number (auto-assigned if omitted)


list_sms_conversations

List SMS conversation threads.

Parameter

Type

Required

Description

phone_number_id

str

No

Filter by phone number (lists all if omitted)

limit

int

No

1–100, default 20


get_sms_thread

Get all messages in an SMS thread with a specific number.

Parameter

Type

Required

Description

remote_number

str

Yes

External phone number in E.164 format

phone_number_id

str

Yes

Your Commune phone number ID


search_sms

Semantic search across SMS messages.

Parameter

Type

Required

Description

query

str

Yes

Search query

phone_number_id

str

No

Scope to a specific phone number

limit

int

No

1–100, default 20


list_sms_suppressions

List phone numbers suppressed from receiving SMS (opted out via STOP keyword).

Parameter

Type

Required

Description

phone_number_id

str

No

Filter by phone number (lists all if omitted)


remove_sms_suppression

Remove a phone number from the SMS suppression list (re-enable SMS delivery).

Parameter

Type

Required

Description

phone_number

str

Yes

E.164 phone number to remove from suppressions


Credits Tools

get_credit_balance

Get current credit balance for your Commune account.

Parameters: None


list_credit_bundles

List available credit bundles that can be purchased.

Parameters: None


credits_checkout

Create a Stripe checkout session to purchase a credit bundle.

Parameter

Type

Required

Description

bundle

str

Yes

Bundle ID: "starter", "growth", or "scale"

return_url

str

No

URL to redirect to after payment


FAQ

How do I add Commune to Claude Desktop? Edit ~/Library/Application Support/Claude/claude_desktop_config.json and add the commune MCP server block (see Setup above). Restart Claude Desktop. The Commune tools will appear in Claude's tool list automatically.

What's the difference between commune-mcp and the Python/TypeScript SDKs? commune-mcp is for interactive use in MCP clients like Claude Desktop or Cursor — you give natural language instructions and the AI calls the tools. The Python/TypeScript SDKs are for building autonomous agents programmatically in code. Both connect to the same Commune backend.

Does it work with Cursor's agent mode? Yes. Add commune-mcp to Cursor via Settings → MCP → Add Server using the JSON block shown in the Setup section. Once configured, Cursor's agent mode can use all Commune tools — reading threads, sending email, and managing inboxes — during any chat or Composer session.

How do I create a new inbox through the MCP server? Just ask: "Create a new inbox called support under example.com." The agent will call create_inbox with local_part: "support" and your domain ID. If you don't specify a domain, Commune auto-assigns one — so you can create an inbox with just a local part and no DNS configuration.

Can Claude actually send real emails through this? Yes. When the agent calls send_email, Commune delivers a real email via DKIM-signed SMTP to the recipient's inbox. The email appears exactly like a normal email — it threads correctly in Gmail and Outlook, supports HTML and attachments, and generates delivery events you can track.

What happens to emails that arrive while I'm not in a chat session? Commune stores all inbound emails and threads persistently. When you open a new chat and ask to check your inbox, the agent calls list_threads and retrieves everything that arrived since your last session. Optionally, you can configure a webhook on each inbox so your app gets notified in real-time (8 retries, HMAC-signed).

How do I reply in a thread instead of starting a new email? Pass the thread_id to send_email. The easiest way is to say "Reply to this thread saying..." after asking the agent to show you a thread — it will keep the thread_id in context and pass it automatically. The reply appears threaded in the recipient's email client.

Is my email content private? Your email content is transmitted over TLS and stored encrypted at rest on Commune's infrastructure. API keys authenticate every request, and webhooks are HMAC-signed so your app can verify the payload hasn't been tampered with. Your content is never used for training AI models.

Can I use this with my own email domain? Yes. Use create_domain to register your domain, then get_domain_records to see the required MX, TXT, and CNAME records, add them at your registrar, and call verify_domain. Once verified, all inboxes under that domain use your domain as the sender address (e.g. support@yourdomain.com).

What does the API key look like? Commune API keys start with the prefix comm_ followed by a random string — for example, comm_sk_live_abc123xyz. Create one from your Commune dashboard. Keep it secret: treat it like a password and never commit it to source control.

How do I search my inbox for a specific topic? Use the search_threads tool by asking naturally: "Search my support inbox for emails about refunds." The agent calls search_threads with your query. Commune uses semantic search, so it finds relevant threads even if the exact words don't match — for example, "money back" will surface threads about refunds.

Can multiple people use the same Commune MCP server? Yes. Commune uses organizations — multiple team members can share the same account and API key, or each member can have their own API key scoped to the same organization. All keys access the same domains and inboxes. For isolation between projects, create separate inboxes (e.g. billing@, support@) and filter by inbox_id in tool calls.


Environment Variables

Variable

Required

Description

COMMUNE_API_KEY

Yes

Your API key (starts with comm_)

COMMUNE_BASE_URL

No

Override API URL (default: Commune cloud)


Ecosystem

Package

Description

commune

Email & SMS infrastructure — self-hostable backend

commune-ai

TypeScript/Node.js SDK

commune-python

Python SDK

commune-mcp

MCP server for Claude Desktop, Cursor, Windsurf

commune-cli

Command-line interface

License

Apache-2.0

Available Tools

27 tools
assign_threadA

Assign a thread to an agent or user. Pass null/empty to unassign.

Args: thread_id: The thread ID assigned_to: Agent/user identifier to assign to (empty or omit to unassign)

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idYes
assigned_toNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries full burden but does not disclose whether assignment overwrites existing, required permissions, side effects, or idempotency. It only states the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded, and structured into a main description and Args list. Every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists (not shown), but no annotations or deeper behavioral context, the description is adequate for a simple mutation but lacks info on success/failure or prerequisites.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description adds meaning by explaining thread_id and the null/empty behavior for assigned_to, clarifying that omission or empty unassigns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Assign a thread to an agent or user' with a specific verb and resource, and also covers unassignment. This distinguishes it from sibling tools like tag_thread or set_thread_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells how to assign and unassign (pass null/empty) but does not provide guidance on when to use this tool versus alternatives, nor any prerequisites or limitations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_domainA

Create a new custom email domain.

After creating a domain, you need to:

  1. Call get_domain_records to see the required DNS records

  2. Add those records at your domain registrar

  3. Call verify_domain to check verification status

Args: name: Domain name, e.g. "example.com" region: AWS region (optional), e.g. "us-east-1" or "eu-west-1"

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
regionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavioral traits. It only mentions creation and follow-up steps but omits details like idempotency, side effects, permissions, or what happens on duplicate names. The output schema exists but is not explained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with front-loaded purpose and no extraneous information. Every sentence serves a function, and the Args section is cleanly separated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and sibling tools cover domain management, the description provides sufficient context for creation. It could mention uniqueness constraints or error scenarios, but the follow-up steps enhance completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, but the description compensates with clear examples for both parameters ('example.com' for name, specific region values for region), clarifying optionality and format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create') and resource ('new custom email domain'), and the use case is distinct from sibling tools like get_domain_records and verify_domain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly outlines the post-creation steps (get_domain_records, add DNS, verify_domain), guiding the agent on when to use this tool and what subsequent actions are needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_inboxA

Create a new inbox for receiving emails.

The inbox email address will be {local_part}@{domain}. If no domain_id is provided, Commune auto-assigns your inbox to an available domain — no DNS setup required.

Args: local_part: Part before @ (e.g. "support", "billing", "hello") domain_id: Domain to create under (optional, auto-resolved if omitted) name: Agent name for the inbox (optional, also used as display_name fallback) display_name: Sender display name shown in email clients (e.g. "Support Agent", "Acme Sales"). If set, outbound emails show as '"Display Name" ' in Gmail/Outlook. webhook_endpoint: URL to receive notifications on new emails (optional)

ParametersJSON Schema
NameRequiredDescriptionDefault
local_partYes
domain_idNo
nameNo
display_nameNo
webhook_endpointNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It explains the auto-assignment of domain if domain_id omitted, optional parameters, and webhook endpoint behavior. It does not disclose rate limits or auth needs, but the creation behavior is well described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a summary paragraph and Args list. It is clear and informative, though slightly verbose for the display_name explanation; still efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters (1 required) and an output schema (not shown), the description covers all parameters and provides context. It does not describe return values, but output schema likely handles that. Minor gap: no mention of default values beyond domain auto-assignment.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, but the description thoroughly explains each parameter: local_part (part before @), domain_id (optional, auto-resolved), name (agent name, display_name fallback), display_name (with example), and webhook_endpoint (notification URL). This fully compensates for missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a new inbox for receiving emails' and explains the email address format. It distinguishes from sibling tools like delete_inbox, list_inboxes, etc., by focusing on creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when an inbox needs to be created for email receiving, but does not explicitly state when not to use or mention alternatives among siblings (e.g., send_email for sending, not receiving).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

credits_checkoutA

Create a Stripe checkout session to purchase a credit bundle.

Returns a checkout_url to open in the browser to complete payment. Valid bundles: "starter", "growth", "scale".

Args: bundle: The bundle ID to purchase — "starter", "growth", or "scale" return_url: URL to redirect to after payment (optional)

ParametersJSON Schema
NameRequiredDescriptionDefault
bundleYes
return_urlNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses the process: creates a session, returns a checkout URL, and that payment is completed in the browser. It lists valid bundles. It does not mention idempotency or error cases, but the core behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences for the main purpose and return value, then a clear argument list. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description adequately covers the return value (checkout_url) and parameters. It is complete for the tool's purpose, though additional details on error handling could be included.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It explains bundle with valid values and return_url as optional. This adds essential meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a Stripe checkout session to purchase a credit bundle, specifying valid bundles and the return value. It distinguishes from sibling tools like list_credit_bundles and get_credit_balance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly indicates when to use (to purchase credits) but does not explicitly state when not to use or provide alternatives. However, the context of sibling tools and the clear action verb provide sufficient guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_inboxC

Delete an inbox.

Args: domain_id: The domain ID inbox_id: The inbox ID to delete

ParametersJSON Schema
NameRequiredDescriptionDefault
domain_idYes
inbox_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It does not disclose that deletion is irreversible, potential side effects (e.g., cascade delete), or required permissions. This is a significant gap for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with no unnecessary words. It follows a docstring format. However, it is under-specified, which slightly reduces efficiency as the agent must infer missing details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema (which exempts return value explanation), the description lacks behavioral context such as irreversibility, required permissions, or error conditions. For a delete operation, this is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%. The description restates parameter names without adding meaning beyond the schema field names (e.g., 'domain_id: The domain ID'). No additional semantics like format, constraints, or examples are provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Delete an inbox' clearly states the verb and resource, matching the tool name. However, it does not add any distinguishing scope or nuance from sibling tools, but its purpose is immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., when to delete vs. set_thread_status). No context 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.

get_attachment_urlA

Get a temporary download URL for an attachment.

Args: attachment_id: The attachment ID expires_in: URL lifetime in seconds (default: 3600 = 1 hour)

ParametersJSON Schema
NameRequiredDescriptionDefault
attachment_idYes
expires_inNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility. It discloses that the tool returns a temporary download URL with a configurable lifetime, but does not elaborate on error handling, side effects, or authentication requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise with no wasted words. The purpose is stated first, followed clear parameter explanations. Every sentence serves a purpose without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the existence of an output schema, the description covers the essential aspects. However, it could mention potential error conditions or clarify the nature of the URL (e.g., direct download vs. streaming).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It describes attachment_id as 'The attachment ID' and expires_in with a clear explanation of its unit and default. This adds meaningful value beyond the schema's technical types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get a temporary download URL for an attachment,' using a specific verb and resource. It distinguishes itself from sibling tools like upload_attachment or send_email, which deal with different actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives, nor does it mention when not to use it. Usage is implied by the tool's purpose, but explicit guidance is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_credit_balanceA

Get current credit balance for your Commune account.

Returns included credits, purchased credits, total available, and credits used this billing cycle.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description bears full burden. It correctly states that the tool returns specific credit information (included credits, purchased credits, total available, credits used). It does not explicitly mark it as read-only or mention auth/rate limits, but for a simple retrieval tool, the described behavior is sufficient and non-misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences. The first sentence delivers the core purpose immediately. The second sentence provides added detail on the return values. There is no wasted text; every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, an output schema exists, and it is a simple read operation, the description is complete. It covers what the tool does and what it returns, providing sufficient context for an AI agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so baseline is 4. The description does not need to add parameter information. Schema coverage is 100% because no parameters exist. The description appropriately omits parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and resource 'credit balance for your Commune account'. It distinguishes from sibling tools like 'credits_checkout' and 'list_credit_bundles' by focusing on balance retrieval. The second sentence lists the specific returned fields, leaving no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when needing credit balance information, but it does not explicitly state when to use this tool versus alternatives, nor does it provide any exclusions or prerequisites. Given the clear separation of concerns among siblings, the implied guidance is adequate but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_deliverability_statsA

Get email deliverability metrics: sent, delivered, bounced, complained, failed.

Provides bounce rate, complaint rate, and delivery rate percentages. Use this to monitor sender reputation and identify deliverability issues.

Args: inbox_id: Filter metrics by inbox (recommended) domain_id: Filter metrics by domain period: Time period — "24h", "7d", "30d" (default: "7d")

ParametersJSON Schema
NameRequiredDescriptionDefault
inbox_idNo
domain_idNo
periodNo7d

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It implies a read operation and discloses the metrics returned but does not mention idempotency, caching, or any potential side effects. It is adequate but not detailed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with no wasted words, front-loaded with the metrics list, followed by a clear args section. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values are covered. The description provides sufficient context for filtering and usage. Could mention if it aggregates across all inboxes or requires authentication, but it's essentially complete for its purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description includes an explicit Args section explaining inbox_id, domain_id, and period with defaults and meaning, fully compensating for the missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get email deliverability metrics: sent, delivered, bounced, complained, failed.' and includes percentage rates, explicitly differentiating it from sibling tools like get_delivery_events.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says 'Use this to monitor sender reputation and identify deliverability issues,' providing a clear use case but does not explicitly list when not to use or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_delivery_eventsA

Get delivery event log: sent, delivered, bounced, complained, failed.

Track the lifecycle of individual emails or audit delivery across an inbox.

Args: message_id: Filter events for a specific message inbox_id: Filter events by inbox domain_id: Filter events by domain event_type: Filter by type: "sent", "delivered", "bounced", "complained", "failed" limit: Max results (default: 50)

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idNo
inbox_idNo
domain_idNo
event_typeNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It fails to mention pagination, rate limits, authentication requirements, or whether it returns all events or only filtered ones. The description only lists filter parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a brief headline, a contextual sentence, and a bulleted parameter list. It is well-structured and front-loaded, though the parameter section could be slightly more compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description adequately covers the tool's purpose and filter capabilities. However, it omits details like result ordering, pagination behavior (beyond limit), and event type format. Still, it is mostly complete for a straightforward get-operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description adds meaningful explanations for all 5 parameters (e.g., 'message_id: Filter events for a specific message'). This compensates for the blank schema and helps the agent understand each parameter's purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves delivery event logs (sent, delivered, bounced, complained, failed) and tracks email lifecycle or audits delivery. This distinguishes it from siblings like get_deliverability_stats (broader stats) and thread-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for tracking email lifecycle and auditing, but lacks explicit guidance on when to use this tool vs. siblings (e.g., get_deliverability_stats for aggregated stats). No 'when not to use' or alternative suggestions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_domain_recordsA

Get the DNS records required to verify a domain.

Returns MX, TXT, and CNAME records that must be added at your domain registrar before calling verify_domain.

Args: domain_id: The domain ID (from list_domains)

ParametersJSON Schema
NameRequiredDescriptionDefault
domain_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must cover behavior. It explains the tool returns records and is a read-only fetch. However, it does not discuss potential errors or rate limits. Adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise with a clear first sentence and structured Args section. Could be slightly more streamlined, but effectively communicates purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, the description appropriately focuses on input and purpose. Mentions record types (MX, TXT, CNAME) but lacks error handling details. Fairly complete for a simple get tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for the single parameter. The description adds meaning by stating domain_id is from list_domains, helping the agent source the value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets DNS records required for domain verification, specifying MX, TXT, and CNAME records. It distinguishes from siblings like verify_domain and list_domains.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Describes that it must be used before calling verify_domain, providing clear context. Does not explicitly state when not to use it, but the prerequisite is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_suppressionsA

List suppressed email addresses (bounces, complaints, unsubscribes).

Suppressed addresses are automatically skipped when sending. Use this to audit why certain recipients aren't receiving emails.

Args: inbox_id: Filter by inbox (optional) domain_id: Filter by domain (optional) limit: Max results (default: 50)

ParametersJSON Schema
NameRequiredDescriptionDefault
inbox_idNo
domain_idNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the disclosure burden. It explains that 'Suppressed addresses are automatically skipped when sending', which is a useful behavioral trait. However, it does not mention any rate limits, authentication needs, or whether the operation is read-only, which is implied but not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with only three sentences and an Args section. It front-loads the main purpose and provides parameter details in a structured format without unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, return values need not be explained. The description covers the tool's purpose, the effect of suppressions, and parameter usage. It is sufficiently complete for an agent to invoke correctly, though it lacks mention of pagination or sort order, which are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description adds meaningful explanations for all three parameters: 'Filter by inbox (optional)', 'Filter by domain (optional)', and 'Max results (default: 50)'. This significantly compensates for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List suppressed email addresses (bounces, complaints, unsubscribes)', specifying the verb 'list' and the resource 'suppressed email addresses'. It effectively distinguishes from sibling tools by focusing on suppression data, which no other sibling tool addresses.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides usage context with 'Use this to audit why certain recipients aren't receiving emails', giving a clear reason to use the tool. While it does not explicitly mention when not to use it or alternatives, the sibling list shows no direct competitor, so this guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_thread_messagesA

Get all messages in an email thread.

Returns the full conversation with sender, content, timestamps.

Args: thread_id: The thread ID (from list_threads) limit: Max messages, 1-1000 (default: 50) order: "asc" for chronological (default), "desc" for newest first

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idYes
limitNo
orderNoasc

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must cover behavioral traits. It mentions limit range and order options but does not disclose whether it's read-only, auth requirements, or pagination behavior. However, the defaults and range information provide some transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively concise with a clear purpose statement followed by parameter details. It could be slightly tighter (e.g., 'Get all messages' vs 'Get messages' with limit explained) but overall well-structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists (not shown), return values are covered. However, the phrase 'Get all messages' conflicts with the limit parameter suggesting partial retrieval. No comparison to sibling tools or error scenarios mentioned, leaving some context gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, but the description fully explains each parameter: thread_id (source), limit (range 1-1000, default 50), order (asc/desc, default asc). This adds significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool retrieves all messages in an email thread and specifies the returned data (sender, content, timestamps). This is specific and distinguishable from siblings like get_thread_metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates where to get the thread_id (from list_threads) but does not explicitly clarify when to use this tool versus alternatives like search_threads or get_thread_metadata. It lacks when-not or exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_thread_metadataB

Get triage metadata for a thread: tags, status, and assignment.

Args: thread_id: The thread ID

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. The verb 'Get' implies read-only, but the description does not explicitly state that the operation is safe, idempotent, or requires any specific permissions. It lacks details on what happens if the thread_id is invalid or if the user lacks access.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the core purpose. The Args section is slightly redundant but not overly verbose. Every sentence is brief, though the Args block could be omitted since the schema already defines the parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple getter with one parameter and an output schema, the description covers the basic purpose and parameter. It does not mention error handling or edge cases, but given the tool's simplicity and the presence of an output schema, it is reasonably complete. Slightly more context (e.g., 'Returns metadata for an existing thread') would improve clarity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description's 'Args' section restates the parameter name and a generic description ('The thread ID') which adds no value beyond the input schema. With schema description coverage at 0%, the description fails to provide any additional semantic or format constraints (e.g., expected format, length, or example values).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and the resource ('triage metadata for a thread') and specifies the components: tags, status, and assignment. It effectively distinguishes from sibling tools like get_thread_messages (which retrieves messages) or tag_thread (which modifies tags).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus alternatives like assign_thread or set_thread_status. The name implies a read operation, but no usage context or exclusions are mentioned, leaving the agent to infer from sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_credit_bundlesA

List available credit bundles that can be purchased.

Returns each bundle's ID, credit amount, price, and description.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description honestly states the tool lists bundles and returns specific fields. No annotations were provided, so the description carries the full burden. It is truthful about being read-only but lacks extra context like authentication or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: first states purpose, second describes return values. It is concise, front-loaded, and contains no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and an implied output schema, the description covers the essentials. It mentions the return fields (ID, credit amount, price, description). Could be improved by noting ordering or pagination, but fine for a simple list-all tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so schema coverage is 100% trivially. Baseline 4 is appropriate as the description adds no parameter semantics, which is acceptable for a parameter-less tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists available credit bundles for purchase, specifying the verb 'List' and the resource 'credit bundles'. It distinguishes itself from siblings like 'credits_checkout' (purchase) and 'get_credit_balance' (check balance).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus alternatives. While the purpose is clear, there is no mention of when-not-to-use or comparison with other credit-related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_domainsA

List all email domains in your Commune account.

Returns each domain's ID, name, and verification status. Use the domain ID with other tools like list_inboxes or create_inbox.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It correctly indicates a read-only list operation with no side effects. For a simple list tool, this is sufficient; additional details about rate limits or permissions are not critical but would slightly enhance transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences, front-loading the core purpose. Every sentence adds value, and there is no redundant or extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the tool has zero parameters and an output schema exists, the description fully covers the necessary context: what the tool does, what it returns, and how the output can be used with other tools. No gaps are apparent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the baseline score is 4. The description adds no parameter-specific meaning beyond what the schema already indicates (an empty object), which is acceptable for a zero-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all email domains in the account and specifies the returned fields (ID, name, verification status). It distinguishes itself from sibling tools like create_domain and verify_domain by being a read-only list operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises using the domain ID with other tools like list_inboxes or create_inbox, providing context for subsequent actions. However, it does not explicitly state when to choose this tool over siblings or when not to use it, leaving some guidance implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_inboxesA

List inboxes.

Without domain_id, lists all inboxes across all domains. With domain_id, lists inboxes for that specific domain.

Each inbox has a local_part (the part before @) that forms the email address: {local_part}@{domain_name}

Args: domain_id: Filter by domain (optional, lists all if omitted)

ParametersJSON Schema
NameRequiredDescriptionDefault
domain_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the filtering behavior and email address format. However, it does not mention potential traits like pagination, ordering, or limits, which could be relevant for an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, starting with the main purpose, then detailing behavior variations, and finishing with parameter explanation. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core functionality and parameter usage. Given that an output schema exists, it does not need to explain return values. Missing details like pagination or result limits are minor gaps for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds meaning by explaining the domain_id parameter's effect (filter vs. list all) and the email address structure derived from local_part and domain. This compensates well for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List inboxes' as a specific verb and resource, and differentiates from sibling tools like create_inbox, delete_inbox, list_domains, etc., which operate on different resources or actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use with or without domain_id, providing clear context for filtering. It does not explicitly state when not to use or mention alternatives, but for a simple list operation, this is adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_threadsA

List email threads (conversations) with pagination.

Returns thread summaries: subject, message count, last activity, snippet. Use next_cursor from the response to fetch the next page.

Provide at least one of inbox_id or domain_id.

Args: inbox_id: Filter threads by inbox (recommended) domain_id: Filter threads by domain limit: Results per page, 1-100 (default: 20) cursor: Pagination cursor from a previous response's next_cursor order: "desc" for newest first (default), "asc" for oldest first

ParametersJSON Schema
NameRequiredDescriptionDefault
inbox_idNo
domain_idNo
limitNo
cursorNo
orderNodesc

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but the description discloses return fields (subject, message count, etc.) and pagination behavior. It does not mention auth requirements or rate limits, which is acceptable for a read-only list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and returns, then usage and parameters. It is efficient but could be slightly more concise without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers pagination, filtering, and return value summary. With an output schema present, it does not need to detail return values further, but it lacks error handling or edge case notes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining each parameter (inbox_id, domain_id, limit, cursor, order) with defaults and usage context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists email threads with pagination, returns summaries, and distinguishes itself from sibling tools like search_threads by focusing on filtering by inbox or domain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a clear constraint (provide inbox_id or domain_id) and explains pagination with cursor. However, it does not explicitly contrast with alternative tools like search_threads for when to use each.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_extraction_schemaB

Remove structured extraction schema from an inbox.

ParametersJSON Schema
NameRequiredDescriptionDefault
domain_idYes
inbox_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It only states 'Remove', implying deletion, but provides no details on reversibility, impact on inbox functionality, permissions needed, or error states.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no superfluous words, front-loading the core action and target.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the presence of an output schema and clear purpose, the description lacks context about when removal is appropriate, the relationship with set_extraction_schema, and what constitutes a valid request (e.g., schema must exist).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, yet the description does not explain the role of 'domain_id' or 'inbox_id', leaving the agent to infer their meaning from names alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Remove'), the resource ('structured extraction schema'), and the target ('inbox'). It directly distinguishes from the sibling tool 'set_extraction_schema', which adds or updates a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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, such as when a schema should be removed, prerequisites like having an existing schema, or consequences of removal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_threadsA

Search across email threads by subject or content.

Returns matching thread summaries with subject, snippet, and message count. Provide at least one of inbox_id or domain_id.

Args: query: Search query (searches subject and message content) inbox_id: Filter by inbox (recommended) domain_id: Filter by domain limit: Max results, 1-100 (default: 20)

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
inbox_idNo
domain_idNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and description does not disclose behavioral traits like side effects, rate limits, or authentication needs. Only states what the tool does, without safety or performance context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with main purpose in first sentence, followed by clear argument list. No redundant words; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Describes return value (thread summaries with subject, snippet, message count). Could mention pagination or ordering, but output schema exists. Adequate for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds significant meaning beyond schema: explains query searches subject and message content, inbox_id and domain_id as filters, and limit range (1-100). Compensates for 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states verb 'Search' and resource 'email threads'. Distinguishes from sibling 'list_threads' by specifying search by subject or content, and from 'get_thread_metadata' and 'get_thread_messages' by indicating it returns summaries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: 'Provide at least one of inbox_id or domain_id' and notes inbox_id is 'recommended'. However, no explicit when-not-to-use or alternative tool guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_emailA

Send an email message.

Provide html or text (or both) for the body. To reply in an existing thread, pass thread_id. To attach files, first call upload_attachment, then pass the attachment IDs as a comma-separated string.

You only need inbox_id to send — the domain is inferred automatically.

Args: to: Recipient email address (for multiple, comma-separate) subject: Email subject line html: HTML body content text: Plain text body (fallback) from_address: Sender address (optional, uses inbox default) reply_to: Reply-to address (optional) thread_id: Reply within an existing thread (optional) inbox_id: Send from a specific inbox (recommended — domain is auto-resolved) domain_id: Send from a specific domain (optional, inferred from inbox_id) attachments: Comma-separated attachment IDs from upload_attachment (optional)

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes
subjectYes
htmlNo
textNo
from_addressNo
reply_toNo
thread_idNo
inbox_idNo
domain_idNo
attachmentsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully convey behavioral traits. It mentions that domain is inferred automatically from inbox_id and that both html and text can be supplied. However, it does not disclose potential rate limits, authentication prerequisites, or what happens on failure. Given the output schema exists, the description adequately covers basic behavior but lacks deeper insights.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by brief usage notes, then an Args list. It is concise and structured, with each sentence serving a purpose. The Args list could be more compressed, but it is well-organized. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 10 parameters and an output schema, the description covers key workflows: basic send, reply to thread, and attachments. It explains domain inference. It does not cover error handling or prerequisites like domain verification, but the output schema likely provides return structure. Overall, it is sufficiently complete for typical use cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description must compensate. The description includes an Args list that explains each parameter's role, e.g., 'to: Recipient email address (for multiple, comma-separate)', 'attachments: Comma-separated attachment IDs from upload_attachment'. This adds significant meaning beyond the raw schema. Some param details (e.g., format of thread_id) are not specified, but overall it is helpful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Send an email message.' as the primary action, which is a specific verb plus resource. It distinguishes itself from sibling tools (e.g., create_inbox, assign_thread) by focusing on sending email. The tool's unique function is immediately obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides practical guidance on how to use the tool: it explains how to reply in a thread (pass thread_id), how to attach files (call upload_attachment first, then pass IDs), and that inbox_id is sufficient for domain inference. It does not explicitly state when not to use this tool, but given no sibling sends email, this is acceptable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_extraction_schemaB

Set structured extraction schema for an inbox.

Args: domain_id: Domain ID for the inbox. inbox_id: Inbox ID. name: Schema name. schema: JSON string of a valid JSON Schema object. description: Optional schema description. enabled: Enable extraction immediately (default: true).

ParametersJSON Schema
NameRequiredDescriptionDefault
domain_idYes
inbox_idYes
nameYes
schemaYes
descriptionNo
enabledNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden for behavioral disclosure. It does not mention side effects such as overwriting existing schema, triggering re-extraction, or permissions required. The only behavioral hint is that 'enabled' controls immediate extraction, but overall transparency is poor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: a one-line summary followed by a list of arguments. Every sentence is essential, with no redundancy. It is front-loaded with the purpose and structured efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters and an output schema, the description is somewhat minimal. It explains parameters well but omits behavioral context (overwrite behavior, validation, error conditions) and prerequisites (domain/inbox existence). It is adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description provides all semantics for the 6 parameters. Each parameter has a brief but clear explanation, e.g., 'schema: JSON string of a valid JSON Schema object.' This adds significant value beyond the schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool sets a structured extraction schema for an inbox. The verb 'set' is specific, and the resource 'structured extraction schema' is unambiguous. It distinguishes from the sibling 'remove_extraction_schema', but does not clarify whether it creates or updates, leaving some ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like 'remove_extraction_schema' or other configuration tools. No prerequisites, context, or exclusions are mentioned. The description lacks explicit when-to-use or when-not-to-use information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_thread_statusB

Set the status of a thread for triage.

Valid statuses: "open", "needs_reply", "waiting", "closed"

Args: thread_id: The thread ID status: New status — one of: open, needs_reply, waiting, closed

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idYes
statusYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description only lists valid statuses. It does not disclose side effects, idempotency, permissions, or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the purpose. The parameter list repeats schema info but is clear. It lacks extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and low schema coverage, the description adds valid statuses but lacks broader context about effects, prerequisites, or error handling. An output schema exists but is not described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description compensates by listing both parameters and providing valid values for 'status' (open, needs_reply, waiting, closed). This is valuable beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Set' and resource 'status of a thread for triage'. It explicitly lists valid statuses, distinguishing it from siblings like assign_thread or tag_thread.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool vs alternatives such as assign_thread or tag_thread. The description does not mention context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_feedbackA

Submit feedback about Commune to the product team.

Use this tool whenever you encounter something worth reporting — an error, a missing capability, or an observation about what's working well or could be improved.

Three feedback types:

"error" — the API returned a non-2xx status, the response shape was wrong, or behavior was incorrect (not just unexpected). Include context: which tool you called, what you expected, what happened. Example: "list_threads returns 500 when the inbox has never received a message."

"feature" — you need a capability that doesn't exist yet. Be specific about the use case. Example: "Need cursor-based pagination on search_threads — current limit cap blocks processing large backlogs."

"signal" — the API succeeded but quality, latency, or behavior was unexpected. Also use for positive observations. Example: "Semantic search quality on long threads is excellent — intent matching across 40+ messages works." Example: "Thread metadata endpoint is slow (~3s) on inboxes with 1000+ threads — expected <500ms."

The optional context dict lets you attach structured metadata that makes feedback actionable. For errors, include the tool name, any IDs, and status codes. For features, include the related tool and your use case.

Args: type: Feedback type — "error", "feature", or "signal" message: Clear description of the feedback (max 4000 chars) context: Optional structured metadata, e.g. {"tool": "list_threads", "inbox_id": "inb_123", "status_code": 500}

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYes
messageYes
contextNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, but the description discloses message length limit (4000 chars) and optional context usage. It does not mention side effects or rate limits, but for a feedback tool, the behavioral information is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with purpose, but moderately long. Every sentence adds value, though it could be slightly more concise without losing substance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, usage guidelines, parameter semantics, and includes examples. It lacks explanation of the return value (output schema exists but not described), but for a feedback submission tool, the completeness is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description adds significant meaning: explains enum values ('error', 'feature', 'signal'), provides context example, and states max chars for message, adding value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Submit feedback about Commune to the product team' and elaborates on three specific feedback types, distinguishing this tool from sibling tools that focus on threads, inboxes, and domains.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this tool whenever you encounter something worth reporting' and provides detailed guidance for each feedback type (error, feature, signal) with examples, making it easy for an agent to decide when to invoke this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tag_threadA

Add tags/labels to a thread. Tags are additive — existing tags are preserved.

Use tags for categorization: "vip", "bug-report", "sales-lead", "urgent", etc.

Args: thread_id: The thread ID tags: Comma-separated tags to add (e.g. "urgent,vip,sales-lead")

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idYes
tagsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description bears full burden. It discloses that tags are additive and existing tags preserved, but omits details on authentication, rate limits, output format, or error conditions. Adequate but could be more comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise: two sentences for purpose and behavior, then a structured Args section. Every sentence adds value, no fluff. Clear and well-organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and presence of output schema (even if not shown), the description covers key aspects: purpose, additive behavior, parameter format. Missing return value description could be a minor gap, but overall sufficient for an additive tagging tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds value by explaining the 'tags' parameter as comma-separated and providing an example. The 'thread_id' explanation is minimal but sufficient. This compensates for the schema's lack of description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Add tags/labels to a thread' with a specific verb and resource. The phrase 'Tags are additive — existing tags are preserved' further clarifies behavior, distinguishing it from untag_thread.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit examples of tags to use (e.g., 'vip', 'bug-report') and mentions that tags are for categorization. While it doesn't directly say when not to use, the examples and additive nature implicitly guide usage. Sibling untag_thread suggests removal alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

untag_threadA

Remove tags/labels from a thread.

Args: thread_id: The thread ID tags: Comma-separated tags to remove (e.g. "urgent,vip")

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idYes
tagsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description only states the basic action. It does not disclose any side effects, prerequisites, or behavior beyond removal (e.g., whether the operation is idempotent, what happens if tags don't exist).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one sentence for the action and a clear parameter list. Every word is necessary and contributes to understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with 2 required parameters and an output schema, the description covers the basics. However, it lacks context about error handling, prerequisites (e.g., thread existence), and relationship to sibling tools like 'tag_thread'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds meaningful value by specifying the format of 'tags' as comma-separated and providing an example, and clarifying 'thread_id' as 'The thread ID'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Remove tags/labels') and the resource ('from a thread'), using specific verbs and nouns that distinguish it from sibling tools like 'tag_thread'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 'tag_thread'. The description only states what the tool does without providing context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_attachmentA

Upload a file for use when sending emails.

Returns an attachment_id to pass to send_email's attachments parameter.

Args: content: Base64-encoded file content filename: Original filename, e.g. "report.pdf" mime_type: MIME type, e.g. "application/pdf" or "image/png"

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
filenameYes
mime_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full responsibility. It explains the upload action and return value, but omits details like file size limits, supported MIME types beyond examples, or storage duration. Adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (6 lines), transparently structured with an Args section, and every sentence provides value. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 parameters and the presence of an output schema (as per context signals), the description covers key aspects: purpose, usage, parameter details, and return value. It could mention potential limitations like size limits, but overall it's well-rounded.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It clearly describes each parameter: content (Base64-encoded), filename (with example), and mime_type (with examples), adding essential meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Upload a file for use when sending emails' and mentions returning an attachment_id, clearly differentiating from sibling tools like send_email and get_attachment_url.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates when to use the tool (before sending emails) and how to pass the result to send_email, providing clear context. It does not explicitly mention when not to use it, but the use case is well-defined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_domainA

Trigger DNS verification for a domain.

Call this after adding the required DNS records at your registrar. Use get_domain_records first to see which records are needed.

Args: domain_id: The domain ID (from list_domains)

ParametersJSON Schema
NameRequiredDescriptionDefault
domain_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavior. It states 'Trigger DNS verification' but does not explain if it is synchronous, idempotent, or error handling for missing records. Adequate but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise, three short sentences plus parameter listing. The 'Args:' header is slightly redundant but not harmful. Effectively front-loaded with key instructions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description covers the essential usage: prerequisite steps and parameter source. It lacks details on errors or async nature, but for a simple trigger, it is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description adds meaning. It explains that 'domain_id' comes from 'list_domains', providing source context. However, it could specify format or constraints (e.g., required format).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool triggers DNS verification for a domain, using a specific verb and resource. It distinguishes itself from siblings like 'get_domain_records' and 'create_domain' by focusing on the verification step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to call after adding DNS records and to use 'get_domain_records' first for prerequisite records. This provides clear when-to-use and what-to-do-before guidance, differentiating it from other tools.

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.

  1. 27 tool updatesv0.2.0
    • First observedassign_thread
    • First observedcreate_domain
    • First observedcreate_inbox
    • First observedcredits_checkout
    • First observeddelete_inbox
    • First observedget_attachment_url
    • First observedget_credit_balance
    • First observedget_deliverability_stats
    • First observedget_delivery_events
    • First observedget_domain_records
    • First observedget_suppressions
    • First observedget_thread_messages
    • First observedget_thread_metadata
    • First observedlist_credit_bundles
    • First observedlist_domains
    • First observedlist_inboxes
    • First observedlist_threads
    • First observedremove_extraction_schema
    • First observedsearch_threads
    • First observedsend_email
    • First observedset_extraction_schema
    • First observedset_thread_status
    • First observedsubmit_feedback
    • First observedtag_thread
    • First observeduntag_thread
    • First observedupload_attachment
    • First observedverify_domain

TDQS

A3.9/5.0
Disambiguation5/5

Every tool has a clearly distinct purpose. For instance, list_domains, list_inboxes, and list_threads target different resources, and get_deliverability_stats vs get_delivery_events are clearly differentiated as aggregate vs per-event metrics. No two tools overlap in functionality.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern using snake_case (e.g., create_domain, list_inboxes, send_email, tag_thread). The only minor outlier is credits_checkout, but it still follows the pattern (checkout_credits would be more conventional, but it's understandable). Overall, naming is highly predictable.

Tool Count5/5

27 tools is well-scoped for an email management platform. The toolset covers domains, inboxes, threads, sending, attachments, billing, deliverability, extraction, and feedback without being bloated. Each tool addresses a specific need and contributes to a coherent workflow.

Completeness4/5

The tool surface covers core email management lifecycle: domain setup (create, verify, get records), inbox management (create, delete, list), email operations (send, attachments, threads), triage (status, tags, assignment), billing (credits), and monitoring (deliverability, suppressions). Minor gaps include lack of direct message retrieval by ID, no tool to delete a domain, and no attachment listing beyond upload. These are not severe but prevent full independence.

Maintenance

ActivityStale
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides AI agents with a real email address to send, receive, and manage emails via the Envoi.work platform. It enables seamless email communication, including inbox management and threaded replies, directly within MCP-compatible clients.
    5
    21
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides an AI agent with its own email address to send, receive, and manage emails via MCP. No email server setup required.
    33
    12
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Give AI agents their own email inboxes. Create, send, receive, and manage email entirely via MCP tools.
    -

Latest Blog Posts

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/commune-dev/commune-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server