# io.github.iancollins27/mailsnail (npm · mailsnail)

Send USPS letters, postcards & certified mail from any agent. No signup; pay-per-piece via Stripe.

- Trust score: 59/100 (low)
- Change this week: +17
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `mailsnail`: 59/100 (this document), [markdown](https://verifymcp.io/servers/iancollins27-mailsnail/mailsnail.md), [page](https://verifymcp.io/servers/iancollins27-mailsnail/mailsnail)

## Channel facts

- Registry: `npm`
- Package: `mailsnail`
- Version: `0.6.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, 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-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (96 of 100), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (96 of 100), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 20 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 54/100
  - AI-judged instruction clarity (fair).
  - Context-footprint check failed: tool/resource definitions use about 911 tokens (~130/item across 7 items; 7 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 79/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 37% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add iancollins27-mailsnail -- npx -y mailsnail
```

### Codex

```bash
codex mcp add iancollins27-mailsnail -- npx -y mailsnail
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "iancollins27-mailsnail": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "mailsnail"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add iancollins27-mailsnail --command npx --arg -y --arg mailsnail
```

### Hermes

```yaml
mcp_servers:
  iancollins27-mailsnail:
    command: "npx"
    args: ["-y", "mailsnail"]
```

### Other

```json
{
  "mcpServers": {
    "iancollins27-mailsnail": {
      "command": "npx",
      "args": [
        "-y",
        "mailsnail"
      ]
    }
  }
}
```

## 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-02 (score 59, +41)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] License: unverified → pass
- [functional improvement] Schema quality: unverified → fair
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional] First check of Schema quality: unverified
- [functional] Licence: MIT

### 2026-07-31 (score 18, −24)

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

### 2026-07-27 (score 42)

First indexed and scored.

## MCP tools (7)

### `verify_address` (~69 tokens)

Verify and normalize a US mailing address. Run this on user-provided addresses before sending mail.

Input parameters:

- `address_city` (string)
- `address_line1` (string, required)
- `address_line2` (string)
- `address_state` (string)
- `address_zip` (string)

### `preview_letter` (~212 tokens)

Generate a PROOF of a letter WITHOUT charging or mailing. Returns `proof_url` (a viewable PDF of exactly what will be printed and mailed, including the address cover sheet), the CASS-verified recipient address, the exact price, and a `draft_id`. Best practice: call this FIRST, show the user the proof_url and price, get explicit confirmation, then call send_letter with the returned draft_id + a payment_token. Managed/gateway mode only.

Input parameters:

- `body_text` (string): Plain text body. Rendered to a letter-sized PDF server-side. Managed/gateway provider only.
- `color` (boolean)
- `description` (string)
- `double_sided` (boolean)
- `extra_service` (string): Adds tracking. `certified` for legal/compliance mail.
- `file_url` (string): Public URL to a pre-rendered PDF letter. Letter-size 8.5x11 expected.
- `from` (required)
- `to` (object, required)

### `send_letter` (~355 tokens)

Send a physical letter via USPS. RECOMMENDED FLOW: first call preview_letter, show the user the returned proof_url + price, get explicit confirmation, then call send_letter with the returned `draft_id` and a `payment_token` — this charges and mails exactly the proofed letter. You may also send one-shot by providing the full letter (to, from, and body_text or file_url) plus payment_token, without a draft_id. `body_text` (plain text, rendered server-side) is managed/gateway-mode only; click2mail/lob require file_url. Use `extra_service: 'certified'` for certified mail (recommended for legal notices).

Input parameters:

- `body_text` (string): Plain text body of the letter. Newlines preserved. Rendered to a letter-sized PDF server-side. Managed/gateway provider only.
- `color` (boolean)
- `description` (string)
- `double_sided` (boolean)
- `draft_id` (string): Confirm a letter previewed via preview_letter. Provide this plus payment_token to charge and mail exactly that proof. Omit for a one-shot send.
- `extra_service` (string): Adds tracking. `certified` is the most common; useful for legal/compliance mail.
- `file_url` (string): Public URL to a pre-rendered PDF letter. Letter-size 8.5x11 expected.
- `from`
- `payment_token` (string): Stripe Shared Payment Token (spt_...). Required when MAIL_PROVIDER=managed. If omitted in managed mode, the tool returns a payment_required error with the quoted price so you can mint an SPT and retr…
- `to` (object)

### `send_postcard` (~163 tokens)

Send a physical postcard. Provide a public URL to a PDF (front + back combined for Click2Mail; separate front/back for Lob).

Input parameters:

- `back_url` (string): URL to PDF for the postcard back. Required for Lob; ignored for Click2Mail.
- `description` (string)
- `from` (required)
- `front_url` (string, required): URL to PDF for the postcard front (or combined front+back for Click2Mail).
- `payment_token` (string): Stripe Shared Payment Token (spt_...). Required when MAIL_PROVIDER=managed. If omitted in managed mode, the tool returns a payment_required error with the quoted price so you can mint an SPT and retr…
- `size` (string)
- `to` (object, required)

### `get_letter` (~30 tokens)

Fetch the status of a previously sent letter by id.

Input parameters:

- `id` (string, required): Provider letter/job id.

### `list_letters` (~47 tokens)

List recent letters (Lob only — Click2Mail does not expose a list endpoint).

Input parameters:

- `after` (string)
- `before` (string)
- `limit` (integer)

### `cancel_letter` (~35 tokens)

Cancel a letter before it enters production. Cancellation windows are short and provider-specific.

Input parameters:

- `id` (string, required): Provider letter/job id.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/iancollins27-mailsnail/mailsnail#diagnostics

## Score history

- 2026-08-03: 59
- 2026-08-02: 59
- 2026-08-01: 18
- 2026-07-31: 18
- 2026-07-30: 42
- 2026-07-28: 42
- 2026-07-27: 42

## Links

- npm package: https://www.npmjs.com/package/mailsnail
- Socket report: https://socket.dev/npm/package/mailsnail
- Repository: https://github.com/iancollins27/mailsnail
- Website: https://mailsnail.dev/
- Changelog RSS feed: https://verifymcp.io/servers/iancollins27-mailsnail/mailsnail/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/iancollins27-mailsnail/mailsnail/changelog.json
- HTML version of this page: https://verifymcp.io/servers/iancollins27-mailsnail/mailsnail
