Skip to main content
Glama
thangho98

Cloudflare MCP Server

by thangho98
README.md
# Cloudflare MCP Server & CLI

MCP server and CLI for managing Cloudflare domains - DNS records, SSL certificates, and Zone operations.

**Two interfaces available:**
- **MCP Server** - For Claude Desktop, Claude Code, and other MCP-compatible clients
- **CLI** - For OpenClaw, shell scripts, and direct terminal usage

## Features

### Zone/Domain Management
- `list_zones` - List all domains in your account
- `get_zone` - Get details of a specific zone

### DNS Records
- `list_dns_records` - List DNS records for a zone
- `get_dns_record` - Get details of a specific record
- `create_dns_record` - Create new DNS record (A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, PTR)
- `update_dns_record` - Update existing DNS record
- `delete_dns_record` - Delete a DNS record

### SSL/TLS
- `get_ssl_universal_settings` - Get Universal SSL settings (enabled status, certificate authority)
- `update_ssl_universal_settings` - Enable or disable Universal SSL
- `list_ssl_certificates` - List SSL certificate packs
- `get_ssl_verification` - Check SSL verification status

### Analytics & Cache
- `get_zone_analytics` - Get analytics data for a zone
- `purge_cache` - Purge cached content (all, by URL, or by tag)

## Installation

```bash
npm install
npm run build
```

## Configuration

### 1. Get API Token from Cloudflare

1. Login to [Cloudflare Dashboard](https://dash.cloudflare.com)
2. Go to **My Profile** → **API Tokens**
3. Click **Create Token**
4. Create a custom token with the following permissions:
   - Zone → Zone: Read
   - Zone → DNS: Edit
   - Zone → SSL and Certificates: Edit
   - Zone → Analytics: Read
   - Zone → Cache Purge: Purge

### 2. Add to Claude Desktop

Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):

```json
{
  "mcpServers": {
    "cloudflare": {
      "command": "node",
      "args": ["/path/to/cloudflare-mcp/dist/index.js"],
      "env": {
        "CLOUDFLARE_API_TOKEN": "your-api-token-here"
      }
    }
  }
}
```

### 3. Add to Claude Code

Add to `~/.claude/settings.json`:

```json
{
  "mcpServers": {
    "cloudflare": {
      "command": "node",
      "args": ["/path/to/cloudflare-mcp/dist/index.js"],
      "env": {
        "CLOUDFLARE_API_TOKEN": "your-api-token-here"
      }
    }
  }
}
```

## Usage Examples

### List all domains
```
list_zones
```

### Create an A record
```
create_dns_record zone_id="xxx" type="A" name="www" content="1.2.3.4" proxied=true
```

### Create a CNAME record
```
create_dns_record zone_id="xxx" type="CNAME" name="blog" content="example.com" proxied=true
```

### Create an MX record
```
create_dns_record zone_id="xxx" type="MX" name="@" content="mail.example.com" priority=10
```

### Update a DNS record
```
update_dns_record zone_id="xxx" record_id="yyy" content="5.6.7.8"
```

### Delete a DNS record
```
delete_dns_record zone_id="xxx" record_id="yyy"
```

### Check SSL status
```
get_ssl_universal_settings zone_id="xxx"
list_ssl_certificates zone_id="xxx"
```

### Purge all cache
```
purge_cache zone_id="xxx" purge_everything=true
```

### Purge specific URLs
```
purge_cache zone_id="xxx" files=["https://example.com/style.css", "https://example.com/script.js"]
```

---

## CLI Usage

The CLI provides the same functionality as the MCP server but can be used directly in terminal or by OpenClaw.

### Install CLI globally

```bash
npm install -g .
# or
npm link
```

### Set API Token

```bash
export CLOUDFLARE_API_TOKEN="your-api-token-here"
```

### Commands

```bash
# Zones
cloudflare-cli zones list
cloudflare-cli zones list --name example.com
cloudflare-cli zones get <zone-id>

# DNS
cloudflare-cli dns list <zone-id>
cloudflare-cli dns list <zone-id> --type A
cloudflare-cli dns create <zone-id> -t A -n www -c 192.168.1.1 --proxied
cloudflare-cli dns create <zone-id> -t CNAME -n blog -c example.com --proxied
cloudflare-cli dns create <zone-id> -t MX -n @ -c mail.example.com --priority 10
cloudflare-cli dns update <zone-id> <record-id> -c 192.168.1.2
cloudflare-cli dns delete <zone-id> <record-id>

# SSL
cloudflare-cli ssl settings <zone-id>
cloudflare-cli ssl enable <zone-id>
cloudflare-cli ssl disable <zone-id>
cloudflare-cli ssl certificates <zone-id>
cloudflare-cli ssl verification <zone-id>

# Cache
cloudflare-cli cache purge <zone-id> --all
cloudflare-cli cache purge <zone-id> --files https://example.com/page1 https://example.com/page2

# Analytics
cloudflare-cli analytics dashboard <zone-id> --since -1d --until now
cloudflare-cli analytics dashboard <zone-id> --since -7d --until now
```

All commands output JSON for easy parsing.

---

## OpenClaw Setup

For OpenClaw bots that don't support MCP, use the CLI with the provided skill.

### 1. Install CLI globally

```bash
cd /path/to/cloudflare-mcp
npm install
npm run build
npm link  # Makes cloudflare-cli available globally
```

### 2. Copy skill to OpenClaw

```bash
# Copy to managed skills (available for all agents)
cp -r skill ~/.openclaw/skills/cloudflare

# Or copy to workspace skills (specific project)
cp -r skill /path/to/your/workspace/skills/cloudflare
```

### 3. Configure OpenClaw

Add to `~/.openclaw/openclaw.json`:

```json
{
  "skills": {
    "entries": {
      "cloudflare": {
        "enabled": true,
        "env": {
          "CLOUDFLARE_API_TOKEN": "your-api-token-here"
        }
      }
    }
  }
}
```

### 4. Verify installation

```bash
# Check if CLI is available
which cloudflare-cli
cloudflare-cli --version

# Test with your token
export CLOUDFLARE_API_TOKEN="your-token"
cloudflare-cli zones list
```

Now the OpenClaw bot can use `/cloudflare` or invoke `cloudflare-cli` commands directly.

---

## Development

```bash
# Build
npm run build

# Watch mode
npm run dev

# Test with MCP Inspector
npm run inspector

# Test CLI
node dist/cli.js --help
```

## License

MIT