I built a free QR code API + MCP server on Cloudflare Pages — here's the whole design A developer built FreeQrly, an open-source (MIT) QR code generator running on Cloudflare Pages and D1 that exposes a free static QR API, login-gated dynamic codes, and a Streamable HTTP MCP server at freeqrly.com/mcp. The design routes the web UI, REST API, and MCP tools through one shared auth and quota core, so validation, the 8-code free-tier limit, and ownership checks stay identical across all three surfaces. The project was published to the official MCP Registry as io.github.BryceBin/freeqrly (v1.1.0) and ships llms.txt and a SKILL.md for agent discovery. Most QR code generators are either ad-covered landing pages or SaaS products with a paywall behind "dynamic codes". I wanted the opposite: a generator that's free, private by default, and natively callable by AI agents. So I built FreeQrly https://freeqrly.com — open source BryceBin/freeqrly https://github.com/BryceBin/freeqrly , MIT , running entirely on Cloudflare Pages + D1. Here's the architecture, including the part I think is most interesting: one shared auth/quota core serving three surfaces — web UI, REST API, and MCP. 1. Static QR API — no key, no signup, CORS wide open GET https://freeqrly.com/api/qr?data=https://example.com&size=1024&color=2F4A62&bgcolor=ffffff&margin=4&ecc=M Returns an SVG. data is required 400 with a clear error otherwise , everything else has sane defaults, input is validated data ≤ 2000 chars, color format checked . Static codes are generated 100% in the browser on the web UI — the API just mirrors that server-side for agents and scripts. 2. Dynamic codes — login-gated, editable after print Dynamic codes resolve through short /q/xxxxxxx links, so you can change the destination after printing and see scan stats date / country / device / city breakdowns . Free tier: 8 codes. Login via Google, GitHub, or email+password Turnstile-protected . The /q/ hosted pages carry noindex + X-Robots-Tag so they never end up in search results. 3. MCP — Streamable HTTP, no auth for static, token for dynamic POST https://freeqrly.com/mcp generate qr works with zero auth. Send an Authorization: Bearer