Dropscan MCP
Proporciona a un agente tu buzón físico a través del servicio de escaneo a correo electrónico de Dropscan, leyendo el correo escaneado y, tras una doble compuerta, reenviándolo o destruyéndolo.
Documentación
dropscan-mcp
Servidor MCP (Model Context Protocol) para la API de correo postal a correo electrónico de Dropscan. Dropscan recibe tus cartas físicas en un scanbox; este servidor permite que tu cliente MCP liste envíos, descargue los escaneos (PDF / ZIP / imagen del sobre / texto OCR) y, cuando se habilita explícitamente, solicite acciones (escanear / reenviar / destruir) y gestione destinatarios, direcciones de reenvío y reglas de webhook.
mcp-name: io.github.bitterdev/dropscan-mcp
Seguridad ante todo: Dropscan no tiene sandbox
Cada solicitud afecta a la cuenta de producción real. Las acciones son irreversibles: una carta destruida es triturada físicamente y desaparece, un reenvío envía físicamente la carta por correo y cuesta dinero.
Por ello, todas las herramientas de escritura/acción están protegidas con doble compuerta:
- Indicador de entorno
DROPSCAN_ALLOW_WRITES. A menos que esté establecido en1/true/yes, toda herramienta que no sea GET se niega a ejecutarse. Está deshabilitado por defecto. - Parámetro
confirm: true. Cada herramienta de escritura/acción toma un argumentoconfirmexplícito (por defectofalse) y se niega a menos que seatrue.
Las herramientas de solo lectura GET están siempre disponibles y nunca cambian el estado.
Herramientas
Solo lectura (siempre disponibles)
| Herramienta | 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} |
Las herramientas de descarga guardan el archivo en disco (por defecto ~/Downloads, se puede sobrescribir con save_path o la variable de entorno DROPSCAN_DOWNLOAD_DIR) y devuelven la ruta guardada, el tamaño en bytes y el tipo de contenido.
Escritura / acción (doble compuerta: DROPSCAN_ALLOW_WRITES=1 y confirm=true)
| Herramienta | 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 es uno de scan, forward, destroy (enumeración exacta de la API). Para forward, se requieren tanto forwarding_address_id como forwarding_date (ISO YYYY-MM-DD).
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.
Requisitos
- Python >= 3.10
- Un token de acceso personal de Dropscan
Instalación
Desde un clon local:
python3 -m venv .venv
./.venv/bin/pip install .
Configuración
El token se lee de la variable de entorno DROPSCAN_TOKEN y se envía como Authorization: Bearer <token>. Nunca se codifica de forma fija.
Claude Code
claude mcp add dropscan -e DROPSCAN_TOKEN="dspat-..." -- dropscan-mcp
Claude Desktop / cliente MCP genérico
{
"mcpServers": {
"dropscan": {
"command": "/absolute/path/to/dropscan-mcp/.venv/bin/python",
"args": ["-m", "dropscan_mcp.server"],
"env": {
"DROPSCAN_TOKEN": "dspat-..."
}
}
}
}
Para habilitar las herramientas de escritura/acción, añade "DROPSCAN_ALLOW_WRITES": "1" a env. Omítelo para mantener el servidor estrictamente de solo lectura.
El servidor se ejecuta sobre stdio.
Variables de entorno
| Variable | Descripción |
|---|---|
DROPSCAN_TOKEN | Obligatorio. Token de acceso personal de Dropscan (Bearer). |
DROPSCAN_ALLOW_WRITES | Establécelo en 1/true para habilitar las herramientas de escritura/acción. Por defecto: deshabilitado. |
DROPSCAN_DOWNLOAD_DIR | Directorio predeterminado para PDFs/ZIPs/imágenes descargados. Por defecto: ~/Downloads. |
Licencia
MIT, ver LICENSE.
Autor
Fabian Bitter (fabian@bitter.de)