IDE的Cloudflare MCP服务器

Cloudflare MCP Server for IDE是一个用于管理大型语言模型(LLMs)与外部系统之间上下文的标准协议实现,支持通过自然语言操作Cloudflare账户中的各种资源。

  • by GutMutCode
  • TypeScript
  • 本地部署
  • 10 星标
  • 更新于
在 GitHub 查看 GutMutCode/mcp-server-cloudflare

使用说明

用于IDE的Cloudflare MCP服务器

模型上下文协议(MCP)是一种 新的标准化协议 用于管理大型语言模型(LLM)和外部系统之间的上下文。在这个存储库中,我们提供了一个安装程序以及一个MCP服务器 Cloudflare的API.

这使您可以使用Claude Desktop以及VSCode(Cline)和Windsurf等IDE或任何MCP客户端,使用自然语言在Cloudflare帐户上完成任务,例如:

  • 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 '...'?

演示

Short Demo Video

设置

  1. 跑 npx @gutmutcode/mcp-server-cloudflare init
  1. 重启克劳德桌面,你应该看到一个小🔨 显示以下可用工具的图标:
  1. 查看Cline配置文件,您应该看到 cloudflare 使用您的Cloudflare帐户ID。
  1. 查看您的Windsurf MCP配置文件,您应该看到 cloudflare 部分也。Windsurf对MCP工具的使用有限制,因此您不能同时使用太多工具。(与克莱恩和克劳德不同)

特性

KV门店管理

  • get_kvs:列出您帐户中的所有KV命名空间
  • kv_get:从KV命名空间获取值
  • kv_put:将值存储在KV命名空间中
  • kv_list:列出KV命名空间中的键
  • kv_delete:从KV命名空间中删除密钥

R2存储管理

  • r2_list_buckets:列出您帐户中的所有R2存储桶
  • r2_create_bucket:创建一个新的R2 bucket
  • r2_delete_bucket:删除R2存储桶
  • r2_list_objects:列出R2 bucket中的对象
  • r2_get_object:从R2桶中获取对象
  • r2_put_object:将物体放入R2桶中
  • r2_delete_object:从R2 bucket中删除对象

D1数据库管理

  • d1_list_databases:列出您帐户中的所有D1数据库
  • d1_create_database:创建新的D1数据库
  • d1_delete_database:删除D1数据库
  • d1_query:对D1数据库执行SQL查询

工人管理

  • worker_list:列出您帐户中的所有员工
  • worker_get:获取Worker的脚本内容
  • worker_put:创建或更新Worker脚本
  • worker_delete:删除Worker脚本

分析

  • analytics_get:检索域的分析数据
    • 包括请求、带宽、威胁和页面浏览量等指标
    • 支持日期范围过滤

开发中

在当前项目文件夹中,运行:

pnpm install
pnpm build:watch

然后,在第二终端中:

node dist/index.js init

这将把Claude Desktop与您本地安装的版本链接起来,以便您进行测试。

Claude之外的用法

要在本地运行服务器,请运行 node dist/index run <account-id>.

如果您正在使用替代的MCP客户端,或在本地进行测试,请发出 tools/list 命令获取所有可用工具的最新列表。然后,您可以使用 tools/call 命令。

工人

// 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商店

// 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存储

// 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数据库

// 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
        )
    `
})

分析

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

贡献

欢迎投稿!请随时提交拉取请求。