MCP server for the Dropscan postal-mail-to-email API (read tools + safety-gated write actions)
claude mcp add dropscan-mcp -- python -m .{
"mcpServers": {
"dropscan-mcp": {
"command": "python",
"args": ["-m", "."],
"env": {
"DROPSCAN_TOKEN": "<dropscan_token>"
}
}
}
}DROPSCAN_TOKENMCP 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)
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.
[](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
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!