mcp-barcode
Generates EPC069-12 SEPA payment QR codes with IBAN, beneficiary name, amount, and reference, validated with ISO 7064 mod 97 so euro banking apps can scan and prefill payment details.
mcp-barcode
MCP server for QR code and barcode generation: generates barcodes and QR codes. QR codes and barcodes drawn on your machine, with no upload and no network call.
Works with Claude Desktop, Claude Code, Cursor and any Model Context Protocol client. Runs on your own machine, or hosted with no install.
Product page: https://mcp.zovo.one/s/barcode — what it does, the tools it exposes, and a live token endpoint.
Install
Hosted, nothing to install. Get a token from https://mcp.zovo.one/mcp/connect (the connect page) or https://mcp.zovo.one/mcp/token (the same token as JSON); a free anonymous one is issued on the spot and a Pro key works the same way. Then point an MCP client at https://mcp.zovo.one/mcp/barcode over streamable-http and send the token as Authorization: Bearer <token>.
If your client cannot set headers, put the token in the path instead: https://mcp.zovo.one/mcp/barcode/t/<token>. Both forms work. The bare URL with no token answers 401 on tools/call, so the token is not optional.
Claude Desktop, one click. Download barcode.mcpb from the latest release and double-click it.
From source. The mirror is self-contained: every @theluckystrike/* dependency is vendored, so a fresh clone builds with no extra setup.
git clone https://github.com/theluckystrike/mcp-barcode.git
cd mcp-barcode
npm install && npm run buildThen point your client at the built entry point:
{
"mcpServers": {
"barcode": {
"command": "node",
"args": ["/absolute/path/to/mcp-barcode/dist/index.js"]
}
}
}
@theluckystrike/mcp-barcodeis not published on npm yet, so annpx -y @theluckystrike/mcp-barcodecommand will fail. The three paths above are the working ones and each is exercised by CI.

Read-only mirror of mcp-servers/servers/barcode. See MIRROR.md.
Make a QR code or a barcode in the conversation you are already in. Paste a URL and get a QR code you can put on a flyer. Give a client's invoice an EPC payment code their banking app scans and fills in for them. Print an EAN-13 for a product, a Code 128 for a shelf label, a WiFi code for the office wall, a vCard for a conference badge. Everything is drawn on your machine: no upload, no account, no API key, and no network call of any kind.
In the official MCP Registry (io.github.theluckystrike/barcode-qr-code-sepa-payment-ean13).
Listed on the AI Product Index — live remote endpoint at mcp.zovo.one/s/barcode, free tier, no signup.
npm publish for @theluckystrike/mcp-barcode is pending, so npx -y @theluckystrike/mcp-barcode returns 404 today. Until then, the .mcpb one-click bundle or a clone+build is the working path.
Related MCP server: QRzap MCP Server
Install
Claude Desktop, ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or
%APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"barcode": { "command": "npx", "args": ["-y", "@theluckystrike/mcp-barcode"] }
}
}Claude Code:
claude mcp add barcode -- npx -y @theluckystrike/mcp-barcodeCursor, .cursor/mcp.json:
{
"mcpServers": {
"barcode": { "command": "npx", "args": ["-y", "@theluckystrike/mcp-barcode"] }
}
}Tools
tool | what it does |
| Text or a URL as a QR code, at any error correction level, SVG or PNG |
| A code that joins a WiFi network when scanned |
| A code that adds a contact (vCard 3.0) |
| An EPC069-12 payment code a euro banking app scans: IBAN, name, amount, reference |
| The payment code for an invoice, using the IBAN and name from your shared business profile |
| Code 128, EAN-13, EAN-8 or UPC-A, with the check digit computed or verified |
| Many codes in one call, into a directory (Pro) |
| What you have generated, and how much of this month's free allowance is left |
| Free or Pro, and activating a key |
Free vs Pro
Free | Pro | |
Codes per calendar month | 20 | Unlimited |
SVG (prints at any size) | Yes | Yes |
PNG | No | Yes, 32 to 4000 px |
| No | Yes, up to 500 rows a call |
QR, WiFi, vCard, SEPA payment codes, all four barcode symbologies | Yes | Yes |
Get Pro: https://mcp.zovo.one/buy/barcode - $19 one time, or $39 for every server in the suite, lifetime. Keys verify offline; nothing is sent anywhere.
A wrong check digit is refused, not redrawn
Give barcode_create twelve digits and the thirteenth is computed for you. Give it thirteen and the thirteenth is
checked:
Error: EAN-13 check digit is wrong: "5901234123450" ends in 0, but the first 12 digits give 7.
Pass 5901234123457, or pass the first 12 digits and the check digit is computed. Nothing was written.The alternative, silently redrawing the code the caller asked for, prints a label that scans as a different product, and nobody finds out until the till. The same rule applies to the IBAN in a payment code: it is validated with ISO 7064 mod 97 before anything is drawn, so a transposed pair of digits is caught here rather than by a payment that goes nowhere.
Measured: error correction M is free on a SEPA payment code, Q and H are not
A typical EPC payment record (IBAN, beneficiary, EUR 120.50, an invoice number) is 73 bytes. QR codes come in fixed capacity steps, so raising the error correction level does not raise the code size smoothly:
level | recoverable | QR version | modules a side | change |
L | 7% | 4 | 33 | baseline |
M | 15% | 4 | 33 | no change at all |
Q | 25% | 6 | 41 | +24% |
H | 30% | 7 | 45 | +36% |
L and M land in the same version 4 symbol: at this payload size the extra recovery data still fits in the same
box, so choosing L over M buys nothing and gives up half the damage tolerance. That is why M is the default
here. Q and H are worth asking for only when the code will be printed small, on something that creases, or
behind a logo. On a 300 px PNG the same step costs bytes too: 2,419 at M against 3,462 at H.
Measured: SVG is flat, PNG grows 14x, and they cross at about 200 px
The same payment code written both ways, at five sizes:
requested size | PNG bytes | SVG bytes |
128 px | 1,481 | 2,079 |
256 px | 2,186 | 2,079 |
512 px | 3,589 | 2,079 |
1024 px | 7,585 | 2,081 |
2048 px | 21,688 | 2,081 |
An SVG carries the module grid, not the pixels, so its size barely moves: the two extra bytes at 1024 px are the width attribute getting longer. Below roughly 200 px a PNG is smaller; above it the PNG grows without limit and the SVG does not, and the SVG is the one that stays sharp when a printer scales it up. That is the reason the free tier is the SVG tier rather than a small-PNG tier: for the thing most people do with a code, put it in a document and print it, SVG is the better file, not the consolation prize.
Privacy
Everything stays on your machine. There is no network code in this server at all: no fetch, no HTTP client,
no telemetry. Codes are written where you say, and a small register of what was generated lives under
~/.local/share/mcp-servers/barcode/ (or $XDG_DATA_HOME). License keys verify offline with a public key.
Built by theluckystrike. Support: support@zovo.one
Use these docs as an MCP server
Any MCP client (Claude, Cursor, Windsurf, VS Code) can read this repository's documentation directly via GitMCP — no install:
Docs MCP URL: https://gitmcp.io/theluckystrike/mcp-barcode
Available Tools
10 toolsbarcode_batchBarcodes in bulkA
Call this tool to draw many barcodes or QR codes at once from a list of rows, each with its own value and file name, into out_dir. Pro; the free tier does one code per call.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Print the digits under the bars (default true) | |
| items | Yes | The rows to draw | |
| format | No | svg (default, free) or png (Pro) | |
| height | No | Bar height in the same units (default 80) | |
| out_dir | Yes | Existing directory the files are written into | |
| out_path | No | Where to write the file. SVG is returned inline when this is left out; PNG always needs it | |
| overwrite | No | Replace out_path if it already exists (default false) | |
| symbology | No | Default symbology for rows that do not name one (default code128) | |
| module_width | No | Width of the narrowest bar, in pixels or SVG units (default 2) | |
| stop_on_error | No | Stop at the first bad row instead of drawing the rest and reporting it (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare that this is not read-only and not destructive, and the description adds useful licensing context by noting Pro versus free-tier behavior. It does not disclose overwrite semantics, partial-failure behavior, or output-return details beyond what the schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action and scope, and contains no filler. The Pro/free-tier note is compact and purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, the description is largely sufficient for selection and invocation. It could say more about file output behavior and error handling, but those details are covered substantially by the schema fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all 10 parameters in detail. The description only restates the core batch concept and does not add materially new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: draw many barcodes or QR codes at once from a list of rows. It also clarifies the batch scope and file-writing target, which distinguishes it from single-code siblings such as barcode_create or qr_create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly indicates when to use the tool: for many codes at once, and notes the Pro requirement versus free-tier single-code calls. However, it does not explicitly name barcode_create or qr_create as the single-code alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
barcode_createBarcodeA
Call this tool to draw a linear barcode (code128, ean13, ean8, upca) as SVG, or PNG to out_path. A short EAN or UPC gets its check digit computed; a wrong one is refused, never redrawn. qr_create makes QR codes.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Print the digits under the bars (default true) | |
| value | Yes | The data to encode. Digits only for EAN and UPC | |
| format | No | svg (default, free) or png (Pro) | |
| height | No | Bar height in the same units (default 80) | |
| out_path | No | Where to write the file. SVG is returned inline when this is left out; PNG always needs it | |
| overwrite | No | Replace out_path if it already exists (default false) | |
| symbology | Yes | code128 for any printable ASCII, ean13 and ean8 for retail products, upca for North American retail | |
| module_width | No | Width of the narrowest bar, in pixels or SVG units (default 2) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the mutation profile (readOnly=false, destructive=false); the description adds genuinely non-obvious behavior — automatic check-digit computation for short EAN/UPC values and outright refusal of a wrong check digit — plus the rule that PNG always requires out_path. It stops short of covering overwrite semantics or what a refusal looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and output options, then the edge-case rule, then the sibling pointer. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter file-writing tool with no output schema, the description covers output format, where bytes go, inline return for SVG, and the check-digit edge case — enough to call it correctly. Overwrite and sizing behavior are left entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning not in the schema: the value parameter's check-digit handling and refusal behavior, and the format/out_path coupling for PNG. That is real added semantics rather than repetition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('draw a linear barcode'), enumerates the supported symbologies, and names the two output formats. An agent can immediately tell this apart from qr_create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes QR use cases to qr_create and confines this tool to linear symbologies, with each symbology's intended use stated. No inference required to pick between the two.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
code_listCodes generatedARead-onlyIdempotent
List the codes this server generated, newest first, with what each carried and where it went, plus how much of the free 20 a month is used. Filter by kind. It reads the register, not the files.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Only rows of this kind: text, wifi, vcard, sepa, invoice, barcode or batch | |
| limit | No | How many rows to show, newest first (default 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds beyond that: it reads the register (not files), returns newest-first records, and exposes monthly quota consumption. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, information-dense sentences. The main action and ordering come first, followed by return content, quota, filter, and source caveat. No filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so describing the returned content ('what each carried and where it went', quota usage) is valuable. The main missing piece is exact output shape, but for a simple read-only list tool the description is adequate for an agent to invoke and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description's 'Filter by kind' only restates the kind parameter. It does add that 'newest first' applies to the result order, which aligns with limit's schema description, but it does not add meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List the codes this server generated'), defines ordering ('newest first'), the content ('what each carried and where it went'), quota usage, and filtering by kind. This clearly separates it from the create-oriented sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by the verb and object, but the description never says when to prefer this over siblings such as license_status for quota or license_activate for code creation. It gives no explicit when-not or alternative guidance, only the data-source note 'reads the register, not the files'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invoice_payment_qrPayment QR for an invoiceA
Call this tool for a SEPA payment QR from just an amount and reference: IBAN and name are read from the shared business profile, never asked for; pass invoice_id instead to take the amount from an invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| iban | No | Override the IBAN in the shared business profile | |
| name | No | Override the beneficiary name in the shared business profile | |
| size | No | PNG width in pixels, 32 to 4000 (default 300). SVG scales without it | |
| amount | No | Amount in EUR. Overrides the invoice total; required when there is no invoice to read | |
| format | No | svg (default, free) or png (Pro) | |
| margin | No | Quiet zone in modules, default 4, which is what the QR standard requires | |
| out_path | No | Where to write the file. SVG is returned inline when this is left out; PNG always needs it | |
| overwrite | No | Replace out_path if it already exists (default false) | |
| reference | No | Payment text, up to 140 characters. Defaults to the invoice number | |
| invoice_id | No | Invoice number, for example INV-2026-0007. Read from the invoice server's store if it is present | |
| error_correction | No | L 7%, M 15% (default), Q 25%, H 30% of the code recoverable when damaged |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose that this is not read-only, not idempotent, and not destructive, so the description benefits from adding the data-source behavior: IBAN/name come from the shared business profile and invoice_id reads from the invoice store. However, it omits file-writing behavior and overwrite implications, and the phrase 'never asked for' sits awkwardly with the optional iban/name override parameters in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler, and it prioritizes the main invocation path. It is somewhat dense and run-on, but it remains efficient for the amount of usage context it conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core invocation path is explained well: amount/reference or invoice_id, with profile-sourced beneficiary data. For an 11-parameter generation tool with no output schema, however, it leaves out important output and file behavior such as inline SVG versus PNG output, Pro restrictions, and overwrite semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 11 parameters and the baseline is 3. The description adds useful defaulting semantics for amount, reference, and invoice_id, but it does not cover the output/file parameters and its 'never asked for' wording conflicts with the optional iban and name overrides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and action: obtaining a SEPA payment QR, with the key scoping conditions of amount/reference or invoice_id. It also distinguishes this invoice-oriented flow from a generic SEPA QR tool by explaining that IBAN and name come from the shared business profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly says to use the tool with amount and reference, or to pass invoice_id instead when the amount should come from an invoice. It does not explicitly name when to use a sibling such as qr_payment_sepa instead, so the guidance is strong but not fully comparative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
license_activateActivate licenseA
Activate a Pro key (MCPL1.xxx.yyy) from checkout: verified offline against a built-in public key, saved to your config file. A wrong, malformed or expired key is refused, unsaved. license_status reads it back.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | License key from the checkout confirmation page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that verification happens offline against a built-in public key, that the key is persisted to the config file, and that invalid keys are refused and left unsaved. This is substantial transparency for an activation tool, though it could mention overwriting an existing key or the exact return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence front-loads the main action, source, verification method, and persistence. The second sentence efficiently covers error handling and points to the related read-back tool. Every clause adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single-parameter tool with no output schema and no annotations, the description covers activation behavior, verification mechanism, persistence, error outcomes, and how to read the result later. The only minor gap is an explicit statement of what the function returns upon success or failure, but the phrase 'refused, unsaved' implies a feedback mechanism. Overall, it is sufficiently complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the 'key' parameter at 100% coverage, so the baseline is 3. The description adds meaningful semantics by giving the concrete key format ('MCPL1.xxx.yyy'), confirming the key comes from the checkout page, and explaining that malformed or expired keys will be rejected. This goes beyond the schema's one-line description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Activate a Pro key'), the exact key format ('MCPL1.xxx.yyy'), the source ('from checkout'), and the core mechanism ('verified offline against a built-in public key'). It also differentiates itself from the sibling license_status by noting that license_status reads the activation back, so there is no ambiguity about which tool does what.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this when you have a Pro key from checkout that needs to be activated. It also points to license_status as the read-back tool, which implies when to use a related sibling. It does not explicitly spell out 'do not use for checking status' or list other alternatives, but the context is strong enough to avoid misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
license_statusLicense statusA
Report this server's licence state: product, tier free or pro, licence id, expiry, the key source and the upgrade URL. No arguments, no network. Explains a free-tier refusal; license_activate installs a key.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden of behavioral disclosure. It discloses that the call is local ('no network') and argument-free, and it mentions a specific explanatory behavior. The word 'Report' implies read-only, though it does not explicitly state non-destructive or permission requirements; this is adequate for a status command.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence lists the output fields; the second adds constraints and the sibling pointer. Every clause contributes meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter status tool with no output schema, the description lists the expected output fields, behavioral constraints, and the relevant alternative tool. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameters and the description reinforces this with 'No arguments'. It adds value by listing the reported fields, helping an agent understand what the empty input will yield. The baseline for zero-parameter tools is high, and the description meets it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Report'), a clear resource ('this server's licence state'), and enumerates the exact fields returned. It also names the sibling 'license_activate' as the tool that does something different, so an agent can distinguish them immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage constraints: no arguments, no network, and explains a free-tier refusal. It also directs the agent to license_activate when the task is to install a key, serving as an explicit pointer to the relevant alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qr_createQR codeA
Call this tool to turn text or a URL into a QR code: SVG inline, or a PNG at a pixel size to out_path (Pro). Returns version, module grid and payload size. Free: 20 codes a month on this server.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | PNG width in pixels, 32 to 4000 (default 300). SVG scales without it | |
| text | Yes | The text or URL the code carries | |
| format | No | svg (default, free) or png (Pro) | |
| margin | No | Quiet zone in modules, default 4, which is what the QR standard requires | |
| out_path | No | Where to write the file. SVG is returned inline when this is left out; PNG always needs it | |
| overwrite | No | Replace out_path if it already exists (default false) | |
| error_correction | No | L 7%, M 15% (default), Q 25%, H 30% of the code recoverable when damaged |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description adds real behavioral context: files get written to disk, PNG output is gated behind Pro, and the free tier is rate limited to 20 codes/month. The write side-effect path is partially covered by the schema's overwrite flag, so the description is additive but not exhaustive about overwrite semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the verb and resource, then the output modes, then the return shape and quota. No filler; every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with one required field and no output schema, the description covers the output modes, the file-writing requirement, the Pro gate, and even the return shape (version, module grid, payload size). Only the alternative-sibling routing and overwrite consequences are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including default margin, error_correction levels, and size range is already documented. The description reinforces the format/size/out_path relationship and the Pro constraint on PNG, but adds no syntax or default information the schema lacks — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb and resource ('turn text or a URL into a QR code') and names the two output modes (inline SVG, PNG to out_path), so the operation is unambiguous. It stops short of differentiating itself from the specialized siblings qr_wifi, qr_vcard, and qr_payment_sepa, which an agent would still have to infer is the generic-vs-preset split.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call this tool to turn text or a URL into a QR code' gives an implied use condition plus a tier prerequisite (PNG requires Pro) and a quota (20 free codes/month). There is no explicit guidance on when to prefer this over the preset siblings or barcode_create, and no when-not-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qr_payment_sepaSEPA payment QR codeA
Call this tool for an EPC069-12 payment QR a euro banking app can scan. Amount and reference are enough: the beneficiary IBAN and name default to the shared business profile, never asked for.
| Name | Required | Description | Default |
|---|---|---|---|
| bic | No | Beneficiary BIC. Optional under EPC version 002 | |
| iban | No | Beneficiary IBAN. Defaults to the iban in the shared business profile (set once with the invoice server's business_set). Checked with ISO 7064 mod 97 and refused if it does not validate | |
| name | No | Beneficiary name, up to 70 characters. Defaults to the name in the shared business profile | |
| size | No | PNG width in pixels, 32 to 4000 (default 300). SVG scales without it | |
| amount | No | Amount in EUR, 0.01 to 999999999.99. Leave out and the payer types it | |
| format | No | svg (default, free) or png (Pro) | |
| margin | No | Quiet zone in modules, default 4, which is what the QR standard requires | |
| purpose | No | Four-letter ISO 20022 purpose code, for example GDDS | |
| currency | No | EUR only; any other value is refused, because EPC encodes a SEPA credit transfer | |
| out_path | No | Where to write the file. SVG is returned inline when this is left out; PNG always needs it | |
| overwrite | No | Replace out_path if it already exists (default false) | |
| reference | No | Structured creditor reference (RF...), up to 35. Use this OR remittance, never both | |
| remittance | No | Free payment text, up to 140 characters, for example an invoice number | |
| error_correction | No | L 7%, M 15% (default), Q 25%, H 30% of the code recoverable when damaged |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-destructive, non-idempotent and closed-world, so the safety profile is covered. The description adds that beneficiary details come from the shared business profile, but never mentions that the tool writes files when out_path is set (and needs out_path for PNG), which is the main side effect an agent should know about.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the trigger condition, and no filler. Everything stated earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 14 parameters and no output schema, the description is thin: it omits that SVG is returned inline unless out_path is given and that PNG requires out_path, and it leaves the invoice_payment_qr overlap unresolved. The rich schema compensates for parameter detail, but the tool-choice and output story is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every one of the 14 parameters, including defaults, ranges, enums and the validation/refusal rules, is already documented in structured fields. The description's only parameter claim (IBAN/name default to the business profile) repeats the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: an EPC069-12 payment QR a euro banking app can scan. That is concrete and distinguishable from qr_wifi/qr_vcard/barcode_create, but it does not explain how it differs from the sibling invoice_payment_qr, which sounds like the same job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Amount and reference are enough' gives implied context, and the note that IBAN/name default to the business profile tells the agent not to ask for them. But there is no explicit when-to-use/when-not guidance, especially against invoice_payment_qr, which is the most likely source of a wrong selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qr_vcardContact QR codeB
Call this tool to make a QR code that adds a contact when scanned (vCard 3.0). For your own card pass nothing: name, phone, email and address default to the shared business profile, never asked for.
| Name | Required | Description | Default |
|---|---|---|---|
| org | No | Company or organisation | |
| url | No | Website | |
| name | No | Full name, for example Anna Kowalska. Defaults to the shared business profile's name; pass it only for someone else's card | |
| note | No | Free note stored on the contact | |
| size | No | PNG width in pixels, 32 to 4000 (default 300). SVG scales without it | |
| No | Email address. Defaults to the shared business profile | ||
| phone | No | Phone number, in the form it should be dialled. Defaults to the shared business profile | |
| title | No | Job title | |
| format | No | svg (default, free) or png (Pro) | |
| margin | No | Quiet zone in modules, default 4, which is what the QR standard requires | |
| address | No | Postal address, one line. Defaults to the shared business profile | |
| out_path | No | Where to write the file. SVG is returned inline when this is left out; PNG always needs it | |
| overwrite | No | Replace out_path if it already exists (default false) | |
| error_correction | No | L 7%, M 15% (default), Q 25%, H 30% of the code recoverable when damaged |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-destructive, non-idempotent, closed-world, so the safety bar is lower. The description adds the vCard 3.0 output format and the shared-profile defaulting behavior, but says nothing about file writing side effects, what happens if out_path exists, or why the operation is not idempotent — content the schema only partly covers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and immediately followed by the most important usage caveat. No filler, though the wording 'never asked for' is slightly cryptic and costs a word of clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter generation tool with no output schema, the description covers the payload type and defaulting but omits any mention of output behavior (inline SVG vs written file) or the SVG-free/png-Pro distinction, which the schema carries alone. Adequate but not complete on its own.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every parameter, including the shared-profile defaults for name, email, phone and address. The description restates the defaulting rule rather than adding new meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: make a QR code that adds a contact when scanned, with the vCard 3.0 format named. That distinguishes it from qr_wifi and qr_payment_sepa implicitly by payload type, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one concrete usage rule ('for your own card pass nothing'), which resolves the main ambiguity around the 14 optional params. It does not say when to choose this tool over qr_create or the other QR siblings, leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qr_wifiWiFi QR codeA
Call this tool to make a QR code that joins a WiFi network when scanned: ssid, password and auth type, written to out_path or returned as SVG. Free: 20 codes a month. qr_create takes plain text or a URL.
| Name | Required | Description | Default |
|---|---|---|---|
| auth | No | WPA (default when a password is given), WEP, or nopass for an open network | |
| size | No | PNG width in pixels, 32 to 4000 (default 300). SVG scales without it | |
| ssid | Yes | Network name, exactly as it appears | |
| format | No | svg (default, free) or png (Pro) | |
| hidden | No | True if the network does not broadcast its name | |
| margin | No | Quiet zone in modules, default 4, which is what the QR standard requires | |
| out_path | No | Where to write the file. SVG is returned inline when this is left out; PNG always needs it | |
| password | No | Passphrase. Leave out only for an open network | |
| overwrite | No | Replace out_path if it already exists (default false) | |
| error_correction | No | L 7%, M 15% (default), Q 25%, H 30% of the code recoverable when damaged |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say it's a non-read-only, non-idempotent, non-destructive write; the description adds genuinely new facts: the free-tier quota (20 codes/month), that output goes to out_path or is returned inline as SVG, and that PNG requires a path. It doesn't warn about overwrite behavior or auth requirements for image generation, but coverage beyond annotations is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and its distinguishing scope, followed by output behavior and the sibling contrast. No filler; every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with no output schema, the description covers payload, output destination, format tiering and quota, while the rich schema handles the rest. Slightly incomplete in not mentioning that PNG is Pro-only in the description text (it's in the schema) or overwrite semantics, but nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents all 10 parameters including enums, defaults and ranges. The description only restates ssid/password/auth and the out_path-vs-SVG return behavior, adding marginal value rather than syntax or format detail. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'make a QR code that joins a WiFi network when scanned', with the encoded payload spelled out (ssid, password, auth). It explicitly contrasts with the sibling qr_create ('takes plain text or a URL'), so an agent can select between the two without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The WiFi-join scenario is stated clearly and the nearest alternative (qr_create for plain text/URL) is named, which gives an agent a routing rule. It stops short of explicit exclusions or pointing at the other specialized siblings (qr_vcard, qr_payment_sepa), so it's clear context rather than full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.1.0- First observed
barcode_batch - First observed
barcode_create - First observed
code_list - First observed
invoice_payment_qr - First observed
license_activate - First observed
license_status - First observed
qr_create - First observed
qr_payment_sepa - First observed
qr_vcard - First observed
qr_wifi
TDQS
Scored across 10 tools
Most tools are clearly separated by payload type (qr_create for text/URL, qr_wifi, qr_vcard, barcode_create, barcode_batch, code_list, and the two license tools). However, invoice_payment_qr and qr_payment_sepa both produce a SEPA payment QR from an amount and reference using the shared business profile's IBAN, so an agent can easily pick the wrong one. The descriptions hint at a difference (invoice_id lookup vs. raw amount), but the boundary is thin and the names do not reinforce it.
The set follows a readable <domain>_<action> convention: qr_*, barcode_*, code_list, license_*. The only real deviations are invoice_payment_qr, which inverts the order used by its near-twin qr_payment_sepa, and the noun_noun license_status alongside noun_verb license_activate. These are minor and still parseable.
Ten tools is a well-scoped set for a QR/barcode generator, with each family (QR types, barcode, batch, history, licensing) earning its place. The only questionable inclusions are two license tools and two near-duplicate payment tools, which nudge it just over the minimum needed.
The core lifecycle is covered: generate single codes (text, WiFi, vCard, SEPA), generate barcodes and batches, list history, and manage licensing. Gaps are minor rather than blocking: no structured QR types beyond WiFi/vCard/payment (e.g. email, SMS, geo), no decode/read-back of an existing code, and no way to delete or prune generated files or history entries.
Maintenance
Related MCP Connectors
Generate QR codes for URLs, PIX, Wi-Fi, vCards, WhatsApp and more. For AI agents.
Generate QR codes (URL, WiFi, vCard) and barcodes as PNG/SVG
Create and manage QR codes on me-qr.com from AI clients like Claude and ChatGPT.
Manage your Hovercode QR codes, short links, landing pages, and forms by chatting. Create and restyle QR codes, retarget printed dynamic codes without reprinting, host PDFs behind a QR, build landing pages and forms, organise with folders and tags, and read scan analytics. Hosted, OAuth, works with Claude, ChatGPT, Cursor, and any MCP client.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables the generation of QR codes in PNG, SVG, Base64, and ASCII formats via Model Context Protocol clients. Users can save codes directly to local files or display them as terminal-friendly art through natural language commands.-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to generate QR codes for URLs, WiFi, contacts, and more with structured parameters.5,791 npm4MIT
- AlicenseAqualityAmaintenanceLocal OCR & image analysis via Apple Vision Framework — private, offline, no API keys. Extracts text from images and PDFs, detects faces, barcodes, QR codes, and document corners. Works with Claude Code, Claude Desktop, and Cursor.617 npm7MIT
- AlicenseNot gradedqualityDmaintenanceImage generation for Claude Code via ChatGPT subscription token. No API key needed.3MIT