{"name":"uk.openqr/qr","slug":"openqr-qr","title":"OpenQR","description":"Generate, edit and track dynamic (editable) QR codes with scan analytics. Hosted MCP and REST API.","url":"https://mcp.market/server/openqr-qr","rating":null,"grade":"A","score":86,"certified":false,"status":"active","category":"security","tags":["security"],"presence":{"score":40,"stars":7,"forks":3,"downloads_week":45,"last_push_at":"2026-09-15T20:29:21.000Z","license":"AGPL-3.0"},"uptime":{"percent":100,"checks":2,"ok":2,"last_checked_at":"2026-09-20T01:56:08.727Z","last_ok_at":"2026-09-20T01:56:08.727Z","latency_ms":2699},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/open-qr/openqr","website":"https://openqr.uk/api","version":"1.0.4","remotes":[{"type":"streamable-http","url":"https://openqr.uk/mcp","headers":[{"description":"Bearer API key from https://openqr.uk/api, format: 'Bearer oqr_...'","isRequired":true,"isSecret":true,"name":"Authorization"}]}],"packages":[{"registryType":"npm","identifier":"@open-qr/mcp","version":"1.0.2","transport":{"type":"stdio"},"environmentVariables":[{"description":"OpenQR API key. Free at https://openqr.uk/api","isRequired":true,"isSecret":true,"name":"OPENQR_API_KEY"}]}],"tools":[{"name":"bulk_create_dynamic_qr","description":"Create up to 200 dynamic QR codes at once. Requires an OpenQR API key.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"codes":{"type":"array","description":"Codes to create.","items":{"type":"object","properties":{"destination":{"type":"string"},"label":{"type":"string"}},"required":["destination"]}},"theme":{"type":"string","description":"A saved theme id or name applied to every code created."}},"required":["codes"]}},{"name":"clear_subdomain","description":"Release the branded subdomain. Codes stay live on the plain short link; only the {name}.oqr.to form stops resolving. The name becomes claimable by someone else. Requires an OpenQR API key.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"create_dynamic_qr","description":"Create an editable (dynamic) QR code whose destination you can change later without reprinting. Requires an OpenQR API key.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"destination":{"type":"string","description":"The http(s) URL the code should point to."},"label":{"type":"string","description":"Optional label."},"theme":{"type":"string","description":"A saved theme id or name to style the code with."}},"required":["destination"]}},{"name":"create_folder","description":"Create a folder to organise codes. Requires an OpenQR API key.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},{"name":"create_link_alias","description":"Create an extra short link (link alias) that resolves where one of your dynamic codes points: share a different slug per channel while the QR keeps its own slug, so QR scans and link clicks are counted separately. Free accounts have no alias allowance; Pro includes 10. Requires an OpenQR API key.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"The dynamic code id the alias should point at."},"slug":{"type":"string","description":"Optional custom back-half (oqr.to/<slug>): 3–48 letters, numbers or hyphens. Omit for a random one."}},"required":["id"]}},{"name":"create_static_qr","description":"Save a static QR code to your library from structured fields: wifi, contact (vCard), email, SMS, WhatsApp, location, text, phone or URL. Static codes bake the content into the code itself — no short link, no scan analytics, not editable later. Render the returned payload with generate_qr. Requires an OpenQR API key.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"type":{"type":"string","enum":["url","text","email","phone","sms","whatsapp","wifi","geo","vcard"],"description":"The payload type."},"fields":{"type":"object","description":"Field names depend on type. url: url. text: text. email: email, subject?, body?. phone: phone. sms: phone, message?. whatsapp: phone (country code, digits only), message?. wifi: ssid, password?, encryption? (WPA|WEP|nopass), hidden? (boolean). geo: lat, lng. vcard: firstName?, lastName?, phone?, email?, org?, title?, url?, address? (a name/phone/email is required)."},"label":{"type":"string","description":"Optional label for your dashboard."},"theme":{"type":"string","description":"A saved theme id or name to style the code with."}},"required":["type","fields"]}},{"name":"create_theme","description":"Save a reusable style theme. `style` is a QR style object (fgColor, bgColor, dotType, cornerSquareType, etc.). Requires an OpenQR API key.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string"},"style":{"type":"object","description":"QR style JSON (colours, dot/corner shapes, logo, gradient, frame…)."}},"required":["name","style"]}},{"name":"delete_dynamic_qr","description":"Permanently delete a dynamic QR code. The short link stops working. Requires an OpenQR API key.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"The dynamic code id."}},"required":["id"]}},{"name":"delete_folder","description":"Delete a folder (its codes are un-filed, not deleted). Requires an OpenQR API key.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},{"name":"delete_theme","description":"Delete a saved theme. Codes already styled with it keep their look. Requires an OpenQR API key.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},{"name":"generate_qr","description":"Generate a static QR code from any text/URL. Returns a PNG image (or SVG markup). Requires an OpenQR API key.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"data":{"type":"string","description":"The content to encode (URL or text)."},"format":{"type":"string","enum":["png","svg"],"description":"Output format (default png)."},"size":{"type":"number","description":"Pixel size, 96–2048 (default 512)."},"theme":{"type":"string","description":"A saved theme id or name. Applies the theme's colours; full styling applies to dynamic codes."}},"required":["data"]}},{"name":"get_dynamic_qr","description":"Get the full details of one of your QR codes by id: destination, short link, label, type, tags, folder, status and created date. Requires an OpenQR API key.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"The code id."}},"required":["id"]}},{"name":"get_scans","description":"Get scan statistics for a dynamic QR code. Requires an OpenQR API key.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"The dynamic code id."}},"required":["id"]}},{"name":"get_subdomain","description":"Show the branded subdomain on this account ({name}.oqr.to). Reports whether it is currently suspended — a suspended subdomain redirects to the plain short link instead of serving, which happens when a Pro plan lapses. Requires an OpenQR API key.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"list_dynamic_qr","description":"List your dynamic (editable) QR codes — id, short URL, destination, label and status. Requires an OpenQR API key.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"type":"number","description":"Max codes to return, 1–500 (default 200)."}}}},{"name":"list_folders","description":"List your folders (id and name). Requires an OpenQR API key.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"list_link_aliases","description":"List the link aliases of one dynamic code. Requires an OpenQR API key.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"The dynamic code id."}},"required":["id"]}},{"name":"list_themes","description":"List your saved style themes (id, name) — apply one by passing its id or name as `theme` to generate/create/update tools. Requires an OpenQR API key.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"set_subdomain","description":"Claim or change the branded subdomain so codes also resolve at {name}.oqr.to. Pro only. Codes keep working on the plain short link either way, so changing this never breaks anything already printed. Requires an OpenQR API key.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"subdomain":{"type":"string","description":"3–32 letters, numbers or hyphens, e.g. \"acme\"."}},"required":["subdomain"]}},{"name":"update_dynamic_qr","description":"Edit a dynamic QR code: change its destination, label, custom short link (slug), tags or folder. Pass only the fields you want to change. Requires an OpenQR API key.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"The dynamic code id."},"destination":{"type":"string","description":"New http(s) URL."},"label":{"type":"string","description":"New label."},"slug":{"type":"string","description":"Custom short-link back-half (oqr.to/<slug>): 3–48 letters, numbers or hyphens."},"tags":{"type":"array","items":{"type":"string"},"description":"Replace the code's tags (max 10)."},"folder_id":{"type":["string","null"],"description":"Move into a folder id, or null to un-file."},"status":{"type":"string","enum":["active","paused"],"description":"Pause the code (it stops resolving — scanners see an inactive page) or reactivate it. Free allows 1 active code; Pro 25."},"password":{"type":["string","null"],"description":"Pro: require this password before the code redirects (min 4 characters). Pass null to remove all protection."},"pin":{"type":["string","null"],"description":"Pro: require a 4-digit PIN before the code redirects. Exactly 4 digits. Pass null to remove all protection."},"lock_hint":{"type":["string","null"],"description":"Optional hint shown on the unlock page, e.g. \"Ask at the bar\". Max 60 characters."},"pause_until":{"type":["string","null"],"description":"ISO 8601 timestamp: schedule a pause until then (scanners see the inactive page; the code self-resumes at the deadline). Pass null to clear the schedule. Future timestamps only, active codes only."},"ios_destination":{"type":["string","null"],"description":"App links: iOS scanners follow this http(s) URL instead of destination (e.g. the App Store page). Pass null to clear. Applies to the plain redirect only."},"android_destination":{"type":["string","null"],"description":"App links: Android scanners follow this http(s) URL instead of destination (e.g. the Google Play page). Pass null to clear."},"theme":{"type":"string","description":"A saved theme id or name to restyle the code with."}},"required":["id"]}}],"scan":{"score":86,"grade":"A","scanned_at":"2026-09-19T20:28:53.331Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T20:28:53.282Z","components":{"code":{"score":25,"max":25,"notes":["2 source files scanned"]},"reliability":{"score":17,"max":20,"notes":["remote reachable in 4831ms"]},"poisoning":{"score":15,"max":15,"notes":["20 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":15,"max":15,"notes":["last push 4 days ago"]},"identity":{"score":6,"max":10,"notes":["namespace and repository owner differ","website matches verified namespace"]}},"findings":[],"inputs":{"probes":[{"url":"https://openqr.uk/mcp","reachable":true,"authRequired":false,"latencyMs":4831,"serverInfo":{"name":"OpenQR","version":"1.0.0"}}],"packages":[{"registryType":"npm","identifier":"@open-qr/mcp","version":"1.0.2","found":true,"license":"AGPL-3.0-only","hasInstallScripts":false,"dependencyCount":1,"publishedAt":"2026-09-10T14:54:32.409Z","repositoryUrl":"git+https://github.com/open-qr/openqr.git","weeklyDownloads":45}],"repo":{"found":true,"owner":"open-qr","repo":"openqr","archived":false,"pushedAt":"2026-09-15T20:29:21Z","stars":7,"forks":3,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/298909490?v=4","ownerCreatedAt":"2026-07-02T00:07:40Z","license":"AGPL-3.0"},"icon":{"url":"https://openqr.uk/favicon.ico","source":"registry","width":48,"height":48},"presence":{"stars":7,"forks":3,"downloadsWeek":45,"license":"AGPL-3.0","lastPushAt":"2026-09-15T20:29:21.000Z","score":40}}}},"grade_history":[{"kind":"restore","fromGrade":"B","toGrade":"A","reason":"score 86","createdAt":"2026-09-19T20:28:57.153Z"}],"reviews":[]}