Qrpaint

io.github.CloudCorpRecords由 GitHub 帳號 CloudCorpRecords 發布v0.1.0更新於 Nov 7, 2026

通過託管服務產生藝術QR 碼:產生、變換、列出並重新導向可掃描的圖片QR 碼。

AI 翻譯由 AI 模型根據下方的原文描述翻譯,可能有誤。

原文描述

Art QR codes via a hosted service: generate, vary, list and retarget scannable picture QR codes.

已驗證STDIO僅桌面

概覽

Qrpaint 的本機 MCP 服務;無需登入;STDIO;9 個工具。

暫無 AI 概覽:以下資訊來自註冊中心條目和服務本身。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Qrpaint,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

qrpaint

A QR code that is also a picture: a lighthouse at sunset, a café awning, your own photograph — with a scannable code painted into it. qrpaint is a thin forwarding client for the hosted QRX service. It serves nine tools locally and passes every call, unchanged, to the service, which paints the picture, checks that it still scans, and hands back a code with its own short link.

Because the painting happens on the hosted service, this package holds no rendering logic of its own. What it does hold is the contract: the exact tool list and schemas from the service's public server card, the session handshake each call travels over, and the rule that nothing is ever sent until an API key is present.

Configuration

  • QRX_API_KEY (required for tool calls) — your QRX API key, sent to the hosted endpoint on every request as Authorization: Bearer <key>. Without it, the server still starts and lists its tools, but every call fails with QRX_API_KEY is not set and no request is made.
  • QRX_MCP_URL (optional) — the hosted MCP endpoint. Defaults to https://qrx.codes/mcp.

Tools

  • generate_qr_code — start a new art code from a prompt (what the picture should show) and a destination link, with an optional style from list_styles. Answers at once with the code's id while the picture is painted.
  • generate_qr_code_from_image — weave a code into a picture you already have, passed once as an attached image file, a public imageUrl, or imageBase64, plus the destination.
  • vary_qr_code — a new code based on an existing code's id, with a change to its picture ("make it night time"). The original is untouched and the new code opens the same destination.
  • get_qr_code — a code's status, finished image and short link by id; wait (0–25 seconds, default 25) lets it hold for a code that is still being painted.
  • list_qr_codes — your codes, newest first, paged with limit (1–100, default 20) and cursor.
  • change_qr_code_destination — retarget an existing link code to a new destination; printed copies follow at once.
  • get_account — the connected account's plan and how much of today's code allowance remains.
  • get_profile — which QRX account is connected.
  • list_styles — the looks you can pass as style to generate_qr_code.

A typical flow is generate_qr_code (or generate_qr_code_from_image), then get_qr_code with the returned id until its status is succeeded — usually under a minute. Codes count against your QRX allowance; get_account shows what is left.

How forwarding works

Each tool call opens a fresh session with the hosted endpoint: an initialize request (protocol version 2025-03-26), the returned session id carried into a notifications/initialized note, then the tools/call request with your arguments exactly as given. Responses arrive as plain JSON or as server-sent events; both are read. The remote result comes back as JSON text. A remote error surfaces with the remote message, a non-2xx reply fails with qrx error: HTTP <status>, and an unreachable endpoint fails with qrx unreachable. Calls are never retried — a retry could paint (and charge) a second code. The handshake is a reconstruction of the standard Streamable HTTP session flow; the endpoint, the Bearer auth and the missing-key behaviour are the original package's documented design.

There is no local argument validation beyond the missing-key rule: the schemas above are served verbatim for your MCP client to validate against, and the service itself is the authority on every call.

CLI

Each tool is a subcommand taking one JSON argument string:

bash
export QRX_API_KEY="<your key>"npx @reneturcios/qrpaint generate_qr_code '{"prompt":"a lighthouse on a cliff at sunset","destination":"https://example.com/menu"}'npx @reneturcios/qrpaint get_qr_code '{"id":"abc123"}'npx @reneturcios/qrpaint list_qr_codes '{"limit":10}'npx @reneturcios/qrpaint vary_qr_code '{"id":"abc123","change":"make it night time"}'npx @reneturcios/qrpaint change_qr_code_destination '{"id":"abc123","destination":"https://example.com/new-menu"}'npx @reneturcios/qrpaint get_account '{}'npx @reneturcios/qrpaint list_styles '{}'npx @reneturcios/qrpaint --version

