qrblox-mcp is the JSON-RPC MCP server that gives AI agents safe, merchant-scoped tools.
Sign in to Qrblox Create, mint a sk-qrblox- key, paste it into Claude Desktop or
Cursor, and the agent can draft QR codes, audio codes, menus, and scan challenges — and read
scan analytics — for one merchant workspace, nothing more.
The Qrblox MCP server (qrblox-mcp) connects AI agents to merchant-owned Qrblox data
over the Model Context Protocol.
A merchant mints an API key in Qrblox Create,
pastes it into Claude Desktop, Cursor, or a custom agent, and the assistant can draft QR codes,
audio codes, menus, and loyalty challenges — and summarize scan activity — all scoped to that one
merchant workspace.
MCP keys are merchant-scoped and created in Qrblox Create:
sk-qrblox-<64 hex chars> for your merchant workspace.Keys carry merchant-scoped permissions:
Send the key as a Bearer token. Keys begin with sk-qrblox- and are validated against
Firestore on every request; the matching record carries the merchant id and scopes that the tool
layer enforces.
Authorization: Bearer sk-qrblox-4c2fa8e1b7d9…
The server also accepts a Firebase ID token or a session cookie for in-app callers on Qrblox
Create. External agents use the sk-qrblox- API key — that is what this page covers.
One endpoint: POST https://app.qrblox.com/api/mcp. Standard MCP JSON-RPC 2.0
envelopes in the body, a single JSON-RPC response in the reply. A GET on the same URL
returns server metadata (name, endpoint, docs link). Each POST is stateless — no session handshake
between requests.
POST /api/mcp HTTP/1.1 Host: app.qrblox.com Authorization: Bearer sk-qrblox-… Content-Type: application/json {"jsonrpc":"2.0","id":1,"method":"tools/call", "params":{"name":"qrblox.qr.list", "arguments":{"limit":10}}}
Supported JSON-RPC methods:
initialize — handshake. Returns protocolVersion 2025-03-26 and server info (qrblox-mcp). No auth required.notifications/initialized — accepted as a notification; replies 204 No Content.ping — protocol-level liveness probe; returns an empty result. No auth (distinct from the qrblox.ping tool).tools/list — discover the tool registry. Requires auth.tools/call — invoke a tool by name with { name, arguments }. Requires auth.ok, merchantId, and authMethod.limit (1–100).title, destinationUrl. Optional: campaign, tags (string array).title, payloadText. Optional: campaign.name. Optional: description, locationId.limit (1–100).menuId, sectionName, name. Optional: description, price (number).name, challengeType (streak, scan_count, visit_window, or game). Optional: description, rewardText, startsAt, endsAt (ISO dates).days (1–365).Every tool re-derives the merchant from the verified caller, so an agent can only ever read and write within its own merchant workspace.
{
"jsonrpc": "2.0",
"id": "create-menu-qr",
"method": "tools/call",
"params": {
"name": "qrblox.qr.create",
"arguments": {
"title": "Table 12 lunch menu",
"destinationUrl": "https://qrblox.com/m/table-12",
"campaign": "Lunch menu rollout",
"tags": ["menu", "table-12"]
}
}
}
Tool results come back as JSON-RPC result objects; failures come back as JSON-RPC
error objects. Auth failures carry a data.code of NO_AUTH,
INVALID_API_KEY, INVALID_TOKEN, or REVOKED.
method).error.message.{
"mcpServers": {
"qrblox": {
"url": "https://app.qrblox.com/api/mcp",
"headers": { "Authorization": "Bearer sk-qrblox-…" }
}
}
}
In Cursor settings, add a new MCP server with the same URL and Authorization header.
# Expect: { ok: true, merchantId: "…", authMethod: "api-key" } curl -s https://app.qrblox.com/api/mcp \ -H "Authorization: Bearer sk-qrblox-…" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"qrblox.ping","arguments":{}}}'
Looking for the rest of the stack? Web Portal · Canva app · All docs