# deaddrop-mcp MCP server that lets AI agents (Claude Code, Claude Desktop, anything MCP-capable) share secrets through [DeadDrop](https://deaddrop.jerrywrongalot.workers.dev) - self-destructing one-time links, paid per call with USDC over [x402](https://www.x402.org). ![DeadDrop demo: a secret is created, shared as a link, and destroyed after one read](demo.gif) Two tools: - **`deaddrop_create_secret`** - encrypts the secret locally (AES-256-GCM), pays $0.01 in USDC via x402, returns a one-time link. The link works exactly once, then the secret is destroyed. - **`deaddrop_reveal_secret`** - consumes a one-time link and decrypts locally. Free, no wallet needed. Zero-knowledge end to end: the AES key is generated in this process and travels only in the link fragment (`#...`); the payer wallet key also stays here. The DeadDrop server only ever sees ciphertext and an x402 payment. ## Install ``` git clone https://github.com/jerrywrongalot-byte/deaddrop-mcp cd deaddrop-mcp npm install ``` ## Configure Claude Code: ``` claude mcp add deaddrop -e DEADDROP_PAYER_KEY=0x -- node /absolute/path/to/deaddrop-mcp/server.mjs ``` Claude Desktop / any MCP client (`.mcp.json` / `claude_desktop_config.json`): ```json { "mcpServers": { "deaddrop": { "command": "node", "args": ["/absolute/path/to/deaddrop-mcp/server.mjs"], "env": { "DEADDROP_PAYER_KEY": "0x" } } } } ``` ### Environment | Variable | Meaning | |---|---| | `DEADDROP_PAYER_KEY` | EVM private key holding USDC on Base. Needed only for CREATE (it pays $0.01/secret); reveal works without it. | | `DEADDROP_NETWORK` | `base` (default) or `base-sepolia` for testing. | | `DEADDROP_BASE_URL` | Override the service URL (defaults to the live service). | ## Wallet safety (read this) - Use a **dedicated key** with a small USDC balance (a few dollars covers hundreds of secrets), not a main wallet. The key signs real payments. - Payments are **gasless for the payer** (EIP-3009): the key needs USDC only, no ETH. - x402-fetch enforces a max-payment cap (default 0.10 USDC per call), so a rogue or mistyped server URL cannot drain the key. - The service never receives the key OR the plaintext - see the API's agent-facing spec at [/llms.txt](https://deaddrop.jerrywrongalot.workers.dev/llms.txt). ## Example > "Drop this API key for my coworker: sk-live-... - 1 day expiry" The agent calls `deaddrop_create_secret`, pays a cent, and hands back `https://deaddrop.../s/#`. First open reveals and destroys it; link previewers can't burn it (reveal is an explicit action). ## License MIT