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

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 the full burden and explicitly discloses that passing null or empty unassigns, which is a key behavioral trait. It doesn't discuss permissions or error cases, but the core semantics are transparent for a simple mutation.

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?

Two sentences plus a minimal args list; every sentence serves a purpose and the main action is front-loaded. No 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?

For a simple two-parameter assignment tool with an output schema, the description covers the operation, parameter semantics, and unassign behavior. It doesn't address edge cases, but overall context is adequate.

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%, but the description compensates by explaining assigned_to semantics (empty/omit = unassign) and clarifying thread_id. The assigned_to definition adds meaning beyond the schema's type/default.

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 uses a specific verb 'assign' with a clear resource 'thread' and target 'agent or user', and distinguishes itself from sibling thread tools like tag_thread or set_thread_status by describing a distinct operation.

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 when to use (to manage thread assignment) and explicitly explains the unassign behavior, but it doesn't name alternatives or exclusion scenarios. It's functional but lacks explicit 'use this instead of X' guidance.

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/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses the required follow-up sequence (DNS records, verification), which is critical context. It does not mention potential side effects like cost or errors, but the workflow transparency is valuable.

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 front-loaded with the core purpose, followed by a concise numbered list of required next steps and an Args section. Every sentence adds value, and the structure is easy to scan.

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 (not shown), the description need not explain return values. It covers the creation workflow and required post-steps, making it contextually complete for a create operation. Minor gaps like prerequisites or failure handling exist, but they are implied.

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 must compensate. It does so effectively by explaining 'name' with a domain example and 'region' as an optional AWS region with examples. This adds meaning well beyond the raw schema types and required list.

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 states 'Create a new custom email domain' with a specific verb and resource, clearly distinguishing it from sibling tools like get_domain_records and verify_domain. The purpose 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 a clear post-creation workflow: call get_domain_records, add DNS records, then verify_domain. This implies this tool is the initial step, but it does not explicitly mention when not to use it or alternatives beyond the follow-up steps.

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.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses useful behavioral detail (auto-assign to available domain if domain_id omitted; no DNS setup needed) but does not cover failure modes, uniqueness constraints, or confirmation behavior. While it adds value, a more complete picture would improve safety and predictability for a write operation.

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 well-structured with a lead statement, a concise explanation of the auto-assignment behavior, and a clear list of argument meanings. No word is wasted. Each part earns its place and the format is easy to parse.

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 complexity (5 params, one required) and the presence of an output schema, the description provides near-complete invocation guidance. It covers all params, the core behavior, and a deployment nuance. It doesn't detail return values (output schema likely covers that) but is otherwise adequate for correct use.

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% (no parameter descriptions in schema), but the description thoroughly documents all five parameters, including examples (e.g., local_part as 'support', 'billing', display_name as 'Support Agent'). It explains the role of `name` as a fallback for display_name and clarifies `domain_id` is optional, which is exactly the semantic information the schema lacks.

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's purpose: 'Create a new inbox for receiving emails.' It also provides the resulting email address format, distinguishing this tool from siblings like list_inboxes or create_domain. The verb is specific ('Create') and the resource is well-defined.

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 gives clear context for when to use this tool (when you need a new inbox) and includes a key benefit ('no DNS setup required'). It doesn't explicitly mention alternatives or exclusion cases, but the purpose is distinct enough from sibling tools, and the auto-assignment note helps the agent decide when to omit domain_id.

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.1/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It discloses the primary output ('Returns a checkout_url') and valid bundle options, which is useful. However, it does not mention potential side effects, prerequisites (e.g., authentication), or error behavior (e.g., invalid bundle handling). For a payment tool, more transparency about the actual charge and session behavior would be expected.

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 front-loaded with the primary purpose, followed by the main output and valid bundles. The Args section is clean and directly useful. Every sentence contributes meaning without unnecessary fluff, making it well-structured.

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 (and the description already mentions the key output), the description covers the essential inputs and valid values. It lacks information about error cases, authentication requirements, or whether the checkout session is immediately charged, but for a straightforward purchase tool, it is reasonably complete. The 0% schema coverage raises the burden, but the Args section mitigates this.

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 fully compensate. It does: the Args section explicitly explains both bundle (listing valid values) and return_url (optional, purpose). This adds significant semantic meaning that the schema itself lacks, making parameter understanding clear.

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 a specific verb+resource: 'Create a Stripe checkout session to purchase a credit bundle.' This distinguishes it from siblings like list_credit_bundles (listing) and get_credit_balance (querying). It is unambiguous 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 usage is implied: it is for purchasing a credit bundle and returns a checkout URL. However, it does not explicitly state when to use this tool versus alternatives, nor does it mention any exclusions. The description gives context (valid bundles, return_url) but lacks direct guidance on selecting this tool.

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?

