Skip to main content
Glama
README.md
# cloudflare-mcp v1.0.0

Universal Model Context Protocol (MCP) server for the complete Cloudflare ecosystem.
Replaces 16 fragmented remote MCP endpoints with a single, high-performance local server.

## Features (7 Unified Tools)

- **`cf_dns`**: Zones, DNS records (A, CNAME, TXT, MX, etc.), CDN cache purging
- **`cf_compute`**: Cloudflare Workers, KV Key-Value storage, serverless D1 SQL database execution
- **`cf_storage`**: R2 Object Storage buckets, Vectorize vector database queries
- **`cf_ai`**: Workers AI inference (Llama, DeepSeek, Embeddings), AI Gateway logs and telemetry
- **`cf_security`**: Zero Trust Tunnels (cloudflared), WAF firewall rules, Audit logs
- **`cf_radar`**: Radar URL scanner, global traffic/attack analytics, GraphQL queries
- **`cf_api`**: Universal REST API gateway (access any of the 2,500+ Cloudflare endpoints directly)

## Configuration

Set your Cloudflare API Token in your environment or store it in `~/.secrets/cloudflare-token.txt`:

```bash
export CLOUDFLARE_API_TOKEN="your-cloudflare-api-token"
export CLOUDFLARE_ACCOUNT_ID="your-account-id"  # Optional, automatically discovered if omitted
```

## Installation in MCP Clients (Claude Desktop, OpenCode, Cursor, Windsurf)

### Option 1: Instant via `uvx` (Recommended)

```json
{
  "mcpServers": {
    "cloudflare": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/Steph-ux/cloudflare-mcp.git", "cloudflare-mcp"]
    }
  }
}
```

### Option 2: Via `pip install`

```bash
pip install git+https://github.com/Steph-ux/cloudflare-mcp.git
```

Then in your MCP config:
```json
{
  "mcpServers": {
    "cloudflare": {
      "command": "cloudflare-mcp"
    }
  }
}
```

### Option 3: Local Clone (Development)

```json
{
  "mcpServers": {
    "cloudflare": {
      "command": "python",
      "args": ["D:\\Steph\\script\\cloudflare-mcp\\server.py"]
    }
  }
}
```

## Usage Examples

### 1. DNS Management

```python
# List zones:
cf_dns(action='list_zones')

# Create DNS record:
cf_dns(
    action='create_record',
    zone_id='example.com',
    type='A',
    name='api',
    content='192.168.10.1',
    proxied=True
)

# Purge CDN cache:
cf_dns(action='purge_cache', zone_id='example.com', purge_everything=True)
```

### 2. D1 SQL Database & Workers

```python
# Query D1 SQL database:
cf_compute(
    action='d1_query',
    database_id='YOUR_D1_DATABASE_ID',
    sql='SELECT * FROM users WHERE active = 1 LIMIT 10;'
)

# Store key-value in KV:
cf_compute(
    action='kv_put',
    namespace_id='YOUR_KV_NAMESPACE_ID',
    key_name='session_token',
    value='xyz123'
)
```

### 3. R2 Object Storage

```python
# List buckets:
cf_storage(action='list_r2')

# Create bucket:
cf_storage(action='create_r2', bucket_name='my-app-assets', location_hint='weur')
```

### 4. Workers AI Inference

```python
# Run Llama 3 on Cloudflare edge:
cf_ai(
    action='run_model',
    model='@cf/meta/llama-3.1-8b-instruct',
    prompt='Write a python snippet for async retry logic.'
)
```

### 5. Radar URL Scan & Security

```python
# Scan URL for malware & phishing via Cloudflare Radar:
cf_radar(action='scan_url', url='https://target-to-scan.com')

# List active Zero Trust Tunnels:
cf_security(action='list_tunnels')
```

### 6. Universal REST Gateway (`cf_api`)

```python
# Call any specific Cloudflare v4 REST endpoint:
cf_api(method='GET', path='/user')
```

## Testing

```bash
pytest tests
```

## License

MIT