loading…
Search for a command to run...
loading…
Encrypted credential vault with a 21-tool MCP server. Store and manage LLM API keys, service API keys, and OAuth credentials — then let your AI agent list, reve
Encrypted credential vault with a 21-tool MCP server. Store and manage LLM API keys, service API keys, and OAuth credentials — then let your AI agent list, reveal, rotate, rename, pause, and proxy calls through them.

One vault, three types of credentials. Replace your .env file with one token.
API Locker is an encrypted credential vault for developers. Store your LLM API keys, service API keys, and OAuth credentials in one place — then inject them into any command with apilocker run -- npm start. Your raw credentials never touch disk, never live in shell history, never get committed to git.
Free to use. Try it →
# Install
npm install -g apilocker
# One-click browser confirmation — no pasted tokens
apilocker register
# Store a credential (for any of 34 provider templates, plus "custom")
apilocker store --name OPENAI_API_KEY --provider openai --key sk-proj-...
# Run any command with your vault secrets injected as env vars
apilocker run -- npm start
# ↑
# process.env.OPENAI_API_KEY is populated for the lifetime of this command,
# then gone. No .env file. Nothing on disk. Nothing in shell history.
That's the whole pitch. Everything else in this repo is making that flow work for every kind of credential a developer has to deal with.
API Locker distinguishes three credential types because they're used differently:
🧠 LLM API KeysSingle opaque tokens for model APIs. OpenAI, Anthropic, Gemini, Groq, Mistral.
|
⚡ Service API KeysSingle tokens for everyday SaaS. Stripe, Twilio, Resend, ElevenLabs, Cloudflare, GitHub, Clerk, Sentry, PostHog, Cloudinary, Mux, SendGrid, Vercel, Upstash, LemonSqueezy.
|
🔗 OAuth CredentialsMulti-field credentials for sign-in flows. Google, GitHub, Slack, Microsoft, Notion, Spotify, Twitter/X, LinkedIn, Discord, Zoom, Dropbox, Salesforce, HubSpot.
|
Under the hood, LLM and Service credentials share the same single-string encrypted storage. OAuth is a multi-field encrypted JSON blob. Users experience three product surfaces; implementation shares one foundation.
.env files?| Problem | .env file |
API Locker |
|---|---|---|
| Secrets on disk | ✅ (plaintext) | ❌ (encrypted, AES-256-GCM) |
| Secrets in git history if misconfigured | ✅ | ❌ |
| Secrets in shell history when debugging | ✅ | ❌ |
| Sharing across machines | Manual copy-paste | ✅ (one apilocker register per device) |
| Rotation | Manual edit in every copy | One dashboard click |
| Audit log of who accessed what | ❌ | ✅ (every reveal + proxy call) |
| Revocation of a specific device | Nuke every local copy | One apilocker devices revoke |
| AI agent access (Claude, Cursor, etc.) | "Paste this into Cursor settings" | Native MCP integration |
apilocker run -- cmd injects your vault secrets as env vars for the duration of one command, then clears them.POST /v1/proxy/:keyId forwards authenticated calls upstream (Stripe, OpenAI, etc.) with the raw key injected server-side. Your app code never sees the secret..apilockerrc files. Old aliases transparently resolve via a previous_names fallback.apilocker activity --follow.apilocker doctor surfaces stale rotations, unused keys, expiring tokens, and local config permission issues..env — apilocker import .env migrates an existing project into the vault in one command.API Locker exposes a full Model Context Protocol server so AI agents can read and manage your vault directly.
Claude Code (one command):
claude mcp add apilocker -- apilocker mcp
Claude Desktop, Cursor, Zed, Continue — use the apilocker mcp stdio bridge in your client's config:
{
"mcpServers": {
"apilocker": {
"command": "apilocker",
"args": ["mcp"]
}
}
}
Full MCP docs with the 21-tool catalog and per-client setup instructions: apilocker.app/docs/mcp
This is a monorepo. The three surfaces are kept together because they share types, provider templates, and product conventions.
apilocker/
├── cli/ # The `apilocker` npm package (published as apilocker)
├── api/ # Cloudflare Worker backend (api.apilocker.app)
├── site/ # Marketing site + dashboard + docs (www.apilocker.app)
└── README.md # You are here
apilocker npm package. Built with Node 18+ and Commander. See cli/README.md for the full command reference./v1/mcp./docs/mcp integration guide, and a hidden admin analytics page.apilocker register opens your browser, you click Authorize once, the CLI writes a per-device master token to ~/.apilocker/config.json (mode 0600).apilocker run -- npm start reveals the needed credentials for one command and exports them as env vars.POST /v1/proxy/:keyId, and the API Locker Worker injects the raw key into the upstream call server-side. Your app never sees the secret.apilocker mcp stdio bridge and gets the same 21-tool surface as the CLI..apilockerrc files are unaffected by rename, and revoking a device never touches any other device..apilocker.appFree plan available. Unlimited keys, unlimited tokens, unlimited proxy calls. Early adopters get grandfathered into free Pro permanently when paid plans launch.
api.apilocker.appwww.apilocker.app/dashboardIssues and PRs welcome. The repo is intentionally kept as a monorepo so a single PR can touch the CLI, API, and site in coordinated steps.
The right address depends on what you want to talk about:
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"api-locker": {
"command": "npx",
"args": []
}
}
}