# QR codes from an AI agent: the UseQR MCP server

> UseQR runs a keyless MCP server over Streamable HTTP at /api/mcp. One command adds it to Claude; a few lines of JSON add it to Cursor or Copilot. Agents can generate, build typed payloads, decode images and verify that a styled code still scans.

Source: https://useqr.app/docs/developers/qr-code-mcp-server · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## Add it

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

Or as configuration:

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

No authentication. No account. Nothing to rotate, and nothing to leak into a dotfile or a
public repository.

Per-surface instructions: [Claude](/for/claude) · [ChatGPT](/for/chatgpt) ·
[Cursor](/for/cursor) · [Copilot](/for/copilot) · [n8n, Zapier and Make](/for/n8n).

## What the tools do

| Tool | Purpose |
|---|---|
| Generate | Any payload, with full styling options |
| Typed builders | WiFi, vCard, UPI, PIX, EPC, calendar, geo and more, validated against the real specs |
| Decode | Read a QR code out of an image |
| Verify | Render a styled code, rasterise it, decode it back, and report whether it survived |

Verify is the one that matters most for an agent. Generating a branded code is easy;
knowing whether it still scans is not something a model can determine by reasoning about
the pattern.

## If you have no MCP client

The API is keyless, so an agent can use it with no setup at all:

```
https://useqr.app/q/hello.png
```

That drops straight into a markdown image tag, which is often exactly what an assistant
wants to emit inline.

## Why this API suits agents

- **No signup.** An agent cannot complete a signup flow, so a tool requiring one is a tool it
  will not use.
- **Idempotent GET.** Safe to retry and safe to cache.
- **Deterministic.** Same parameters, same bytes — reproducible in tests.
- **Liberal aliases.** `data`, `text`, `content`, `url`, `q` all work, as do `size` and
  `width`. Every guess that works is a retry that never happened.
- **Errors that teach.** Every 4xx is `application/problem+json` with a `fix` field
  containing a corrected call.
- **A stability contract.** v1 shapes never break; parameters are only ever added. Safe to
  hardcode.

## Machine-readable surface

[`/llms.txt`](https://useqr.app/llms.txt) — the index · [`/llms-full.txt`](https://useqr.app/llms-full.txt) — the full
surface inline · [`/api/openapi.json`](https://useqr.app/api/openapi.json) — OpenAPI 3.1 with no security
schemes, so it imports as a GPT Action with authentication set to None.

Every documentation page here is also served as plain markdown at `{path}.md`.

## FAQ

### Does the UseQR MCP server need an API key?
No. It is unauthenticated Streamable HTTP. There is nothing to request, store or rotate.

### What can an agent do with it?
Generate QR codes with full styling, build validated typed payloads such as WiFi and UPI, decode codes from images, and verify that a styled code still decodes.

### Can I use it without an MCP client?
Yes. The REST API is keyless, and the shortest form — /q/hello.png — works inline in a markdown image tag with no setup at all.

### Is it safe to hardcode the endpoint?
Yes. The stability contract is that v1 endpoint shapes never break, parameters are only added, and static generation stays free and unmetered.

## Try it

- https://useqr.app/developers
