OpenQR
官方生成二维码,并通过托管的MCP服务器(17个工具)和免费REST API管理动态(可编辑)二维码,附带扫描分析功能。
你可以用 OpenQR MCP 做什么?
- 生成静态二维码 — 通过任意文本或URL请求二维码;通过
generate_qr获取PNG或SVG输出。 - 创建和管理动态二维码 — 使用
create_dynamic_qr、update_dynamic_qr和delete_dynamic_qr构建可编辑的二维码、更改目标地址、列出或删除它们。 - 跟踪扫描分析 — 通过
get_scans请求动态二维码的扫描统计信息,以查看其表现。 - 使用文件夹和主题进行组织 — 使用
create_folder和create_theme创建文件夹和可复用的样式预设,以保持二维码整洁并体现品牌风格。 - 批量生成用于印刷活动 — 使用
bulk_create_dynamic_qr一次创建多达200个动态二维码,适用于大规模项目。
文档
OpenQR
免费、开源、无水印的二维码生成器。 完全在浏览器中运行——无追踪、无需注册、无限制。
大多数在线二维码生成器以“免费”为诱饵,然后添加水印、限制下载大小、将矢量导出置于付费墙之后,或者通过他们的服务器路由你的代码,使你在停止付费时它就会失效。二维码只是一个开放标准(ISO/IEC 18004),生成它无需任何成本。OpenQR 保持了这一点。
此仓库是基础生成器工具——参考开源实现。它刻意保持小巧且易于分叉。
如果 OpenQR 对你有用,给仓库点个星标可以帮助其他人找到它。这就是全部请求。
托管版本:免费 API、MCP 服务器和可编辑代码
此仓库中的所有内容都是且将保持免费,无水印、无过期。位于 openqr.uk 的托管构建为需要可编辑代码和自动化的人添加了可选账户层:
- 动态/可编辑二维码,带扫描分析。打印后可以更改目的地。免费账户1 个免费(7 天按国家扫描);Pro 版25 个可编辑代码,每月 £9 或每年 £90,同时解锁 90 天扫描分析窗口,以及城镇和地区详情、设备和引荐来源细分(支持 CSV 导出)、品牌子域名和密码保护代码。现有订阅者保留其当前套餐和价格。
- 免费 REST API。 以编程方式生成代码和管理动态代码。OpenAPI 规范见
/openapi.json;交互式文档见 openqr.uk/api。 - 托管 MCP 服务器,位于
https://openqr.uk/mcp(Streamable HTTP)。直接从 Claude、Cursor 或任何 MCP 客户端生成和管理二维码。已列入官方 MCP 注册表。支持远程的客户端直接连接该 URL;仅支持 stdio 的客户端可以通过设置npx -y @open-qr/mcp和OPENQR_API_KEY桥接(详情)。
此仓库中的静态生成器从不调用上述任何功能。它保持 100% 客户端运行(见隐私),并且使用或自托管生成器均不需要其中任何功能。
连接 MCP 客户端
在 openqr.uk/api 获取免费密钥,然后将客户端指向服务器,并将密钥作为认证头传递。
Claude Code:
claude mcp add --transport http openqr https://openqr.uk/mcp \
--header "Authorization: Bearer oqr_YOUR_KEY"
Cursor(~/.cursor/mcp.json)以及任何其他支持 Streamable HTTP 的客户端:
{
"mcpServers": {
"openqr": {
"url": "https://openqr.uk/mcp",
"headers": {
"Authorization": "Bearer oqr_YOUR_KEY"
}
}
}
}
工具
位于 https://openqr.uk/mcp 的托管 MCP 服务器暴露以下工具(运行 tools/list 获取实时列表)。每个工具都需要免费 API 密钥——在 openqr.uk/api 创建一个,并在 MCP 连接上作为 Authorization: Bearer oqr_... 传递。
| 工具 | 功能 |
|---|---|
generate_qr | 从任何文本或 URL 生成静态二维码。返回 PNG 图像或 SVG 标记。 |
create_dynamic_qr | 创建可编辑二维码,其目的地可在之后更改而无需重新打印。 |
update_dynamic_qr | 更改动态代码的目的地、标签、自定义短链接、标签或文件夹。 |
get_dynamic_qr | 获取单个代码的完整详情:目的地、短链接、标签、类型、标签、文件夹、状态、创建日期。 |
get_scans | 动态代码的扫描统计。 |
list_dynamic_qr | 列出你的动态代码,包含 id、短 URL、目的地、标签和状态。 |
delete_dynamic_qr | 永久删除动态代码。其短链接将停止工作。 |
bulk_create_dynamic_qr | 一次创建最多 200 个动态代码。 |
list_folders | 列出你的文件夹。 |
create_folder | 创建文件夹以组织代码。 |
delete_folder | 删除文件夹。其中的代码将被取消归档,而非删除。 |
list_themes | 列出已保存的样式主题。通过传递其 id 或名称作为 theme 来应用。 |
create_theme | 保存可复用的样式主题(颜色、点和角样式)。 |
delete_theme | 删除已保存的主题。已使用该主题样式的代码保持其外观。 |
get_subdomain | 显示账户上的品牌子域名,以及是否被暂停。 |
set_subdomain | 认领或更改品牌子域名,使代码也能在 {name}.oqr.to 解析。仅限 Pro。 |
clear_subdomain | 释放品牌子域名。代码在普通短链接上保持活跃。 |
它还暴露了5 个资源和4 个提示:
- 资源是内置的二维码样式预设,位于
openqr://preset/classic、/teal、/high-contrast、/dots和/classy。读取一个并将其样式传递给create_theme。 - 提示是
create_tracked_qr、bulk_qr_for_print、brand_a_qr和qr_scan_report。
功能
- 无水印、无大小限制、无需注册——每项功能均免费
- 设计上保护隐私——代码完全在浏览器中生成;内容从不接触服务器
- 随处导出——PNG / WebP 最高 4096px,以及真正的矢量 SVG 和 PDF
- 完整样式——颜色、渐变、点和角样式、Logo 嵌入、“扫描我”框架
- 智能输入——粘贴链接或文本,类型自动检测
- 丰富负载——URL、文本、电子邮件、电话、短信、WhatsApp、Wi-Fi 以及基于地图的位置选择器
- 一键复制、可分享的设计链接、浅色/深色、响应式、键盘可访问
快速开始
pnpm install
pnpm dev # http://localhost:3011
构建与自托管
pnpm build
pnpm start # serves on :3011 (standalone output)
这是一个标准的 Next.js 应用——可托管在任何地方(VPS、树莓派、Cloudflare、任何反向代理之后)。运行无需环境变量、无需数据库、无需密钥。上述开发/启动脚本使用端口 3011;下面的 Docker 镜像在 3000 上提供服务。两种方式的唯一配置是 PORT。
部署(Docker 镜像)
一个多架构镜像(linux/amd64、linux/arm64)在每个发布标签时发布到 GHCR:
docker run -d --name openqr --restart unless-stopped -p 3000:3000 ghcr.io/open-qr/openqr:latest
或使用 docker-compose.yml:
docker compose up -d # update later: docker compose pull && docker compose up -d
在生产环境中固定版本标签(ghcr.io/open-qr/openqr:1.0.1);latest 随每个版本移动。该容器是一个预构建的非 root 独立服务器,带有健康检查,并在镜像内携带 LICENSE 和 NOTICE。
一键部署
| 主机 | 链接 | 备注 |
|---|---|---|
| DigitalOcean App Platform | 1 键按钮 | 读取 .do/deploy.template.yaml;最小实例,端口 3000 |
| Render | Blueprint 按钮 | 读取 render.yaml;假定付费实例(Render 的免费层会休眠) |
| Koyeb | 从镜像部署 | 任何公共 ghcr.io/open-qr/openqr 标签,无需仓库构建 |
通过上述任何方式部署都不会增加 AGPL-3.0 之外的条款:源代码即此仓库,镜像携带许可证和第三方声明。
嵌入
<Generator/> 组件是自包含且可配置的:
import { Generator } from "@/components/generator/generator";
// Full page (default OpenQR logo header):
<Generator />
// Embedded widget, your own branding, no default header:
<Generator embedded header={<MyLogo />} />
// Inject your own post-download call-to-action:
<Generator renderSuccess={(variant) => <MySupportCluster variant={variant} />} />
该工具零分析。如果你想要匿名 UI 事件(例如使用了哪种导出格式——绝不包含二维码内容),注入一个处理器:
import { setTrackHandler } from "@/lib/analytics";
setTrackHandler((action, name, category) => myAnalytics.track(category, action, name));
隐私
二维码生成 100% 在浏览器中完成。唯一可选的出站调用在位置工具中:来自 CARTO 的地图瓦片和通过 OpenStreetMap 的 Nominatim 进行的地址查找。其他内容不会离开设备。
技术栈
Next.js 16(App Router)· React 19 · TypeScript(严格模式)· Tailwind v4 ·
qr-code-styling · Leaflet · pnpm。
贡献
见 CONTRIBUTING.md。保持简单、可访问、客户端运行且免费——任何功能都不应要求付费才能移除水印或解锁格式。
许可证
AGPL-3.0 © 2026 Sam Moreton。
你可以自由使用、研究、修改、自托管和重新分发 OpenQR,遵循 AGPL-3.0。如果你将修改版本作为网络服务运行,AGPL 要求你在相同许可证下提供源代码。如果这不适合你的用例,可提供商业许可证——见 NOTICE。