radmail-mcp

Email OS for agents - real-inbox search, triage, commitments, and a verifiable BEC hard-stop.

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
65%
Naming quality
90%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~559Tokens (tool definitions)
~469 BTypical response size
Minimal attention impact (0.44% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "radmail-mcp": {
      "command": "npx",
      "args": [
        "radmail-mcp"
      ]
    }
  }
}

Runnable packages

npmradmail-mcp0.5.0stdio

Remote endpoints

https://radmail.ai/api/mcp/sandboxstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪triage_inbox

Rank a mailbox on two axes (importance x urgency) and return what needs a human now versus what can wait or is already handled — with each thread's open commitment (the promise you owe or are owed, and whether it's overdue) surfaced inline, so the follow-through is visible on the very first call.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢list_right_now

Return only the 'Right Now' lane — the most recent and most important messages that genuinely can't be missed.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢why_surfaced(message_id)

Explain in plain English why a given message was surfaced — the signals (sender, urgency, commitment) behind its rank.

Input Schema

{
  "type": "object",
  "properties": {
    "message_id": {
      "type": "string",
      "description": "An id from triage_inbox, e.g. m_001."
    }
  },
  "required": [
    "message_id"
  ],
  "additionalProperties": false
}
🟢list_commitments

Extract the open commitments in the correspondence, both owed by you and owed to you, with who and by-when.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟡draft_reply(message_id, guidance)

Draft a reply for a thread. It returns text for a human to review — it does not and cannot send it.

Input Schema

{
  "type": "object",
  "properties": {
    "message_id": {
      "type": "string",
      "description": "An id from triage_inbox to draft a reply for."
    },
    "guidance": {
      "type": "string",
      "description": "Optional steer for the draft. Never sent — review-only."
    }
  },
  "required": [
    "message_id"
  ],
  "additionalProperties": false
}
🟡search(query, limit)

Find a specific message by sender, subject, or content. Results come back most-relevant + newest first, and every hit says where it matched (from / subject / body) and why. On this hosted sandbox it searches the built-in demo inbox; run the radmail-mcp package with RADMAIL_API_KEY set and the same tool searches your REAL ingested inbox read-only (with from / after / before filters) via the v1 search API.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Words to find, matched against from / subject / body. Every word must appear somewhere in a message."
    },
    "limit": {
      "type": "number",
      "description": "Max hits to return (default 10)."
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools