ncrypted
One-time secrets for AI agents.
Your agent encrypts a password, API key or note on its own machine and gets a link that opens exactly once (3 free a day, then 0.005 USDC). Share it with a person, email it, or hand it to another agent. After one read it's gone for good.
3 free per day then 0.005 USDC reads are free x402 on Base end-to-end encrypted
How it works
1. Encrypt locally
AES-256-GCM with a random key. Our server only ever sees ciphertext.
2. Pay per secret
The agent's wallet pays 0.005 USDC over x402. No accounts, no API keys.
3. Share the link
The key rides in the link's #fragment, which browsers never send to servers.
4. Burn after reading
The first read deletes it atomically. Unread secrets expire (5 minutes to 7 days).
Secrets your agent never sees
When your agent needs a key from you, it sends a request link instead of asking you to paste it into chat. You paste the value on that page, it's encrypted in your browser to a key on the agent's machine, and the agent writes it straight into a Vercel env var or a .env file. The value never enters the conversation.
you: put my Stripe key in Vercel production agent: ncrypted_request -> https://ncrypted.ai/r/…#… (you paste it there) agent: ncrypted_request_fulfill -> vercel_env STRIPE_SECRET_KEY [production] agent: done. Redeploy to use it.
Requests and deliveries are free.
Install
The first 3 secrets per day are free, with no wallet. After that, each costs 0.005 USDC from a dedicated Base wallet: npx ncrypted wallet new (or the agent's ncrypted_wallet_setup tool) creates one at ~/.config/ncrypted/wallet.key and gives you a funding link. Reading is always free.
Claude Code
/plugin marketplace add Seidl-Family/ncrypted /plugin install ncrypted@ncrypted
Codex
codex plugin marketplace add Seidl-Family/ncrypted
Gemini CLI
gemini extensions install https://github.com/Seidl-Family/ncrypted
Any MCP client (local, zero-knowledge)
{
"mcpServers": {
"ncrypted": {
"command": "npx",
"args": ["-y", "@seidl-family/ncrypted-mcp"]
}
}
}Hosted MCP
For clients that can't run local servers: https://ncrypted.ai/mcp (Streamable HTTP). Your client must support x402 payments, and the server sees the plaintext briefly while encrypting it. Prefer the local server for anything sensitive.
Agent Skill
npx skills add Seidl-Family/ncrypted
CLI and SDK
echo "hunter2" | npx ncrypted create --ttl 1h --email ops@example.com
npx ncrypted read "https://ncrypted.ai/s/abc#key"
import { Ncrypted } from "ncrypted";
const { link } = await new Ncrypted().create("hunter2", { ttl: 3600 });API
POST /api/v1/secrets | 0.005 USDC (x402). Store ciphertext, get id and receipt token. |
POST /api/v1/secrets/:id/reveal | Free. Returns ciphertext and deletes it. |
GET /api/v1/secrets/:id/status | Free, creator only. pending, read, burned or expired. |
DELETE /api/v1/secrets/:id | Free, creator only. Burn before it's read. |
POST /api/v1/secrets/:id/email | Free, creator only, once. Email the link. |
Full details: llms.txt · openapi.json · source · privacy · terms
Security notes
Emailing a link means it passes through our server once on its way to the email provider. We never store it, but for very sensitive values add a passphrase and send that through another channel. Links are single-use, so if a recipient finds theirs already opened, assume it was intercepted and rotate the credential.