With no annotations provided, the description carries the burden of disclosing side effects. It only says 'Delete an inbox,' which restates the tool name and gives no details on permanence, permissions, or error behavior.

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 highly concise, using a single sentence for purpose and a simple arg list. It is front-loaded and free of fluff, but it omits useful context that could be added without bloat.

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?

The tool has a destructive function, but the description gives no context about consequences, when to use it, or what output to expect. The presence of an output schema doesn't compensate for missing operational details.

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 lists the two parameters with minimal explanations: 'The domain ID' and 'The inbox ID to delete.' These add only slightly to the schema's titles ('Domain Id', 'Inbox Id') and do not explain the meaning of a domain or why it's required.

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 'Delete an inbox,' which is a specific verb+resource statement. It distinguishes from siblings like create_inbox and list_inboxes by the delete verb, though it doesn't mention alternatives or scope.

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?

The description provides no guidance on when to use this tool versus siblings such as create_inbox or list_inboxes. It lacks context about prerequisites, such as whether the inbox must be empty or belong to a specific domain.

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?

No annotations are provided, so the description carries full behavioral burden. It discloses that the URL is temporary and the default expiration (1 hour), but does not mention any other side effects, auth requirements, or error behavior. This is adequate for a simple get operation 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.

Conciseness5/5

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

The description is two sentences, with a clear first sentence followed by a concise parameter list. Every word earns its place; no fluff.

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 tool is simple (2 params, output schema exists). The description covers the core functionality and parameters, and with an output schema present, return values need not be spelled out. It could mention prerequisites like having an existing attachment ID, but overall it is sufficiently complete for an agent to call 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?

