Skip to content
barcoder

MCP Connector

barcoder-codec

Barcoder's MCP servers give AI agents the encyclopedia and the codecs: the hosted server signs in to your account and checks payments; the local one runs offline for the reference and codes.

Hosted server

Nothing to install. Add the server once; the first tool call opens a sign-in in your browser, and the agent works on your Barcoder account from then on.

Claude Code

claude mcp add --transport http barcoder https://api.barcoder.ai/mcp

Any host with remote MCP (streamable HTTP, OAuth 2.1)

https://api.barcoder.ai/mcp

Looking up standards, decoding and generating codes are free. Reading a payment request, checking a payment or making a payment code uses a case from the account. Disconnect it any time in the app's Connected apps.

What it may do

On first use the server asks for three permissions, approved together on one consent screen. Connections made before the split hold a single mcp permission that covers all three.

codes:read
Look up standards and markets, and decode, identify and generate codes. Reads none of your data and charges nothing.search_standards · get_standard · search · list_encoders · get_encoder_schema · identify_payload · decode_image · generate_code · list_markets
cases:read
See your cases, their stored reports and your remaining cases.list_cases · get_case · get_usage
cases:write
Read payment details from documents, validate payments and make payment codes for you. Each extraction or validation charges a case.extract_payment_fields · make_payment_code · validate_payment

