OpenQR

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

我該用這個嗎

品質與安全性

A
說明品質
100%
結構描述完整度
82%
命名品質
98%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

根據工具定義與協定合規性的自動化分析。

上下文成本

~2,246Token(工具定義)
~798 B典型回應大小
中等的注意力影響(128k 上下文的 1.75%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "qr": {
      "command": "npx",
      "args": [
        "@open-qr/mcp"
      ]
    }
  }
}

可執行的套件

npm@open-qr/mcp1.0.2stdio

遠端端點

https://openqr.uk/mcpstreamable-http

它能做什麼

工具清單

工具(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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "type": "object",
  "properties": {}
}
🟡create_folder(name)

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

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "type": "object",
  "properties": {}
}

建議的提示詞

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

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本20 個工具
已驗證未記錄版本20 個工具