Qrpaint

io.github.CloudCorpRecords由 GitHub 账号 CloudCorpRecords 发布v0.1.0更新于 Nov 7, 2026

通过托管服务生成艺术二维码:生成、变换、列出并重定向可扫描的图片二维码。

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 分