vault-ask (Erseni Vault)
This MCP server lets AI agents obtain secrets from users or hand generated secrets to users as one-time links, without secrets ever passing through the conversation.
Request secrets from a user (
request_secret): returns a one-time link to show the user, then waits for their answer and writes the values into a.envfile or a single file with permissions 600; results contain only names and lengths.Run one command with user-supplied secrets (
run_with_secret): the user sees the command before entering anything, then it runs exactly that command with the secrets as environment variables and returns the exit code plus masked output.Send a generated secret to a user (
send_secret): generates a value locally (default 32 alphanumeric chars, configurable length/charset) or uses a value from an env var or file, encrypts it locally, and returns only a one-time link, expiry and length — optionally also writing it to a file,.env, or a command's environment.Enforce safety guarantees: secrets are masked in all outputs and never written into the chat, with configurable TTLs (60s–7 days) and up to 20 named values per request.
secrets-component
Zero-knowledge, one-time secret sharing. End-to-end encrypted in the browser. The server only ever stores ciphertext. Supports both sending and requesting secrets without requiring any account.
Part of the Erseni open-source components.
Status: early development. API and on-disk format may change until the first tagged release.
Primary development happens in Erseni's internal monorepo. This repository is a public mirror, kept in sync via Jenkins after every successful production deploy. Issues and merge requests are welcome; see CONTRIBUTING.md.
Features
Send a secret: create a one-time link, recipient decrypts in the browser, secret self-destructs after viewing.
Request a secret: create an inbound link, send it to a third party (customer, colleague) who submits a secret without an account. You retrieve it once with your private key.
End-to-end encryption: AES-GCM 256 for sending, X25519 + ECIES for requesting. All crypto in the browser via the native Web Crypto API. The server never sees plaintext.
No accounts: neither sender nor receiver needs to sign up.
Auditable: deterministic build, source SHA embedded in every HTML response, SRI hashes on every script.
Secrets for AI agents:
cli/containsvault-ask, a CLI and MCP server that request a secret from a person and hand it to exactly one command or file, masked in every output and never shown to the agent, and that send a generated secret to a person as a one-time link.
Related MCP server: Vaulted MCP Server
Where it runs
The component runs as part of Erseni Vault, hosted in the EU. It is not a standalone application: it depends on Erseni's internal framework, and this repository cannot be installed or self-hosted on its own. The source is published so that the cryptography and the server behaviour can be audited.
vault-ask in cli/ is the exception: it is a standalone Node.js tool that talks to Erseni Vault.
Security model
Secret plaintext never leaves the sender's browser.
Encryption keys are transported in the URL fragment (
#k=...), which browsers never send to servers.Secrets are deleted on first retrieval (atomic
DELETE ... RETURNING).Expired secrets are purged every minute by a cron job.
No access logs, no IP retention, no backups of the secrets tables.
See docs/ARCHITECTURE.md and docs/THREAT-MODEL.md.
Verifying a running instance
Every page served by a secrets-component instance includes a <meta name="build-sha" content="..."> tag. Match that SHA against a tag in this repository to confirm the deployed code.
curl -s https://secrets.example.com/send | grep build-shaLicense
AGPL-3.0-or-later. See LICENSE.
Security disclosure
See SECURITY.md.
Available Tools
3 toolsrequest_secretA
Use this whenever you need a password, token, API key or other secret from the user, for example "I will give you my database password" or "you need my API key for X". Never ask the user to type or paste a secret into the chat. Asks the user for one or more secrets and writes them into a .env file or a file, without the values ever passing through this conversation. First call without request_id: returns a link. Show it to the user, then call again with the returned request_id; that call waits for the answer and writes the file with permissions 600. The result only contains names and lengths, never a value.
Inputs: file, names, env_file, request_id, +1 more.
run_with_secretA
Use this whenever a single command needs a password, token, API key or other secret from the user, for example "connect to the database with my password" or "deploy with my API token". Never ask the user to type or paste a secret into the chat. Asks the user for one or more secrets and runs exactly one command with them as environment variables. The user sees the command before entering anything, and only this command can receive the values. First call without request_id: returns a link. Show it to the user, then call again with the returned request_id; that call waits for the answer, runs the command and returns its exit code and its output with every value masked.
Inputs: cwd, names, command, request_id, +1 more.
send_secretA
Use this whenever the user asks you to generate, create or send them a password, token, API key or other secret, for example "generate a password for my database", "generier mir ein Passwort" or "send me the key". Do not generate a secret any other way and never write one into the chat. Generates the value locally (32 letters and digits unless length or charset say otherwise) or takes it from from_file or from_env, encrypts it on this machine and returns only a one-time link that shows the value once in the browser. Give the user that link. With env_file, file or command the same value also goes to that destination (needs name except for file), so the system and the link hold the same value. The result contains the link, its expiry and the length, never the value.
Inputs: cwd, file, name, label, +7 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 3 tools
The three tools split along a clear axis: request_secret pulls secrets inbound into a file, run_with_secret uses a secret to execute one command, and send_secret generates/returns a secret outbound. request_secret and run_with_secret share the same ask-the-user/link flow and could momentarily be confused, but their end outcomes (write a file vs. run a command) are clearly spelled out.
All three follow a strict verb_secret pattern (request_secret, run_with_secret, send_secret). The verb meaning is consistent: the action describes what happens to the secret (request in, run with, send out).
Three tools is on the lean side but each covers a genuinely distinct secret lifecycle stage (acquire, use, issue). The set feels deliberately minimal rather than padded, which suits a security-sensitive vault.
Inbound acquisition, command usage, and outbound distribution with multiple destinations (file, env_file, command) are all covered, giving a coherent lifecycle. Minor gaps: no explicit tool for listing, rotating, or revoking previously stored secrets, though these could be handled outside the surface.
Maintenance
Related MCP Connectors
Password vault for AI agents with scoped, user-approved access
Send encrypted files and secrets, collect files and get documents signed, from your AI.
A secret store for AI agents: the agent never sees the plaintext.
Send API keys and private files to someone else's agent, end-to-end encrypted.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceSelf-hosted, zero-knowledge encrypted, self-destructing secrets for secure agent-to-agent coordination3AGPL 3.0
- AlicenseAqualityBmaintenanceShare encrypted, self-destructing secrets from your AI agent. Zero-knowledge E2E encryption. Agent-blind input sources (env:, file:, dotenv:) keep secrets out of LLM context.4264 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI coding agents to securely inject API keys and secrets into environment files, configs, or commands without the agent ever seeing the secret values.7 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to manage and use API keys and secrets without ever seeing their values, by checking availability, listing names, requesting missing values, and running commands with injected secrets and redacted output.52 npmMIT