Skip to main content
ClaudeWave

MCP server for the Dropscan postal-mail-to-email API (read tools + safety-gated write actions)

MCP ServersOfficial Registry0 stars0 forksPythonMITUpdated today
Install in Claude Code / Claude Desktop
Method: pip / Python · .
Claude Code CLI
claude mcp add dropscan-mcp -- python -m .
claude_desktop_config.json (Claude Desktop)
{
  "mcpServers": {
    "dropscan-mcp": {
      "command": "python",
      "args": ["-m", "."],
      "env": {
        "DROPSCAN_TOKEN": "<dropscan_token>"
      }
    }
  }
}
1. Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
2. Replace any <placeholder> values with your API keys or paths.
3. Restart Claude. The MCP server and its tools appear automatically.
💡 Install first: pip install .
Detected environment variables
DROPSCAN_TOKEN
Use cases

MCP Servers overview

# dropscan-mcp

MCP (Model Context Protocol) server for the [Dropscan](https://dropscan.de) postal-mail-to-email API. Dropscan receives your physical letters at a scanbox; this server lets your MCP client list mailings, download the scans (PDF / ZIP / envelope image / OCR text), and, when explicitly enabled, request actions (scan / forward / destroy) and manage recipients, forwarding addresses and webhook rules.

mcp-name: io.github.bitterdev/dropscan-mcp

## Safety first: Dropscan has no sandbox

Every request hits the **real production account**. Actions are irreversible: a **destroyed letter is physically shredded and gone**, a **forward** physically mails the letter and costs money.

Because of that, all write/action tools are gated **twice**:

1. **`DROPSCAN_ALLOW_WRITES`** environment flag. Unless it is set to `1`/`true`/`yes`, every non-GET tool refuses to run. It is **disabled by default**.
2. **`confirm: true`** parameter. Each write/action tool takes an explicit `confirm` argument (default `false`) and refuses unless it is `true`.

Read-only `GET` tools are always available and never change state.

## Tools

### Read-only (always available)

| Tool | Endpoint |
| --- | --- |
| `list_scanboxes` | `GET /scanboxes` |
| `list_mailings(scanbox_id, current_status?, older_than?)` | `GET /scanboxes/{id}/mailings` |
| `get_mailing(scanbox_id, uuid)` | `GET /scanboxes/{id}/mailings/{uuid}` |
| `get_mailing_pdf(scanbox_id, uuid, save_path?)` | `GET .../{uuid}/pdf` |
| `get_mailing_zip(scanbox_id, uuid, save_path?)` | `GET .../{uuid}/zip` |
| `get_mailing_envelope(scanbox_id, uuid, save_path?)` | `GET .../{uuid}/envelope` |
| `get_mailing_plaintext(scanbox_id, uuid)` | `GET .../{uuid}/plaintext` |
| `list_recipients(scanbox_id)` | `GET /scanboxes/{id}/recipients` |
| `get_recipient(scanbox_id, recipient_id)` | `GET /scanboxes/{id}/recipients/{id}` |
| `get_forwarding_address(address_id)` | `GET /forwarding_addresses/{id}` |
| `get_shipment(shipment_id)` | `GET /shipments/{id}` |
| `list_webhook_rules()` | `GET /webhook_rules` |
| `get_webhook_rule(rule_id)` | `GET /webhook_rules/{id}` |

The download tools save the asset to disk (default `~/Downloads`, override with `save_path` or the `DROPSCAN_DOWNLOAD_DIR` env var) and return the saved path, byte size and content type.

### Write / action (double-gated: `DROPSCAN_ALLOW_WRITES=1` **and** `confirm=true`)

| Tool | Endpoint |
| --- | --- |
| `request_mailing_action(scanbox_id, mailing_uuid, action_type, forwarding_address_id?, forwarding_date?, confirm)` | `POST .../{uuid}/action_requests` |
| `cancel_mailing_action(scanbox_id, mailing_uuid, action_request_id, confirm)` | `DELETE .../{uuid}/action_requests/{id}` |
| `set_mailing_recipient(scanbox_id, mailing_uuid, recipient_id, confirm)` | `PUT .../{uuid}/recipient` |
| `create_recipient(scanbox_id, type, firstname?, lastname?, name?, confirm)` | `POST /scanboxes/{id}/recipients` |
| `create_forwarding_address(firstname, lastname, street, number, zip_code, city, country_code, company?, info?, state?, confirm)` | `POST /forwarding_addresses` |
| `create_webhook_rule(url, events, authorization_header?, confirm)` | `POST /webhook_rules` |
| `update_webhook_rule(rule_id, url?, events?, authorization_header?, confirm)` | `PATCH /webhook_rules/{id}` |
| `delete_webhook_rule(rule_id, confirm)` | `DELETE /webhook_rules/{id}` |

**`action_type`** is one of `scan`, `forward`, `destroy` (exact enum from the API). For `forward`, both `forwarding_address_id` and `forwarding_date` (ISO `YYYY-MM-DD`) are required.

**Webhook `events`**: `mailing_received`, `scan_requested`, `mailing_scanned`, `mailing_archived`, `mailing_trashed`, `mailing_shredded`, `mailing_added_to_shipment`, `mailing_removed_from_shipment`, `shipment_sent`, `package_tracking_updated`.

## Requirements

- Python >= 3.10
- A Dropscan personal access token

## Installation

From a local clone:

```bash
python3 -m venv .venv
./.venv/bin/pip install .
```

## Configuration

The token is read from the `DROPSCAN_TOKEN` environment variable and sent as `Authorization: Bearer <token>`. It is never hardcoded.

### Claude Code

```bash
claude mcp add dropscan -e DROPSCAN_TOKEN="dspat-..." -- dropscan-mcp
```

### Claude Desktop / generic MCP client

```json
{
  "mcpServers": {
    "dropscan": {
      "command": "/absolute/path/to/dropscan-mcp/.venv/bin/python",
      "args": ["-m", "dropscan_mcp.server"],
      "env": {
        "DROPSCAN_TOKEN": "dspat-..."
      }
    }
  }
}
```

To enable the write/action tools, add `"DROPSCAN_ALLOW_WRITES": "1"` to `env`. Leave it out to keep the server strictly read-only.

The server runs over stdio.

## Environment variables

| Variable | Description |
| --- | --- |
| `DROPSCAN_TOKEN` | **Required.** Dropscan personal access token (Bearer). |
| `DROPSCAN_ALLOW_WRITES` | Set to `1`/`true` to enable write/action tools. Default: disabled. |
| `DROPSCAN_DOWNLOAD_DIR` | Default directory for downloaded PDFs/ZIPs/images. Default: `~/Downloads`. |

## License

MIT, see [LICENSE](LICENSE).

## Author

Fabian Bitter (fabian@bitter.de)
ai-agentsclaudedropscanmcpmcp-servermodel-context-protocolpostal-mailscan-to-email

What people ask about dropscan-mcp

What is bitterdev/dropscan-mcp?

+

bitterdev/dropscan-mcp is mcp servers for the Claude AI ecosystem. MCP server for the Dropscan postal-mail-to-email API (read tools + safety-gated write actions) It has 0 GitHub stars and was last updated today.

How do I install dropscan-mcp?

+

You can install dropscan-mcp by cloning the repository (https://github.com/bitterdev/dropscan-mcp) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.

Is bitterdev/dropscan-mcp safe to use?

+

bitterdev/dropscan-mcp has not been audited yet by our security agent. Review the original repository on GitHub before using it in production.

Who maintains bitterdev/dropscan-mcp?

+

bitterdev/dropscan-mcp is maintained by bitterdev. The last recorded GitHub activity is from today, with 0 open issues.

Are there alternatives to dropscan-mcp?

+

Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.

Deploy dropscan-mcp to your cloud

Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.

Maintain this repo? Add a badge to your README

Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.

Featured on ClaudeWave: bitterdev/dropscan-mcp
[![Featured on ClaudeWave](https://claudewave.com/api/badge/bitterdev-dropscan-mcp)](https://claudewave.com/repo/bitterdev-dropscan-mcp)
<a href="https://claudewave.com/repo/bitterdev-dropscan-mcp"><img src="https://claudewave.com/api/badge/bitterdev-dropscan-mcp" alt="Featured on ClaudeWave: bitterdev/dropscan-mcp" width="320" height="64" /></a>

More MCP Servers

dropscan-mcp alternatives