InterAgentMail
The InterAgentMail MCP server enables durable inter-agent messaging and chat for local Codex project agents, along with system management features.
Identity & Mailbox Discovery: Retrieve the current project's mailbox identity (
iam_whoami) and list all known mailbox addresses (iam_list_mailboxes).Inbox Management: List recent messages, optionally filtering for unread (
iam_inbox); read a specific message by ID, optionally marking it as read (iam_read); archive fully handled messages to remove them from the inbox (iam_archive).Composing Messages: Send new messages with recipients, subject, body, CC, references, and attachments (
iam_send); reply to existing messages, preserving thread metadata (iam_reply).Chat Channels: List public and private channels (
iam_list_channels); read recent messages from a channel with date filtering and line limit, respecting private channel membership (iam_chat_tail); post messages to channels, optionally creating private DM channels with another agent (iam_chat_post); mark messages as seen (iam_chat_seen).Project Registration & Configuration: Register Codex projects, initialize durable mailboxes, record project directories and safety policies, and integrate with Codex MCP configuration.
Service Control & Status: Start, stop, and restart mail delivery services; query status of services, projects, and pinned thread IDs; run health checks.
Support & Diagnostics: Generate privacy-sanitized support reports with installation details, service health, and log statistics for troubleshooting.
Provides durable mailboxes and MCP tools for sending messages between OpenAI Codex agents, with automatic wake-up delivery and persistent message storage.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@InterAgentMailSend mail to SecurityReviewer: please review the latest PR for security issues."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
InterAgentMail
InterAgentMail gives local Codex project agents durable mailboxes, MCP tools, and automatic wake-up delivery. Messages are stored as JSON on disk, so they remain queued while Codex or the receiving agent is offline.
One shared Codex app-server and one background InterAgentMail supervisor manage every registered project. The supervisor watches every mailbox but opens an isolated app-server connection only when that mailbox has new work, then releases it after the Codex turn is idle. Users do not need a bridge terminal, a port per agent, or copied Codex session IDs.
Requirements
Python 3.10 or newer
The OpenAI Codex CLI installed, available on
PATH, and signed inWindows, macOS, or Linux; background operation is tested most heavily on Windows
Related MCP server: mcp-dispatch
Install
Install the isolated command-line application from PyPI with pipx:
pipx install cgl-interagentmailRegister one or more Codex projects, then start delivery:
iam setup "C:\Projects\MainApp" "C:\Projects\SecurityReviewer" "C:\Projects\UXReviewer"
iam startOpen the correct agent from any registered project:
cd C:\Projects\SecurityReviewer
iam openThe complete Windows, macOS, Linux, upgrade, troubleshooting, and uninstall instructions are in docs/INSTALL.md.
Browser messaging
Version 1.3 adds an authenticated browser surface backed by an ordinary human IAM mailbox. Agent replies return to the same inbox, and messages queue normally when agents or delivery services are offline.
Configure the default this-PC-only interface, choose a password when prompted, and start only its standalone companion process:
iam web setup MyMailbox --display-name "My Name"
iam web startOpen http://127.0.0.1:8787. This does not start, stop, or restart the IAM supervisor or Codex app-server. Use iam web status, iam web password, and iam web stop for its lifecycle.
LAN access is an explicit opt-in:
iam web setup MyMailbox --display-name "My Name" --lan --acknowledge-network-risk
iam web startLAN mode uses plain HTTP plus application-password authentication; it is not end-to-end encrypted. Enable it only on a trusted, password-protected WPA2/WPA3 network, allow only Private networks in the operating-system firewall, keep the password private, and never port-forward the IAM web port. Anyone who gains access can read messages, send agent instructions, and potentially cause project changes or corruption.
Source code, releases, and issue tracking are hosted at https://github.com/cerberusgamelabs/cgl-interagentmail.
Everyday commands
iam status
iam doctor
iam report
iam user create ADDRESS
iam web setup ADDRESS
iam web start
iam web status
iam open [PROJECT]
iam restart
iam stop
iam stop --all
iam register [PROJECT ...]
iam unregister [PROJECT ...]
iam capabilities --jsoniam statusshows services, projects, and pinned thread IDs;--jsonprovides stable schema 1.0 output.iam doctorruns read-only health checks for IAM, Codex, services, project registration, MCP configuration, mailboxes, safety policy, and resumable threads.iam reportcreates a privacy-sanitized Markdown support report under the IAM data directory.iam usermanages human mailboxes;iam webmanages the separate authenticated browser companion.iam openresumes the saved project thread, or starts a new remote session when the project has not needed one yet.iam stopstops mail delivery but leaves the shared app-server running.iam stop --allstops both IAM-managed background services.iam unregisterremoves IAM's managed MCP block and project registration while preserving mailbox data.
Setup behavior
iam setup is safe to run again. It:
Initializes the project's durable mailbox.
Records its project directory and safety policy.
Adds a clearly marked
mcp_servers.interagentmailblock to.codex/config.toml.Establishes the existing-inbox baseline so old mail does not unexpectedly trigger work.
Lets the supervisor attach the project only when undelivered mail arrives; an active or approval-paused turn retains its own connection, and idle connections are released.
Use iam setup --process-existing when existing inbox messages should be delivered immediately.
Installed releases keep data under %LOCALAPPDATA%\InterAgentMail on Windows or ~/.local/share/interagentmail on macOS/Linux. Set INTERAGENTMAIL_HOME before setup to use another shared data directory.
Project folder basenames become mailbox addresses. IAM records mailbox ownership and refuses to register two different project roots with the same address before changing either project or mailbox.
Automation and reviewer platforms
Version 1.2 adds a stable JSON interface for tools that create reviewer projects or manage agent fleets:
iam capabilities --json
iam register "C:\Projects\SecurityReviewer" --json
iam status --json
iam doctor --project "C:\Projects\SecurityReviewer" --json
iam unregister "C:\Projects\SecurityReviewer" --jsoniam register is the automation-oriented alias for iam setup and is safe to repeat while delivery is running. Human-facing identity remains optional: --display-name supplies a label, but IAM does not force a persona. See docs/INTEGRATION.md for the versioned envelope, stable errors, collision behavior, identity ownership, and full lifecycle contract.
Diagnostics and support reports
Run a read-only installation check at any time:
iam doctorWarnings describe optional or currently stopped components. Failures produce a nonzero exit status and identify configuration that needs attention.
Create a report suitable for attaching to a support issue:
iam reportThe report contains software versions, operating-system information, service health, registered-project checks, mailbox counts, and bounded log statistics. It replaces project names, display names, project paths, user paths, email addresses, thread IDs, message IDs, and common credential formats. It never reads message bodies or chat contents into the report and deliberately omits raw app-server logs because those logs can contain source code or private instructions.
Use iam report --stdout to inspect or pipe the report, iam report --output PATH to choose its location, and iam report --log-lines N to change how many trailing log lines are counted. Existing output files are preserved unless --force is supplied. Automated sanitization is intentionally conservative, but review any report before sharing it publicly.
Safety
New agents use workspace-write with on-request approvals. The unattended supervisor rejects interactive approval requests instead of granting them. A task that needs approval remains uncompleted until a person opens that agent.
Only for a trusted project that genuinely requires unrestricted filesystem and network access:
iam setup "C:\Projects\SecurityReviewer" --full-accessThe browser interface has application-level password authentication, CSRF protection, login throttling, and restrictive browser headers. Its LAN transport is still plain HTTP and must be treated as trusted-network-only. InterAgentMail's file-backed core is a local coordination mechanism, not an authentication boundary. Any local process that can write to its data directory can inject or modify mail. Do not share that directory with untrusted users or accept untrusted message content as instructions.
Sending mail
Agents normally use the project-bound InterAgentMail MCP tools. People and fallback workflows can use the CLI:
interagentmail send --project-root "C:\Projects\MainApp" --to SecurityReviewer --subject "Security review" --body "Review the current release and send back actionable findings."The receiving supervisor wakes the correct Codex thread. The agent reads the message through MCP, performs the work, sends a substantive reply when appropriate, and archives the message only after it is handled.
Protocol and low-level bridge details are in SYSTEM.md. Release history is in CHANGELOG.md.
Support
InterAgentMail is free and open source. If it helps your agents work together, you can support Cerberus Game Labs on Ko-fi.
License
InterAgentMail is open-source software released under the MIT License. Use it, modify it, distribute it, and build on it. Copyright 2026 Cerberus Game Labs.
Contributions are welcome; see CONTRIBUTING.md.
Available Tools
11 toolsiam_archiveC
Archive one fully handled inbox message.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits, but it only states 'archive one fully handled inbox message.' It does not mention side effects (e.g., whether the message is deleted or moved), authorization needs, or reversibility. This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, but it is too terse. It sacrifices necessary detail for brevity, making it under-specified for an AI agent to understand proper usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema, return values are covered. However, the description fails to explain the archiving behavior, prerequisites, or constraints. With one parameter and no explanatory context, it is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'message_id' has no description in the schema (0% coverage). The tool's description does not explain what message_id is, how to obtain it, or its format, so it adds almost no value beyond the schema's type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb 'archive' and resource 'inbox message' clearly. The qualifier 'fully handled' adds context. However, it doesn't define what archiving entails (e.g., moving to archive folder), but it is distinct from sibling tools like iam_read or iam_send.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use archive versus alternatives like iam_inbox or iam_read. There is no mention of conditions, prerequisites, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iam_chat_postB
Post to a chat; set channel_type=private and with_agent for a new DM.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| channel | Yes | ||
| message | Yes | ||
| with_agent | No | ||
| channel_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as permissions required, error handling, notification behavior, or rate limits. It only implies 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no wasted words. The primary action is front-loaded ('Post to a chat'), and the additional hint is immediately useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters (2 required) and an output schema not mentioned, the description is incomplete. It fails to explain return values, error conditions, or prerequisites for using the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate. It explains the purpose of channel_type and with_agent for DMs, but does not clarify the 'date', 'channel', or 'message' parameters, leaving much ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Post to a chat') and resource, and provides a specific hint about creating a new DM using channel_type and with_agent, effectively distinguishing it from sibling tools like iam_chat_tail or iam_chat_seen.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives specific guidance for using private channels and with_agent for new DMs, but does not explain when not to use the tool or compare it to alternatives like posting to an existing channel.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iam_chat_seenC
Mark recent chat messages as seen by this project.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| lines | No | ||
| channel | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully disclose behavior. It only states a state change ('mark as seen') without discussing permissions, reversibility, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, very concise sentence. While efficient, it sacrifices completeness for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three parameters and no annotations, the description is insufficient. It omits return value details (output schema exists but unused), parameter roles, and behavioral constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention any parameters despite 0% schema description coverage. Terms like 'recent' hint at 'date' and 'lines' but provide no concrete semantics or syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool marks chat messages as seen, using a specific verb and resource. It distinguishes from siblings like iam_chat_tail and iam_chat_post, but lacks detail on what 'seen' means.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The implied usage is to mark messages as seen, but no explicit conditions or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iam_chat_tailC
Read recent chat messages, enforcing private-channel membership.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| lines | No | ||
| channel | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose key behaviors. It mentions 'enforcing private-channel membership' (authorization) but doesn't clarify if it's read-only, whether it streams or polls, limits, or side effects (e.g., marking messages as seen). The name 'tail' suggests streaming but description says 'read recent' adding ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence efficiently conveys the core action and a key constraint. However, it lacks structure (e.g., bullet points or sections) and could benefit from parameter hints or usage examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description is too terse. It fails to mention return value structure, pagination, or whether it supports streaming. Given moderate complexity (3 params) and no annotations, the description is insufficient for complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and description provides no parameter details. Three parameters (channel, lines, date) are completely undocumented in both schema and description, leaving the agent to guess their formats, meanings, or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Describes a specific verb ('read recent chat messages') and resource ('chat messages'), and adds a distinctive constraint ('enforcing private-channel membership'). This clearly distinguishes it from siblings like iam_chat_post (send) and iam_inbox (email).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Only states what the tool does but provides no guidance on when to use it versus alternatives (e.g., iam_chat_seen for marking read, or other read tools). No explicit when-to-use or when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iam_inboxC
List newest inbox messages for this project without marking them read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| unread_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only discloses one behavioral trait (no mark-as-read). Other traits like authentication, rate limits, or state changes are omitted. For a read-only tool, more could be said about side effects or scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words, but lacks structured presentation of key info. Could be improved by front-loading the key behavioral trait and adding parameter context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and 0% schema coverage, the description is insufficient. It covers purpose and a behavioral note but misses parameter semantics, usage guidelines, and broader behavioral transparency. Output schema exists but is not referenced.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description does not mention any parameters. Schema has 0% description coverage with two parameters (limit, unread_only) that remain unexplained. The description should clarify their meaning and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool lists newest inbox messages for the project without marking them read. It distinguishes from siblings like iam_read (which likely marks as read) and iam_list_mailboxes (lists mailboxes, not messages).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance. The phrase 'without marking them read' implies a contrast with iam_read, but no alternatives or context are provided. Sibling tools exist but are not referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iam_list_channelsA
List known IAM public and private chat channel names.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits beyond listing channels, such as rate limits, authentication requirements, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no unnecessary words, directly conveys the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no annotations, the description is brief but sufficient for a simple list operation. Output schema exists, so return values need not be explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters, so schema coverage is 100% trivially; description adds no parameter info but none is needed. Baseline score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly specifies the verb 'list' and the resource 'IAM public and private chat channel names', distinguishing it from sibling tools like iam_list_mailboxes and iam_inbox.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives or any exclusions; the description only states what it does without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iam_list_mailboxesA
List known IAM mailbox addresses and display names.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states the action and output, but does not indicate whether it is read-only, requires special permissions, or what scope the list covers (e.g., user's mailboxes vs. all).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no fluff. It front-loads the action and resource, efficiently conveying the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (no params, output schema exists). The description is minimal but sufficient for a straightforward listing. However, it lacks context about the source of mailboxes or any filtering capabilities, making it only marginally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4. The description adds no parameter info, which is acceptable since none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and clearly identifies the resource as 'IAM mailbox addresses and display names'. This clearly differentiates it from sibling tools like iam_inbox (list messages) and iam_whoami (user info).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when or why to use this tool over siblings or alternatives. It does not mention prerequisites, context (e.g., before sending), or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iam_readA
Read one inbox message by full id or unique prefix.
| Name | Required | Description | Default |
|---|---|---|---|
| mark_read | No | ||
| message_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It does not disclose that reading a message by default marks it as read (mark_read param defaults to true). This side effect is important for an agent to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no fluff, front-loaded with verb and resource. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description doesn't need to explain return values. However, it omits the important behavioral note about marking read. Could be more complete with one additional sentence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning to message_id by stating it accepts full id or unique prefix, which exceeds schema. However, mark_read parameter is not described at all despite having a default value and side effect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'read', resource 'inbox message', and identifier 'by full id or unique prefix'. It distinguishes from sibling tools like iam_inbox (list) and iam_archive (archive).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage when you have a message id or prefix, but lacks explicit 'when to use' vs alternatives like iam_inbox for listing, or iam_reply for replying. No when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iam_replyC
Send a substantive reply in an existing thread, preserving originator and routing.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | No | ||
| body | Yes | ||
| subject | No | ||
| message_id | Yes | ||
| references | No | ||
| attachments | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the reply preserves originator and routing, which is useful. However, it does not mention whether the reply adds to a thread, how attachments are handled, or any idempotency or safety traits. With no annotations, more behavioral context is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the action, and no redundant words. It is concise, but the brevity sacrifices completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, 0% schema description coverage, and no annotations, the description is insufficient. It does not explain the purpose of each parameter, nor does it clarify the distinction from iam_send or iam_read. The existence of an output schema does not compensate for missing input parameter guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description adds no information about any of the 7 parameters (message_id, body, cc, to, subject, references, attachments). While parameter names are somewhat self-explanatory, the description fails to clarify required parameters or special formats (e.g., message_id format). This is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sends a reply in an existing thread, with the verb 'Send' and resource 'existing thread'. The phrase 'preserving originator and routing' adds specific context. It distinguishes from siblings like iam_send (new message) and iam_inbox (list). However, 'substantive reply' is somewhat vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when replying in an existing thread, contrasting with iam_send for new messages. However, it does not explicitly state when to use or avoid this tool, nor does it mention alternatives like iam_read for reading. The guidance is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iam_sendC
Send a new message. Addresses may also be unique display names.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | Yes | ||
| body | Yes | ||
| subject | Yes | ||
| references | No | ||
| attachments | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description gives no behavioral traits (e.g., destructive, reversible, authentication needs). It only states the action without disclosing side effects or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded, and concise. However, it is too brief and lacks necessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters (3 required) and no output schema description, the tool definition is incomplete. Missing parameter semantics and behavioral context make it insufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no parameter descriptions), and the description only hints at 'to' field with 'display names'. No explanation of other parameters like cc, references, attachments, or subject/body format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Send' and resource 'new message', and adds a distinguishing detail about addresses being display names. It is sufficiently specific to identify the tool's core function among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like iam_reply or iam_chat_post. No exclusions or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iam_whoamiA
Return the mailbox identity bound to this MCP server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 the behavior but does not disclose any side effects, permission requirements, or other traits. For a simple read-only tool, the description is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary words. It is perfectly concise for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and a known output schema (not shown but exists), the description is largely complete. It could be improved by specifying the format of the returned identity (e.g., email address), but this is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema description coverage is 100% trivially. The description adds no parameter details, but none are needed. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Return'), the resource ('mailbox identity'), and the context ('bound to this MCP server'). It is distinct from sibling tools like 'iam_list_mailboxes' or 'iam_inbox', which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool or when not to use it. However, the name and description imply it is the go-to tool for retrieving the current identity, with no obvious alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
11 tool updates
v1.1.0- First observed
iam_archive - First observed
iam_chat_post - First observed
iam_chat_seen - First observed
iam_chat_tail - First observed
iam_inbox - First observed
iam_list_channels - First observed
iam_list_mailboxes - First observed
iam_read - First observed
iam_reply - First observed
iam_send - First observed
iam_whoami
TDQS
Each tool targets a distinct aspect of the messaging system (identity, mailboxes, inbox, read, send, reply, archive, channels, chat tail, chat post, chat seen) with no overlapping purposes.
All tools follow a consistent 'iam_verb_noun' pattern using snake_case, making the set predictable and easy to navigate.
With 11 tools, the server covers essential email and chat operations without being bloated or too sparse.
The tool set provides comprehensive coverage for sending, receiving, and managing messages and chats, though missing delete or mark-unread operations are minor gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Email inboxes for AI agents: send, receive, reply, search, and manage threaded email over MCP.
End-to-end encrypted messaging and work coordination for autonomous AI agents.
271Agent communication platform for agent to agent messaging via MCP. Messages, channels, skills.
Hosted email MCP for AI agents with inboxes, send/receive, memory, recovery, and credits.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables file-based agent-to-agent communication between Claude Code instances on the same machine, using MCP channels and plain JSON files.1214MIT
- AlicenseAqualityCmaintenanceLocal inter-agent messaging for AI coding agents via filesystem relay.42MIT
- AlicenseAqualityBmaintenanceEnables local AI coding agents to message each other on one machine using a durable SQLite mailbox and live-ask tools.9MIT
- AlicenseNot gradedqualityBmaintenanceEnables local agent-to-agent messaging between Claude Code sessions via file-based channels, with a registry, MCP tools and CLI for sending, reading, and tracking messages.2MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cerberusgamelabs/cgl-interagentmail'
If you have feedback or need assistance with the MCP directory API, please join our Discord server