Schema has 0% description coverage, but the description explains both parameters: attachment_id as 'The attachment ID' and expires_in as 'URL lifetime in seconds (default: 3600 = 1 hour)'. This adds meaning beyond the schema types and defaults, effectively compensating 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 uses a specific verb 'Get' with a clear resource 'temporary download URL for an attachment', and the 'temporary' qualifier distinguishes it from any other URL retrieval tool. It clearly states 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 does not explicitly state when to use this tool vs alternatives, but the purpose is clear enough that it implies usage after an attachment has been uploaded. However, there are no exclusions or alternative tool references.

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.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 the full burden of behavioral disclosure. It transparently lists the return components (included credits, purchased credits, total available, credits used this billing cycle), which gives the agent insight into what to expect. However, it doesn't mention any potential side effects or prerequisites, though for a simple getter this is largely sufficient. It adds value beyond the name by detailing the output.

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 long, front-loaded with the primary purpose, and free of any fluff or repetition. Every sentence adds value: the first states what it does, the second details the return fields. This is an exemplary model of conciseness.

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 simplicity of the tool (no parameters, no annotations, output schema exists), the description is fully complete. It clearly names the resource ('Commune account'), states the action, and enumerates the returned data. The agent has everything needed to select and invoke this tool correctly without additional context.

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 tool has zero parameters, so the schema is empty with 100% coverage. The description doesn't need to explain any parameters. Per the rubric, a baseline of 4 is appropriate for a no-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's purpose: 'Get current credit balance for your Commune account.' This is a specific verb+resource structure that distinguishes it from siblings like 'list_credit_bundles' or 'credits_checkout'. It also enumerates the exact pieces of information returned, leaving no ambiguity about the tool's function.

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 clearly conveys when to use this tool—whenever a user needs their current credit balance and its breakdown. It doesn't explicitly mention alternatives or exclusions, but the sibling tools are functionally distinct, so context alone is sufficient. The description is clear and unambiguous, warranting a 4 rather than a 5.

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.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 of behavioral disclosure. It explains the metrics and rates returned, and recommends inbox_id filtering. However, it does not clarify aggregate scope when no filters are passed or mention read-only behavior explicitly, though the 'get' verb implies it. No contradiction with annotations (none 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 concise and front-loaded with purpose. It has a clean structure with a purpose statement, a sentence on outputs, a usage context sentence, and an args list. Every sentence provides value without waste.

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 sufficiently covers purpose, usage, and all parameters. An output schema exists, so return value details are encoded elsewhere. It could mention when to prefer get_delivery_events for individual events, but this is not critical for basic tool selection and invocation.

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 no descriptions (0% coverage), so the description fully compensates by explaining each parameter: 'inbox_id: Filter metrics by inbox (recommended)', 'domain_id: Filter metrics by domain', and 'period: Time period — "24h", "7d", "30d" (default: "7d")'. This adds meaning beyond the schema properties.

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' with a specific verb and resource. It also lists derived rates (bounce, complaint, delivery) and distinguishes itself from siblings like get_delivery_events (which fetches individual events) and get_suppressions (which manages suppressions), making the tool's purpose unambiguous.

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 a clear use case: 'Use this to monitor sender reputation and identify deliverability issues.' It does not explicitly mention alternatives or when not to use the tool, but the context is sufficient for an agent to decide between this and related tools.

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

A4.3/5.0
Behavior3/5

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

Since no annotations are provided, the description carries full responsibility for behavioral transparency. It clearly indicates a read-only operation via 'Get' and lists the event types. However, it does not disclose pagination behavior, ordering, or any potential side effects. The lack of explicit safety statements is somewhat mitigated by the inherently read-only nature of the tool, but important behavioral details are missing.

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 succinct and well-structured, with a brief summary followed by a clean Args list. Every sentence adds value, and there is no redundant or filler content. The format makes it easy for an agent to parse the core purpose and parameter semantics quickly.

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 moderate complexity (five optional filters, output schema present), the description covers the essential aspects: purpose, filters, and default limit. It does not explain ordering or pagination behavior, but the presence of a limit parameter implies basic paging. Overall, the description is sufficiently complete for an agent to use the tool correctly.

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 no property descriptions (0% coverage). The description's Args list fully compensates by explaining all five parameters: message_id, inbox_id, domain_id, event_type, and limit. It provides enum-like values for event_type and the default limit, adding meaning beyond the schema's bare type information.

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 delivery event log' and enumerates the event types (sent, delivered, bounced, complained, failed), specifying the resource and action. It also explains the use case: 'Track the lifecycle of individual emails or audit delivery across an inbox.' This distinguishes it from sibling tools like get_deliverability_stats and get_suppressions by focusing on the event log itself.

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 clear usage context: tracking individual email lifecycle or auditing delivery across an inbox. It implies when to use the tool but does not explicitly contrast it with alternatives or state when not to use it. There are no exclusionary guidelines, so this meets the 'clear context, no exclusions' criterion.

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.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 transparency burden. It correctly specifies the return types (MX, TXT, CNAME) and the registrar context, but it does not explicitly state that the operation is read-only/no side effects, nor does it mention potential error conditions, leaving some gaps.

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 and front-loaded, with the main purpose stated first. The return type summary and the parameter explanation each add value with 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?

For a tool with a single parameter and an output schema, the description covers the essential purpose, usage context, and parameter origin. The output schema handles return structure, so the description is sufficiently complete, though it could mention error scenarios.

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 only defines 'domain_id' as a string with 0% description coverage. The description compensates by explaining that the ID comes from list_domains, adding practical source context that the schema lacks.

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 the resource 'DNS records required to verify a domain.' It explicitly distinguishes from the sibling verify_domain by explaining these records are prerequisites for that action.

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 clear context by stating 'before calling verify_domain,' indicating when this tool should be used. It does not explicitly name alternatives or when-not scenarios, but the guidance is clear enough for a simple read operation.

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.6/5.0
Behavior4/5

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

With no annotations, the description carries the full transparency burden. It explains that suppressed addresses are automatically skipped during sending and that the tool lists them, which conveys read-only behavior and domain context. It doesn't mention rate limits or pagination beyond the limit parameter, but the output schema covers return structure.

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 compact: a one-line purpose, a one-line usage note, and a clear Args list. Every sentence serves a purpose and the structure makes parameters easy to scan.

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?

For a read-only list tool with an output schema and three optional parameters, the description covers purpose, usage, and parameters well. The existence of an output schema means return value details are already available. There are no missing critical details.

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 description includes an Args section that explains each parameter (inbox_id, domain_id, limit) and their optional/default nature, while the schema only provides types and defaults. This fully compensates for the 0% schema description coverage and adds meaningful 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 opens with 'List suppressed email addresses' – a specific verb and resource – and immediately clarifies the types (bounces, complaints, unsubscribes). This clearly differentiates it from sibling tools like list_sms_suppressions and 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 phrase 'Use this to audit why certain recipients aren't receiving emails' provides a clear context for when to invoke the tool. It doesn't explicitly compare to alternatives or state when not to use it, so it falls short of a perfect 5.

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

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 the full burden. It discloses the return shape and parameter behavior (limit range/default, order options). The phrase 'Get all messages' is slightly misleading given the limit cap, but the parameter details clarify the actual behavior, so the transparency is solid.

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 compact and well-structured: a one-line purpose, a one-line return summary, and an Args list with clear parameter explanations. Every sentence adds value, and the formatting makes the parameters scannable.

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 read tool with an output schema, the description covers purpose, return value, and all parameters. However, it could benefit from briefly mentioning when to prefer this over get_thread_metadata or search_threads, and clarifying the 'all' vs limit relationship.

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 schema has no descriptions (0% coverage), and the description fully compensates by explaining each parameter: thread_id's source (from list_threads), limit's range and default, and order's allowed values with meaning. This provides essential semantic information 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 identifies the tool's function with a specific verb and resource: 'Get all messages in an email thread.' It distinguishes itself from sibling tools like get_thread_metadata (metadata) and get_sms_thread (SMS) by specifying email thread messages.

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 implies usage by describing the returned data (full conversation with sender, content, timestamps), which helps an agent decide when to use this tool. However, it does not explicitly name alternatives or exclusion criteria, so it lacks the 'when-not' guidance required for a 5.

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.2/5.0
Behavior3/5

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

No annotations are present, so the description carries the full burden. It indicates a read operation ('Get') and enumerates the returned fields, which is some transparency. However, it does not disclose error handling, permissions, or response behavior beyond those fields.

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 single sentence stating the purpose followed by a minimal args block. Every part is relevant and front-loaded, with no unnecessary fluff.

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 single-parameter getter, the description is functional but sparse. It does not guide the agent on when to use this tool alongside many thread-related siblings, and the parameter documentation is unhelpful. The output schema may cover return values, but the description still lacks usage direction.

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

Parameters1/5

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

The only parameter thread_id is described as 'The thread ID,' which merely restates the parameter name and schema title. It provides no additional meaning about format, source, or constraints, and schema coverage is 0%.

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 a specific verb ('Get'), resource ('thread'), and scope ('triage metadata: tags, status, and assignment'). This distinguishes it from sibling tools like get_thread_messages (messages), list_threads (listing), and mutation 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 explicit guidance is provided on when to use this tool versus alternatives. It does not mention exclusions or recommend sibling tools for different use cases, leaving the agent to infer based on the name and description alone.

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.5/5.0
Behavior4/5

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

With no annotations, the description provides the key behavioral detail – that it returns each bundle's ID, credit amount, price, and description. The verb 'List' implies a read-only operation with no side effects, which is transparent enough. It does not add extra context like auth requirements or rate limits, but for a simple list operation that's acceptable.

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 short sentences: the first states the action, the second lists the return fields. No wasted words.

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?

The tool is very simple with no parameters, output schema exists, and the description covers the return content. There is no missing information for an agent to invoke 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?

The tool has zero parameters, so the description need not explain parameter details. The empty schema is fully covered. The baseline of 4 applies.

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 opens with 'List available credit bundles that can be purchased,' clearly identifying the action (List) and resource (credit bundles). It distinguishes from sibling tools like get_credit_balance and credits_checkout by focusing on purchasable bundles. The return fields further specify purpose.

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 context is clear: this tool is for retrieving purchasable credit bundles. It does not explicitly mention alternatives or exclusions, but the simple no-parameter nature and phrasing make the use case self-evident. However, it leaves any comparison to get_credit_balance or credits_checkout implicit.

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?

No annotations are provided, so the description carries the full burden. It discloses the read-only list behavior and specifies the return fields (ID, name, verification status), offering adequate transparency for a simple list operation. No side effects are mentioned, but none are implied.

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 three sentences, each earning its place: first states the purpose, second lists return fields, third explains downstream usage. No filler or redundancy.

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 zero parameters, the presence of an output schema (handling return details), and the simple list nature, the description covers purpose, output, and usage context. It is complete for this tool's complexity.

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 tool has zero parameters, so the input schema is fully covered and there is no need for parameter documentation. Baseline score of 4 is appropriate for a parameter-free 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?

States the specific verb 'List' with resource 'email domains' and scope 'in your Commune account', clearly distinguishing it from sibling tools like create_domain, verify_domain, and get_domain_records which involve creation, verification, or record retrieval.

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 by explaining that the domain IDs returned should be used with other tools like list_inboxes or create_inbox, signaling when to call this tool. However, it does not explicitly mention alternative list tools or exclusion criteria.

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 is the sole source of behavioral context. It discloses the scope behavior (all domains vs. specific domain) and the local_part relationship, but does not explicitly state read-only status, side effects, or authorization 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 compact, starting with a clear action and then elaborating on the optional parameter and the email address format. It is well-structured and avoids unnecessary verbosity.

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 list operation with one optional filter and an output schema, the description covers the core behavior and parameter meaning. It could optionally mention pagination or ordering, but these are likely captured in the output schema or are not critical for this 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 only defines domain_id as an optional string. The description adds that it filters by domain and that omitting it lists all inboxes, providing necessary semantic meaning that the schema lacks.

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's function with a specific verb ('List') and resource ('inboxes'). It then explains the two modes (all domains vs. specific domain) and provides useful context about email address composition, making its purpose unambiguous and distinct from sibling tools.

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 the behavioral difference when domain_id is present or omitted, which serves as clear usage guidance. It does not explicitly name alternative tools, but the context makes it obvious when to use this tool versus others like create_inbox or delete_inbox.

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.6/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses pagination behavior (next_cursor), default ordering, response fields (subject, message count, last activity, snippet), and the necessity of filters. It does not mention permissions or rate limits, but for a read-only listing operation, this is sufficient.

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 well-structured with a brief introduction, return format note, usage requirement, and an Args list. Every sentence provides value, and there is no redundancy or fluff.

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?

The description is complete for a list operation. It covers key behavior (pagination, filtering, sorting), return summary fields, and parameter constraints. Since an output schema exists, it need not describe every return field, but it still gives the essential information for correct usage.

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 fully compensates by explaining each parameter's purpose and constraints: inbox_id for filtering, domain_id as alternative, limit range 1-100, cursor for pagination, and order with desc/asc defaults. This adds significant meaning beyond the schema's type-only definitions.

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 email threads (conversations) with pagination,' which is a specific verb+resource. It differentiates from sibling tools like search_threads and get_thread_messages by focusing on listing with pagination and summarizing thread attributes.

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 explicit usage context: returning thread summaries, pagination via next_cursor, and the requirement to provide at least one of inbox_id or domain_id. It does not explicitly discourage use of alternative tools, but the pagination and filter requirements are clear usage guidelines.

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

remove_extraction_schemaC

Remove structured extraction schema from an inbox.

ParametersJSON Schema
NameRequiredDescriptionDefault
domain_idYes
inbox_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/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 the full burden of disclosing behavioral traits. It states only that it removes the schema, but does not mention side effects (e.g., whether extraction stops immediately, if the operation is reversible, or if any data is destroyed). This is a mutation operation with no disclosed consequences, similar to the under-transparent update_drive example.

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 a single, short sentence that is front-loaded with the core action. It wastes no words and is easy to scan. However, it is so sparse that it barely adds value beyond the tool name itself, so it does not earn a 5, but it is certainly concise.

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?

Given the simplicity of the tool (2 params, no nested objects) and the presence of an output schema, the description is still incomplete. It lacks context about the relationship to set_extraction_schema, when removal is appropriate, what happens upon removal (e.g., does extraction stop immediately?), and any prerequisites. This would hinder an agent in deciding when to invoke it.

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%, so the description must compensate for parameter meaning, but it does not reference domain_id or inbox_id at all. The parameter names are somewhat self-explanatory, but there is no explanation of how to find these IDs or what values are valid. The schema provides only types and required flags, leaving the agent to infer the semantics.

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 uses a specific verb ('Remove') and clearly identifies the resource ('structured extraction schema') and the target ('an inbox'). It distinguishes the tool from siblings like set_extraction_schema (which sets the schema) and delete_inbox (which removes an inbox entirely). The purpose is unambiguous and well-scoped.

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?

The description gives no guidance on when to use this tool versus alternatives. It does not mention that it is the inverse of set_extraction_schema, nor does it suggest prerequisites such as listing inboxes first to obtain the inbox_id. There is no contextual information about typical workflows or conditions that would favor this tool.

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.6/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 of behavioral disclosure. It describes the return format ('matching thread summaries with subject, snippet, and message count') and the constraint about requiring at least one filter. It implies a read-only operation by using 'Search' and 'Returns', but does not explicitly state it is non-destructive or mention any rate limits or authentication requirements. Overall, it provides solid context but leaves a few behavioral aspects implicit.

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. It opens with a one-sentence purpose, then one sentence about return value, one sentence about the required filter condition, and a neatly formatted Args list. Every sentence earns its place, and the structure makes it easy to scan for key details like the filter requirement and parameter semantics.

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?

Despite having no annotations, the description is complete enough for an agent to select and invoke the tool correctly. It covers the main behavior, return format, filter prerequisites, and parameter ranges. An output schema exists, so detailed return types are not strictly necessary, but the description still provides a helpful summary. Minor gaps like pagination (beyond limit) and error behavior are not critical for a search tool.

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 must compensate, and it does thoroughly. The 'Args' section explains each parameter's purpose in plain language: query 'searches subject and message content', inbox_id 'Filter by inbox (recommended)', domain_id 'Filter by domain', and limit 'Max results, 1-100 (default: 20)'. It also clarifies the domain_id/inbox_id relationship in the main description. This adds substantial 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 what the tool does: 'Search across email threads by subject or content.' It uses a specific verb ('search') and resource ('email threads'), and it distinguishes itself from sibling tools like 'list_threads' (which likely lists all threads), 'search_sms' (different resource), and 'get_thread_messages' (retrieves messages). The mention of returning matching thread summaries further clarifies the scope.

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 explicit usage guidance: 'Provide at least one of inbox_id or domain_id.' It also labels 'inbox_id' as 'recommended' for filtering, giving a preference. However, it does not explicitly state when to use this tool over alternatives (e.g., 'use list_threads to list all threads'), so it misses the 'when-not-to-use' aspect. Still, the advice is actionable and clear.

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.4/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses key behaviors: body supports html/text with fallback, attachments require a prerequisite upload, thread_id enables replying, and domain is auto-inferred from inbox_id. It lacks details on errors or permissions but provides meaningful context beyond a bare 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 front-loaded with a one-line purpose, followed by brief usage notes and a structured Args list. Minor redundancy exists (e.g., thread_id and attachments are explained both in prose and Args), but the overall structure remains clear and easy to parse.

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 essential operational context for a 10-parameter tool: attachment ordering, threading, html/text alternatives, and inbox/domain resolution. It does not mention error handling or authorization, but the output schema exists and the description equips an agent to invoke the tool correctly in the common paths.

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, and the Args section fully compensates by explaining all 10 parameters with practical details: comma-separated recipients, copy fallback, optional senders, and the upload_attachment dependency. This is a strong compensation for the silent 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 opens with 'Send an email message,' a specific verb+resource pair that clearly identifies the tool's function. It naturally differentiates from sibling tools like send_sms by specifying email, and the name itself reinforces the purpose.

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 practical guidance: html/text body options, reply via thread_id, attachment workflow requiring upload_attachment first, and inbox_id/domain inference. However, it does not explicitly state when to choose this over send_sms or mention exclusions, so it falls short of a 5.

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.3/5.0
Behavior2/5

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

There are no annotations, so the description must disclose behavior. It does not mention whether this overwrites an existing schema, validates the JSON schema input, or has side effects on extraction. The `enabled` parameter indicates immediate activation but without further context.

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 well-organized as an Args list. Each line is informative, though the format is a bit terse and lacks a narrative lead-in. No excessive verbiage.

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?

Given no annotations, six parameters, and a configuration setter with potential overwrite/validation behavior, the description is incomplete. It does not explain preconditions (e.g., inbox must exist), failure modes, or whether this is an upsert versus create-only 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%, so the description carries the full burden for parameter meaning. It provides brief but useful definitions for all six parameters, including the crucial 'JSON string of a valid JSON Schema object' for `schema` and defaults for `enabled` and `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?

The description states 'Set structured extraction schema for an inbox,' using a specific verb and resource. It clearly distinguishes itself from siblings like remove_extraction_schema and other unrelated tools.

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 given on when to use this tool versus alternatives, nor are there prerequisites or exclusions mentioned. The description only states what it does, leaving the agent to infer context from the tool name and siblings.

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

set_thread_statusA

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

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 carries the burden of behavioral disclosure. It states valid statuses but does not mention side effects, reversibility, permissions, or what happens on invalid input. As a mutation tool, this lack of behavior context is a notable gap.

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 core action. However, the list of valid statuses is repeated twice (in the intro and in the Args section), which is slightly redundant but not overly verbose.

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?

The tool is simple with only two parameters and an output schema exists, so return values need not be described. The description covers the essentials for making a call, but lacks context about side effects, edge cases, or how this relates to other thread triage operations.

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 fully compensates by explaining both parameters: thread_id is 'The thread ID' and status is 'New status — one of: open, needs_reply, waiting, closed' with the allowed values repeating in the prose. This adds meaning well 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 uses a specific verb and resource: 'Set the status of a thread for triage.' It clearly distinguishes this from siblings like assign_thread, tag_thread, and untag_thread by focusing on the status field specifically.

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 phrase 'for triage' implies the tool is meant for updating triage status, but the description does not explicitly compare it to alternatives or state when not to use it. Usage is implied rather than fully spelled out.

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

A5/5.0
Behavior5/5

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

No annotations are provided, so the description carries full responsibility for behavioral disclosure. It thoroughly explains the submission behavior: what each feedback type means, what content to include in the message, and how to use the context dict. It even gives examples of good and bad feedback behavior. The description also states the message length limit (4000 chars), adding 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 well-structured and front-loaded: the purpose and usage appear in the first two sentences. It then uses clear headings for feedback types and an 'Args' section. Despite its length, every sentence is informative, with examples that replace verbose prose. No redundancy or fluff.

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?

For a feedback tool with no annotations and zero schema descriptions, this description is exceptionally complete. It covers the tool's purpose, when to use it, how to categorize feedback, what to include in messages, and how to structure context. The output schema handles return values, so those need not be described. The presence of examples further enhances completeness.

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 compensates fully in the 'Args' section. It explains 'type' with its enum values ('error', 'feature', 'signal'), describes 'message' and its max length, and details 'context' with a concrete JSON example. This adds significant semantic meaning beyond the bare schema definition.

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 opens with a clear, specific statement: 'Submit feedback about Commune to the product team.' This uses a specific verb ('submit') and resource ('feedback about Commune'), and it is distinct from all sibling tools (e.g., send_sms, create_domain). It further clarifies purpose by defining three feedback types, eliminating ambiguity.

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?

The description explicitly states when to use the tool: 'Use this tool whenever you encounter something worth reporting — an error, a missing capability, or an observation.' It provides detailed criteria for each feedback type with concrete examples, giving the agent clear usage guidance. No alternative feedback tools exist among siblings, so no exclusions are needed.

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
Behavior4/5

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

With no annotations, the description carries the full behavioral disclosure burden. It explicitly states 'Tags are additive — existing tags are preserved', which is a key non-obvious behavior. It also clarifies the comma-separated format. It does not cover edge cases like duplicate handling or permission requirements, but the core behavior is well disclosed.

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 tightly structured: a one-sentence purpose, a usage note, and an Args block. Every sentence contributes vital information without redundancy or fluff.

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 two-parameter tool, the description covers purpose, behavior, and parameter format. The output schema exists, so return values need not be described. Minor gaps like idempotency or error handling are not critical for basic usage, so this is nearly complete for the tool's complexity.

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

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 does so by explaining both parameters: thread_id is identified simply, while tags gets a clear format and example ('Comma-separated tags to add (e.g. "urgent,vip,sales-lead")'), adding significant meaning 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 'Add tags/labels to a thread' with a specific verb and resource. It differentiates from sibling tools like untag_thread by explicitly noting the additive behavior, making its purpose unambiguous.

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 provides examples of tag usage ('vip', 'bug-report', etc.) and shows a concrete argument format, which implies when to use this tool. However, it does not explicitly contrast with alternatives like untag_thread or state when not to use it, leaving usage guidance somewhat implied rather than explicit.

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.7/5.0
Behavior2/5

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

With no annotations, the description does not disclose behavioral traits such as reversibility, idempotency, permissions, or error behavior. It only states the action and parameters.

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 a single purpose sentence and a minimal Args list. No filler 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?

While the tool is simple with only two parameters, the description lacks usage guidance and behavioral transparency. However, since an output schema exists, the absence of return documentation is not penalized. The description is adequate but could benefit from context on when to use it.

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 schema has 0% description coverage, so the description's Args section is essential. It defines thread_id as 'The thread ID' and tags as 'Comma-separated tags to remove' with an example, adding format and meaning.

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 uses the specific verb 'Remove' with the resource 'tags/labels from a thread', clearly distinguishing it from the sibling 'tag_thread' which adds tags.

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?

The description provides no guidance on when to use this tool versus alternatives such as tag_thread or assign_thread, nor does it state prerequisites or exclusions.

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.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 states that the tool uploads a file and returns an attachment_id, but it does not disclose any side effects, auth requirements, rate limits, or file size restrictions. The description is not misleading but adds only the basic behavioral expectation.

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, with a one-sentence summary, a clear note about the return value, and an Args block with three lines of parameter guidance. Every sentence serves a purpose and nothing is redundant.

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 3-parameter tool with an output schema, the description provides the essential context: what the tool does, what input is expected, and what the output is used for. It lacks but does not desperately require details like size limits or retention policies, so 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?

The description adds valuable meaning beyond the schema's bare property titles: it explains that 'content' must be Base64-encoded and provides concrete examples for 'filename' and 'mime_type'. This compensates for the 0% schema description coverage, though it does not mention limits or format edge cases.

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 'Upload' and the resource 'a file for use when sending emails', which distinguishes it from siblings like 'send_email' and 'get_attachment_url'. It also specifies the return value (attachment_id) and its purpose, making the tool's role 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 clear context that this tool is for uploading files to be used with 'send_email' via the returned attachment_id. It does not explicitly mention when not to use it or suggest alternatives, but the intended usage is evident from the wording and the sibling context.

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.2/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavioral traits. It states the action but does not mention side effects, asynchronous behavior, potential delays, or error conditions. The prerequisite about DNS records is useful but insufficient for a mutation-like tool.

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 short sentences plus a compact Args section. It front-loads the purpose and includes only essential information without any filler.

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 one-parameter trigger tool, the description covers purpose, prerequisite, and parameter source. The existence of an output schema reduces need to explain return values. However, it omits whether verification is synchronous or if the domain status updates immediately.

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, so the description must compensate. It does so by explaining domain_id as 'The domain ID (from list_domains)', which adds source context beyond the bare schema definition. However, format or examples are not provided.

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's function: 'Trigger DNS verification for a domain.' This is a specific verb+resource pair that distinguishes it from siblings like get_domain_records or 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 Guidelines5/5

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

Explicit guidance is provided: 'Call this after adding the required DNS records at your registrar. Use get_domain_records first to see which records are needed.' This tells the agent when to use the tool and directs it to a relevant alternative for prerequisite info.

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.

  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

Scored across 27 tools

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

ActivityInactive
ResponsivenessNo issues

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
    2 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides an AI agent with its own email address to send, receive, and manage emails via MCP. No email server setup required.
    83 npm
    12
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Give AI agents their own email inboxes. Create, send, receive, and manage email entirely via MCP tools.
    -