# Postfleet (remote · api.postfleet.ai)

Give an AI agent its own email address: send, reply, read, and wait for mail.

- Trust score: 38/100 (low)
- Change this week: 0
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-20

## Components

- remote · `api.postfleet.ai`: 38/100 (this document), [markdown](https://verifymcp.io/servers/ai-postfleet-postfleet/api-mcp.md), [page](https://verifymcp.io/servers/ai-postfleet-postfleet/api-mcp)
- npm · `@postfleet/mcp`: 38/100, [markdown](https://verifymcp.io/servers/ai-postfleet-postfleet/postfleet-mcp.md), [page](https://verifymcp.io/servers/ai-postfleet-postfleet/postfleet-mcp)

## Channel facts

- Endpoint: `https://api.postfleet.ai/api/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.1.4`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-20.

- **Endpoint Security**: 94/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - The endpoint enforces authorisation, advertised via RFC 9728 protected-resource metadata.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 0/100
  - Transport blocked by authentication: the endpoint requires auth we don't have to verify streamable-http.
- **Schema Quality & AI Usability**: 0/100
  - Schema blocked by authentication: the endpoint requires auth we don't have to read it.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage blocked by authentication: the endpoint requires auth we don't have to read its tools.
- **Tool Safety**: 0/100
  - Tool safety blocked by authentication: the endpoint requires auth we don't have to read its tools.
- **Capabilities**: 0/100
  - Capabilities blocked by authentication: the endpoint requires auth we don't have to read them.

**Unverified: 6 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### How do I install the Postfleet MCP server?

Postfleet is a hosted endpoint at https://api.postfleet.ai/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http ai-postfleet-postfleet 'https://api.postfleet.ai/api/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "ai-postfleet-postfleet": {
      "url": "https://api.postfleet.ai/api/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "ai-postfleet-postfleet": {
      "type": "http",
      "url": "https://api.postfleet.ai/api/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.ai-postfleet-postfleet]
url = "https://api.postfleet.ai/api/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-postfleet-postfleet": {
      "type": "remote",
      "url": "https://api.postfleet.ai/api/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add ai-postfleet-postfleet --url 'https://api.postfleet.ai/api/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  ai-postfleet-postfleet:
    url: "https://api.postfleet.ai/api/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "ai-postfleet-postfleet": {
      "Transport": "http",
      "Url": "https://api.postfleet.ai/api/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add ai-postfleet-postfleet -t streamable-http -u 'https://api.postfleet.ai/api/mcp'
```

### Other

```json
{
  "mcpServers": {
    "ai-postfleet-postfleet": {
      "type": "http",
      "url": "https://api.postfleet.ai/api/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-26 (score 38, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-08-25 (score 38, 0)

- [security regression] Endpoint reachability: reachable → behind authorisation

### 2026-08-24 (score 38)

First indexed and scored.

## MCP tools (14)

### `list_mailboxes` (~100 tokens)

List the mailboxes you can use, newest first, each with its id and email address. Call this when you need a mailbox_id for any other tool, or to check whether you already have a mailbox before creating one — it is usually the first call in a workflow. Returns every mailbox on the account, or just your own if your API key is scoped to a single mailbox. An empty list means you have none yet — use create_mailbox.

### `create_mailbox` (~247 tokens)

Create a NEW email mailbox this agent owns. Call this when list_mailboxes shows you have no suitable mailbox yet — mailboxes persist across sessions, so creating a second one for the same purpose strands mail in the first. Returns a working address immediately. Optional slug personalizes the address (agent-<slug>@...). To create the mailbox on a custom domain instead of the shared one (<slug>@yourdomain.com), pass a domain_id from list_domains — the domain must be verified.

Input parameters:

- `display_name` (string): Optional. Human-readable From name shown to recipients, e.g. "Acme Support Bot".
- `domain_id` (string): Optional. Id of a VERIFIED custom domain from list_domains, to host the mailbox at <slug>@yourdomain.com. Omit to use the shared platform domain.
- `extraction_schema_id` (string): Optional. Id of a JSON Schema to extract inbound mail into. Without it, messages arrive cleaned and screened but with no structured extraction.
- `slug` (string): Optional. Personalizes the address as agent-<slug>@... Lowercase letters, digits and dashes, max 41 chars. Omit for a generated address.

### `list_domains` (~87 tokens)

List the account's custom sending domains with their id, name, and verification status. Call this when you want to create a mailbox on a custom domain (pass the id of a verified domain as create_mailbox's domain_id), or to check whether a domain has finished verifying. Only status "verified" domains can host mailboxes; an empty list means only the shared platform domain is available.

### `send_email` (~256 tokens)

Send a new email from one of your mailboxes. Call this when starting a NEW conversation; to answer an email you received, use reply_email instead (it threads correctly). Pass a client_id (any unique string you make up) and reuse the SAME client_id if you retry after an error — that guarantees the email is sent at most once. If the mailbox requires human approval, the send is queued as a draft and returns {draft_id, status:"pending_approval"} instead of a message id — that is NOT a failure and must NOT be retried; the email goes out once a human approves it (check with list_drafts).

Input parameters:

- `client_id` (string, required): REQUIRED idempotency key — any unique string you invent for this send. Reuse the SAME value when retrying after an error and the email goes out at most once; a new value sends a second copy. Cannot s…
- `mailbox_id` (string, required): Id of the mailbox to send from, from list_mailboxes.
- `subject` (string, required): Subject line, max 200 characters.
- `text` (string, required): Plain-text body, max 50,000 characters.
- `to` (string, required): Recipient email address.

### `reply_email` (~258 tokens)

Reply to an email you received. Call this when answering an existing message — recipient, subject, and conversation threading are derived automatically from the original. Pass a client_id (any unique string you make up) and reuse the SAME client_id if you retry after an error — that guarantees the reply is sent at most once. If the mailbox requires human approval, the reply is queued as a draft and returns {draft_id, status:"pending_approval"} instead of a message id — that is NOT a failure and must NOT be retried; it is sent once a human approves it (check with list_drafts).

Input parameters:

- `client_id` (string, required): REQUIRED idempotency key — any unique string you invent for this reply. Reuse the SAME value when retrying after an error and the reply goes out at most once; a new value sends a second copy. Cannot…
- `mailbox_id` (string, required): Id of the mailbox the original message arrived in.
- `reply_to_message_id` (string, required): Id of the message being replied to, from list_inbox or read_email. Recipient, subject and threading are derived from it.
- `text` (string, required): Plain-text reply body, max 50,000 characters.

### `list_inbox` (~88 tokens)

List recent messages in a mailbox, newest first, with comprehension status per message. Call this when checking what has arrived; use read_email for full content and extracted data.

Input parameters:

- `limit` (integer): Optional. How many messages to return, 1-100. Defaults to a small recent page.
- `mailbox_id` (string, required): Id of the mailbox to list, from list_mailboxes.

### `read_email` (~76 tokens)

Read one email in full: cleaned body, sanitization report (screened against known hidden-content patterns), classification, and data extracted to the mailbox schema. Call this when you need the content or extraction of a specific message.

Input parameters:

- `message_id` (string, required): Id of the message to read, from list_inbox or wait_for_email.

### `wait_for_email` (~158 tokens)

Block until a matching email arrives in a mailbox (or time out). Call this when you just sent an email and need the reply, or are expecting an inbound message — instead of polling list_inbox yourself. Returns the full message on match, or {timed_out:true}.

Input parameters:

- `from_contains` (string): Optional. Only match messages whose sender address contains this substring.
- `mailbox_id` (string, required): Id of the mailbox to watch, from list_mailboxes.
- `subject_contains` (string): Optional. Only match messages whose subject contains this substring.
- `timeout_seconds` (integer): Optional. How long to wait before giving up, 1-120 seconds. On expiry returns {timed_out:true} rather than an error.

### `create_draft` (~201 tokens)

Prepare an email as a draft without sending it. Call this when you want to stage a message for later or for a human to review before it goes out — send it afterward with send_draft. Same fields as send_email, or omit to/subject and pass reply_to_message_id to draft a threaded reply. Returns the draft id with status "draft".

Input parameters:

- `mailbox_id` (string, required): Id of the mailbox the draft belongs to, from list_mailboxes.
- `reply_to_message_id` (string): Optional. Draft a threaded reply to this message; recipient and subject are derived from it. Cannot be changed later with update_draft.
- `subject` (string): Subject line. Omit only when passing reply_to_message_id, which supplies it.
- `text` (string, required): Plain-text body, max 50,000 characters.
- `to` (string): Recipient address. Omit only when passing reply_to_message_id, which supplies it.

### `list_drafts` (~84 tokens)

List the open drafts in a mailbox (status draft, pending_approval, or sending), newest first. Call this when you need to see messages you have staged or that are queued waiting on human approval, e.g. after a send returned status "pending_approval".

Input parameters:

- `mailbox_id` (string, required): Id of the mailbox whose drafts to list, from list_mailboxes.

### `get_draft` (~87 tokens)

Read one draft in full by its id: recipient, subject, body text, and current status. Call this when you need the content of a specific draft — e.g. to review what is queued for approval after list_drafts, or before editing it with update_draft.

Input parameters:

- `id` (string, required): Id of the draft to read, from create_draft or list_drafts.

### `update_draft` (~174 tokens)

Edit the to, subject, or text of a draft that has not been sent yet — omitted fields keep their current value. Call this when a draft needs changes, e.g. a human declined to approve it and you are revising it. The reply target cannot be changed (create a new draft to reply to a different message), and a draft that is already sending or sent can no longer be edited.

Input parameters:

- `id` (string, required): Id of the draft to edit, from create_draft or list_drafts.
- `subject` (string): Optional. New subject line. Omit to keep the current one.
- `text` (string): Optional. New plain-text body. Omit to keep the current one.
- `to` (string): Optional. New recipient address. Omit to keep the current one.

### `send_draft` (~113 tokens)

Send a draft you prepared, by its id. Call this when a staged draft is ready to go out. If the mailbox requires human approval, this returns 202 {draft_id, status:"pending_approval"} — the draft is queued for a human to approve, which is NOT a failure and must NOT be retried; it is sent once approved. Otherwise it sends immediately and returns the message id.

Input parameters:

- `id` (string, required): Id of the draft to send, from create_draft or list_drafts.

### `delete_draft` (~85 tokens)

Discard a draft by its id so it will never be sent. Call this when a staged or pending-approval message should be withdrawn — e.g. it is no longer needed or was created by mistake. A draft that is already sending or sent cannot be deleted.

Input parameters:

- `id` (string, required): Id of the draft to discard, from create_draft or list_drafts.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/ai-postfleet-postfleet/api-mcp#diagnostics

## Score history

- 2026-09-20: 38
- 2026-09-19: 38
- 2026-09-18: 38
- 2026-09-17: 38
- 2026-09-16: 38
- 2026-09-15: 38
- 2026-09-14: 38
- 2026-09-13: 38
- 2026-09-12: 38
- 2026-09-11: 38
- 2026-09-10: 38
- 2026-09-09: 38
- 2026-09-08: 38
- 2026-09-07: 38
- 2026-09-06: 38
- 2026-09-05: 38
- 2026-09-04: 38
- 2026-09-03: 38
- 2026-09-02: 38
- 2026-09-01: 38
- 2026-08-31: 38
- 2026-08-30: 38
- 2026-08-29: 38
- 2026-08-28: 38
- 2026-08-27: 38
- 2026-08-26: 38
- 2026-08-25: 38
- 2026-08-24: 38

## Common questions

### What is the Postfleet MCP server?

Postfleet is an MCP server listed in the public MCP registry as ai.postfleet/postfleet. Give an AI agent its own email address: send, reply, read, and wait for mail. This page covers its hosted endpoint (https://api.postfleet.ai/api/mcp).

### Is the Postfleet MCP server safe to use?

Postfleet scores 38 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Postfleet MCP server expose?

Postfleet exposes 14 tools: list_mailboxes, create_mailbox, list_domains, send_email, reply_email, and 9 more. Their descriptions and schemas cost roughly 2,014 tokens of context every time the server is loaded.

### Does the Postfleet MCP server require authentication?

Yes. Postfleet asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the Postfleet MCP server still maintained?

Postfleet is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://api.postfleet.ai/api/mcp
- Repository: https://github.com/Thestral12/postfleet-mcp
- Website: https://postfleet.ai/
- Changelog RSS feed: https://verifymcp.io/servers/ai-postfleet-postfleet/api-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/ai-postfleet-postfleet/api-mcp.json
- HTML version of this page: https://verifymcp.io/servers/ai-postfleet-postfleet/api-mcp
