Model Context Protocol

QR codes for your AI agent

The hosted OpenQR MCP server hands an agent the same powers you have in the dashboard: generate static codes, create and edit dynamic ones, bulk-create from a list, organise into folders, save style themes, and read scan analytics. One endpoint, one Bearer key, thirteen tools — no SDK, no glue code.

Listed in the official MCP registry as io.github.sam-moreton/openqr

Drop this into your client

mcp configjson
{
  "mcpServers": {
    "openqr": {
      "type": "http",
      "url": "https://openqr.uk/mcp",
      "headers": {
        "Authorization": "Bearer oqr_..."
      }
    }
  }
}

Streamable HTTP, JSON-RPC 2.0 over POST. Nothing to install — it’s a hosted server. Get the oqr_… key from the API dashboard.

What MCP gets you

MCP (the Model Context Protocol) is an open standard for letting an AI agent call external tools. Instead of writing code against the REST API, your agent connects to the MCP server, discovers the tools it exposes, and calls them itself when a request needs one. You describe the outcome in plain English; the agent picks the tool and fills in the arguments.

REST or MCP — same engine. The MCP server is a thin layer over the same REST API. Writing code directly? Use REST. Wiring up an agent? Use MCP. They share the account, keys, rate limits and abuse rules.
Tools

Thirteen tools, six groups

Anything you can do in the dashboard, an agent can do over MCP. The agent calls tools/list automatically — you never name a tool yourself.

Generate

generate_qr
Render a static QR image — PNG or SVG, any size, optionally styled by a saved theme.

Dynamic codes

create_dynamic_qr
Create an editable code; returns its id and oqr.to short link.
update_dynamic_qr
Repoint, re-label, re-tag, re-file or restyle a code — without reprinting it.
list_dynamic_qr
List your dynamic codes with id, short URL, destination, label and status.
delete_dynamic_qr
Permanently delete a code; its short link stops resolving.

Analytics

get_scans
Scan totals plus top countries, devices and referrers for a code.

Bulk

bulk_create_dynamic_qr
Create up to 200 dynamic codes in one call, optionally styled with a theme.

Folders

list_folders
List your folders (id and name).
create_folder
Create a folder to organise codes.
delete_folder
Delete a folder; its codes are un-filed, not deleted.

Themes

list_themes
List saved style themes so the agent can apply one by reference.
create_theme
Save a reusable style — colours, dot/corner shapes, logo, gradient, frame.
delete_theme
Delete a theme; codes already styled with it keep their look.
Connect

Works with the clients you already use

Most MCP clients take the same shape of config — a server name, the HTTP transport, the URL and an Authorization header. Add the block above, restart, and the tools appear.

  • Claude Desktop

    Add the block to its MCP config and restart — tools appear under the connectors menu.

  • Claude Code

    Register with claude mcp add using the HTTP transport, same URL and header.

  • Cursor

    Add it to MCP servers settings; the tools become available to the agent in chat.

  • Cline

    Add the same server entry in its MCP configuration.

  • OpenClaw

    The self-hosted personal assistant supports MCP too — register the URL with the Bearer header.

In practice

Just ask — the agent maps it to a tool

  • “Make a QR code for openqr.uk and save it as a 1024px PNG.”generate_qr
  • “Create a dynamic code for our spring-sale page, label it Spring Sale.”create_dynamic_qr
  • “That campaign moved — repoint the Spring Sale code to the new URL.”update_dynamic_qr
  • “How many scans has the Spring Sale code had, and where from?”get_scans
  • “Make editable codes for each of these 50 product URLs.”bulk_create_dynamic_qr
  • “Save our brand style as a theme, then use it on every new code.”create_theme
On the wire

What a tool call looks like

You never write this yourself — the agent does. But here’s the raw JSON-RPC a client sends to create a dynamic code, so you can see exactly what crosses the wire. The reply hands back the new code’s id and its oqr.to short link; later, the same agent can call get_scans or repoint it with update_dynamic_qr.

tools/callbash
curl -X POST https://openqr.uk/mcp \
  -H "Authorization: Bearer oqr_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "tools/call",
    "params": {
      "name": "create_dynamic_qr",
      "arguments": {
        "destination": "https://example.com/spring-sale",
        "label": "Spring Sale"
      }
    }
  }'

Give your agent QR superpowers

Mint a free key, paste the config, and your agent can generate, edit and track QR codes in plain English.

Get a free key