Skip to main content

dropscan-mcp

MCP (Model Context Protocol) server for the Dropscan 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:

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

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

Claude Desktop / generic MCP client

{
  "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.

Author

Fabian Bitter (fabian@bitter.de)

Metadata

Release files for dropscan-mcp 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dropscan-mcp 0.1.0
File Size Uploaded Provenance Actions
dropscan_mcp-0.1.0.tar.gz 7.9 kB Without provenance Details for dropscan_mcp-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for dropscan-mcp 0.1.0
File Interpreter ABI Platform Actions
dropscan_mcp-0.1.0-py3-none-any.whl Python 3 none any Details for dropscan_mcp-0.1.0-py3-none-any.whl

Total release size: 16.9 kB

Release files / dropscan_mcp-0.1.0.tar.gz

Download URL dropscan_mcp-0.1.0.tar.gz
Size 7.9 kB
Tags Source
SHA-256 checksum
How to use checksums
ea2c5cc1feb35f27fce94196305bd004e0bc4f87daa56e793be05e962368aa44
BLAKE2b-256 checksum
How to use checksums
12a64961015fb1abd80f8144cfb5f9b5c998d96874fd97575eddddf1dcbcc076
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.5

Release files / dropscan_mcp-0.1.0-py3-none-any.whl

Download URL dropscan_mcp-0.1.0-py3-none-any.whl
Size 9.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a865b15be57acfa3eb149c6499f6623422cce591c0f817a5b2c067cf5ff875a1
BLAKE2b-256 checksum
How to use checksums
370aeaa446a33004ad52d3c5d144e2b006f398b2bf052610e23f5ca91b082c12
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.5

Security for dropscan-mcp 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page