Skip to main content
Glama
zovo-one

mcp-barcode

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 build

Then point your client at the built entry point:

{
  "mcpServers": {
    "barcode": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-barcode/dist/index.js"]
    }
  }
}

@theluckystrike/mcp-barcode is not published on npm yet, so an npx -y @theluckystrike/mcp-barcode command will fail. The three paths above are the working ones and each is exercised by CI.

barcode demo

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-barcode

Cursor, .cursor/mcp.json:

{
  "mcpServers": {
    "barcode": { "command": "npx", "args": ["-y", "@theluckystrike/mcp-barcode"] }
  }
}

Tools

tool

what it does

qr_create

Text or a URL as a QR code, at any error correction level, SVG or PNG

qr_wifi

A code that joins a WiFi network when scanned

qr_vcard

A code that adds a contact (vCard 3.0)

qr_payment_sepa

An EPC069-12 payment code a euro banking app scans: IBAN, name, amount, reference

invoice_payment_qr

The payment code for an invoice, using the IBAN and name from your shared business profile

barcode_create

Code 128, EAN-13, EAN-8 or UPC-A, with the check digit computed or verified

barcode_batch

Many codes in one call, into a directory (Pro)

code_list

What you have generated, and how much of this month's free allowance is left

license_status, license_activate

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

barcode_batch

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:

Available Tools

10 tools
barcode_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.

NameRequiredDescriptionDefault
textNoPrint the digits under the bars (default true)
itemsYesThe rows to draw
formatNosvg (default, free) or png (Pro)
heightNoBar height in the same units (default 80)
out_dirYesExisting directory the files are written into
out_pathNoWhere to write the file. SVG is returned inline when this is left out; PNG always needs it
overwriteNoReplace out_path if it already exists (default false)
symbologyNoDefault symbology for rows that do not name one (default code128)
module_widthNoWidth of the narrowest bar, in pixels or SVG units (default 2)
stop_on_errorNoStop at the first bad row instead of drawing the rest and reporting it (default false)

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
textNoPrint the digits under the bars (default true)
valueYesThe data to encode. Digits only for EAN and UPC
formatNosvg (default, free) or png (Pro)
heightNoBar height in the same units (default 80)
out_pathNoWhere to write the file. SVG is returned inline when this is left out; PNG always needs it
overwriteNoReplace out_path if it already exists (default false)
symbologyYescode128 for any printable ASCII, ean13 and ean8 for retail products, upca for North American retail
module_widthNoWidth of the narrowest bar, in pixels or SVG units (default 2)

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 generatedA
Read-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.

NameRequiredDescriptionDefault
kindNoOnly rows of this kind: text, wifi, vcard, sepa, invoice, barcode or batch
limitNoHow many rows to show, newest first (default 20)

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
ibanNoOverride the IBAN in the shared business profile
nameNoOverride the beneficiary name in the shared business profile
sizeNoPNG width in pixels, 32 to 4000 (default 300). SVG scales without it
amountNoAmount in EUR. Overrides the invoice total; required when there is no invoice to read
formatNosvg (default, free) or png (Pro)
marginNoQuiet zone in modules, default 4, which is what the QR standard requires
out_pathNoWhere to write the file. SVG is returned inline when this is left out; PNG always needs it
overwriteNoReplace out_path if it already exists (default false)
referenceNoPayment text, up to 140 characters. Defaults to the invoice number
invoice_idNoInvoice number, for example INV-2026-0007. Read from the invoice server's store if it is present
error_correctionNoL 7%, M 15% (default), Q 25%, H 30% of the code recoverable when damaged

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
keyYesLicense key from the checkout confirmation page

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

NameRequiredDescriptionDefault
sizeNoPNG width in pixels, 32 to 4000 (default 300). SVG scales without it
textYesThe text or URL the code carries
formatNosvg (default, free) or png (Pro)
marginNoQuiet zone in modules, default 4, which is what the QR standard requires
out_pathNoWhere to write the file. SVG is returned inline when this is left out; PNG always needs it
overwriteNoReplace out_path if it already exists (default false)
error_correctionNoL 7%, M 15% (default), Q 25%, H 30% of the code recoverable when damaged

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
bicNoBeneficiary BIC. Optional under EPC version 002
ibanNoBeneficiary 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
nameNoBeneficiary name, up to 70 characters. Defaults to the name in the shared business profile
sizeNoPNG width in pixels, 32 to 4000 (default 300). SVG scales without it
amountNoAmount in EUR, 0.01 to 999999999.99. Leave out and the payer types it
formatNosvg (default, free) or png (Pro)
marginNoQuiet zone in modules, default 4, which is what the QR standard requires
purposeNoFour-letter ISO 20022 purpose code, for example GDDS
currencyNoEUR only; any other value is refused, because EPC encodes a SEPA credit transfer
out_pathNoWhere to write the file. SVG is returned inline when this is left out; PNG always needs it
overwriteNoReplace out_path if it already exists (default false)
referenceNoStructured creditor reference (RF...), up to 35. Use this OR remittance, never both
remittanceNoFree payment text, up to 140 characters, for example an invoice number
error_correctionNoL 7%, M 15% (default), Q 25%, H 30% of the code recoverable when damaged

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
orgNoCompany or organisation
urlNoWebsite
nameNoFull name, for example Anna Kowalska. Defaults to the shared business profile's name; pass it only for someone else's card
noteNoFree note stored on the contact
sizeNoPNG width in pixels, 32 to 4000 (default 300). SVG scales without it
emailNoEmail address. Defaults to the shared business profile
phoneNoPhone number, in the form it should be dialled. Defaults to the shared business profile
titleNoJob title
formatNosvg (default, free) or png (Pro)
marginNoQuiet zone in modules, default 4, which is what the QR standard requires
addressNoPostal address, one line. Defaults to the shared business profile
out_pathNoWhere to write the file. SVG is returned inline when this is left out; PNG always needs it
overwriteNoReplace out_path if it already exists (default false)
error_correctionNoL 7%, M 15% (default), Q 25%, H 30% of the code recoverable when damaged

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
authNoWPA (default when a password is given), WEP, or nopass for an open network
sizeNoPNG width in pixels, 32 to 4000 (default 300). SVG scales without it
ssidYesNetwork name, exactly as it appears
formatNosvg (default, free) or png (Pro)
hiddenNoTrue if the network does not broadcast its name
marginNoQuiet zone in modules, default 4, which is what the QR standard requires
out_pathNoWhere to write the file. SVG is returned inline when this is left out; PNG always needs it
passwordNoPassphrase. Leave out only for an open network
overwriteNoReplace out_path if it already exists (default false)
error_correctionNoL 7%, M 15% (default), Q 25%, H 30% of the code recoverable when damaged

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 10 tool updatesv0.1.0
    • First observedbarcode_batch
    • First observedbarcode_create
    • First observedcode_list
    • First observedinvoice_payment_qr
    • First observedlicense_activate
    • First observedlicense_status
    • First observedqr_create
    • First observedqr_payment_sepa
    • First observedqr_vcard
    • First observedqr_wifi

TDQS

A3.8/5.0

Scored across 10 tools

Disambiguation3/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers