Skip to main content
Glama
theonlypal

PAL - Project API Locker

by theonlypal
README.md
# PAL - Project API Locker

**Cross-platform API key management for developers. Secure, local, integrated with Claude Code.**

PAL manages your API keys securely using your OS keychain, auto-generates `.env` files, creates SDK client code, and integrates with Claude Code via MCP.

## Features

- **Secure Storage**: Keys stored in OS keychain (macOS Keychain, Windows Credential Manager) or AES-256-GCM encrypted fallback
- **Zero Plain Text**: API keys never stored in plain text files
- **Auto Generation**: Creates `.env` files and SDK client code
- **Framework Detection**: Automatically detects Next.js, Express, TypeScript, etc.
- **Claude Code Integration**: MCP server for AI-assisted key management
- **Multi-Provider**: OpenAI, Anthropic, Stripe, Twilio, SendGrid, Supabase, Firebase, AWS, and custom

## Quick Start

```bash
# Install globally
npm install -g @pal/cli

# Initialize in your project
cd your-project
pal init

# Add an API (securely stores the key)
pal add-api openai

# Generate .env and client code
pal generate

# Check health
pal doctor
```

## Commands

### `pal init`
Initialize PAL in your project. Detects framework, creates `pal.config.json`.

```bash
pal init
```

### `pal add-api [provider]`
Add an API service. Securely stores the key in your OS keychain.

```bash
pal add-api openai
pal add-api stripe --env-var STRIPE_KEY
pal add-api anthropic --id claude-api
```

**Supported Providers:**
- `openai` - OpenAI API
- `anthropic` - Anthropic Claude API
- `stripe` - Stripe payments
- `twilio` - Twilio SMS/Voice
- `sendgrid` - SendGrid email
- `resend` - Resend email
- `supabase` - Supabase backend
- `firebase` - Firebase/Google Cloud
- `aws` - AWS services
- `custom` - Any custom API

### `pal generate`
Generate `.env` file and SDK client code from stored keys.

```bash
pal generate
pal generate --dry-run  # Preview without writing
```

### `pal scan`
Scan project for API usage and suggest missing configurations.

```bash
pal scan
```

### `pal doctor`
Health check for PAL configuration.

```bash
pal doctor
```

## MCP Server (Claude Code Integration)

PAL includes an MCP server for integration with Claude Code.

### Setup

Add to your Claude Code MCP config:

```json
{
  "mcpServers": {
    "pal": {
      "command": "npx",
      "args": ["@pal/mcp-server"]
    }
  }
}
```

### MCP Tools

| Tool | Description |
|------|-------------|
| `list_projects` | List all PAL-registered projects |
| `inspect_project` | Get project details, services, env status |
| `add_api_to_project` | Add API service programmatically |
| `generate_client_snippets` | Get integration code for services |
| `summarize_env_state` | Health check for env/keystore |

### Example Usage in Claude Code

```
"Add OpenAI to my current project with this API key: sk-..."
"Show me the status of API keys in /path/to/project"
"Generate the client code for Stripe in my project"
```

## Security

### Key Storage Priority

1. **OS Keychain** (recommended): Uses `keytar` for native keychain access
   - macOS: Keychain Access
   - Windows: Credential Manager
   - Linux: libsecret

2. **Encrypted File** (fallback): AES-256-GCM encrypted JSON file
   - Location: `~/.pal/keystore.enc`
   - Encryption key derived from machine-specific data

### Best Practices

- Never commit `.env` files (PAL auto-adds to `.gitignore`)
- Use OS keychain when available (install `keytar`)
- Run `pal doctor` to verify security setup
- Rotate keys periodically

## Configuration

### pal.config.json

```json
{
  "projectName": "my-app",
  "language": "node",
  "framework": "nextjs",
  "envFile": ".env.local",
  "services": [
    {
      "id": "openai",
      "provider": "openai",
      "envVarKey": "OPENAI_API_KEY",
      "scopes": ["chat", "embeddings"]
    }
  ]
}
```

### Framework Detection

PAL automatically detects:
- **Next.js**: Uses `.env.local`
- **Express**: Standard `.env`
- **TypeScript**: Generates `.ts` files
- **Package Manager**: npm, yarn, pnpm, bun

## Packages

| Package | Description |
|---------|-------------|
| `@pal/core` | Core library (types, keystore, codegen) |
| `@pal/cli` | Command-line interface |
| `@pal/mcp-server` | MCP server for Claude Code |

## Development

```bash
# Clone the repo
git clone https://github.com/your-username/pal-mcp.git
cd pal-mcp

# Install dependencies
pnpm install

# Build all packages
pnpm build

# Run CLI locally
pnpm --filter @pal/cli start -- init
```

## Examples

See the `examples/` directory:

- `basic-node-openai/` - Simple Node.js + OpenAI example

## License

MIT

---

**Built for developers who value security and speed.**