关于 QR for Agent
QR for Agent 是面向 AI Agent 和开发者的 REST API 与 MCP 服务,可编程创建和管理动态二维码,并提供可更改目标地址、扫码分析及 37 个 MCP 工具。
主要功能
- 01可更改目标地址的动态二维码
- 02支持 11 种二维码类型
- 03自定义样式并导出 SVG/PNG
- 04扫码与转化分析
- 05条件重定向和 Webhook
- 06批量管理二维码
适用场景
- 01更改营销活动目标而无需替换印刷码
- 02衡量扫码量及扫码后的转化
- 03创建 WiFi、联系人或活动二维码
MCP 相关
`qr-for-agent` MCP 服务提供 37 个工具,供 Agent 创建、更新、删除和分析二维码,并管理相关 Webhook 与设置。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
37收录的工具列表 · 更新于 2 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| label | string | 否 | 用于标识此二维码的可选标签。 |
| width | number | 否 | 二维码宽度,单位为像素。默认值:400。 |
| format | enum | 否 | 图像格式。推荐使用 "svg"(体积更小、可缩放且可解析文本)。仅在必须使用位图时使用 "png"。svg | png |
| margin | number | 否 | 静区边距,单位为模块。默认值:2。 |
| gradient | object | 否 | 对二维码点和角应用渐变,而不是使用纯色 foreground_color。 |
| gradient.type | enum | 是 | 渐变类型。linear | radial |
| gradient.angle | number | 否 | 角度,单位为度(仅适用于线性渐变)。0=从左到右,90=从上到下。 |
| gradient.colors | array | 是 | 2 种或更多十六进制颜色,均匀分布。 |
| logo_url | string | 否 | 徽标图片的 URL(PNG/JPG/SVG)或 data:base64 URI。位于二维码中央。 |
| dot_style | enum | 否 | 数据模块的形状。square=经典,rounded=圆角,dots=圆点,classy-rounded=自然圆润。square | rounded | dots | classy-rounded |
| logo_size | number | 否 | 徽标大小占二维码宽度的比例(0.15-0.3)。默认值:0.2。 |
| expires_at | string | 否 | ISO 8601 日期时间。此日期之后,扫描将返回 410 Gone,而不是重定向。 |
| frame_text | string | 否 | 边框上的 CTA 文本(例如 'Scan Me!'、'View Menu')。最多 30 个字符。需要设置 frame_style。 |
| target_url | string | 是 | 二维码应重定向到的目标 URL。 |
| frame_color | string | 否 | 边框背景的十六进制颜色。默认值:#000000。 |
| frame_style | enum | 否 | 二维码周围的装饰边框。'banner_bottom':文本位于下方,'banner_top':文本位于上方,'rounded':带文本的圆角边框。none | banner_bottom | banner_top | rounded |
| corner_style | enum | 否 | 定位图案(角落方块)的形状。square=经典,extra-rounded=平滑圆角,dot=圆形。square | extra-rounded | dot |
| scheduled_at | string | 否 | 目标自动切换到 scheduled_url 的 ISO 8601 日期时间。 |
| scheduled_url | string | 否 | 在 scheduled_at 激活的替换 URL。 |
| background_color | string | 否 | 二维码背景的十六进制颜色。默认值:#ffffff(白色)。 |
| error_correction | enum | 否 | 纠错级别。L=7%,M=15%(默认值),Q=25%,H=30%。提供徽标时自动设为 H。L | M | Q | H |
| foreground_color | string | 否 | 二维码圆点的十六进制颜色。默认值:#000000(黑色)。 |
| frame_text_color | string | 否 | 边框文本的十六进制颜色。默认值:#ffffff。 |
| gtm_container_id | string | 否 | Google Tag Manager 容器 ID(例如 'GTM-ABC123')。通过中间 HTML 页面启用 QR 扫描的 GTM 跟踪。 |
| frame_border_radius | number | 否 | 边框圆角半径。仅适用于 'rounded' 样式。 |
详细介绍
QR for Agent
专为 AI Agent 打造的二维码即服务 API。通过 REST API 或 MCP 以编程方式创建、更新和追踪动态二维码(37 个工具)。
二维码指向短 URL(/r/:shortId),你可以随时更改其目标地址——二维码图像不会改变,但扫描后会跳转到新的目标地址。采用多租户设计,并提供完整的扫描分析数据。
在线 API: api.qrforagent.com | 网站: qrforagent.com | MCP: qr-for-agent
功能
- 动态二维码——无需重新生成图像即可更改目标 URL
- 11 种二维码类型——URL、vCard、WiFi、Email、SMS、Phone、Event、Text、Location、Social、App Store
- 自定义样式——点形状(方形、圆角、圆点、圆润典雅)、角落样式、颜色、渐变、嵌入徽标,以及带 CTA 文案的边框
- SVG 和 PNG——矢量和位图输出
- 增强型分析——设备类型、浏览器、操作系统、国家、城市、引荐来源、每日扫描量
- 实时 Webhook——采用 HMAC-SHA256 签名的载荷,并记录投递情况
- UTM 追踪——自动向重定向 URL 追加 UTM 参数
- GTM 支持——包含 Google Tag Manager 代码片段的中间页面
- 条件重定向——按设备、操作系统、国家、语言、时间范围或 A/B 拆分进行路由
- 自定义域名——Pro 用户可使用自己的域名为短 URL 添加品牌标识(
qr.yourbrand.com/r/abc123) - 过期与定时安排——自动使二维码过期,或安排 URL 切换
- 转化追踪——通过追踪像素和 API 记录扫描后的事件(购买、注册),并提供 ROI 分析
- 边框与模板——二维码装饰边框(banner_top、banner_bottom、rounded),并带有 CTA 文案
- 批量操作——每次请求最多创建、更新或删除 50 个二维码;通过 CSV 上传最多可处理 500 个(Pro)
- 多租户——每个 API 密钥只能访问自己的数据
- MCP 服务——
qr-for-agent,提供 37 个工具,可用于 Claude Desktop、Cursor 等 - 按套餐设定配额——Free(10 个二维码,每月 1K 次扫描)和 Pro($19/月,无限量)
- 自助注册——使用邮箱调用
POST /api/register,无需信用卡 - Stripe 集成——结账、账单门户,以及由 Webhook 驱动的套餐管理
- OpenAPI 文档——位于
/documentation的 Swagger UI - 可供 AI 发现——
/.well-known/ai-plugin.json和/.well-known/mcp.json - 开源——采用 MIT 许可证,可通过 Docker 自托管
快速开始
git clone https://github.com/benswel/qr-for-agent-api.git
cd qr-for-agent-api
npm install
npm run dev
首次启动时,会自动生成 API 密钥并打印到控制台。
curl -X POST http://localhost:3100/api/qr \
-H "Content-Type: application/json" \
-H "X-API-Key: qr_YOUR_KEY_HERE" \
-d '{"target_url": "https://example.com", "label": "My first QR"}'
API 端点
二维码管理(需要 X-API-Key)
| 方法 | 路径 | 说明 |
|---|---|---|
POST | /api/qr | 创建二维码(11 种类型,支持自定义样式) |
GET | /api/qr | 列出所有二维码(分页) |
GET | /api/qr/:shortId | 获取二维码详情 |
PATCH | /api/qr/:shortId | 更新目标 URL、标签、UTM、GTM 和重定向规则 |
DELETE | /api/qr/:shortId | 删除二维码及其分析数据 |
GET | /api/qr/:shortId/image | 下载二维码图像(使用已保存的样式重新生成) |
POST | /api/qr/bulk | 创建最多 50 个二维码(全部成功或全部失败) |
PATCH | /api/qr/bulk | 更新最多 50 个二维码(允许部分成功) |
DELETE | /api/qr/bulk | 删除最多 50 个二维码(允许部分成功) |
POST | /api/qr/bulk/csv | 从 CSV 创建最多 500 个二维码(仅限 Pro) |
分析数据(需要 X-API-Key)
| 方法 | 路径 | 说明 |
|---|---|---|
GET | /api/analytics/:shortId | 扫描统计数据,按设备、浏览器、操作系统、国家、城市细分,并包含转化数据 |
转化(需要 X-API-Key)
| 方法 | 路径 | 描述 |
|---|---|---|
POST | /api/conversions | 为你拥有的二维码记录一次转化事件 |
GET | /api/conversions/:shortId | 获取转化统计(总计、按事件、按天、近期记录) |
Webhook(需要 X-API-Key)
| 方法 | 路径 | 描述 |
|---|---|---|
POST | /api/webhooks | 注册 Webhook 端点(返回 HMAC 密钥) |
GET | /api/webhooks | 列出所有 Webhook |
DELETE | /api/webhooks/:id | 删除 Webhook |
自定义域名(需要 X-API-Key,仅限 Pro)
| 方法 | 路径 | 描述 |
|---|---|---|
GET | /api/domain | 获取当前自定义域名和 DNS 状态 |
PUT | /api/domain | 设置自定义域名 |
DELETE | /api/domain | 移除自定义域名 |
账户(需要 X-API-Key)
| 方法 | 路径 | 描述 |
|---|---|---|
GET | /api/usage | 当前用量和配额 |
POST | /api/stripe/checkout | 创建 Stripe Checkout 会话(升级到 Pro) |
POST | /api/stripe/portal | 打开 Stripe 账单门户 |
公共接口(无需身份验证)
| 方法 | 路径 | 描述 |
|---|---|---|
POST | /api/register | 自助注册 API 密钥(受速率限制) |
GET | /r/:shortId | 重定向到目标 URL(记录扫描) |
GET | /t/:shortId | 转化跟踪像素(返回 1×1 GIF) |
GET | /i/:shortId | 提供二维码图片(可缓存) |
GET | /health | 健康检查 |
GET | /documentation | Swagger UI |
GET | /.well-known/ai-plugin.json | AI 插件清单 |
GET | /.well-known/mcp.json | MCP 发现清单 |
管理员(需要 X-Admin-Secret 请求头)
| 方法 | 路径 | 描述 |
|---|---|---|
GET | /api/admin/keys | 列出所有已注册的 API 密钥 |
GET | /api/admin/stats | 仪表盘指标 |
身份验证
所有 /api/* 端点都需要 X-API-Key 请求头。
- 格式:
qr_+ 32 个字符的随机字符串 - 自动生成:首次启动时,如果不存在密钥则自动生成
- 多租户:每个密钥只能查看自己的二维码
- 创建密钥:
npm run key:create "my-label" - 列出密钥:
npm run key:list
公共端点(/r/*、/i/*、/health、/documentation、/.well-known/*)无需身份验证。
MCP 服务
作为 qr-for-agent 发布在 npm 上。提供 37 个工具,供 AI Agent 原生管理二维码。
npx qr-for-agent
Claude Desktop / Cursor
添加到你的 MCP 配置中(claude_desktop_config.json 或 .cursor/mcp.json):
{
"mcpServers": {
"qr-for-agent": {
"command": "npx",
"args": ["-y", "qr-for-agent"],
"env": {
"API_KEY": "your-api-key",
"BASE_URL": "https://api.qrforagent.com"
}
}
}
}
可用工具(37 个)
| 工具 | 描述 |
|---|---|
create_qr_code | 创建可选自定义样式的 URL 二维码 |
get_qr_code | 按短 ID 获取二维码详情 |
update_qr_destination | 更改二维码的重定向目标 |
list_qr_codes | 分页列出所有二维码 |
delete_qr_code | 删除二维码及其分析数据 |
get_qr_analytics | 获取扫描统计数据和细分数据 |
bulk_create_qr_codes | 一次创建最多 50 个二维码 |
bulk_update_qr_codes | 一次更新最多 50 个二维码 |
bulk_delete_qr_codes | 一次删除最多 50 个二维码 |
create_vcard_qr | 创建 vCard 联系人二维码 |
create_wifi_qr | 创建 WiFi 凭据二维码 |
create_email_qr | 创建电子邮件(mailto:)二维码 |
create_sms_qr | 创建短信二维码 |
create_phone_qr | 创建电话呼叫二维码 |
create_event_qr | 创建日历活动二维码 |
create_text_qr | 创建纯文本二维码 |
create_location_qr | 创建地理位置二维码 |
create_social_qr | 创建社交媒体链接二维码 |
create_app_store_qr | 创建智能应用商店重定向二维码 |
update_vcard_qr | 更新 vCard 二维码 |
update_wifi_qr | 更新 WiFi 二维码 |
update_social_qr | 更新社交媒体二维码 |
update_app_store_qr | 更新应用商店二维码 |
create_webhook | 注册 webhook 端点 |
list_webhooks | 列出所有已注册的 webhook |
delete_webhook | 删除 webhook |
register | 注册以获取 API 密钥 |
get_usage | 获取当前用量和配额 |
upgrade_to_pro | 创建 Stripe Checkout 会话 |
manage_billing | 打开 Stripe 账单门户 |
set_utm_params | 为二维码设置 UTM 跟踪参数 |
set_redirect_rules | 为二维码设置条件重定向规则 |
set_custom_domain | 设置或移除自定义域名(Pro) |
get_custom_domain | 获取当前自定义域名和 DNS 状态 |
bulk_create_from_csv | 根据 CSV 数据创建最多 500 个二维码(Pro) |
record_conversion | 记录扫描后的转化事件 |
get_conversions | 获取二维码的转化统计数据 |
配置
将 .env.example 复制为 .env 并进行编辑:
| 变量 | 默认值 | 描述 |
|---|---|---|
PORT | 3100 | HTTP 端口 |
HOST | 0.0.0.0 | 绑定地址 |
BASE_URL | http://localhost:3100 | 公共 URL(用于短 URL) |
DATABASE_URL | ./data/qr-agent.db | SQLite 文件路径 |
SHORT_ID_LENGTH | 8 | 生成的短 ID 长度 |
ADMIN_SECRET | (无) | 管理端点的密钥(X-Admin-Secret 请求头) |
STRIPE_SECRET_KEY | (无) | Stripe API 密钥 |
STRIPE_WEBHOOK_SECRET | (无) | Stripe webhook 签名密钥 |
STRIPE_PRICE_ID | (无) | Pro 套餐的 Stripe Price ID |
数据库
使用 Drizzle ORM 和 SQLite。包含六张表:
api_keys— 密钥存储,包含标签、电子邮件、套餐(free/pro)、Stripe ID 和自定义域名qr_codes— 二维码元数据、目标 URL、类型/type_data、样式选项、UTM、GTM、重定向规则、过期时间/计划scan_events— 扫描跟踪:时间戳、用户代理、来源页、IP、设备、浏览器、操作系统、国家/地区、城市webhooks— 每个 API 密钥对应的 webhook 端点、HMAC 密钥、订阅事件webhook_deliveries— 投递日志:状态、响应代码、错误消息conversion_events— 转化跟踪:事件名称、值、元数据、来源页、IP、时间戳
npm run db:generate # Generate migration from schema changes
npm run db:migrate # Apply pending migrations
npm run db:studio # Open Drizzle Studio (web UI)
服务器启动时会自动运行迁移。
部署
Docker
docker compose up -d
数据库保存在 Docker 卷中。
Railway
项目包含 railway.toml 和多阶段 Dockerfile。将 GitHub 仓库连接到 Railway,即可自动构建和部署,并在 /health 上执行运行状况检查。
测试
195 项集成测试,涵盖所有端点、身份验证、多租户隔离、二维码类型、Webhook、批量操作、自定义域名、帧、转换、CSV 上传和分析。
npm test # Run all tests
npm run test:watch # Watch mode
脚本
| 脚本 | 描述 |
|---|---|
npm run dev | 启动支持自动重新加载的开发服务器 |
npm run build | 编译 TypeScript |
npm start | 运行生产服务器 |
npm test | 运行测试套件 |
npm run test:watch | 以监视模式运行测试 |
npm run key:create | 创建 API 密钥 |
npm run key:list | 列出 API 密钥 |
npm run db:generate | 生成迁移 |
npm run db:migrate | 运行迁移 |
npm run db:studio | 打开 Drizzle Studio |
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。