Cloudflare智能助手
允许你使用 Claude Desktop 或任何 MCP 客户端,通过自然语言来完成你在 Cloudflare 账户中的操作。
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"cloudflare-bindings": {
"args": [
"mcp-remote",
"https://bindings.mcp.cloudflare.com/sse"
],
"command": "npx"
},
"cloudflare-observability": {
"args": [
"mcp-remote",
"https://observability.mcp.cloudflare.com/sse"
],
"command": "npx"
}
}
}
服务介绍
Cloudflare MCP 服务器
模型上下文协议 (MCP) 是一种用于管理大型语言模型 (LLMs) 和外部系统之间上下文的新标准化协议。在这个仓库中,我们提供了一个安装程序以及一个适用于Cloudflare API的MCP服务器。
这使您可以使用Claude Desktop或任何MCP客户端,通过自然语言在您的Cloudflare账户上完成各种操作,例如:
请为我部署一个新的带有示例持久对象的Worker。你能告诉我关于我的名为'...'的D1数据库中的数据吗?你能将我的KV命名空间'...'中的所有条目复制到我的R2存储桶'...'中吗?
演示
设置
-
运行
npx @cloudflare/mcp-server-cloudflare init注意: 如果您尚未通过Cloudflare身份验证,MCP服务器会自动运行
npx wrangler login。如果需要,您将被提示在浏览器中完成身份验证过程。
- 重新启动Claude Desktop,您应该会看到一个小🔨图标,显示以下可用工具:
收费功能
此MCP服务器中的一些功能需要付费的Cloudflare Workers计划:
- 可观察性和分析:
analytics_get工具及相关分析功能需要付费Workers计划才能访问这些指标 - 其他高级Cloudflare功能,如高级D1数据库能力和更高的使用限制也需要相应的付费计划
确保您的Cloudflare帐户具有使用所需功能所需的订阅级别。
功能
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 脚本
持久对象
durable_objects_list: 列出所有持久对象命名空间durable_objects_create: 创建一个新的持久对象命名空间durable_objects_delete: 删除一个持久对象命名空间durable_objects_list_instances: 列出特定持久对象命名空间的所有实例durable_objects_get_instance: 获取特定持久对象实例的详细信息durable_objects_delete_instance: 删除特定的持久对象实例
队列
queues_list: 列出您账户中的所有队列queues_create: 创建一个新的队列queues_delete: 删除一个队列queues_get: 获取特定队列的详细信息queues_send_message: 向队列发送消息queues_get_messages: 从队列获取消息queues_update_consumer: 更新队列消费者
Workers AI
workers_ai_list_models: 列出可用的 AI 模型workers_ai_get_model: 获取特定 AI 模型的详细信息workers_ai_run_inference: 使用 Workers AI 进行推理workers_ai_list_tasks: 列出 AI 任务
工作流
workflows_list: 列出您账户中的所有工作流workflows_create: 创建一个新的工作流workflows_delete: 删除一个工作流workflows_get: 获取特定工作流的详细信息workflows_update: 更新一个工作流workflows_execute: 执行一个工作流
模板
templates_list: 列出可用的 Worker 模板templates_get: 获取特定模板的详细信息templates_create_from_template: 从模板创建一个新的 Worker
平台上的 Workers
w4p_list_dispatchers: 列出所有平台上的 Workers 分发器w4p_create_dispatcher: 创建一个新的分发器w4p_delete_dispatcher: 删除一个分发器w4p_get_dispatcher: 获取特定分发器的详细信息w4p_update_dispatcher: 更新分发器配置
服务绑定
bindings_list: 列出 Worker 的所有服务绑定bindings_create: 创建一个新的服务绑定bindings_update: 更新服务绑定bindings_delete: 删除服务绑定
URL 路由
routing_list_routes: 列出 Worker 的所有路由routing_create_route: 创建一个新的路由routing_update_route: 更新路由routing_delete_route: 删除路由
定时触发器
cron_list: 列出 Worker 的所有定时触发器cron_create: 创建一个新的定时触发器cron_update: 更新定时触发器cron_delete: 删除定时触发器
区域和域名
zones_list: 列出账户中的所有区域zones_create: 创建新区域zones_delete: 删除区域zones_get: 获取特定区域的详细信息zones_check_activation: 检查区域激活状态
Secrets
secrets_list: 列出 Worker 的所有密钥secrets_put: 创建或更新密钥secrets_delete: 删除密钥
版本管理
versions_list: 列出 Worker 的所有版本versions_get: 获取特定版本的详细信息versions_rollback: 回滚到之前的版本
Wrangler 配置
wrangler_get_config: 获取当前 Wrangler 配置wrangler_update_config: 更新 Wrangler 配置
分析
analytics_get: 检索您的域名的分析数据- 包括请求、带宽、威胁和页面浏览量等指标
- 支持日期范围过滤
开发
在当前项目文件夹中,运行:
pnpm install
pnpm build:watch
然后,在第二个终端中:
node dist/index.js init
这将把 Claude Desktop 链接到您本地安装的版本以进行测试。如果您还没有通过 Wrangler 进行身份验证,服务器将自动提示您在浏览器中完成身份验证过程。
测试
该项目使用 Vitest 作为测试框架,并使用 MSW(Mock Service Worker)进行 API 模拟。
运行测试
要运行所有测试:
pnpm test
要运行带有覆盖率的测试:
pnpm test:coverage
要运行特定的测试文件:
pnpm test -- tests/tools/queues.test.ts
要在监视模式下运行测试(在开发过程中很有用):
pnpm test:watch
测试结构
测试套件组织如下:
tests/tools/: 包含每个 Cloudflare API 工具的测试tests/mocks/: 包含模拟数据和请求处理程序tests/utils/: 包含测试辅助函数tests/setup.ts: 全局测试设置配置
每个工具测试文件都遵循一致的模式,测试成功操作和错误处理场景。
在 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"
})
耐久对象
// List Durable Objects namespaces
durable_objects_list()
// Create a new Durable Objects namespace
durable_objects_create({
name: "my-durable-object",
script_name: "my-worker",
class_name: "MyDurableObjectClass"
})
// Delete a Durable Objects namespace
durable_objects_delete({
id: "your_namespace_id"
})
// List instances for a namespace
durable_objects_list_instances({
namespaceId: "your_namespace_id",
limit: 100 // optional
})
// Get details about a specific instance
durable_objects_get_instance({
namespaceId: "your_namespace_id",
instanceId: "your_instance_id"
})
// Delete a specific instance
durable_objects_delete_instance({
namespaceId: "your_namespace_id",
instanceId: "your_instance_id"
})
队列
// List all queues
queues_list()
// Create a new queue
queues_create({
name: "my-queue",
settings: {
delivery_delay: 0,
dead_letter_queue: "dead-letter-queue" // optional
}
})
// Delete a queue
queues_delete({
name: "my-queue"
})
// Get queue details
queues_get({
name: "my-queue"
})
// Send a message to a queue
queues_send_message({
queue: "my-queue",
messages: [
{ body: JSON.stringify({ key: "value" }) }
]
})
// Get messages from a queue
queues_get_messages({
queue: "my-queue",
batchSize: 10, // optional
visibilityTimeout: 30 // optional, in seconds
})
// Update a queue consumer
queues_update_consumer({
queue: "my-queue",
consumer: "my-consumer",
settings: {
dead_letter_queue: "dead-letter-queue",
batch_size: 10,
max_retries: 3
}
})
Workers AI
// List available AI models
workers_ai_list_models()
// Get details about a specific model
workers_ai_get_model({
model: "@cf/meta/llama-2-7b-chat-int8"
})
// Run inference using Workers AI
workers_ai_run_inference({
model: "@cf/meta/llama-2-7b-chat-int8",
input: {
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Hello, who are you?" }
]
},
options: {
temperature: 0.7,
max_tokens: 100
}
})
// List AI tasks
workers_ai_list_tasks()
工作流
// List all workflows
workflows_list()
// Create a new workflow
workflows_create({
name: "my-workflow",
content: "// Workflow script content here"
})
// Delete a workflow
workflows_delete({
name: "my-workflow"
})
// Get workflow details
workflows_get({
name: "my-workflow"
})
// Update a workflow
workflows_update({
name: "my-workflow",
content: "// Updated workflow script content"
})
// Execute a workflow
workflows_execute({
name: "my-workflow",
input: { key: "value" }
})
模板
// List available templates
templates_list()
// Get details about a specific template
templates_get({
template: "worker-typescript"
})
// Create a worker from a template
templates_create_from_template({
name: "my-new-worker",
template: "worker-typescript",
options: {
// Template-specific options
}
})
平台上的 Workers
// List dispatchers
w4p_list_dispatchers()
// Create a new dispatcher
w4p_create_dispatcher({
name: "my-dispatcher",
script: "// Dispatcher script content"
})
// Delete a dispatcher
w4p_delete_dispatcher({
name: "my-dispatcher"
})
// Get dispatcher details
w4p_get_dispatcher({
name: "my-dispatcher"
})
// Update dispatcher
w4p_update_dispatcher({
name: "my-dispatcher",
script: "// Updated dispatcher script content"
})
服务绑定
// List all service bindings for a worker
bindings_list({
workerName: "my-worker"
})
// Create a new service binding
bindings_create({
workerName: "my-worker",
bindingName: "MY_SERVICE",
serviceEnvironment: "production",
serviceName: "target-worker"
})
// Update a service binding
bindings_update({
workerName: "my-worker",
bindingName: "MY_SERVICE",
serviceEnvironment: "staging",
serviceName: "target-worker"
})
// Delete a service binding
bindings_delete({
workerName: "my-worker",
bindingName: "MY_SERVICE"
})
URL 路由
// List all routes for a worker
routing_list_routes({
workerName: "my-worker"
})
// Create a new route
routing_create_route({
workerName: "my-worker",
pattern: "example.com/*",
zoneId: "your_zone_id"
})
// Update a route
routing_update_route({
routeId: "your_route_id",
pattern: "api.example.com/*",
zoneId: "your_zone_id"
})
// Delete a route
routing_delete_route({
routeId: "your_route_id"
})
Cron 触发器
// List all cron triggers for a worker
cron_list({
workerName: "my-worker"
})
// Create a new cron trigger
cron_create({
workerName: "my-worker",
schedule: "*/5 * * * *",
timezone: "UTC" // optional
})
// Update a cron trigger
cron_update({
triggerId: "your_trigger_id",
schedule: "0 */2 * * *",
timezone: "America/New_York"
})
// Delete a cron trigger
cron_delete({
triggerId: "your_trigger_id"
})
区域和域名
// List all zones
zones_list()
// Create a new zone
zones_create({
name: "example.com",
account: {
id: "your_account_id"
}
})
// Get zone details
zones_get({
zoneId: "your_zone_id"
})
// Delete a zone
zones_delete({
zoneId: "your_zone_id"
})
// Check zone activation status
zones_check_activation({
zoneId: "your_zone_id"
})
密钥
// List all secrets for a worker
secrets_list({
workerName: "my-worker"
})
// Create or update a secret
secrets_put({
workerName: "my-worker",
secretName: "API_KEY",
secretValue: "your-secret-api-key"
})
// Delete a secret
secrets_delete({
workerName: "my-worker",
secretName: "API_KEY"
})
版本管理
// List all versions of a worker
versions_list({
workerName: "my-worker"
})
// Get details about a specific version
versions_get({
workerName: "my-worker",
versionId: "your_version_id"
})
// Rollback to a previous version
versions_rollback({
workerName: "my-worker",
versionId: "your_version_id"
})
Wrangler 配置
// Get current wrangler configuration
wrangler_get_config()
// Update wrangler configuration
wrangler_update_config({
config: {
name: "my-worker",
main: "src/index.ts",
compatibility_date: "2024-03-11",
workers_dev: true
}
})
贡献
欢迎贡献!请随时提交 Pull Request。