secrets-mcp-server
Click on "Install 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., "@secrets-mcp-serverUse my stored github_token to check the GitHub API rate limit."
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.
secrets-mcp-server
An MCP server for storing secrets (API keys, tokens, credentials) encrypted
at rest on your own machine, built so an AI agent can manage them without
the plaintext value ever entering its context. There is no get_secret
tool that returns a value as text — that was a deliberate design decision,
not an oversight. Using a secret is always indirect: run a command with the
value injected into its environment, or write the value straight into a
destination file.
Why
Giving an agent free-form shell access to your .env files means every
secret it touches can end up echoed back into its own transcript, its logs,
or a chat history — anywhere from a debugging session to a support ticket.
This server keeps secrets in one encrypted store and only exposes them
through two narrow, auditable operations: inject-into-subprocess and
write-to-file. The agent can use a secret to authenticate a request or
populate a config file; it can never see, print, or leak the raw value
through a normal tool call.
Related MCP server: enigmagent-mcp
Tools
Category | Tool | Description |
CRUD |
| Creates a secret; fails if |
CRUD |
| Creates several at once ( |
CRUD |
| Reads a |
CRUD |
| Overwrites the value; fails if the secret doesn't exist |
CRUD |
| Removes a secret |
CRUD |
| Lists name/description/timestamps for every secret. Never includes the value |
Opaque use |
| Runs |
Opaque use |
| Writes one or more secrets straight into |
run_with_secret never uses a shell (shell=False, command is a list of
args) — this avoids command injection even if an argument comes from
untrusted text.
apply_secrets_to_file only writes inside directories listed in
SECRETS_MCP_ALLOWED_WRITE_DIRS — without that configured, every write is
rejected.
import_secrets_from_file can read any file the process has OS permission
to read — this is a deliberate choice, with no read-side allowlist (unlike
writes). If you need to restrict that, add a
SECRETS_MCP_ALLOWED_READ_DIRS check following the same pattern as
validate_dest_path in security.py.
Environment variables
Variable | Default | Purpose |
| (required) | Passphrase used to derive the store's encryption key. Without it, the server refuses every operation |
|
| Where the encrypted store file lives |
| (empty) | Comma-separated list of directories |
|
| Timeout for |
Security model
The store is a single file (
salt+ ciphertext) encrypted as a whole with Fernet (cryptography); the key is derived from the passphrase via Scrypt with a fresh random salt on every write. A wrong passphrase or a corrupted file fails loudly — there is no silent fallback.The store file and any file written by
apply_secrets_to_fileend up with0600permissions.run_with_secretnever usesshell=True;commandis always a list of args, never a shell string.apply_secrets_to_fileresolves the destination path (realpath, following symlinks) and rejects anything outsideSECRETS_MCP_ALLOWED_WRITE_DIRS.No tool logs or returns a raw value.
run_with_secretdoes a best-effort redaction (security.redact) that strips literal occurrences of the value fromstdout/stderrin case the command echoes it by accident — this is not a guarantee against every leak (e.g. a command that writes the value to a file outside this tool's control), but it covers the common case.
Requirements
Python 3.11+
uvto install dependencies and run the server
Installation
From PyPI, no clone needed:
uvx secrets-mcp-serveror install it as a persistent CLI tool:
uv tool install secrets-mcp-server
# or: pipx install secrets-mcp-serverFrom source, for local development:
git clone https://github.com/KauaLealz/secrets-mcp-server.git
cd secrets-mcp-server
uv syncRegistering with Claude Code
Using the published package (no clone required):
claude mcp add --scope user secrets \
--env SECRETS_MCP_MASTER_PASSPHRASE=<your-passphrase> \
--env SECRETS_MCP_ALLOWED_WRITE_DIRS=/path/to/your/projects \
-- uvx secrets-mcp-serverUsing a local clone instead:
claude mcp add --scope user secrets \
--env SECRETS_MCP_MASTER_PASSPHRASE=<your-passphrase> \
--env SECRETS_MCP_ALLOWED_WRITE_DIRS=/path/to/your/projects \
-- uv run --directory /path/to/secrets-mcp-server secrets-mcp-serverReplace /path/to/your/projects with whichever directories
apply_secrets_to_file should be allowed to write into (comma-separated for
more than one), and /path/to/secrets-mcp-server with wherever you cloned
the repo, if using the local-clone form.
--scope user makes it available in every Claude Code session. Changing
the passphrase between registrations produces a different store (the
encryption key depends on it) — keep the same passphrase to keep accessing
an existing store, and store it somewhere safe (a password manager). There
is no recovery if you lose it.
A .env.example is included as a reference for every variable below — it
is not auto-loaded, it just documents the shape a .env for this project
would take if you build tooling around it.
Registering with other MCP clients
Any MCP client that supports stdio servers can run this the same way:
launch uvx secrets-mcp-server (or uv run --directory /path/to/secrets-mcp-server secrets-mcp-server
for a local clone) with the environment variables above set in its process
environment. Check your client's documentation for how it declares stdio
MCP servers (e.g. a mcpServers entry in its config file).
Tests
uv run pytestContributing
Issues and pull requests are welcome. See AGENTS.md for the design
constraint this project is built around (no tool ever returns a raw secret
value) — please keep new tools consistent with it, or open an issue to
discuss before changing it.
License
MIT — see LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A secret store for AI agents: the agent never sees the plaintext.
Encrypted secret store and rotation for autonomous agent credentials
Secrets for developers and agents—secure context and workflows without exposing secret values.
Encrypted store for API keys and database URLs your code needs. Use them without reading them.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to write .env files with secrets stored locally, allowing search by name/description while keeping actual secret values private and never exposed to the AI.5
- AlicenseAqualityDmaintenanceLocal AES-256-GCM encrypted vault for AI agents. Resolve {{PLACEHOLDER}} secrets in prompts at runtime — LLMs never see real API keys. Argon2id key derivation, zero cloud.2842MIT
- AlicenseNot gradedqualityFmaintenanceEnables LLM agents to securely use credentials like passwords and API keys without exposing them in the context window, through encrypted storage and proxy-based injection.111MIT
- AlicenseNot gradedqualityCmaintenanceEnables secure credential storage for AI agents by encrypting secrets and providing agent-invisible references, ensuring sensitive data never leaks to the model.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/KauaLealz/secrets-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server