Cloudflare

by gutmutcode

9 stars
1k downloads
Not rated
GitHub

About

Integrates with Cloudflare's API to enable management of DNS, CDN, and security configurations for web infrastructure automation.

Details

Author
gutmutcode
Repository
GutMutCode/mcp-server-cloudflare
GitHub stars
9
Downloads
1,013
License
Apache License 2.0
Categories
Productivity, Design, Developer Tools, AI, API, Security, Cloud Service
Tags
#web

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name Cloudflare
    Command (node, npx, python, etc.) npx
    Arguments
    • Argument 1 -y
    • Argument 2 @highlight/mcp-server

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

1. Run npx @gutmutcode/mcp-server-cloudflare init

<div align="left">
Example console output
</div>

2. Restart Claude Desktop, you should see a small 🔨 icon that shows the following tools available for use:

<div align="left">
Example tool icon
Example tool list
</div>

3. Check out the Cline configuration file, you should see a cloudflare section with your Cloudflare account ID.

<div align="left">
Example configuration file
</div>

4. Check out your Windsurf MCP configuration file, you should see a cloudflare section either. Windsurf has limitation on the use of MCP tools, so you can't use too many tools at the same time. (Unlike Cline and Claude)

<div align="left">
Screenshot 2025-02-22 at 10 28 09 PM
</div>

To run the server locally, run node dist/index run <account-id>.

If you're using an alternative MCP Client, or testing things locally, emit the tools/list command to get an up-to-date list of all available tools. Then you can call these directly using the tools/call command.

get_kvs

List all KV namespaces in your account.

kv_get

Get a value from a KV namespace. Parameters: namespaceId (string), key (string)

kv_put

Store a value in a KV namespace. Parameters: namespaceId (string), key (string), value (string), expirationTtl (optional integer)

kv_list

List keys in a KV namespace. Parameters: namespaceId (string), prefix (optional string), limit (optional integer)

kv_delete

Delete a key from a KV namespace. Parameters: namespaceId (string), key (string)

r2_list_buckets

List all R2 buckets in your account.

r2_create_bucket

Create a new R2 bucket. Parameters: name (string)

r2_delete_bucket

Delete an R2 bucket. Parameters: name (string)

r2_list_objects

List objects in an R2 bucket. Parameters: bucket (string), prefix (optional string), delimiter (optional string), limit (optional integer)

r2_get_object

Get an object from an R2 bucket. Parameters: bucket (string), key (string)

r2_put_object

Put an object into an R2 bucket. Parameters: bucket (string), key (string), content (string), contentType (optional string)

r2_delete_object

Delete an object from an R2 bucket. Parameters: bucket (string), key (string)

d1_list_databases

List all D1 databases in your account.

d1_create_database

Create a new D1 database. Parameters: name (string)

d1_delete_database

Delete a D1 database. Parameters: databaseId (string)

d1_query

Execute a SQL query against a D1 database. Parameters: databaseId (string), query (string), params (optional array)

worker_list

List all Workers in your account.

worker_get

Get a Worker's script content. Parameters: name (string)

worker_put

Create or update a Worker script. Parameters: name (string), script (string), bindings (array), compatibility_date (string), compatibility_flags (array)

worker_delete

Delete a Worker script. Parameters: name (string)

analytics_get

Retrieve analytics data for your domain. Parameters: zoneId (string), since (string), until (string)

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "cloudflare": {
            "env": {},
            "args": [
                "-y",
                "@highlight/mcp-server"
            ],
            "command": "npx"
        }
    }
}

Linux

{
    "env": [],
    "args": [
        "-y",
        "@highlight/mcp-server"
    ],
    "command": "npx"
}

Macos

{
    "env": [],
    "args": [
        "-y",
        "@highlight/mcp-server"
    ],
    "command": "npx"
}

Windows

{
    "env": [],
    "args": [
        "/c",
        "npx",
        "-y",
        "@highlight/mcp-server"
    ],
    "command": "cmd"
}

Cloudflare MCP Server for IDE

Model Context Protocol (MCP) is a new, standardized protocol for managing context between large language models (LLMs) and external systems. In this repository, we provide an installer as well as an MCP Server for Cloudflare's API.

This lets you use Claude Desktop, and IDE like VSCode (Cline) and Windsurf or any MCP Client, to use natural language to accomplish things on your Cloudflare account, e.g.:

Please deploy me a new Worker with an example durable object.
Can you tell me about the data in my D1 database named '...'?
Can you copy all the entries from my KV namespace '...' into my R2 bucket '...'?

Demo

<div align="center">
<a href="https://youtube.com/shorts/SmN-I3XBO0g?si=bg4PqM5TJTMWdtGJ">Short Demo Video</a>
</div>

Setup

