# QR codes in Claude

> Run claude mcp add --transport http useqr https://useqr.app/api/mcp and Claude gains six keyless QR tools: generate, typed payloads, decode, verify, batch and print sizing. Without MCP, Claude can still embed a working code by writing an image URL like https://useqr.app/q/hello.png into markdown or an artifact.

Source: https://useqr.app/docs/developers/qr-codes-in-claude · Last reviewed 2026-08-21 · UseQR is free forever, no signup.

---

## One command

```bash
claude mcp add --transport http useqr https://useqr.app/api/mcp
```

That registers the server for Claude Code; Claude Desktop and other MCP clients take
the JSON form:

```json
{ "mcpServers": { "useqr": { "type": "http", "url": "https://useqr.app/api/mcp" } } }
```

No API key, no OAuth, nothing to rotate: the server is unauthenticated Streamable
HTTP, stateless, storing nothing. Claude now has six tools: `qr_generate`,
`qr_generate_typed`, `qr_decode`, `qr_verify`, `qr_batch` and `qr_size_recommend`,
argument-level detail in the [tool reference](/docs/developers/qr-code-mcp-server-tools).

## What the flow looks like

Ask Claude for "a WiFi QR code for CafeGuest, WPA, password espresso, in our brand
blue" and a well-behaved run composes the tools: `qr_generate_typed` builds the
payload with the [escaping rules](/docs/troubleshooting/wifi-qr-special-characters-escaping)
handled server-side, then `qr_verify` rasterises the styled result and decodes it back
with zxing. If the brand blue is too light, verify's report says so
(`contrast: 2.1` and a concrete issue), and Claude darkens the colour and re-runs
rather than handing you a code that fails at the table. That verification step is the
point of using tools at all: whether a styled code scans is
[not reasoned, it is measured](/docs/developers/why-verify-that-your-qr-code-decodes).

Generated images come back with a stable hosted URL alongside the PNG, which is the
detail that makes results portable: Claude can paste that URL into a document, a
README or a follow-up message and it renders forever.

## Artifacts and the no-MCP rung

Because the API sends `Access-Control-Allow-Origin: *` and needs no key, an artifact
(a poster mock-up, a table-tent design, an event page) can simply embed:

```html
<img src="https://useqr.app/q/https%3A%2F%2Fexample.com%2Fmenu.png?s=600" alt="Menu QR code">
```

No MCP required: this works in any Claude conversation today, and in any markdown
Claude writes anywhere. It is the rung-0 pattern from
[using QR codes from an AI agent](/docs/developers/using-qr-codes-from-an-ai-agent):
the URL is the generation call. Per-surface setup lives at [/for/claude](/for/claude).

## Claude Code, scripted

In a repository, the tools compose with everything else Claude Code does. Practical
uses that come up:

- **Release QR codes**: "add a QR code for the download URL to the release notes"
  becomes an image link in markdown, no asset committed.
- **Fixtures**: "generate five test WiFi codes as SVGs in `tests/fixtures/`" via
  `qr_batch`, with the manifest of payloads in the response.
- **CI gates**: Claude Code can wire the [verify endpoint](/docs/developers/qr-codes-in-ci-and-automated-testing)
  into a pipeline so codes are proven to decode on every build.
- **Decoding**, point `qr_decode` at an image in the repo to answer "what does this
  code in the design mock actually contain?"

Since everything is keyless, none of this adds a secret to `.env`, CI variables or a
teammate's onboarding checklist.

## Limits, honestly

Claude with UseQR generates **static** codes. If the deliverable needs an editable
destination or scan analytics, that is a [dynamic QR platform](/vs/best-dynamic-qr-code-platforms)
decision no MCP tool changes. And for credentials: `qr_generate_typed` sends the
payload to the server to build (the [privacy trade-off](/docs/security/client-side-vs-server-side-qr-generation)
of any server-side generation), for a WiFi password you would rather keep local, use
the [generator UI](/wifi-qr-code), which builds static codes entirely client-side.

## FAQ

### How do I add QR code tools to Claude?
Run claude mcp add --transport http useqr https://useqr.app/api/mcp, or add the equivalent mcpServers JSON entry in Claude Desktop. The server is keyless, so the one command is the entire setup.

### Can Claude make QR codes without an MCP server?
Yes. Claude can write a markdown image or artifact img tag pointing at https://useqr.app/q/{data}.png; the keyless API renders it inline. MCP adds decoding, verification, batch and typed payload validation on top.

### How does Claude verify a QR code it generated?
By calling the qr_verify tool, which renders the styled code, rasterises it and decodes it with zxing, returning scannable, contrast and a list of issues. Claude can then fix the styling and re-verify before presenting the result.

### Is it safe that the UseQR MCP server has no authentication?
The server is stateless and stores nothing; tools generate, decode and verify images and return the result. There is no account, no data at rest and no destructive operation an attacker could invoke on your behalf.

## Try it

- https://useqr.app/url
- https://useqr.app/wifi
- https://useqr.app/validate
- https://useqr.app/scan
