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
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools