agent-keys

agent-keys

An MCP server that lets AI agents autonomously acquire, store, verify, and manage API keys for various services.

Category
Visit Server

README

agent-keys

npm version License: MIT

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_SECRET is not set, keys are stored unencrypted with a warning
  • Vault location: ~/.agent-keys/vault.json by default; override with AGENT_KEYS_VAULT
  • Secret management: Never commit AGENT_KEYS_SECRET to 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

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured