mcp-server-cloudflare

Official
  • Cloud Platforms
TypeScript
MIT
845
193
-
security - not tested
A
license - permissive license (MIT)
-
quality - not tested

Lets you use Claude Desktop, or any MCP Client, to use natural language to accomplish things on your Cloudflare account.

  1. Tools
  2. Prompts
  3. Resources
  4. Server Configuration
  5. README.md

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Tools

Functions exposed to the LLM to take actions

NameDescription

No tools

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

README.md

Cloudflare MCP Server

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, 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://www.youtube.com/watch?v=vGajZpl_9yA"> <img src="https://img.youtube.com/vi/vGajZpl_9yA/maxresdefault.jpg" alt="Demonstrating the newly-released MCP server to explore Cloudflare properties, like Workers, KV, and D1." width="600"/> </a> </div>

Setup

  1. Run npx @cloudflare/mcp-server-cloudflare init
<div align="left"> <img src="https://github.com/user-attachments/assets/163bed75-ec0c-478a-94b2-179969a90923" alt="Example console output" width="300"/> </div>
  1. Restart Claude Desktop, you should see a small 🔨 icon that shows the following tools available for use:
<div align="left"> <img src="https://github.com/user-attachments/assets/a24275b1-1c6f-4754-96ef-dd7b9f0f5903" alt="Example tool icon" height="160"/> <img src="https://github.com/user-attachments/assets/4fb8badb-6800-4a3f-a530-a344b3584bec" alt="Example tool list" height="160"/> </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.

GitHub Badge

Glama performs regular codebase and documentation scans to:

  • Confirm that the MCP server is working as expected.
  • Confirm that there are no obvious security issues with dependencies of the server.
  • Extract server characteristics such as tools, resources, prompts, and required parameters.

Our directory badge helps users to quickly asses that the MCP server is safe, server capabilities, and instructions for installing the server.

Copy the following code to your README.md file:

Alternative MCP servers

  • -
    security
    A
    license
    -
    quality
    Pinecone integration with vector search capabilities
    MIT
    • Apple
  • A
    security
    A
    license
    A
    quality
    A Model Context Protocol server to connect to the MIRO Whiteboard Application. Allows Board manipulation, sticky creation, bulk operations and more.
    Apache-2.0
    • Apple