Skip to main content
Glama
Wolstapp

stillvault-mcp

by Wolstapp

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 | iex

2. 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-mcp

That'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; any stillvault://<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

STILLVAULT_AGENT

(none)

Enrolled agent id; releases are signed with its key. Set this for managed use.

STILLVAULT_TENANT

(none)

Your org id (managed broker per-tenant lookup).

STILLVAULT_BROKER

https://stillvault.ai

Broker URL (set for self-hosted).

STILLVAULT_BIN

stillvault

Path to the CLI if not on PATH.

STILLVAULT_APPROVAL_WAIT

130

Seconds to wait for each approval.

What this server is and isn't

  • It is a launcher for the stillvault release 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 stdio

Available Tools

2 tools
stillvault_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesThe secret path, e.g. "db/prod/password" (with or without the "stillvault://" prefix).

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYesThe executable to run, e.g. "psql", "curl", or "./deploy.sh".
argsNoArguments 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_envNoEnvironment 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

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 2 tool updatesv0.1.0
    • First observedstillvault_reveal
    • First observedstillvault_run

TDQS

A4.6/5.0

Scored across 2 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count3/5

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.

Completeness3/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Human-in-the-loop secret access for AI coding agents, enabling approval workflow for password manager secrets via MCP.
    1
    MIT
  • A
    license
    D
    quality
    D
    maintenance
    Enables 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.
    10
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables 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.
    2
    6
    MIT