_ registry / mcp streamable-http · checked 8h ago

OpenQR

https://openqr.uk

Registry code: a82679196c6fc761

api record

Generate, edit and track dynamic (editable) QR codes with scan analytics. Hosted MCP and REST API.

from a public catalogue that lists it, not from the operator

endpoint
https://openqr.uk/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is OpenQR live?
Yes — it answered the hub's last check (checked 8h ago). It answered 99% of checks over the last 30 days.
Is OpenQR free to use?
Not anonymously — it asks for a key or a login before it will serve. Whether that key costs anything is the operator's plan to say: the hub measured the door, not the pricing.
What tools does OpenQR have?
23 tools: create_folder, generate_upi_code, get_scans, bulk_create_dynamic_qr, set_subdomain, create_link_alias, delete_folder, list_dynamic_qr, ….
Is OpenQR safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99.4%

90 days 99.7%· all time 99.7%

latency
2,656ms

last good check

priced tools
0

of 23 tools

_ answered our checks, 90 days 345 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
  • unknown → live
_ what it is for
used for
  • create an editable qr code
  • generate a static qr code
  • get qr code scan stats
  • update a qr code destination
takes → gives
text, data → images, data
tools
8 reads12 changes data
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 23 tools
23 auth-required 23 of 23 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • create_folder changes data auth-required never probed

    Create a folder to organise codes. Requires an OpenQR API key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string"
        }
      }
    }
    arguments 11 lines
  • generate_upi_code auth-required never probed

    Build a static UPI (upi://pay) payment payload for India and optionally render it as a QR image. Returns the payload string by default. Static and untracked — nothing is saved to the library. Requires an OpenQR API key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "vpa",
        "payeeName"
      ],
      "properties": {
        "vpa": {
          "type": "string",
          "description": "Virtual payment address, e.g. name@bank."
        },
        "note": {
          "type": "string",
          "description": "Optional payment note (≤50 chars keeps every UPI app happy)."
        },
        "size": {
          "type": "number",
          "description": "Image size, 96–2048 (default 512)."
        },
        "force": {
          "type": "boolean",
          "description": "Build even when validation reports problems (they return as warnings)."
        },
        "amount": {
          "type": "string",
          "description": "Optional amount in INR, e.g. 25.50."
        },
        "format": {
          "enum": [
            "png",
            "svg"
          ],
          "type": "string",
          "description": "Return a rendered image instead of the payload string."
        },
        "payeeName": {
          "type": "string",
          "description": "Payee name shown in the payer's app."
        }
      }
    }
    arguments 41 lines
  • get_scans reads auth-required 12h ago

    Get scan statistics for a dynamic QR code. Requires an OpenQR API key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The dynamic code id."
        }
      }
    }
    arguments 12 lines
  • bulk_create_dynamic_qr changes data auth-required never probed

    Create up to 200 dynamic QR codes at once. Requires an OpenQR API key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "codes"
      ],
      "properties": {
        "codes": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "destination"
            ],
            "properties": {
              "label": {
                "type": "string"
              },
              "destination": {
                "type": "string"
              }
            }
          },
          "description": "Codes to create."
        },
        "theme": {
          "type": "string",
          "description": "A saved theme id or name applied to every code created."
        }
      }
    }
    arguments 30 lines
  • set_subdomain changes data auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "subdomain"
      ],
      "properties": {
        "subdomain": {
          "type": "string",
          "description": "3–32 letters, numbers or hyphens, e.g. \"acme\"."
        }
      }
    }
    arguments 12 lines
  • create_link_alias changes data auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "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."
        }
      }
    }
    arguments 16 lines
  • delete_folder changes data auth-required never probed

    Delete a folder (its codes are un-filed, not deleted). Requires an OpenQR API key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string"
        }
      }
    }
    arguments 11 lines
  • list_dynamic_qr reads auth-required 8h ago

    List your dynamic (editable) QR codes — id, short URL, destination, label and status. Requires an OpenQR API key.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "limit": {
          "type": "number",
          "description": "Max codes to return, 1–500 (default 200)."
        }
      }
    }
    arguments 9 lines
  • generate_pix_code auth-required never probed

    Build a static PIX (BR Code) payment payload for Brazil and optionally render it as a QR image. Returns the payload string by default (render it with generate_qr, or pass format). Static and untracked — nothing is saved to the library. Requires an OpenQR API key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "key",
        "name",
        "city"
      ],
      "properties": {
        "key": {
          "type": "string",
          "description": "PIX key: CPF, CNPJ, email, +55 phone or random (EVP) key."
        },
        "city": {
          "type": "string",
          "description": "Merchant city, ≤15 chars."
        },
        "name": {
          "type": "string",
          "description": "Merchant name, ≤25 chars (diacritics stripped to ASCII)."
        },
        "size": {
          "type": "number",
          "description": "Image size, 96–2048 (default 512)."
        },
        "txid": {
          "type": "string",
          "description": "Transaction id, 1-25 letters/digits. Defaults to ***."
        },
        "force": {
          "type": "boolean",
          "description": "Build even when validation reports problems (they return as warnings) — e.g. a check-digit warning you have verified yourself."
        },
        "amount": {
          "type": "string",
          "description": "Optional amount in BRL, e.g. 10.50."
        },
        "format": {
          "enum": [
            "png",
            "svg"
          ],
          "type": "string",
          "description": "Return a rendered image instead of the payload string."
        },
        "singleUse": {
          "type": "boolean",
          "description": "Emit point-of-initiation 11: the code works for one payment only. Default reusable."
        },
        "description": {
          "type": "string",
          "description": "Optional description, ≤25 chars."
        }
      }
    }
    arguments 54 lines
  • generate_epc_code auth-required never probed

    Build a static EPC/SEPA payment payload (EPC069-12, the GiroCode/BezahlCode European banks scan) and optionally render it as a QR image. Returns the payload string by default. Static and untracked — nothing is saved to the library. Requires an OpenQR API key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "name",
        "iban"
      ],
      "properties": {
        "bic": {
          "type": "string",
          "description": "Optional BIC, 8 or 11 chars."
        },
        "iban": {
          "type": "string",
          "description": "IBAN, with or without spaces (checksum-validated)."
        },
        "name": {
          "type": "string",
          "description": "Beneficiary name, ≤70 chars."
        },
        "size": {
          "type": "number",
          "description": "Image size, 96–2048 (default 512)."
        },
        "text": {
          "type": "string",
          "description": "Unstructured remittance text, ≤140 chars. Mutually exclusive with reference."
        },
        "force": {
          "type": "boolean",
          "description": "Build even when validation reports problems (they return as warnings)."
        },
        "amount": {
          "type": "string",
          "description": "Optional EUR amount, e.g. 12.34."
        },
        "format": {
          "enum": [
            "png",
            "svg"
          ],
          "type": "string",
          "description": "Return a rendered image instead of the payload string."
        },
        "purpose": {
          "type": "string",
          "description": "Optional 4-character purpose code."
        },
        "reference": {
          "type": "string",
          "description": "ISO 11649 creditor reference, ≤35 chars. Mutually exclusive with text."
        }
      }
    }
    arguments 53 lines
  • create_static_qr changes data auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "type",
        "fields"
      ],
      "properties": {
        "type": {
          "enum": [
            "url",
            "text",
            "email",
            "phone",
            "sms",
            "whatsapp",
            "wifi",
            "geo",
            "vcard"
          ],
          "type": "string",
          "description": "The payload type."
        },
        "label": {
          "type": "string",
          "description": "Optional label for your dashboard."
        },
        "theme": {
          "type": "string",
          "description": "A saved theme id or name to style the code with."
        },
        "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?, mobilePhone?, generalPhone?, personalEmail?, generalEmail?, organization?, title?, website?, street?, city?, postalCode?, country? (a name/phone/email is required; legacy aliases phone, email, org, url, address still accepted)."
        }
      }
    }
    arguments 36 lines
  • list_folders reads auth-required 15h ago

    List your folders (id and name). Requires an OpenQR API key.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • delete_theme changes data auth-required never probed

    Delete a saved theme. Codes already styled with it keep their look. Requires an OpenQR API key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string"
        }
      }
    }
    arguments 11 lines
  • clear_subdomain changes data auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • create_dynamic_qr changes data auth-required never probed

    Create an editable (dynamic) QR code whose destination you can change later without reprinting. Requires an OpenQR API key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "destination"
      ],
      "properties": {
        "label": {
          "type": "string",
          "description": "Optional label."
        },
        "theme": {
          "type": "string",
          "description": "A saved theme id or name to style the code with."
        },
        "destination": {
          "type": "string",
          "description": "The http(s) URL the code should point to."
        }
      }
    }
    arguments 20 lines
  • get_dynamic_qr reads auth-required 15h ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The code id."
        }
      }
    }
    arguments 12 lines
  • delete_dynamic_qr changes data auth-required never probed

    Permanently delete a dynamic QR code. The short link stops working. Requires an OpenQR API key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The dynamic code id."
        }
      }
    }
    arguments 12 lines
  • create_theme changes data auth-required never probed

    Save a reusable style theme. `style` is a QR style object (fgColor, bgColor, dotType, cornerSquareType, etc.). Requires an OpenQR API key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "name",
        "style"
      ],
      "properties": {
        "name": {
          "type": "string"
        },
        "style": {
          "type": "object",
          "description": "QR style JSON (colours, dot/corner shapes, logo, gradient, frame…)."
        }
      }
    }
    arguments 16 lines
  • list_themes reads auth-required 8h ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • update_dynamic_qr changes data auth-required never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The dynamic code id."
        },
        "pin": {
          "type": [
            "string",
            "null"
          ],
          "description": "Pro: require a 4-digit PIN before the code redirects. Exactly 4 digits. Pass null to remove all protection."
        },
        "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)."
        },
        "label": {
          "type": "string",
          "description": "New label."
        },
        "theme": {
          "type": "string",
          "description": "A saved theme id or name to restyle the code with."
        },
        "status": {
          "enum": [
            "active",
            "paused"
          ],
          "type": "string",
          "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."
        },
        "folder_id": {
          "type": [
            "string",
            "null"
          ],
          "description": "Move into a folder id, or null to un-file."
        },
        "lock_hint": {
          "type": [
            "string",
            "null"
          ],
          "description": "Optional hint shown on the unlock page, e.g. \"Ask at the bar\". Max 60 characters."
        },
        "destination": {
          "type": "string",
          "description": "New http(s) URL."
        },
        "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."
        }
      }
    }
    arguments 92 lines
  • list_link_aliases reads auth-required 15h ago

    List the link aliases of one dynamic code. Requires an OpenQR API key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The dynamic code id."
        }
      }
    }
    arguments 12 lines
  • generate_qr reads auth-required never probed

    Generate a static QR code from any text/URL. Returns a PNG image (or SVG markup). Requires an OpenQR API key.

    mcp-tool

    {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "string",
          "description": "The content to encode (URL or text)."
        },
        "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."
        },
        "format": {
          "enum": [
            "png",
            "svg"
          ],
          "type": "string",
          "description": "Output format (default png)."
        }
      }
    }
    arguments 28 lines
  • get_subdomain reads auth-required 8h ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id a82679196c6fc761.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/a82679196c6fc761/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/a82679196c6fc761/badge.svg)](https://brick.blue/agent/a82679196c6fc761?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.