模型上下文协议(MCP)是一种新的标准化协议,用于在大型语言模型(LLMs)与外部系统之间管理上下文。在此仓库中,我们提供了一个安装程序以及一个针对Cloudflare API的MCP服务器。
这使您可以使用Claude Desktop,IDE如VSCode(Cline)和Windsurf或任何MCP客户端,通过自然语言来完成Cloudflare账户上的任务,例如:
请为我部署一个新的Worker,并带有示例持久对象。你能告诉我关于我的D1数据库'...'中的数据吗?你能将我的KV命名空间'...'中的所有条目复制到我的R2桶'...'中吗?npx @gutmutcode/mcp-server-cloudflare initcloudflare部分。cloudflare部分。Windsurf对MCP工具的使用有限制,因此您不能同时使用太多工具。(与Cline和Claude不同)get_kvs: 列出您账户中的所有KV命名空间kv_get: 从KV命名空间获取值kv_put: 在KV命名空间中存储值kv_list: 列出KV命名空间中的键kv_delete: 从KV命名空间删除键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_list_databases: 列出您账户中的所有D1数据库d1_create_database: 创建一个新的D1数据库d1_delete_database: 删除一个D1数据库d1_query: 对D1数据库执行SQL查询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链接到您本地安装的版本,以便进行测试。
要本地运行服务器,请运行 node dist/index run <account-id>。
如果您使用的是其他MCP客户端,或者正在本地测试,请发出tools/list命令以获取所有可用工具的最新列表。然后,您可以直接使用tools/call命令调用这些工具。
// 列出workers
worker_list()
// 获取worker代码
worker_get({ name: "my-worker" })
// 更新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"]
})
// 删除worker
worker_delete({ name: "my-worker" })
// 列出KV命名空间
get_kvs()
// 获取值
kv_get({
namespaceId: "your_namespace_id",
key: "myKey"
})
// 存储值
kv_put({
namespaceId: "your_namespace_id",
key: "myKey",
value: "myValue",
expirationTtl: 3600 // 可选,单位秒
})
// 列出键
kv_list({
namespaceId: "your_namespace_id",
prefix: "app_", // 可选
limit: 10 // 可选
})
// 删除键
kv_delete({
namespaceId: "your_namespace_id",
key: "myKey"
})
// 列出桶
r2_list_buckets()
// 创建桶
r2_create_bucket({ name: "my-bucket" })
// 删除桶
r2_delete_bucket({ name: "my-bucket" })
// 列出桶中的对象
r2_list_objects({
bucket: "my-bucket",
prefix: "folder/", // 可选
delimiter: "/", // 可选
limit: 1000 // 可选
})
// 获取对象
r2_get_object({
bucket: "my-bucket",
key: "folder/file.txt"
})
// 放置对象
r2_put_object({
bucket: "my-bucket",
key: "folder/file.txt",
content: "Hello, World!",
contentType: "text/plain" // 可选
})
// 删除对象
r2_delete_object({
bucket: "my-bucket",
key: "folder/file.txt"
})
// 列出数据库
d1_list_databases()
// 创建数据库
d1_create_database({ name: "my-database" })
// 删除数据库
d1_delete_database({ databaseId: "your_database_id" })
// 执行单个查询
d1_query({
databaseId: "your_database_id",
query: "SELECT * FROM users WHERE age > ?",
params: ["25"] // 可选
})
// 创建表
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({
zoneId: "your_zone_id",
since: "2024-11-26T00:00:00Z",
until: "2024-11-26T23:59:59Z"
})
欢迎贡献!请随时提交Pull Request。