1. Run npx @gutmutcode/mcp-server-cloudflare init

<div align="left">
Example console output
</div>

2. Restart Claude Desktop, you should see a small 🔨 icon that shows the following tools available for use:

<div align="left">
Example tool icon
Example tool list
</div>

3. Check out the Cline configuration file, you should see a cloudflare section with your Cloudflare account ID.

<div align="left">
Example configuration file
</div>

4. Check out your Windsurf MCP configuration file, you should see a cloudflare section either. Windsurf has limitation on the use of MCP tools, so you can't use too many tools at the same time. (Unlike Cline and Claude)

<div align="left">
Screenshot 2025-02-22 at 10 28 09 PM
</div>

Features

KV Store Management

- get_kvs: List all KV namespaces in your account - kv_get: Get a value from a KV namespace - kv_put: Store a value in a KV namespace - kv_list: List keys in a KV namespace - kv_delete: Delete a key from a KV namespace

R2 Storage Management

- r2_list_buckets: List all R2 buckets in your account - r2_create_bucket: Create a new R2 bucket - r2_delete_bucket: Delete an R2 bucket - r2_list_objects: List objects in an R2 bucket - r2_get_object: Get an object from an R2 bucket - r2_put_object: Put an object into an R2 bucket - r2_delete_object: Delete an object from an R2 bucket

D1 Database Management

- d1_list_databases: List all D1 databases in your account - d1_create_database: Create a new D1 database - d1_delete_database: Delete a D1 database - d1_query: Execute a SQL query against a D1 database

Workers Management

- worker_list: List all Workers in your account - worker_get: Get a Worker's script content - worker_put: Create or update a Worker script - worker_delete: Delete a Worker script

Analytics

- analytics_get: Retrieve analytics data for your domain - Includes metrics like requests, bandwidth, threats, and page views - Supports date range filtering

Developing

In the current project folder, run:

pnpm install
pnpm build:watch

Then, in a second terminal:

node dist/index.js init

This will link Claude Desktop against your locally-installed version for you to test.

Usage outside of Claude

To run the server locally, run node dist/index run <account-id>.

If you're using an alternative MCP Client, or testing things locally, emit the tools/list command to get an up-to-date list of all available tools. Then you can call these directly using the tools/call command.

Workers

// List workers
worker_list()

// Get worker code
worker_get({ name: "my-worker" })

// Update worker
worker_put({
name: "my-worker",
script: "export default { async fetch(request, env, ctx) { ... }}",
bindings: [
{
type: "kv_namespace",
name: "MY_KV",
namespace_id: "abcd1234"
},
{
type: "r2_bucket",
name: "MY_BUCKET",
bucket_name: "my-files"
}
],
compatibility_date: "2024-01-01",
compatibility_flags: ["nodejs_compat"]
})

// Delete worker
worker_delete({ name: "my-worker" })

KV Store

// List KV namespaces
get_kvs()

// Get value
kv_get({
namespaceId: "your_namespace_id",
key: "myKey"
})

// Store value
kv_put({
namespaceId: "your_namespace_id",
key: "myKey",
value: "myValue",
expirationTtl: 3600 // optional, in seconds
})

// List keys
kv_list({
namespaceId: "your_namespace_id",
prefix: "app_", // optional
limit: 10 // optional
})

// Delete key
kv_delete({
namespaceId: "your_namespace_id",
key: "myKey"
})

R2 Storage

// List buckets
r2_list_buckets()

// Create bucket
r2_create_bucket({ name: "my-bucket" })

// Delete bucket
r2_delete_bucket({ name: "my-bucket" })

// List objects in bucket
r2_list_objects({
bucket: "my-bucket",
prefix: "folder/", // optional
delimiter: "/", // optional
limit: 1000 // optional
})

// Get object
r2_get_object({
bucket: "my-bucket",
key: "folder/file.txt"
})

// Put object
r2_put_object({
bucket: "my-bucket",
key: "folder/file.txt",
content: "Hello, World!",
contentType: "text/plain" // optional
})

// Delete object
r2_delete_object({
bucket: "my-bucket",
key: "folder/file.txt"
})

D1 Database

// List databases
d1_list_databases()

// Create database
d1_create_database({ name: "my-database" })

// Delete database
d1_delete_database({ databaseId: "your_database_id" })

// Execute a single query
d1_query({
databaseId: "your_database_id",
query: "SELECT
FROM users WHERE age > ?",
params: ["25"] // optional
})

// Create a table
d1_query({
databaseId: "your_database_id",
query:
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)

})

Analytics

// Get today's analytics
analytics_get({
    zoneId: "your_zone_id",
    since: "2024-11-26T00:00:00Z",
    until: "2024-11-26T23:59:59Z"
})

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.