Tools · 15

  • search_standardsSearch standards

    read-only

    List Barcoder's standards (QR, barcode and payment-code formats), filterable by text (q) and type.

  • get_standardGet a standard

    read-only

    Get one standard's full reference page (frontmatter + rendered HTML) by id, e.g. 'pix', 'hub3', 'swiss-qr-bill'.

  • searchSearch the reference

    read-only

    Search standards, country payment landscapes and wallets.

  • list_encodersList encoders

    read-only

    List every encoder generate_code accepts, with the standards that use it.

  • get_encoder_schemaGet an encoder's fields

    read-only

    Get the field schema and an example for one encoder, to fill generate_code's values correctly.

  • identify_payloadIdentify a payload

    read-only

    Identify which standard a decoded QR/barcode payload belongs to, with decoded fields and wiki links.

  • decode_imageDecode codes in an image

    read-only

    Decode every QR code / barcode in an image (base64 PNG/JPEG/WebP, max 5 MB) and identify each payload.

  • generate_codeGenerate a code image

    read-only

    Generate a scannable payment code or barcode (PNG or SVG, base64) from structured fields. See get_encoder_schema for the fields.

  • extract_payment_fieldsExtract payment fields

    spends a case · confirm first

    Read the payment details from pasted text (text: an email or message asking for a payment, e.g. a school trip) or an invoice (document.file_base64 + media_type for an image/PDF). Returns only the fields the source states, each with a confidence, `missing` for the rest (never guessed), and warnings (low confidence, suspected injected instructions, missing fields, values not found in the text). The fields are UNCONFIRMED: show them to the user to confirm or complete. Optional market (an id from list_markets, e.g. "sl", "de-ch", "hu", "pt-br", "en-in", "sv") steers it to that market's account and reference conventions (pt-br: the Pix key in pix_key; en-in: the UPI ID in upi_vpa; sv: the Swish number in swish_number). Charges 1 case; pass the case_id to validate_payment or make_payment_code for free.

  • make_payment_codeMake a payment code

    spends a case · confirm first

    Make a scannable payment code for a case from fields THE USER CONFIRMED: show every field to the user first and send only what they confirmed or typed (fields: {key: {value, confirmed: true}} or {key: "typed value"}); unconfirmed fields are refused. Needs payee_name and ONE account: iban, or pix_key, upi_vpa or swish_number (UPN QR also street, city and description; the Swiss QR-bill "postcode town" and the currency; Pix also payee_city); optional fields stay empty and are never filled in. Picks the standard by the account: an IBAN by its country (HUB3 (HR), UPN QR (SI), Swiss QR-bill (CH/LI), QR Platba (CZ, with constant_symbol / specific_symbol), MNB QR (HU: needs the BIC), NBS IPS QR (RS: needs the amount; a domestic account like 160-…-78 works), EPC QR (other SEPA; a non-euro account needs currency EUR)); a pix_key makes Pix (BRL, reference = txid of 1–25 letters/digits), a upi_vpa UPI (INR), a swish_number Swish (SEK; the code carries no payee name). Optional market (list_markets) fills a missing currency for CH/CZ. Returns the payload, what was encoded, what was left open, and warnings (always: the payee isn't verified). To get an image, call generate_code with encoder "raw", symbology = the returned symbology, options = the returned render_options, and values.data = payload. Free.

  • validate_paymentValidate a payment

    spends a case · confirm firstcalls an outside service

    Check a payment code before paying: send the decoded payload (code.payload) and/or the fields you read from the invoice (document.fields). Returns a verdict (match / mismatch = do not pay / review) with per-check reasons: format, EMVCo CRC, IBAN checksum, EU VAT numbers via VIES (non-EU tax ids are not checked), payee/IBAN/account/amount consistency (IBAN, Pix key, UPI ID or Swish number), and payee history: a payee name seen before with a different account is flagged (invoice redirect). Charges 1 case.

  • list_marketsList markets

    read-only

    List the markets Barcoder serves (hr, sl, cs, de, de-at, de-ch, fr-ch, it-ch, en, hu, sr, pt-br, en-in, sv): each one's payment standard, currency, and how make_payment_code draws it. Pass a market id as `market` to extract_payment_fields and make_payment_code.

  • list_casesList my cases

    read-only

    List the caller's cases, newest first, with each one's standard and verdict (limit, cursor).

  • get_caseGet a case

    read-only

    Get one case with its stored validation report (kept 90 days; null if not stored or expired).

  • get_usageShow my usage

    read-only

    Show the caller's remaining cases (monthly allowance + packs) and rate limit.

Privacy and support

What the server stores and for how long is in the privacy notice. Questions or problems: info@lumiverse.hr.

Install

Local server, offline

The server ships as a Node/TypeScript package inside the Barcoder repository, which is private for now: you need access to it. No hosting, no ports — it runs as a stdio subprocess that Claude Code starts on demand, and it covers the reference and the codecs only (no account, no cases).

Step 1 — Clone and install

git clone https://github.com/LumiVerseHR/barcoder.git cd barcoder/apps/mcp npm ci

Step 2 — Build the server

npm run build   # from apps/mcp/ — emits apps/mcp/dist/server.js (npm ci already ran it)

Step 3 — Open Claude Code

claude # On first connect, approve the project MCP server trust prompt

That is all. The .mcp.json file (committed in the repo root) tells Claude Code how to start the server. No configuration files to edit, no environment variables to set.

Manual MCP setup

If you are not using Claude Code, the .mcp.json at the repo root defines a stdio server at apps/mcp/dist/server.js. Point your MCP client at it:

// .mcp.json
{
  "mcpServers": {
    "barcoder-codec": {
      "type": "stdio",
      "command": "node",
      "args": ["./apps/mcp/dist/server.js"],
      "env": {
        "BARCODER_DOCS_DIR": "./content"
      }
    }
  }
}

The server reads from content/standards/ to build an in-memory search index at startup. Set BARCODER_DOCS_DIR if your docs live elsewhere.

Tool Catalog

The local server exposes 9 tools: search, encoders, generation and decoding.

ping

tool

Check that the Barcoder MCP server is alive and connected.

{
  "tool": "ping",
  "args": {}
}

search_standards

tool

Find standards in the Barcoder encyclopedia, optionally only those with a working playground.

{
  "tool": "search_standards",
  "args": {
    "query": "pix",
    "with_playground_only": true
  }
}

get_standard

tool

Full detail for one standard by id.

{
  "tool": "get_standard",
  "args": {
    "id": "pix"
  }
}

list_encoders

tool

Enumerate available barcode/QR encoders (the generate catalog).

{
  "tool": "list_encoders",
  "args": {}
}

get_encoder_schema

tool

Get the form schema for one encoder, so the caller can fill fields correctly.

{
  "tool": "get_encoder_schema",
  "args": {
    "encoder": "wifi-qr"
  }
}

generate_code

tool

Build a scannable barcode/QR code image from structured field input. Returns the encoded payload + rendered PNG/SVG.

{
  "tool": "generate_code",
  "args": {
    "encoder": "pix",
    "values": {
      "mode": "static",
      "keyType": "email",
      "pixKey": "ana.silva@loja.example",
      "merchantName": "ANA SILVA",
      "merchantCity": "BELO HORIZONTE"
    }
  }
}

identify_payload

tool

Identify a raw/pasted payload string -> which standard it belongs to, with confidence and decoded fields.

{
  "tool": "identify_payload",
  "args": {
    "text": "upi://pay?pa=merchant@example&am=100&cu=INR"
  }
}

decode_image

tool

Decode an image file/base64 into barcode/QR payload(s).

{
  "tool": "decode_image",
  "args": {
    "image_path": "./receipt.png"
  }
}

scan_and_identify

tool

End-to-end: decode an image AND identify what standard each symbol belongs to.

{
  "tool": "scan_and_identify",
  "args": {
    "image_path": "./receipt.png"
  }
}

How It Works

The server imports the same ~40 encoder modules and the 31-pattern matcher that the frontend website uses. It never reimplements encoding or identification logic. This means the MCP tools always produce the same payloads as the web playgrounds.

Image decoding uses sharp for rasterization and zxing-wasm for multi-format barcode detection — QR, Code128, PDF417, DataMatrix, Aztec, EAN/UPC, ITF, and more.

Design principle

One source of truth. The MCP server imports the frontend's ENCODERS registry and matcher.ts — never reimplements them. A reimplementation would silently drift from the ~40 golden-vector-tested encoders.

source · apps/mcp/ · support: info@lumiverse.hr