agent-keys
An MCP server that lets AI agents autonomously acquire, store, verify, and manage API keys for various services.
README
agent-keys
MCP server that lets AI agents autonomously acquire and manage API keys.
The Problem
AI agents frequently need API keys to accomplish tasks — sending emails, making calls, running models, storing data. Today this requires a human to manually create accounts, navigate dashboards, and paste keys into configs. agent-keys gives agents a structured, secure interface to discover services, get provisioning instructions, store retrieved keys, verify they work, and export them as environment variables — all without human intervention after initial setup.
Quick Start
Via npx (no install required)
npx @gonzih/agent-keys
MCP Configuration
Add to your MCP config file (e.g. ~/.claude/claude_desktop_config.json or ~/.config/claude-code/config.json):
{
"mcpServers": {
"agent-keys": {
"command": "npx",
"args": ["@gonzih/agent-keys"],
"env": {
"AGENT_KEYS_SECRET": "your-strong-encryption-secret"
}
}
}
}
Claude Code Config
Add to your Claude Code settings:
{
"mcpServers": {
"agent-keys": {
"command": "npx",
"args": ["@gonzih/agent-keys"],
"env": {
"AGENT_KEYS_SECRET": "your-strong-encryption-secret"
}
}
}
}
Tools
list_services
List all 26 supported services with their category, description, signup URL, and whether a key is stored.
Input: none
Output:
[
{
"name": "openai",
"displayName": "OpenAI",
"category": "ai",
"description": "AI research company providing GPT-4, DALL-E, Whisper, and embeddings APIs.",
"signupUrl": "https://platform.openai.com/signup",
"has_key": true,
"freetier": "$5 free credit for new accounts (limited time)",
"envVarName": "OPENAI_API_KEY"
}
]
get_api_key
Retrieve a stored API key. Returns the key if found, or provisioning guidance if not.
Input:
{ "service": "openai" }
Output (found):
{
"found": true,
"service": "openai",
"key": "sk-proj-...",
"stored_at": "2024-01-15T10:30:00.000Z",
"envVarName": "OPENAI_API_KEY"
}
Output (not found):
{
"found": false,
"service": "openai",
"message": "No API key stored for OpenAI. Use provision_api_key to get instructions.",
"signupUrl": "https://platform.openai.com/signup"
}
store_api_key
Store an API key in the encrypted vault.
Input:
{
"service": "openai",
"key": "sk-proj-...",
"metadata": { "org": "my-org", "created_by": "agent" }
}
Output:
{
"success": true,
"service": "openai",
"displayName": "OpenAI",
"message": "API key for OpenAI stored successfully.",
"envVarName": "OPENAI_API_KEY"
}
check_api_key
Verify a stored key is still valid by calling the service's test endpoint.
Input:
{ "service": "openai" }
Output:
{
"valid": true,
"service": "openai",
"displayName": "OpenAI",
"status": 200,
"message": "API key for OpenAI is valid."
}
Services with test endpoints: openai, sendgrid, stripe, github, groq, together-ai, elevenlabs, deepgram, replicate, brave-search, serper, tavily.
provision_api_key
Get step-by-step instructions and the direct signup URL for acquiring an API key.
Input:
{ "service": "groq" }
Output:
{
"service": "groq",
"displayName": "Groq",
"signupUrl": "https://console.groq.com/login",
"steps": [
"Go to https://console.groq.com/login",
"Create a free account or sign in",
"Navigate to https://console.groq.com/keys",
"Click 'Create API Key'",
"Give it a name and click 'Submit'",
"Copy the generated API key immediately (shown only once)",
"Store it using store_api_key with service 'groq'"
],
"freetier": "Free tier with generous rate limits"
}
remove_api_key
Delete a key from the vault.
Input:
{ "service": "openai" }
Output:
{
"success": true,
"service": "openai",
"message": "API key for OpenAI removed from vault."
}
export_env
Generate shell export statements for stored keys.
Input:
{ "services": ["openai", "anthropic"] }
Or omit services to export all stored keys.
Output:
{
"exports": [
"export OPENAI_API_KEY=\"sk-proj-...\"",
"export ANTHROPIC_API_KEY=\"sk-ant-...\""
],
"shell": "export OPENAI_API_KEY=\"sk-proj-...\"\nexport ANTHROPIC_API_KEY=\"sk-ant-...\"",
"count": 2
}
Supported Services
AI (5 services)
| Name | Display Name | Free Tier | Env Var |
|---|---|---|---|
openai |
OpenAI | $5 credit (new accounts) | OPENAI_API_KEY |
anthropic |
Anthropic | Free tier with rate limits | ANTHROPIC_API_KEY |
replicate |
Replicate | Pay-per-use, free community models | REPLICATE_API_TOKEN |
together-ai |
Together AI | $25 free credit | TOGETHER_API_KEY |
groq |
Groq | Free tier, generous limits | GROQ_API_KEY |
Communication (6 services)
| Name | Display Name | Free Tier | Env Var(s) |
|---|---|---|---|
twilio |
Twilio | $15 trial credit | TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN |
sendgrid |
SendGrid | 100 emails/day forever | SENDGRID_API_KEY |
mailgun |
Mailgun | 100 emails/day, 3 months | MAILGUN_API_KEY |
postmark |
Postmark | 100 emails/month forever | POSTMARK_API_TOKEN |
vonage |
Vonage (Nexmo) | $2 trial credit | VONAGE_API_KEY, VONAGE_API_SECRET |
telnyx |
Telnyx | $1 credit on signup | TELNYX_API_KEY |
Voice (3 services)
| Name | Display Name | Free Tier | Env Var |
|---|---|---|---|
elevenlabs |
ElevenLabs | 10,000 chars/month | ELEVENLABS_API_KEY |
deepgram |
Deepgram | $200 free credit | DEEPGRAM_API_KEY |
assemblyai |
AssemblyAI | $50 free credit | ASSEMBLYAI_API_KEY |
Infrastructure (8 services)
| Name | Display Name | Free Tier | Env Var |
|---|---|---|---|
stripe |
Stripe | No monthly fee | STRIPE_SECRET_KEY |
github |
GitHub | Free for personal use | GITHUB_TOKEN |
cloudflare |
Cloudflare | Free plan available | CLOUDFLARE_API_TOKEN |
vercel |
Vercel | Hobby plan free | VERCEL_TOKEN |
railway |
Railway | $5 credit/month | RAILWAY_TOKEN |
supabase |
Supabase | 2 free projects | SUPABASE_ANON_KEY |
planetscale |
PlanetScale | 5GB free storage | PLANETSCALE_SERVICE_TOKEN |
upstash |
Upstash | 10,000 commands/day | UPSTASH_REDIS_REST_TOKEN |
Data (4 services)
| Name | Display Name | Free Tier | Env Var |
|---|---|---|---|
serper |
Serper | 2,500 free searches | SERPER_API_KEY |
brave-search |
Brave Search | 2,000 queries/month | BRAVE_API_KEY |
tavily |
Tavily | 1,000 calls/month | TAVILY_API_KEY |
firecrawl |
Firecrawl | 500 credits on signup | FIRECRAWL_API_KEY |
Adding a New Service
Edit src/registry.ts and add a new object to the registry array:
{
name: 'my-service', // slug used in tool calls
displayName: 'My Service', // human-readable name
category: 'ai', // 'communication' | 'ai' | 'voice' | 'infrastructure' | 'data'
description: 'What it does.',
signupUrl: 'https://myservice.com/signup',
docsUrl: 'https://docs.myservice.com/api',
envVarName: 'MY_SERVICE_API_KEY',
freetier: 'Description of free tier',
programmatic: false,
provisioningSteps: [
'Go to https://myservice.com/signup',
'Create an account',
'Navigate to API Keys',
'Click Create Key',
'Copy the key',
'Store it using store_api_key with service "my-service"',
],
testEndpoint: { // optional
url: 'https://api.myservice.com/v1/me',
method: 'GET',
headers: (key: string) => ({ Authorization: `Bearer ${key}` }),
successStatus: 200,
},
}
Then run npm run build.
Security
- Encryption: AES-256-GCM with scrypt key derivation (N=16384, r=8, p=1)
- Per-write randomness: Each vault write uses a fresh 16-byte salt and 16-byte IV
- Auth tag: GCM auth tag prevents undetected tampering
- Plaintext fallback: If
AGENT_KEYS_SECRETis not set, keys are stored unencrypted with a warning - Vault location:
~/.agent-keys/vault.jsonby default; override withAGENT_KEYS_VAULT - Secret management: Never commit
AGENT_KEYS_SECRETto source control; use env vars or a secrets manager
Development
# Install dependencies
npm install
# Build TypeScript
npm run build
# Run directly with tsx (no build step)
npm run dev
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.