{
  "data": {
    "tool": {
      "category": "",
      "endpoint": "https://openqr.uk/mcp",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/openqr-qr.json",
      "kind": "mcp",
      "listed": "indexed",
      "liveUrl": "https://www.anchorterminal.com/api/v1/live/openqr-qr.json",
      "markdownUrl": "https://www.anchorterminal.com/tools/openqr-qr.md",
      "mcpTools": {
        "check": {
          "checker": "anchor-check/1.0",
          "totalTokens": 2329,
          "counts": {
            "error": 0,
            "note": 1,
            "warn": 26
          },
          "findings": [
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "create_folder",
              "message": "its one parameter, name, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "create_theme",
              "message": "1 parameter without a description: name",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "delete_folder",
              "message": "its one parameter, id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "delete_theme",
              "message": "its one parameter, id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "create_static_qr",
              "message": "fields (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "create_theme",
              "message": "style (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "bulk_create_dynamic_qr",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "clear_subdomain",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "create_dynamic_qr",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "create_folder",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "create_link_alias",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "create_static_qr",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "create_theme",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "delete_dynamic_qr",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "delete_folder",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "delete_theme",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "generate_qr",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "get_dynamic_qr",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "get_scans",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "get_subdomain",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "list_dynamic_qr",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "list_folders",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "list_link_aliases",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "list_themes",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "set_subdomain",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "update_dynamic_qr",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC24",
              "severity": "note",
              "message": "20 of 20 tools have no outputSchema",
              "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
            }
          ]
        },
        "checkedAt": "2026-10-04T22:26:01Z",
        "count": 20,
        "note": "answered without the initialize handshake",
        "schemaTokens": 2329,
        "status": "ok",
        "tools": [
          {
            "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.",
            "inputSchema": {
              "properties": {
                "data": {
                  "description": "The content to encode (URL or text).",
                  "type": "string"
                },
                "format": {
                  "description": "Output format (default png).",
                  "enum": [
                    "png",
                    "svg"
                  ],
                  "type": "string"
                },
                "size": {
                  "description": "Pixel size, 96–2048 (default 512).",
                  "type": "number"
                },
                "theme": {
                  "description": "A saved theme id or name. Applies the theme's colours; full styling applies to dynamic codes.",
                  "type": "string"
                }
              },
              "required": [
                "data"
              ],
              "type": "object"
            }
          },
          {
            "name": "create_dynamic_qr",
            "description": "Create an editable (dynamic) QR code whose destination you can change later without reprinting. Requires an OpenQR API key.",
            "inputSchema": {
              "properties": {
                "destination": {
                  "description": "The http(s) URL the code should point to.",
                  "type": "string"
                },
                "label": {
                  "description": "Optional label.",
                  "type": "string"
                },
                "theme": {
                  "description": "A saved theme id or name to style the code with.",
                  "type": "string"
                }
              },
              "required": [
                "destination"
              ],
              "type": "object"
            }
          },
          {
            "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.",
            "inputSchema": {
              "properties": {
                "fields": {
                  "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).",
                  "type": "object"
                },
                "label": {
                  "description": "Optional label for your dashboard.",
                  "type": "string"
                },
                "theme": {
                  "description": "A saved theme id or name to style the code with.",
                  "type": "string"
                },
                "type": {
                  "description": "The payload type.",
                  "enum": [
                    "url",
                    "text",
                    "email",
                    "phone",
                    "sms",
                    "whatsapp",
                    "wifi",
                    "geo",
                    "vcard"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type",
                "fields"
              ],
              "type": "object"
            }
          },
          {
            "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.",
            "inputSchema": {
              "properties": {
                "android_destination": {
                  "description": "App links: Android scanners follow this http(s) URL instead of destination (e.g. the Google Play page). Pass null to clear.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "destination": {
                  "description": "New http(s) URL.",
                  "type": "string"
                },
                "folder_id": {
                  "description": "Move into a folder id, or null to un-file.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "id": {
                  "description": "The dynamic code id.",
                  "type": "string"
                },
                "ios_destination": {
                  "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.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "label": {
                  "description": "New label.",
                  "type": "string"
                },
                "lock_hint": {
                  "description": "Optional hint shown on the unlock page, e.g. \"Ask at the bar\". Max 60 characters.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "password": {
                  "description": "Pro: require this password before the code redirects (min 4 characters). Pass null to remove all protection.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "pause_until": {
                  "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.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "pin": {
                  "description": "Pro: require a 4-digit PIN before the code redirects. Exactly 4 digits. Pass null to remove all protection.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "slug": {
                  "description": "Custom short-link back-half (oqr.to/\u003cslug\u003e): 3–48 letters, numbers or hyphens.",
                  "type": "string"
                },
                "status": {
                  "description": "Pause the code (it stops resolving — scanners see an inactive page) or reactivate it. Free allows 1 active code; Pro 25.",
                  "enum": [
                    "active",
                    "paused"
                  ],
                  "type": "string"
                },
                "tags": {
                  "description": "Replace the code's tags (max 10).",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "theme": {
                  "description": "A saved theme id or name to restyle the code with.",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            }
          },
          {
            "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.",
            "inputSchema": {
              "properties": {
                "id": {
                  "description": "The code id.",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            }
          },
          {
            "name": "get_scans",
            "description": "Get scan statistics for a dynamic QR code. Requires an OpenQR API key.",
            "inputSchema": {
              "properties": {
                "id": {
                  "description": "The dynamic code id.",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            }
          },
          {
            "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.",
            "inputSchema": {
              "properties": {
                "id": {
                  "description": "The dynamic code id the alias should point at.",
                  "type": "string"
                },
                "slug": {
                  "description": "Optional custom back-half (oqr.to/\u003cslug\u003e): 3–48 letters, numbers or hyphens. Omit for a random one.",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            }
          },
          {
            "name": "list_link_aliases",
            "description": "List the link aliases of one dynamic code. Requires an OpenQR API key.",
            "inputSchema": {
              "properties": {
                "id": {
                  "description": "The dynamic code id.",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            }
          },
          {
            "name": "list_dynamic_qr",
            "description": "List your dynamic (editable) QR codes — id, short URL, destination, label and status. Requires an OpenQR API key.",
            "inputSchema": {
              "properties": {
                "limit": {
                  "description": "Max codes to return, 1–500 (default 200).",
                  "type": "number"
                }
              },
              "type": "object"
            }
          },
          {
            "name": "delete_dynamic_qr",
            "description": "Permanently delete a dynamic QR code. The short link stops working. Requires an OpenQR API key.",
            "inputSchema": {
              "properties": {
                "id": {
                  "description": "The dynamic code id.",
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            }
          },
          {
            "name": "bulk_create_dynamic_qr",
            "description": "Create up to 200 dynamic QR codes at once. Requires an OpenQR API key.",
            "inputSchema": {
              "properties": {
                "codes": {
                  "description": "Codes to create.",
                  "items": {
                    "properties": {
                      "destination": {
                        "type": "string"
                      },
                      "label": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "destination"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "theme": {
                  "description": "A saved theme id or name applied to every code created.",
                  "type": "string"
                }
              },
              "required": [
                "codes"
              ],
              "type": "object"
            }
          },
          {
            "name": "list_folders",
            "description": "List your folders (id and name). Requires an OpenQR API key.",
            "inputSchema": {
              "properties": {},
              "type": "object"
            }
          },
          {
            "name": "create_folder",
            "description": "Create a folder to organise codes. Requires an OpenQR API key.",
            "inputSchema": {
              "properties": {
                "name": {
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "type": "object"
            }
          },
          {
            "name": "delete_folder",
            "description": "Delete a folder (its codes are un-filed, not deleted). Requires an OpenQR API key.",
            "inputSchema": {
              "properties": {
                "id": {
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            }
          },
          {
            "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.",
            "inputSchema": {
              "properties": {},
              "type": "object"
            }
          },
          {
            "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.",
            "inputSchema": {
              "properties": {
                "name": {
                  "type": "string"
                },
                "style": {
                  "description": "QR style JSON (colours, dot/corner shapes, logo, gradient, frame…).",
                  "type": "object"
                }
              },
              "required": [
                "name",
                "style"
              ],
              "type": "object"
            }
          },
          {
            "name": "delete_theme",
            "description": "Delete a saved theme. Codes already styled with it keep their look. Requires an OpenQR API key.",
            "inputSchema": {
              "properties": {
                "id": {
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            }
          },
          {
            "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.",
            "inputSchema": {
              "properties": {},
              "type": "object"
            }
          },
          {
            "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.",
            "inputSchema": {
              "properties": {
                "subdomain": {
                  "description": "3–32 letters, numbers or hyphens, e.g. \"acme\".",
                  "type": "string"
                }
              },
              "required": [
                "subdomain"
              ],
              "type": "object"
            }
          },
          {
            "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.",
            "inputSchema": {
              "properties": {},
              "type": "object"
            }
          }
        ]
      },
      "name": "OpenQR",
      "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
      "packages": [
        {
          "registryType": "npm",
          "identifier": "@open-qr/mcp",
          "version": "1.0.2",
          "transport": "stdio"
        }
      ],
      "pageJsonUrl": "https://www.anchorterminal.com/tools/openqr-qr.json",
      "popularity": {
        "githubStars": 11,
        "npmWeekly": 18
      },
      "registryName": "uk.openqr/qr",
      "remotes": [
        {
          "type": "streamable-http",
          "url": "https://openqr.uk/mcp"
        }
      ],
      "repository": "https://github.com/open-qr/openqr",
      "reviewed": false,
      "slug": "openqr-qr",
      "source": "the official MCP registry",
      "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=uk.openqr/qr",
      "summary": "Generate, edit and track dynamic (editable) QR codes with scan analytics. Hosted MCP and REST API.",
      "updatedAt": "2026-09-10T15:07:45Z",
      "url": "https://www.anchorterminal.com/tools/openqr-qr",
      "vendor": "openqr.uk",
      "vendorUrl": "https://openqr.uk/api",
      "version": "1.0.4",
      "websiteUrl": "https://openqr.uk/api",
      "where": "both",
      "why": [
        "vendor"
      ]
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/tools/openqr-qr",
    "json": "https://www.anchorterminal.com/tools/openqr-qr.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/tools/openqr-qr.md",
    "slim": "https://www.anchorterminal.com/tools/openqr-qr.min.md"
  },
  "markdown": "# OpenQR\n\n\u003e Indexed, not reviewed: facts from the official MCP registry and our own checks. No score, grade or rank, and not in the rankings until the panel reviews it. How the index works: https://www.anchorterminal.com/indexed/\n\n- Kind: MCP server, by openqr.uk (https://openqr.uk/api)\n- Listed because: It's published in the registry under openqr.uk, a namespace the registry only gives to whoever proves they control that domain.\n- What the official MCP registry says: Generate, edit and track dynamic (editable) QR codes with scan analytics. Hosted MCP and REST API.\n\n## Facts\n\n- MCP registry: `uk.openqr/qr` 1.0.4\n- Endpoint: https://openqr.uk/mcp (streamable HTTP)\n- Package: npm `@open-qr/mcp` (stdio)\n- Source: https://github.com/open-qr/openqr\n- Website: https://openqr.uk/api\n- npm downloads a week: 18\n- GitHub stars: 11\n- Registry entry updated: 2026-09-10\n\n## Tools\n\n- Tools it lists (20, about 2,329 tokens of context, `tools/list` without credentials, checked 2026-10-04 22:26 UTC):\n  - `generate_qr`: Generate a static QR code from any text/URL. Returns a PNG image (or SVG markup). Requires an OpenQR API key.\n  - `create_dynamic_qr`: Create an editable (dynamic) QR code whose destination you can change later without reprinting. Requires an OpenQR API key.\n  - `create_static_qr`: 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…\n  - `update_dynamic_qr`: 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…\n  - `get_dynamic_qr`: 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.\n  - `get_scans`: Get scan statistics for a dynamic QR code. Requires an OpenQR API key.\n  - `create_link_alias`: 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…\n  - `list_link_aliases`: List the link aliases of one dynamic code. Requires an OpenQR API key.\n  - `list_dynamic_qr`: List your dynamic (editable) QR codes — id, short URL, destination, label and status. Requires an OpenQR API key.\n  - `delete_dynamic_qr`: Permanently delete a dynamic QR code. The short link stops working. Requires an OpenQR API key.\n  - `bulk_create_dynamic_qr`: Create up to 200 dynamic QR codes at once. Requires an OpenQR API key.\n  - `list_folders`: List your folders (id and name). Requires an OpenQR API key.\n  - `create_folder`: Create a folder to organise codes. Requires an OpenQR API key.\n  - `delete_folder`: Delete a folder (its codes are un-filed, not deleted). Requires an OpenQR API key.\n  - `list_themes`: 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.\n  - `create_theme`: Save a reusable style theme. `style` is a QR style object (fgColor, bgColor, dotType, cornerSquareType, etc.). Requires an OpenQR API key.\n  - `delete_theme`: Delete a saved theme. Codes already styled with it keep their look. Requires an OpenQR API key.\n  - `get_subdomain`: 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…\n  - `set_subdomain`: 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…\n  - `clear_subdomain`: 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…\n- How its tools read to an agent (0 errors, 26 warnings, 1 note, about 2,329 tokens; rules at https://www.anchorterminal.com/check.md; not part of the score):\n  - warn TC11 create_folder: its one parameter, name, has no description\n  - warn TC11 create_theme: 1 parameter without a description: name\n  - warn TC11 delete_folder: its one parameter, id, has no description\n  - warn TC11 delete_theme: its one parameter, id, has no description\n  - warn TC13 create_static_qr: fields (object with no properties)\n  - warn TC13 create_theme: style (object with no properties)\n  - warn TC16 bulk_create_dynamic_qr: no readOnlyHint or destructiveHint\n  - warn TC16 clear_subdomain: no readOnlyHint or destructiveHint\n  - warn TC16 create_dynamic_qr: no readOnlyHint or destructiveHint\n  - warn TC16 create_folder: no readOnlyHint or destructiveHint\n  - warn TC16 create_link_alias: no readOnlyHint or destructiveHint\n  - warn TC16 create_static_qr: no readOnlyHint or destructiveHint\n  - warn TC16 create_theme: no readOnlyHint or destructiveHint\n  - warn TC16 delete_dynamic_qr: no readOnlyHint or destructiveHint\n  - warn TC16 delete_folder: no readOnlyHint or destructiveHint\n  - warn TC16 delete_theme: no readOnlyHint or destructiveHint\n  - warn TC16 generate_qr: no readOnlyHint or destructiveHint\n  - warn TC16 get_dynamic_qr: no readOnlyHint or destructiveHint\n  - warn TC16 get_scans: no readOnlyHint or destructiveHint\n  - warn TC16 get_subdomain: no readOnlyHint or destructiveHint\n  - warn TC16 list_dynamic_qr: no readOnlyHint or destructiveHint\n  - warn TC16 list_folders: no readOnlyHint or destructiveHint\n  - warn TC16 list_link_aliases: no readOnlyHint or destructiveHint\n  - warn TC16 list_themes: no readOnlyHint or destructiveHint\n\n- JSON: https://www.anchorterminal.com/api/v1/tools/openqr-qr.json\n- Being indexed says nothing about quality, and nobody can pay for it. Ask for a review: https://www.anchorterminal.com/builders/#claiming\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Terminal",
        "url": "https://www.anchorterminal.com/tools/"
      },
      {
        "name": "Indexed",
        "url": "https://www.anchorterminal.com/indexed/"
      },
      {
        "name": "OpenQR",
        "url": ""
      }
    ],
    "description": "OpenQR, an MCP server by openqr.uk, listed from the official MCP registry. Indexed, not reviewed: facts and our own checks, no score or ranking. Generate, edit and track dynamic (editable) QR codes with scan analytics. Hosted MCP and REST API.",
    "facts": [
      "not reviewed",
      "not ranked",
      "facts only"
    ],
    "h1": "OpenQR",
    "image": "https://www.anchorterminal.com/assets/og/indexed.png",
    "path": "/tools/openqr-qr",
    "published": "",
    "section": "indexed",
    "title": "OpenQR: MCP server, indexed from the official MCP registry",
    "toc": null,
    "updated": "2026-10-04",
    "url": "https://www.anchorterminal.com/tools/openqr-qr"
  },
  "tokens": {
    "markdown": 1600,
    "slim": 1530
  },
  "version": 1
}
