让cloudflare更有实际价值,workers Ai 快速上手

使用MCP外挂
这是官方新推出的一项外挂,在 Cloudflare 上部署您自己的远程 MCP 服务器,有两个选项:
- 无需身份验证 — 任何人都可以连接和使用服务器(无需登录)。
- 使用身份验证和授权 — 用户在访问工具之前登录,您可以根据用户的权限控制代理可以调用哪些工具。
开始构建
项目案例:Telegram频道MCP服务器
项目地址:https://github.com/wenyuanw/telegram-channel-mcp
这是一个基于Cloudflare Workers的MCP (Model Context Protocol) 服务器,用于向Telegram频道发送消息。该服务器提供了一个标准化的接口,可以通过MCP协议与AI助手(如Claude Desktop)集成,实现自动化的Telegram频道消息发送功能。
特点
- 🚀 基于Cloudflare Workers – 全球分布式边缘计算,低延迟高性能
- 🤖 MCP协议支持 – 与Claude Desktop等AI助手无缝集成
- 📱 Telegram Bot集成 – 通过Telegram Bot API发送消息到指定频道
- 🛡️ TypeScript开发 – 完整的类型安全保障
- ⚡ 实时通信 – 支持SSE (Server-Sent Events) 连接
功能:
- 自动发送消息到指定的Telegram频道
- 支持Markdown格式化
- 返回发送状态确认
前置要求
- Cloudflare账户 – 用于部署Workers
- Telegram Bot – 需要创建Bot并获取Token
- Telegram频道 – 需要将Bot添加为频道管理员
- Node.js – 本地开发环境
一键部署
部署完成后,你的MCP服务器将在类似 telegram-channel-mcp.<your-account>.workers.dev/sse
的URL上运行。
环境变量配置
在 .dev.vars
文件中配置以下环境变量:
# Telegram Bot Token (从 @BotFather 获取)
BOT_TOKEN="your_bot_token_here"
# Telegram频道ID (以-100开头的频道ID)
CHANNEL_ID="-1001234567890"
获取Telegram配置信息
- 获取Bot Token:
- 在Telegram中联系 @BotFather
- 发送
/newbot
创建新Bot - 按提示设置Bot名称和用户名
- 复制获得的Token
- 获取频道ID:
- 将Bot添加为频道管理员
- 向频道发送任意消息
- 访问
https://api.telegram.org/bot<BOT_TOKEN>/getUpdates
- 在返回的JSON中找到频道ID(负数,以-100开头)
部署到Cloudflare
# 本地开发
pnpm run dev
# 部署到生产环境
pnpm run deploy
# 设置生产环境变量
wrangler secret put BOT_TOKEN
wrangler secret put CHANNEL_ID
与AI助手集成
添加以下配置:
{
"mcpServers": {
"telegram-channel": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:8787/sse" // or remote-mcp-server-authless.your-account.workers.dev/sse
]
}
}
}
API端点
/sse
Server-Sent Events连接端点,用于与MCP客户端建立实时通信
/mcp
标准MCP协议端点
📝 自定义开发
添加新的MCP工具
在 src/index.ts
的 init()
方法中使用 this.server.tool(...)
添加新工具:
this.server.tool(
"your-tool-name",
{
parameter: z.string(),
},
async ({ parameter }) => {
// 你的工具逻辑
return { content: [{ type: "text", text: "结果" }] };
},
);
官方文档示例
这会将您的 MCP 服务器部署到如下所示的 URL: remote-mcp-server-authless.<your-account>.workers.dev/sse
或者,您可以使用下面的命令行在本地计算机上创建远程 MCP 服务器:
npm create cloudflare@latest -- my-mcp-server --template=cloudflare/ai/demos/remote-mcp-authless
Workers AI使用
官方介绍视频
https://www.youtube.com/watch?v=l7EwEpZyTpw
简要介绍
Workers AI 允许您在 Cloudflare 网络中使用自己的代码运行 AI 模型——无论是来自 Workers、Pages 还是通过 Cloudflare API。它在一个统一平台上与 Vectorize(矢量数据库)、R2(数据湖)和 AI Gateway 紧密集成,以减少工具泛滥。
优势
在边缘部署快速的实时 AI
使用最新的 GPU 硬件在更靠近用户的地方运行模型,确保应用的低延迟和高性能。
代管式 AI 推理
复杂性更低,部署 AI 的速度更快。我们部署、优化、扩展 AI 推理,使您可以集中精力处理构建工作。
支持最热门的 AI 模型
使用最新的 AI 模型(Llama、Stable Diffusion、Mistral 等)开发您的应用,以保持竞争优势并提供最佳的用户体验。
开始使用
项目案例:使用 Cloudflare Workers 的免费 AI 图像生成 API 项目地址:https://github.com/saurav-z/free-image-generation-api
该项目允许您使用 Cloudflare Workers 部署自己的免费 AI 图像生成 API,每天最多可进行 100,000 次 API 调用 。使用 Stable Diffusion XL 等强大的模型从文本提示中生成令人惊叹的图像!
特征
- 🆓 每天 100,000 次免费 API 调用 (Cloudflare Workers AI 免费套餐)
- ⚡ 从文本提示中快速生成图像
- 🛠️ 易于部署 – 无需编码经验
- 🔒 使用 API 密钥身份验证进行安全保护
- 🎯 提供多种 AI 模型
如何运作
- 📤 使用项目提供的
worker.js
文件部署 Cloudflare Worker - 🌐 Worker 公开了一个简单的 API 终端节点,用于生成图像
- 🔐 您使用自己的 API 密钥进行身份验证
- 🤖 The Worker 使用 Cloudflare 的免费 AI 模型生成图像
部署
1. 获取 Cloudflare 帐户
- 如果您没有 Cloudflare,请在 Cloudflare 注册
2. 创建一个新的工作程序
- 转到 Cloudflare Workers 仪表板
- 点击 “Create application”
- 选择 “Create Worker”
- 给它起个名字,比如
free-image-generation-api
- 点击 “Deploy” 创建一个 Hello World worker
3. 替换 worker 代码
- 在 worker 编辑器中,将默认的 Hello World 代码替换为此存储库📄中的
worker.js
代码 - 单击 “Save and Deploy” ✅
当然你可以通过克隆项目到自己的仓库,然后直接选择导入存储库进行部署
4. 设置环境变量
- 在您的工作人员仪表板中,转到 “Settings” > “Variables”
- 在 “Environment Variables(环境变量)” 下,单击 “Add variable”(添加变量) ➕
- 名称:
API_KEY
- 值:
your-secret-api-key
(替换为强密钥) - 单击 “Save and Deploy”
5. 启用 Workers AI
- 在 Cloudflare 仪表板中,转到 “Workers & Pages” > “AI”
- 为您的账户启用 Workers AI(免费套餐就足够了)
6. 为worker 添加 AI 绑定
- 返回工作人员的控制面板
- 点击 “设置”> “变量”
- 向下滚动到 “Service bindings” 部分
- 点击 “Add binding”
- 变量名称:
AI
- 服务:从下拉列表中选择🤖**“Workers AI”**
- 单击 “Save and Deploy” ✅
⚠️ 重要提示: 如果没有此 AI 绑定,您的工作人员将无法访问 Cloudflare 的 AI 模型!
7. 获取URL
- 可在控制面板📍中找到确切的 URL地址 https://..workers.dev
用法
cURL 示例
curl -X POST https://<your-worker-name>.<your-subdomain>.workers.dev \
-H "Authorization: Bearer your-secret-api-key" \
-H "Content-Type: application/json" \
-d '{"prompt": "A cute robot cooking breakfast"}' \
--output image.jpg
JavaScript 示例
const res = await fetch("https://<your-worker-name>.<your-subdomain>.workers.dev", {
method: "POST",
headers: {
"Authorization": "Bearer your-secret-api-key",
"Content-Type": "application/json",
},
body: JSON.stringify({ prompt: "A futuristic city in the clouds" }),
});
const blob = await res.blob();
const img = document.createElement("img");
img.src = URL.createObjectURL(blob);
img.style.height = "500px";
document.body.appendChild(img);
对我来说Workers AI更多的解决了中间件及AI代理的问题,比如,使用它来转换多个不同模型格式的问题或使用上述项目将API带入到其它平台来使用。如下图中使用N8N和TG的示例
workers Ai实际使用中就是一个可以直接部署调用的云端Ai代理,这个代理很多的是参与API的通信和你的其它项目的联动
上述通过实际案例来进一步使用cloudflare的AI相关功能,对多数人而言,它让AI开发部署变的更简单直接,当然如有对workers Ai的基础搭建有疑问可以自行查阅官方文档(地址:https://developers.cloudflare.com/workers-ai/)
如果你不方便访问项目地址,以下为文生图worker.js文件代码:
export default { async fetch(request, env) { const API_KEY = env.API_KEY; const url = new URL(request.url); const auth = request.headers.get("Authorization"); // 🔐 Simple API key check if (auth !== `Bearer ${API_KEY}`) { return json({ error: "Unauthorized" }, 401); } // 🚫 Only allow POST requests to / if (request.method !== "POST" || url.pathname !== "/") { return json({ error: "Not allowed" }, 405); } try { const { prompt } = await request.json(); if (!prompt) return json({ error: "Prompt is required" }, 400); // Choose model from the following list: // "@cf/blackforestlabs/ux-1-schnell" // "@cf/bytedance/stable-diffusion-xl-lightning" // "@cf/lykon/dreamshaper-8-lcm" // "@cf/runwayml/stable-diffusion-v1-5-img2img" // "@cf/runwayml/stable-diffusion-v1-5-inpainting" // "@cf/stabilityai/stable-diffusion-xl-base-1.0" // 🧠 Generate image from prompt const result = await env.AI.run( "@cf/stabilityai/stable-diffusion-xl-base-1.0", { prompt } ); return new Response(result, { headers: { "Content-Type": "image/jpeg" }, }); } catch (err) { return json({ error: "Failed to generate image", details: err.message }, 500); } }, }; // 📦 Function to return JSON responses function json(data, status = 200) { return new Response(JSON.stringify(data), { status, headers: { "Content-Type": "application/json" }, }); }