OpenQR

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

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
100%
Integridad del esquema
82%
Calidad de los nombres
98%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~2,246Tokens (definiciones de herramientas)
~798 BTamaño de respuesta típico
Impacto moderado en la atención (1.75% del contexto de 128k)

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

npm@open-qr/mcp1.0.2stdio

Puntos de conexión remotos

https://openqr.uk/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (20)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
⚪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

retrieve_data
Get details about [item] from OpenQR
Herramientas esperadas: get_dynamic_qr
fetch_info
Fetch [information type] using OpenQR
Herramientas esperadas: get_dynamic_qr
list_items
List all [items] available in OpenQR
Herramientas esperadas: list_link_aliases
browse_collection
Show me the [collection] from OpenQR
Herramientas esperadas: list_link_aliases
explore_workflow
List available [items], then get details for each one using OpenQR
Herramientas esperadas: list_link_aliasesget_dynamic_qr

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada20 herramientas
verificadoversión no registrada20 herramientas