OpenQR
Generate, edit and track dynamic (editable) QR codes with scan analytics. Hosted MCP and REST API.
¿Debería usar esto?
Calidad y seguridad
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"qr": {
"command": "npx",
"args": [
"@open-qr/mcp"
]
}
}
}Paquetes ejecutables
1.0.2stdioPuntos de conexión remotos
https://openqr.uk/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (20)
⚪generate_qr(data, format, size, theme)
Generate a static QR code from any text/URL. Returns a PNG image (or SVG markup). Requires an OpenQR API key.
Esquema de entrada
{
"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"
]
}🟡create_dynamic_qr(destination, label, theme)
Create an editable (dynamic) QR code whose destination you can change later without reprinting. Requires an OpenQR API key.
Esquema de entrada
{
"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"
]
}🟡create_static_qr(type, fields, label, theme)
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.
Esquema de entrada
{
"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"
]
}🟡update_dynamic_qr(id, destination, label, slug, tags, ...)
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.
Esquema de entrada
{
"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"
]
}🟢get_dynamic_qr(id)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The code id."
}
},
"required": [
"id"
]
}🟢get_scans(id)
Get scan statistics for a dynamic QR code. Requires an OpenQR API key.
Esquema de entrada
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The dynamic code id."
}
},
"required": [
"id"
]
}🟡create_link_alias(id, slug)
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.
Esquema de entrada
{
"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"
]
}🟢list_link_aliases(id)
List the link aliases of one dynamic code. Requires an OpenQR API key.
Esquema de entrada
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The dynamic code id."
}
},
"required": [
"id"
]
}🟢list_dynamic_qr(limit)
List your dynamic (editable) QR codes — id, short URL, destination, label and status. Requires an OpenQR API key.
Esquema de entrada
{
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "Max codes to return, 1–500 (default 200)."
}
}
}🔴delete_dynamic_qr(id)
Permanently delete a dynamic QR code. The short link stops working. Requires an OpenQR API key.
Esquema de entrada
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The dynamic code id."
}
},
"required": [
"id"
]
}🟡bulk_create_dynamic_qr(codes, theme)
Create up to 200 dynamic QR codes at once. Requires an OpenQR API key.
Esquema de entrada
{
"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"
]
}🟢list_folders
List your folders (id and name). Requires an OpenQR API key.
Esquema de entrada
{
"type": "object",
"properties": {}
}🟡create_folder(name)
Create a folder to organise codes. Requires an OpenQR API key.
Esquema de entrada
{
"type": "object",
"properties": {
"name": {
"type": "string"
}
},
"required": [
"name"
]
}🔴delete_folder(id)
Delete a folder (its codes are un-filed, not deleted). Requires an OpenQR API key.
Esquema de entrada
{
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
]
}🟢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.
Esquema de entrada
{
"type": "object",
"properties": {}
}🟡create_theme(name, style)
Save a reusable style theme. `style` is a QR style object (fgColor, bgColor, dotType, cornerSquareType, etc.). Requires an OpenQR API key.
Esquema de entrada
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"style": {
"type": "object",
"description": "QR style JSON (colours, dot/corner shapes, logo, gradient, frame…)."
}
},
"required": [
"name",
"style"
]
}🔴delete_theme(id)
Delete a saved theme. Codes already styled with it keep their look. Requires an OpenQR API key.
Esquema de entrada
{
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
]
}🟢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 instead of serving, which happens when a Pro plan lapses. Requires an OpenQR API key.
Esquema de entrada
{
"type": "object",
"properties": {}
}🟡set_subdomain(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 never breaks anything already printed. Requires an OpenQR API key.
Esquema de entrada
{
"type": "object",
"properties": {
"subdomain": {
"type": "string",
"description": "3–32 letters, numbers or hyphens, e.g. \"acme\"."
}
},
"required": [
"subdomain"
]
}🔴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 else. Requires an OpenQR API key.
Esquema de entrada
{
"type": "object",
"properties": {}
}Prompts recomendados
get_dynamic_qrget_dynamic_qrlist_link_aliaseslist_link_aliaseslist_link_aliasesget_dynamic_qrComunidad
Evidencia