Output is the remote result as JSON text. Exit codes: 0 on success, 1 on an error result (including a missing-key, remote or upstream failure), 2 on a usage error.

MCP server

bash
npx -y @reneturcios/qrpaint mcp

MCP client config (provide the key through the client's environment):

json
{  "mcpServers": {    "qrpaint": {      "command": "npx",      "args": ["-y", "@reneturcios/qrpaint", "mcp"],      "env": {        "QRX_API_KEY": "<your key>"      }    }  }}

Docker

bash
docker run -i -e QRX_API_KEY="<your key>" ghcr.io/cloudcorprecords/qrpaintdocker run --rm -e QRX_API_KEY="<your key>" ghcr.io/cloudcorprecords/qrpaint list_styles '{}'

Development

bash
npm installnpm run build   # tsc -> dist/npm test        # tsx --test test/*.test.ts (fake fetch only, no network)npm run dev     # run the CLI from source

License

MIT — Copyright (c) 2026 Rene Turcios

來源:README.md,提交 bfce5c3

工具

9

generate_qr_code

Use this when the user wants a new QR code that is also a picture: a scannable code painted into art from a description, that opens a link. It starts the code and answers at once with its id while the picture is painted, which usually takes under a minute; then call get_qr_code with the id to wait for the image. Do not use it to look at, list or change codes that already exist. Each code counts against the user’s QRX allowance.

輸入參數styleprompt必填destination必填

generate_qr_code_from_image

Use this when the user wants a scannable QR code woven into a picture they already have (a photo, an illustration or artwork) instead of one painted from a description. Pass the picture once, as exactly one of an attached file (image), a public https link (imageUrl) or base64 (imageBase64): PNG, JPEG or WebP, at most 10 MB and at least 256 pixels on each side; the code uses its centre square. Every picture is checked for safety first, and one that does not pass is refused with an error and nothing is made. It starts the code and answers at once with its id while it is painted, which usually takes under a minute; then call get_qr_code with the id to wait for the image. Do not use it to look at, list or change codes that already exist. Each code counts against the user’s QRX allowance.

輸入參數imagestylepromptimageUrldestination必填imageBase64

vary_qr_code

Use this when the user wants a new QR code based on one of their existing codes, with a change to its picture, e.g. "more trees" or "make it night time". It makes a new code with its own id and short link that opens the same destination and keeps the original’s style and logo; the original code does not change. It answers at once with the new code’s id while the picture is painted; then call get_qr_code with the id to wait for the image. Only link codes the user owns can be varied. Do not use it to change where a code points or to make an unrelated code. Each variation counts against the user’s QRX allowance.

輸入參數id必填change必填

get_qr_code

Use this when you have a QR code’s id (from generate_qr_code, vary_qr_code or list_qr_codes) and need its status or finished image. While the code is still being painted it waits up to `wait` seconds (25 by default) for it to finish before answering, so call it again if it is still processing. Do not use it to make a new code.

輸入參數id必填wait

list_qr_codes

Use this when the user asks about QR codes they already have, newest first, a page at a time (pass nextCursor as cursor for the next page). Do not use it to make a code.

輸入參數limitcursor

change_qr_code_destination

Use this when the user wants an existing link QR code to open a different web address. Printed copies follow at once. It only works for link codes, and only if the account’s plan allows changing destinations. Do not use it to make a new code.

輸入參數id必填destination必填

get_account

Use this when the user asks how many QR codes they can still make today, when the daily count resets, or what their QRX account can do. Do not use it to make or list codes.

無需輸入參數。

get_profile

Use this when you need to know which QRX account is connected, for example to confirm it with the user. Do not use it for limits; use get_account.

無需輸入參數。

list_styles

Use this when the user wants to choose a look for a new QR code; pass a style id to generate_qr_code. Do not use it to make a code.

無需輸入參數。

版本歷史

1
  1. v0.1.0最新Nov 3, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分