Cloudflare DNS MCP Server
README.md
# Cloudflare DNS MCP Server
[](https://badge.fury.io/js/@artik0din%2Fmcp-cloudflare-dns)
[](https://opensource.org/licenses/MIT)
[](https://modelcontextprotocol.io/)
A powerful [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server for managing Cloudflare DNS zones and records via API. This server enables AI assistants like Claude to manage DNS records directly through Cloudflare's API.
## Features
- 🌐 **Zone Management**: List and inspect DNS zones
- 📝 **DNS Records**: Create, read, update, and delete DNS records
- 🔍 **Smart Filtering**: Filter records by type, name, or zone
- ☁️ **Cloudflare Proxy**: Support for Cloudflare's proxy features
- 🛡️ **Secure**: Environment-based authentication
- ⚡ **Fast**: Direct API integration with minimal overhead
## Quick Start
Run the server directly with npx (requires Node.js 18+):
```bash
npx @artik0din/mcp-cloudflare-dns
```
Or install locally:
```bash
npm install -g @artik0din/mcp-cloudflare-dns
mcp-cloudflare-dns
```
## Environment Variables
Create a `.env` file in your working directory:
| Variable | Required | Description |
|----------|----------|-------------|
| `CLOUDFLARE_API_TOKEN` | ✅ | Your Cloudflare API token with Zone:Read and DNS:Edit permissions |
| `CLOUDFLARE_ZONE_ID` | ❌ | Default zone ID (can be provided per request) |
### Getting Your Cloudflare API Token
1. Go to [Cloudflare Dashboard > My Profile > API Tokens](https://dash.cloudflare.com/profile/api-tokens)
2. Click "Create Token"
3. Use "Custom Token" with these permissions:
- **Zone Resources**: Include All zones (or specific zones)
- **Permissions**: Zone:Read, DNS:Edit
## MCP Client Configuration
### Claude Desktop
Add this to your Claude Desktop configuration:
```json
{
"mcpServers": {
"cloudflare-dns": {
"command": "npx",
"args": ["@artik0din/mcp-cloudflare-dns"],
"env": {
"CLOUDFLARE_API_TOKEN": "your_api_token_here",
"CLOUDFLARE_ZONE_ID": "your_zone_id_here"
}
}
}
}
```
### Other MCP Clients
Use the command `npx @artik0din/mcp-cloudflare-dns` with the appropriate environment variables set.
## Available Tools
### cloudflare_list_zones
List all DNS zones accessible to your API token.
**Parameters:** None
**Example:**
```
List all my Cloudflare zones
```
### cloudflare_get_zone
Get detailed information about a specific DNS zone.
**Parameters:**
- `zoneId` (string, required): Zone ID to get details for
**Example:**
```
Get details for zone abc123def456
```
### cloudflare_list_dns_records
List DNS records for a specific zone with optional filtering.
**Parameters:**
- `zoneId` (string, optional): Zone ID (uses default if not provided)
- `type` (string, optional): Filter by record type (A, AAAA, CNAME, MX, TXT, etc.)
- `name` (string, optional): Filter by record name
**Example:**
```
List all A records for my zone
List DNS records of type MX for zone abc123def456
Show all records for www.example.com
```
### cloudflare_create_dns_record
Create a new DNS record in a zone.
**Parameters:**
- `type` (string, required): Record type (A, AAAA, CNAME, MX, TXT, etc.)
- `name` (string, required): Record name (e.g., www.example.com or @)
- `content` (string, required): Record content (IP, hostname, text, etc.)
- `zoneId` (string, optional): Zone ID (uses default if not provided)
- `ttl` (number, optional): TTL in seconds (1 = auto, 120-7200)
- `priority` (number, optional): Priority for MX records
- `proxied` (boolean, optional): Enable Cloudflare proxy
- `comment` (string, optional): Comment for the record
**Example:**
```
Create an A record for www pointing to 1.2.3.4
Create a CNAME record for blog pointing to www.example.com with TTL 3600
Add an MX record for @ pointing to mail.example.com with priority 10
```
### cloudflare_update_dns_record
Update an existing DNS record.
**Parameters:**
- `recordId` (string, required): DNS record ID to update
- `type` (string, optional): New record type
- `name` (string, optional): New record name
- `content` (string, optional): New record content
- `zoneId` (string, optional): Zone ID (uses default if not provided)
- `ttl` (number, optional): New TTL in seconds
- `priority` (number, optional): New priority for MX records
- `proxied` (boolean, optional): Enable/disable Cloudflare proxy
- `comment` (string, optional): New comment
**Example:**
```
Update record abc123 to point to IP 5.6.7.8
Change the TTL of record def456 to 3600 seconds
Enable proxy for record ghi789
```
### cloudflare_delete_dns_record
Delete a DNS record.
**Parameters:**
- `recordId` (string, required): DNS record ID to delete
- `zoneId` (string, optional): Zone ID (uses default if not provided)
**Example:**
```
Delete DNS record abc123
Remove record def456 from zone ghi789
```
## Security Considerations
- **API Token Security**: Never commit your API token to version control
- **Minimal Permissions**: Use API tokens with minimal required permissions
- **Zone Restrictions**: Consider restricting API tokens to specific zones
- **Regular Rotation**: Rotate API tokens regularly
- **Environment Variables**: Always use environment variables for credentials
## Development
```bash
# Clone the repository
git clone https://github.com/artik0din/mcp-cloudflare-dns.git
cd mcp-cloudflare-dns
# Install dependencies
npm install
# Build the project
npm run build
# Run locally
npm start
```
## License
MIT License - see [LICENSE](LICENSE) file for details.
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## Credits
Built with the [Model Context Protocol SDK](https://modelcontextprotocol.io/) and [Cloudflare API](https://developers.cloudflare.com/api/).TDQS
A3.6/5.0
Scored across 6 tools
Disambiguation5/5
Each tool targets a distinct action (create, delete, get, list, update) on specific resources (DNS records or zones), with no overlap in functionality.
Naming Consistency5/5
All tools follow a consistent 'cloudflare_verb_noun' pattern using snake_case, making them predictable and easy to differentiate.
Tool Count5/5
Six tools is well-scoped for a DNS management server, covering essential CRUD operations without unnecessary bloat or gaps.
Completeness5/5
The set provides full CRUD for DNS records plus zone listing and details, covering the core lifecycle needs for DNS management.
Maintenance
ActivityInactive
ResponsivenessNo issues