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/mcpAny host with remote MCP (streamable HTTP, OAuth 2.1)
https://api.barcoder.ai/mcpLooking 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-onlyList Barcoder's standards (QR, barcode and payment-code formats), filterable by text (q) and type.
get_standardGet a standard
read-onlyGet one standard's full reference page (frontmatter + rendered HTML) by id, e.g. 'pix', 'hub3', 'swiss-qr-bill'.
searchSearch the reference
read-onlySearch standards, country payment landscapes and wallets.
list_encodersList encoders
read-onlyList every encoder generate_code accepts, with the standards that use it.
get_encoder_schemaGet an encoder's fields
read-onlyGet the field schema and an example for one encoder, to fill generate_code's values correctly.
identify_payloadIdentify a payload
read-onlyIdentify which standard a decoded QR/barcode payload belongs to, with decoded fields and wiki links.
decode_imageDecode codes in an image
read-onlyDecode every QR code / barcode in an image (base64 PNG/JPEG/WebP, max 5 MB) and identify each payload.
generate_codeGenerate a code image
read-onlyGenerate 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 firstRead 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 firstMake 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 serviceCheck 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-onlyList 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-onlyList the caller's cases, newest first, with each one's standard and verdict (limit, cursor).
get_caseGet a case
read-onlyGet one case with its stored validation report (kept 90 days; null if not stored or expired).
get_usageShow my usage
read-onlyShow 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 ciStep 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 promptThat 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
toolCheck that the Barcoder MCP server is alive and connected.
{
"tool": "ping",
"args": {}
}search_standards
toolFind standards in the Barcoder encyclopedia, optionally only those with a working playground.
{
"tool": "search_standards",
"args": {
"query": "pix",
"with_playground_only": true
}
}get_standard
toolFull detail for one standard by id.
{
"tool": "get_standard",
"args": {
"id": "pix"
}
}list_encoders
toolEnumerate available barcode/QR encoders (the generate catalog).
{
"tool": "list_encoders",
"args": {}
}get_encoder_schema
toolGet the form schema for one encoder, so the caller can fill fields correctly.
{
"tool": "get_encoder_schema",
"args": {
"encoder": "wifi-qr"
}
}generate_code
toolBuild 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
toolIdentify 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
toolDecode an image file/base64 into barcode/QR payload(s).
{
"tool": "decode_image",
"args": {
"image_path": "./receipt.png"
}
}scan_and_identify
toolEnd-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.