A QR code MCP server for your assistant
Add one URL to Claude, Cursor or VS Code and ask for QR codes in a sentence. Nothing to install.
Worked example, not a live session
Ask it
Make me a QR code for tomorrow’s open day and show me the picture.
On this page
Connect it in one paste
Pick your client and copy one thing. Signing in needs only the server URL.
One command in the terminal, in whichever project you want it available in.
claude mcp add --transport http qrsalt https://app.qrsalt.com/api/mcp --header "Authorization: Bearer qr_live_YOUR_KEY"Checked against the Claude Code docs on MCP, read 20 October 2026.
What you can ask it for
The demo above is pre-written and sends nothing. These are requests people type.
“Which of my codes still point at the old domain?”
It searches your codes’ destinations and names them.
“Shorten this and call it Spring flyer.”
A short link you can re-point later, with its clicks counted.
“Somebody sent me this QR. What’s in it?”
Attach the image and it reads out the text.
“Pause the trade-show banner code.”
Scans show “This code is paused” until you turn it back on.
“Where does the table tent code point now?”
Its destination, short link, scans and last scan.
The 13 tools and what each needs
Your client only lists the tools your key or sign-in allows, so it never offers something it can’t finish.
Draw a code, read one
Render images box, ticked on a new key
- render_qr_code
- read_qr_image
Every plan, Free included
Look up your codes and scans
Read box, ticked on a new key
- list_codes
- get_code
- list_folders
- get_scan_analytics
- get_code_image
Starter and up
Create and change
Create and change box, ticked on a new key
- create_code
- update_code
- create_short_link
- set_gs1_link
Starter and up
Delete
Delete box
- remove_gs1_link
- delete_code
Starter and up, off until you tick it
Starter is $5 a month, the same plan the REST API needs. What each tool does is in the tool list.
What it won’t do
An assistant reaches only what its key allows, and the tools do less than the API behind them.
- Deleting is off by default. Even with the box ticked, a delete needs the code’s exact name or short-link ending.
- No web addresses. No tool fetches a URL. To read a QR code, the client sends the image itself.
- No design, domains or billing. Colours, routing rules, custom domains, webhooks, your team and your plan stay in the dashboard.
- One workspace. Every call runs in the key’s workspace, and no tool can name another.
Last reviewed , against the product as it works today.
MCP questions, answered
Which AI clients can connect?
Any client that speaks MCP over HTTP. The Claude app, Claude Code, Cursor and VS Code each have step-by-step setup in the docs.
Should the assistant share a key with my scripts?
No. Give it a key of its own with only the boxes it needs. Then you can revoke it without stopping anything else.
A web page told my assistant to change a code. Can it?
Only if the key allows that change. No tool fetches a web address, and a read-only key can’t change anything.
Does it work with clients built for an older MCP revision?
Yes, over HTTP. A client that opens with initialize gets the revision it asks for: 2025-06-18, 2025-03-26 or 2024-11-05.
Plans behind the connector
Each tool call counts as one API request: 500 API requests a month on Starter, 5,000 on Pro and 100,000 on Business, a fair-use ceiling.
Free
$0/mo
Unlimited static codes. Three editable ones that never expire.
- Short links on their own, no QR code needed
- Up to 1 of the 3 can be a QR Menu
- Add your logo to QR codes
- Every shape, corner and frame
3dynamic codes
Starter
Recommended$5/mo
For one business with codes out in the world.
- 5 QR Menus
- QR Forms
- GS1 Digital Links we host, so a printed pack can be re-pointed
- Advanced tracking and analytics
100dynamic codes
Pro
$15/mo
For agencies and teams running codes at scale.
- 50 QR Menus
- Unlimited analytics history
- 10 custom domains
- 5,000 API requests a month
600dynamic codes
Business
$39/mo
For organisations running codes across many brands.
- 400 QR Menus
- 50 custom domains
- Up to 25 team members and team management
- Up to 10 workspaces
2,000dynamic codes
Unlimited scans on every plan. Cancel online in two clicks. Compare every plan and feature
The rest of the toolbox
Open a row to see the screen and which plan has it.
Custom domains
Short links on your own domain, chosen code by code.Starter and up
Codes open go.yourbrand.com/menu instead of a link with our name in it. Add two DNS records, we check them, then pick the domain per code or move a whole list onto it.
Starter and up
QR codes on your own domain
Change many codes at once
Tick the codes, then pause, tag, file or move them together.Pause and resume on every plan · folders and tags on Starter and up
Tick codes, or pick every code with a tag, then pause, tag, file or move them onto your domain in one go. When a pop-up shop closes, pause all its codes together.
Pause and resume on every plan · folders and tags on Starter and up

Webhooks
Your server hears about every scan and every change.Business
Pick events (a scan, a code made, changed or paused, a form answered) and give us a URL. Each arrives as a signed POST, failures are retried, and every delivery is listed.
Business
The API and webhooks
Separate workspaces
One subscription, a workspace per brand or client.Business
Each has its own codes, team and analytics, so one client never sees another’s. Up to 10 on one subscription.
Business

An API for the codes you print
Make dynamic codes and short links from your own software, re-point them, and change up to 500 in one request. Rendering works on every plan; creating and editing come with Starter and up. No-code setup is in the n8n and Make docs.
Render a code · every plan, Free included
curl -o code.svg \
-H "Authorization: Bearer $QRSALT_KEY" \
"https://app.qrsalt.com/api/qr?data=https://example.com"An SVG comes back, ready for a label, a template or a web page.
Re-point a printed code · Starter and up
curl -X PATCH https://app.qrsalt.com/api/v1/codes/{id} \
-H "Authorization: Bearer $QRSALT_KEY" \
-H "content-type: application/json" \
-d '{"destination":"https://example.com/winter"}'The printed code opens the new page from the next scan. The old address stays in the code’s history.
Change many codes at once · JavaScript
// Move a campaign's codes onto your own domain
await fetch('https://app.qrsalt.com/api/v1/codes/bulk', {
method: 'POST',
headers: {
authorization: `Bearer ${process.env.QRSALT_KEY}`,
'content-type': 'application/json',
},
body: JSON.stringify({ ids, action: 'domain', domain: 'go.example.com' }),
})Pause, tag, move or file codes in one request. The response lists what changed and what was skipped.
