{
  "markdown": "# OpenQR\n\n**Free, open-source, watermark-free QR code generator.** Runs entirely in your\nbrowser — no tracking, no sign-up, no limits.\n\n[![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-07B1B0.svg)](LICENSE)\n![Next.js](https://img.shields.io/badge/Next.js-16-232E3A)\n![No watermark](https://img.shields.io/badge/watermark-none-07B1B0)\n[![Listed on mcpservers.org](https://mcpservers.org/badge.svg)](https://mcpservers.org/servers/openqr-mcp)\n\nMost online QR generators bait you with \"free\" and then add a watermark, cap your\ndownload size, hide vector export behind a paywall, or route your code through\n*their* servers so it dies when you stop paying. A QR code is just an open\nstandard (ISO/IEC 18004) that costs nothing to generate. **OpenQR keeps it that way.**\n\nThis repository is the **basic generator tool** — the reference open-source\nimplementation. It is deliberately small and easy to fork.\n\n## Hosted version: free API, MCP server and editable codes\n\nEverything in this repo is and stays free, with no watermark and no expiry. The\nhosted build at **[openqr.uk](https://openqr.uk)** adds an *optional* account layer\nfor people who want editable codes and automation:\n\n- **Dynamic / editable QR codes** with scan analytics. Change the destination after\n  you've printed it. **3 free** on a free account (7 days of scans by country);\n  unlimited on Pro at £9/month or £72/year, which also unlocks full analytics\n  history, town and region detail, device and referrer breakdowns with CSV export,\n  a branded subdomain, and password-protected codes.\n- **Free REST API.** Generate codes and manage dynamic codes programmatically.\n  OpenAPI spec at [`/openapi.json`](https://openqr.uk/openapi.json); interactive docs\n  at **[openqr.uk/api](https://openqr.uk/api)**.\n- **Hosted MCP server** at `https://openqr.uk/mcp` (Streamable HTTP, 17 tools).\n  Generate and manage QR codes directly from Claude, Cursor or any MCP client. Listed\n  in the [official MCP Registry](https://registry.modelcontextprotocol.io/v0/servers?search=openqr).\n  Remote-capable clients connect to that URL directly; stdio-only clients can\n  bridge to it with `npx -y @open-qr/mcp` and `OPENQR_API_KEY` set\n  ([details](./mcp/)).\n\nThe static generator in this repository never calls any of that. It stays 100%\nclient-side (see [Privacy](#privacy)), and none of it is required to use or\nself-host the generator.\n\n## Tools\n\nThe hosted MCP server at `https://openqr.uk/mcp` exposes these 17 tools. **Every tool\nrequires a free API key** — create one at [openqr.uk/api](https://openqr.uk/api) and pass\nit as `Authorization: Bearer oqr_...` on the MCP connection.\n\n| Tool | What it does |\n| --- | --- |\n| `generate_qr` | Generate a static QR code from any text or URL. Returns a PNG image or SVG markup. |\n| `create_dynamic_qr` | Create an editable QR code whose destination you can change later without reprinting. |\n| `update_dynamic_qr` | Change a dynamic code's destination, label, custom short link, tags or folder. |\n| `get_dynamic_qr` | Get one code's full details: destination, short link, label, type, tags, folder, status, created date. |\n| `get_scans` | Scan statistics for a dynamic code. |\n| `list_dynamic_qr` | List your dynamic codes with id, short URL, destination, label and status. |\n| `delete_dynamic_qr` | Permanently delete a dynamic code. Its short link stops working. |\n| `bulk_create_dynamic_qr` | Create up to 200 dynamic codes at once. |\n| `list_folders` | List your folders. |\n| `create_folder` | Create a folder to organise codes. |\n| `delete_folder` | Delete a folder. Its codes are un-filed, not deleted. |\n| `list_themes` | List saved style themes. Apply one by passing its id or name as `theme`. |\n| `create_theme` | Save a reusable style theme (colours, dot and corner styles). |\n| `delete_theme` | Delete a saved theme. Codes already styled with it keep their look. |\n| `get_subdomain` | Show the branded subdomain on the account, and whether it is suspended. |\n| `set_subdomain` | Claim or change the branded subdomain so codes also resolve at `{name}.oqr.to`. Pro only. |\n| `clear_subdomain` | Release the branded subdomain. Codes stay live on the plain short link. |\n\nIt also exposes **5 resources** and **4 prompts**:\n\n- **Resources** are built-in QR style presets at `openqr://preset/classic`, `/teal`,\n  `/high-contrast`, `/dots` and `/classy`. Read one and pass its style to `create_theme`.\n- **Prompts** are `create_tracked_qr`, `bulk_qr_for_print`, `brand_a_qr` and `qr_scan_report`.\n\n## Features\n\n- **No watermarks, no size limits, no sign-up** — every feature is free\n- **Private by design** — codes are generated entirely in your browser; the content never touches a server\n- **Export anywhere** — PNG / WebP up to 4096px, plus true-vector **SVG** and **PDF**\n- **Full styling** — colours, gradients, dot & corner styles, logo embedding, \"Scan me\" frames\n- **Smart input** — paste a link or text and the type is auto-detected\n- **Rich payloads** — URL, text, email, phone, SMS, WhatsApp, Wi-Fi, and a map-based location picker\n- One-click copy, shareable design links, light/dark, responsive, keyboard-accessible\n\n## Quick start\n\n```bash\npnpm install\npnpm dev        # http://localhost:3011\n```\n\n## Build & self-host\n\n```bash\npnpm build\npnpm start      # serves on :3011 (standalone output)\n```\n\nIt's a standard Next.js app — host it anywhere (a VPS, a Raspberry Pi, Cloudflare,\nbehind any reverse proxy). It needs **no environment variables, no database, no\nsecrets** to run.\n\n## Embedding\n\nThe `<Generator/>` component is self-contained and configurable:\n\n```tsx\nimport { Generator } from \"@/components/generator/generator\";\n\n// Full page (default OpenQR logo header):\n<Generator />\n\n// Embedded widget, your own branding, no default header:\n<Generator embedded header={<MyLogo />} />\n\n// Inject your own post-download call-to-action:\n<Generator renderSuccess={(variant) => <MySupportCluster variant={variant} />} />\n```\n\nThe tool ships **zero analytics**. If you want anonymous UI events (e.g. which\nexport format was used — never the QR content), inject a handler:\n\n```ts\nimport { setTrackHandler } from \"@/lib/analytics\";\nsetTrackHandler((action, name, category) => myAnalytics.track(category, action, name));\n```\n\n## Privacy\n\nQR generation happens 100% in your browser. The only optional outbound calls are\nin the **Location** tool: map tiles from CARTO and address lookups via\nOpenStreetMap's Nominatim. Nothing else leaves the device.\n\n## Tech stack\n\nNext.js 16 (App Router) · React 19 · TypeScript (strict) · Tailwind v4 ·\n[`qr-code-styling`](https://github.com/kozakdenys/qr-code-styling) · Leaflet · pnpm.\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md). Keep it simple, accessible, client-side,\nand free — no feature should ever require payment to remove a watermark or unlock\na format.\n\n## Licence\n\n[AGPL-3.0](LICENSE) © 2026 Sam Moreton.\n\nYou're free to use, study, modify, self-host, and redistribute OpenQR under the\nAGPL-3.0. If you run a modified version as a network service, the AGPL requires\nyou to make your source available under the same licence. If that doesn't suit\nyour use case, a **commercial licence** is available — see [NOTICE](NOTICE).\n",
  "bytes": 7214,
  "sha": "4dff451ec848d10bc59966c1997df3e42b88f72bc459bc2d80407c6a7aaf3fc8",
  "repo_slug": "open-qr/openqr",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_uk_openqr_qr_559cbd86/readme"
}