stillvault-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@stillvault-mcprun a curl request with the API key from stillvault://api/prod/key"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Stillvault MCP server
Give an AI agent access to real secrets — API keys, database passwords — with a named human approving each release on their device, and without the secret ever entering the model's context.
This is a thin shim over the stillvault CLI. It contains no cryptography and holds
no secret material: every release, approval, and unsealing happens in the CLI and on
the approver's device, exactly as it does from a shell. The agent calls a tool; a
human approves on their phone or the web console; the secret is used and never shown
to the model.
Why the secret never reaches the model
The headline tool, stillvault_run, doesn't return secret values. It runs a command
you choose, substitutes stillvault://<path> references into that process after
approval, and returns only the command's output. The plaintext lives only in the
child process, on the local machine, for that command's lifetime — never in the
conversation, and never in your LLM provider's logs.
There is a second tool, stillvault_reveal, for the rare case where the value itself
must be read. It says plainly what it costs (the secret enters the model context) and
should be the exception.
Related MCP server: bw-proxy
Onboarding
1. Install the stillvault CLI
curl -fsSL https://stillvault.ai/install.sh | sh # macOS / Linux
# Windows (PowerShell):
irm https://stillvault.ai/install.ps1 | iex2. Enrol this machine as an agent
The agent gets its own signing key — the org key never lives here. Create an enrolment token in the web console (Agents), then:
stillvault agent-enroll --agent claude-prod --org <your-org-id> --token <one-time-token>An admin admits it in the console after checking the fingerprint. Scope the paths it may request with an access policy. See https://stillvault.ai/docs/agents/.
3. Add the MCP server to your client
It runs over stdio via npx — no separate install.
Claude Desktop / Claude Code (claude_desktop_config.json or .mcp.json):
{
"mcpServers": {
"stillvault": {
"command": "npx",
"args": ["-y", "@wolstapp/stillvault-mcp"],
"env": {
"STILLVAULT_AGENT": "claude-prod",
"STILLVAULT_TENANT": "<your-org-id>"
}
}
}
}Claude Code, one-liner:
claude mcp add stillvault -e STILLVAULT_AGENT=claude-prod -e STILLVAULT_TENANT=<org-id> \
-- npx -y @wolstapp/stillvault-mcpThat's it. The agent can now request secrets, and you approve each release on your device.
The tools
stillvault_run (preferred)
Runs a local command with secrets injected, never revealing them.
command— the executable, e.g.psql,curl,./deploy.sh.args— arguments; anystillvault://<path>is replaced with the secret after approval. Embed inside a longer string with{{stillvault://<path>}}.secret_env— optional map of environment variables whose values contain references (e.g.{"DATABASE_URL": "stillvault://db/prod/dsn"}). Switches to the safer mode where secrets go in the child's environment, not its command line.
Returns the command's stdout/stderr and exit code. Blocks until a human approves (or the wait times out, default 130s).
stillvault_reveal (exposes the value)
Returns a secret's plaintext into the conversation after approval. This puts the
secret in the model's context and your provider's logs. Prefer stillvault_run.
path— the secret path, e.g.db/prod/password.
Configuration
Env var | Default | Purpose |
| (none) | Enrolled agent id; releases are signed with its key. Set this for managed use. |
| (none) | Your org id (managed broker per-tenant lookup). |
|
| Broker URL (set for self-hosted). |
|
| Path to the CLI if not on |
|
| Seconds to wait for each approval. |
What this server is and isn't
It is a launcher for the
stillvaultrelease loop, surfaced as MCP tools.It does not decrypt anything, hold keys, or talk to the broker directly — the CLI does that, and the key that opens a secret only ever exists on the approver's device.
Approval is per release. A short, policy-bounded lease in the CLI means a tight loop reading the same secret doesn't prompt a human on every call — see https://stillvault.ai/docs/how-it-works/.
Develop locally
npm install
npm run build
npm start # serves over stdioAvailable Tools
2 toolsstillvault_revealReveal a Stillvault secret value (exposes it to the model)A
Returns a secret's plaintext VALUE into this conversation after a named human approves the release. WARNING: this puts the secret in the model's context and therefore in your LLM provider's logs — it is the opposite of how Stillvault is meant to be used. Prefer stillvault_run, which uses the secret without revealing it. Use this only when the value itself must be read (e.g. to display it to the human who asked, or to write it into a file you are editing). The call blocks until a human approves on their device.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | The secret path, e.g. "db/prod/password" (with or without the "stillvault://" prefix). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description warns about exposing the secret to model context and provider logs, and explains the human approval blocking behavior. This fully discloses the tool's impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each carrying essential information: purpose, warning, alternative, usage context. Front-loaded with key action and important warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter, no output schema, and no annotations, the description covers all necessary aspects: purpose, usage, warnings, behavioral expectations, and alternative. Complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'path' is well-described in the schema. The description adds practical detail about the prefix format, but schema coverage is 100%, so description adds marginal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns a secret's plaintext value after human approval. Distinguishes from sibling stillvault_run by specifying that it exposes the value, whereas stillvault_run uses it without revealing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises preferring stillvault_run unless the value must be read, provides specific use cases (display to human, write to a file), and notes that the call blocks until human approval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stillvault_runRun a command with a Stillvault secretA
PREFERRED way to use a secret. Runs a local command, resolving any stillvault://<path> references after a named human approves the release. The secret is injected into the child process and is NEVER returned to you or shown in this conversation — you get only the command's output. The call blocks until a human approves on their device (or times out). Examples: run psql with stillvault://db/prod/dsn as an argument, or curl an API with a key in a header. Prefer this over stillvault_reveal whenever you just need to use the secret rather than read its value.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | The executable to run, e.g. "psql", "curl", or "./deploy.sh". | |
| args | No | Arguments to pass. Any `stillvault://<path>` here is replaced with the secret value after approval. To embed a reference inside a longer string, wrap it: `{{stillvault://<path>}}` (e.g. `url={{stillvault://api/base}}/v1`). Ignored for substitution when `secret_env` is used. | |
| secret_env | No | Environment variables for the child whose VALUES contain `stillvault://<path>` references (e.g. {"DATABASE_URL": "stillvault://db/prod/dsn"}). Using this switches to the safer mode where secrets go in the child's environment, not its command line. In this mode, references in `args` are passed through literally. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses that secrets are never returned, only output is shown, and that the call blocks for human approval. This fully informs the agent of the tool's safety and behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the key purpose. It is slightly verbose but every sentence adds value, including examples and edge cases. A minor reduction for not being as terse as possible, but still very efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (secrets, human approval, multiple param modes), the description covers all necessary aspects: blocking, injection, substitution syntax, and comparison with sibling. No output schema is needed as output is command-dependent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters have schema descriptions, and the description adds significant value beyond them: explains substitution syntax, secret_env mode, and when args are ignored. This enriches the agent's understanding beyond the structured schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs a local command with a secret from Stillvault, distinguishing it from stillvault_reveal by specifying when to use each. The verb 'run' and resource 'command with secret' are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to prefer this over stillvault_reveal for using secrets, and provides examples (psql, curl). It also notes the human approval step and blocking behavior, giving clear context for when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.0- First observed
stillvault_reveal - First observed
stillvault_run
TDQS
Scored across 2 tools
Both tools handle secrets but have clearly distinct purposes: stillvault_reveal returns the secret value to the conversation, while stillvault_run uses it in a command without revealing it. Their descriptions explicitly differentiate them and provide guidance on when to use each, leaving no ambiguity.
Both tools follow a consistent 'stillvault_verb' pattern in snake_case. The verb choice ('reveal' and 'run') clearly indicates their action, and the naming is uniform and predictable.
With only 2 tools, the server feels minimal but appropriately focused on its purpose: using secrets with human approval. However, it lacks any administrative tools (e.g., list, create, delete secrets), which might be expected from a secrets management server, making the count borderline.
The tools cover the two primary use cases (revealing and running secrets), but there is no way to discover available secrets or manage them. Agents must know the secret path in advance, which is a notable gap that could cause failures when the path is unknown.
Maintenance
Related MCP Connectors
- TAPOAuthtech.human
Credential isolation for AI agents: placeholder secrets, policy checks, optional human approval.
Security gateway for AI agents: policy, approval, and audited execution, no secrets shared.
Secrets for developers and agents—secure context and workflows without exposing secret values.
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceHuman-in-the-loop secret access for AI coding agents, enabling approval workflow for password manager secrets via MCP.1MIT
- AlicenseDqualityDmaintenanceEnables secure Bitwarden organization vault control with AI agents, featuring human-in-the-loop approval, ACID-compliant transactions, and redacted access to keep secrets hidden from LLMs.10MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to securely use API keys by storing them in an encrypted vault and injecting them on demand with user approval, without exposing the key values to the model.1MIT
- AlicenseAqualityBmaintenanceEnables AI agents to make authenticated API calls and run commands with secrets injected, while keeping credentials completely hidden from the model, with policy enforcement, grants, and audit logging.26MIT