Cloudflare自然语言云管理服务器
一个允许使用自然语言通过 Claude Desktop、VSCode 等 MCP 客户端管理 Cloudflare 资源(Workers、KV、R2、D1)的 MCP 服务器。
服务介绍
Cloudflare MCP 服务器用于 IDE
模型上下文协议 (MCP) 是一种新的标准化协议,用于管理大型语言模型 (LLMs) 与外部系统之间的上下文。在这个仓库中,我们提供了一个安装程序以及一个针对 Cloudflare API 的 MCP 服务器。
这使您能够使用 Claude 桌面版、像 VSCode(Cline)和 Windsurf 或任何 MCP 客户端这样的 IDE,通过自然语言在您的 Cloudflare 账户上完成各种任务,例如:
请为我部署一个新的带有示例持久对象的 Worker。你能告诉我关于我的 D1 数据库 '...' 中的数据吗?你能将我的 KV 命名空间 '...' 中的所有条目复制到我的 R2 存储桶 '...' 吗?
演示
设置
- 运行
npx @gutmutcode/mcp-server-cloudflare init
- 重新启动 Claude 桌面版,您应该会看到一个小 🔨 图标,显示以下可用工具:
- 查看 Cline 配置文件,您应该会看到包含您的 Cloudflare 账户 ID 的
cloudflare部分。
- 查看您的 Windsurf MCP 配置文件,您也应该能看到一个
cloudflare部分。Windsurf 对 MCP 工具的使用有限制,因此您不能同时使用太多工具。(与 Cline 和 Claude 不同)
功能
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 存储桶r2_delete_bucket: 删除一个 R2 存储桶r2_list_objects: 列出 R2 存储桶中的对象r2_get_object: 从 R2 存储桶中获取对象r2_put_object: 将对象放入 R2 存储桶r2_delete_object: 从 R2 存储桶中删除对象
D1 数据库管理
d1_list_databases: 列出您账户中的所有 D1 数据库d1_create_database: 创建一个新的 D1 数据库d1_delete_database: 删除一个 D1 数据库d1_query: 对 D1 数据库执行 SQL 查询
Workers 管理
worker_list: 列出您账户中的所有 Workersworker_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 命令调用这些工具。
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 存储
// 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"
})
贡献
欢迎贡献!请随时提交 Pull Request。