labelixa-mcp
OfficialLabelixa MCP lets you work with thermal label code through rendering, validation, barcode generation, language detection, ZPL compatibility/help/DPI conversion, and health reporting.
Render ZPL label code to PNG for inspection (
zpl_preview) — server-side render, not a physical-print guarantee.Lint/validate ZPL, EPL/EPL2, TSPL/TSPL2, and CPCL code with structured diagnostics (
zpl_validate,epl_validate,tspl_validate,cpcl_validate).Generate standalone barcodes as SVG or PNG for types including code128, code39, ean13, upca, upce, itf14, msi, qrcode, datamatrix, and pdf417 (
barcode_generate).Detect whether raw label code is ZPL, EPL, TSPL, or CPCL, with a confidence tier (
language_detect).Analyze ZPL compatibility risk against a printer model (
zpl_compatibility).Look up ZPL command catalog details, syntax, parameters, and whether the preview engine renders it (
zpl_command_help).Rescale ZPL coordinates between 203/300/600 dpi, warning when embedded bitmaps are not rescaled (
convert_zpl_dpi).Produce a sectioned ZPL health report with a 0–100 score (
explain_zpl).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@labelixa-mcpValidate this ZPL label and show any errors"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
labelixa-mcp
Labelixa is an MCP (Model Context Protocol) server and API platform for thermal label development. It gives AI assistants and developer tools the ability to render, validate, debug, inspect and convert thermal printer labels — ZPL, EPL, TSPL and CPCL — through MCP.
There are two ways to connect:
Remote server (recommended) | This npm package | |
Endpoint |
| local process over stdio |
Tool set | full set: rendering, validation, debugging, conversion, barcode analysis, printer compatibility, templates, bulk jobs | core subset (table below); each tool calls the Labelixa REST API |
Install | nothing to install |
|
Authentication | optional | optional |
The live tool list of the remote server is at labelixa.com/mcp.
Remote server (no install)
Transport: Streamable HTTP, stateless JSON-RPC over POST. Anonymous use is free and rate-limited per IP; an API key uses the account's own quota. Keys: labelixa.com.
Claude Code:
claude mcp add --transport http labelixa https://api.labelixa.com/mcpWith an API key:
claude mcp add --transport http labelixa https://api.labelixa.com/mcp \
--header "Authorization: Bearer lbx_..."Generic MCP client configuration (Claude Desktop, Cursor and other
clients that accept a url entry):
{
"mcpServers": {
"labelixa": {
"url": "https://api.labelixa.com/mcp",
"headers": {"Authorization": "Bearer lbx_..."}
}
}
}Drop the headers block for anonymous use.
Related MCP server: barcode-mcp
Local server (this package)
npm install -g labelixa-mcpOr skip installing and run it with npx straight from your MCP client
config:
{
"mcpServers": {
"labelixa": {
"command": "npx",
"args": ["-y", "labelixa-mcp"],
"env": {"LABELIXA_API_KEY": "lbx_..."}
}
}
}Environment variables:
LABELIXA_API_KEY— optionallbx_API key. Without it the anonymous quota applies.LABELIXA_BASE_URL— optional; defaults tohttps://api.labelixa.com.
Requests never follow redirects, so a server cannot forward your key to
another host. Numeric inputs are checked before a request is made: dpmm
is 6, 8, 12 or 24, label sides are finite, above 0 and at most 15 inches,
and DPI values are 152, 203, 300 or 600.
Tools in this package
Tool | What it does |
| Renders ZPL to a PNG image for inspection. Server-side render — not a guarantee of how a specific physical printer will output the label. |
| Lints ZPL and returns the structured diagnostics report (unknown commands, parameter ranges, layout overflow) as JSON. Pass the real label size — checks depend on it. |
| Generates a standalone barcode (SVG or PNG): code128, code39, ean13, upca, upce, itf14, msi, qrcode, datamatrix, pdf417. |
| Detects the printer language of raw label code (ZPL/EPL/TSPL/CPCL). Heuristic — returns a confidence tier, not a probability. |
| Lints EPL/EPL2 code; positioned findings with severity, as JSON. |
| Lints TSPL/TSPL2 code; positioned findings with severity, as JSON. |
| Lints CPCL code; positioned findings with severity, as JSON. |
| Compatibility RISK analysis of ZPL against a printer model. Not an emulator — reports language posture with evidence level; never says "it works". |
| Looks up one ZPL command in the maintained catalog: name, syntax, parameters and whether the preview engine actually renders it — printer-side commands are marked as not rendered. Optional |
| Rescales ZPL coordinates between printer resolutions (203/300/600 dpi). Embedded |
| Full sectioned health report (syntax, size/DPI, orientation, barcodes, fonts, memory) with an honest score — sections it cannot assess say "not assessed" instead of counting. |
EPL, TSPL and CPCL previews, label templates, bulk generation,
image-to-ZPL conversion, SBPL / DPL / IPL to ZPL conversion
(printer_language_to_zpl) and barcode reading from photos are on the
remote server only.
Directory listings
Official MCP Registry:
com.labelixa/zpl(remote server + this npm package).Smithery:
labelixa/zpl. Smithery routes calls through its own gateway; the canonical endpoint ishttps://api.labelixa.com/mcp.
Honesty notes
Errors carry the server's own message verbatim; quota exhaustion is reported with the server's
Retry-Afterrather than a made-up delay.zpl_previewis a render, not a print: physical output depends on the printer, media and darkness settings.
Source of this package: github.com/Labelixa/labelixa-mcp. Docs: labelixa.com/docs/api. License: MIT.
Available Tools
11 toolsbarcode_generateAInspect
Generate a standalone barcode (SVG text or PNG image). Supported types include code128, code39, ean13, upca, upce, itf14, msi, qrcode, datamatrix, pdf417.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Data to encode | |
| type | Yes | Barcode type, e.g. code128 | |
| format | No | svg |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It does add real behavioral signal with "standalone" plus "SVG text or PNG image," implying the artifact is returned inline rather than written to disk or embedded in a ZPL job. It says nothing about errors for invalid data/type combinations, size limits, or encoding constraints, which matter because barcode types have strict data-length rules.
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 output forms, with the supported-type list appended as scannable detail. Nothing is redundant and nothing wastes space.
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 three-parameter tool with no annotations and no output schema, the definition should say more about what comes back — an SVG string versus base64/binary PNG — and about failure modes. As written it is adequate to call correctly but leaves the return shape to inference.
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 covers 67% of parameters and leaves the `format` enum undocumented; the description compensates by explaining that output is "SVG text or PNG image," giving each enum value concrete meaning. The full list of supported `type` values likewise extends beyond the schema's terse "Barcode type, e.g. code128." Only per-type data constraints remain unaddressed.
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 ("Generate a standalone barcode") and enumerates the supported symbologies, so an agent knows exactly what it produces. It does not explicitly distinguish itself from the ZPL-validation siblings, but those are clearly a different operation, so confusion risk is low.
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?
Usage is only implied: an agent can infer this is the tool for rendering a barcode when a label preview/validation sibling is not what you want. There is no explicit "use this when..." statement nor any named alternative or precondition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_zpl_dpiAInspect
Rescale ZPL coordinates between printer resolutions (203/300/600 dpi). Embedded ^GF/~DG bitmap data is NOT rescaled — when present, a Warnings block precedes the output instead of silently passing.
| Name | Required | Description | Default |
|---|---|---|---|
| zpl | Yes | Raw ZPL code to convert | |
| source | No | Source resolution in dpi (152, 203, 300 or 600) | |
| target | No | Target resolution in dpi (152, 203, 300 or 600) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden, and it does disclose the most important trait: embedded ^GF/~DG bitmaps are NOT rescaled and a Warnings block is emitted rather than silently passing. That is genuine, non-obvious behavioral context. It stops short of covering error behavior on invalid ZPL or the output shape.
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, no waste, with the core operation front-loaded and the caveat immediately after. 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 3-param transform tool with no output schema, the description tells the agent what is transformed, what is left alone, and that a Warnings block may precede output. Error/failure behavior and the return type are the only notable gaps.
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 zpl/source/target and their defaults are already documented. The description adds the resolution set (203/300/600) but actually omits 152, which the schema lists, so it adds little and is slightly narrower than 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?
States a specific verb and resource (rescale ZPL coordinates) plus the dimension being scaled (printer resolution), which no sibling tool covers. It never names an alternative, but the purpose is unmistakable and non-overlapping with zpl_validate/zpl_preview.
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?
Usage is implied by the purpose — you call it when moving a label between 203/300/600 dpi printers. There is no explicit when-to-use/when-not guidance, no instruction to validate with zpl_validate first, and no note about what happens if source equals target or the source is mis-declared.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cpcl_validateAInspect
Lint/validate CPCL label code and return the structured diagnostics report (findings with positions and severity) as JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| cpcl | Yes | Raw CPCL code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does disclose the important behavioral trait: the return is a structured diagnostics report with positions and severity, in JSON. 'Lint/validate' implies a non-mutating check with no side effects on the input, though the description does not say so explicitly or cover limits on input size.
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?
A single sentence with the action front-loaded, followed immediately by what is returned. No filler, no restatement of the tool name.
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 tool is simple (one required string parameter), and since no output schema exists, the description usefully compensates by describing the return shape (findings with positions and severity, JSON). An agent has everything needed to call it and interpret the result.
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?
There is a single parameter at 100% schema description coverage ("Raw CPCL code"), so the schema already covers it and baseline 3 applies. The description's phrase "CPCL label code" adds no format, encoding, or size guidance 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 pair ("Lint/validate") and resource ("CPCL label code"), which cleanly separates it from the zpl_validate, epl_validate, and tspl_validate siblings by language. It stops short of explicitly routing callers who don't yet know the label language (e.g., toward language_detect), so it falls just short of a 5.
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?
Usage is only implied: the tool is for checking CPCL code. There is no statement of when to prefer it over siblings, no mention of what to do with the diagnostics (e.g., fix-and-revalidate), and no exclusion or prerequisite guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
epl_validateAInspect
Lint/validate EPL/EPL2 label code and return the structured diagnostics report (findings with positions and severity) as JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| epl | Yes | Raw EPL/EPL2 code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does useful work by disclosing the return shape (findings with positions and severity, as JSON) and implying a non-mutating check, but it says nothing about what happens with clean code, whether diagnostics above a severity are surfaced as errors, or any size limits.
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?
A single front-loaded sentence with no wasted words; the verb, resource, and return contract all land in one pass.
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 one-parameter, non-mutating lint tool with no output schema, the description covers purpose and return shape adequately. The only real gap is edge-case behavior for valid input and error signaling, which is minor at this complexity.
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?
One required parameter at 100% schema coverage, so the schema already documents it. The description adds only a mild clarification that both EPL and EPL2 are accepted; no format examples or constraints beyond the schema's minLength 1.
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 (lint/validate) plus the resource (EPL/EPL2 label code) and the result shape (structured diagnostics report). The language naming implicitly separates it from zpl_validate, tspl_validate and cpcl_validate, but no sibling is named 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?
Usage is only implied by the EPL/EPL2 scope in the description; there is no explicit 'use this when' or 'use zpl_validate instead' routing. An agent must infer the choice from the language name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_zplAInspect
Human-readable health REPORT for a finished ZPL label with a 0-100 score, sectioned (syntax, size/DPI, orientation, barcodes, fonts, memory): only assessable sections count, the rest say 'not assessed'. Use it to review or explain a label to a person; for a quick pass/fail check while editing use zpl_validate. Pass the real label size — findings depend on it.
| Name | Required | Description | Default |
|---|---|---|---|
| zpl | Yes | Raw ZPL code | |
| dpmm | No | Printer density in dots per mm (6, 8, 12 or 24) | |
| model | No | Optional printer model as manufacturer/model (e.g. zebra/zd421) to add a model-compatibility section | |
| width_in | No | Label width in inches (at most 15) | |
| height_in | No | Label height in inches (at most 15) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and does well by explaining the report structure, scoring, and the 'not assessed' behavior for non-assessable sections. It implies a read-only review operation but does not explicitly state side effects, permissions, or error 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 front-loaded with the report purpose and scoring, then routes between this tool and zpl_validate, then adds the key size caveat. Every sentence contributes useful information without waste.
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 the description appropriately explains the return format as a sectioned 0-100 health report and notes that only assessable sections are counted. Given full schema coverage and the sibling alternative named, an agent has enough context to call this tool 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?
Schema coverage is 100%, so the schema already documents all five parameters. The description adds meaningful semantic emphasis by warning that the real label size must be passed because findings depend on 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 output, a human-readable health report for a finished ZPL label, including the 0-100 score and the sections it covers. It clearly distinguishes this from zpl_validate by positioning zpl_validate for quick pass/fail checks while editing.
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 explicitly says to use this tool to review or explain a label to a person and names zpl_validate as the alternative for quick pass/fail validation. It also tells the caller to pass the real label size because findings depend on it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
language_detectAInspect
Detect which printer language raw label code is written in (ZPL, EPL, TSPL or CPCL). Heuristic: returns the language plus a confidence TIER (high/medium/low) and signal codes — not a probability.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Raw label code to classify |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does meaningful work: it discloses the method is a 'Heuristic' and explicitly warns that the result is a confidence TIER plus signal codes, 'not a probability' — setting correct expectations about reliability. It stops short of stating determinism, whether empty/garbage input errors, or performance characteristics.
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 dense sentences with zero filler: the purpose and the candidate set come first, the return-shape caveat second. Every clause carries information the agent needs.
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 one-parameter, no-annotation tool with no output schema, the description covers the essential ground by explaining the return shape (language + tier + signal codes) and the heuristic nature. Only the routing guidance to the sibling validators 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?
One parameter with 100% schema description coverage ('Raw label code to classify'), so the schema already documents it fully. The description adds nothing about input format, size limits, or how mixed-language code is handled, 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 ('Detect') and resource ('which printer language raw label code is written in') and enumerates the candidate languages (ZPL, EPL, TSPL, CPCL), so the agent knows exactly what comes back. It never names the sibling validators (zpl_validate, epl_validate, etc.) or positions itself relative to them, so sibling differentiation is only inferable.
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 is purely definitional: no statement of when to call this versus the four *_validate tools, no prerequisites, and no guidance on what to do with a 'low' tier result. An agent must infer the triage role from the sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tspl_validateAInspect
Lint/validate TSPL/TSPL2 label code and return the structured diagnostics report (findings with positions and severity) as JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| tspl | Yes | Raw TSPL/TSPL2 code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does disclose the return shape (findings with positions and severity, JSON), which usefully signals a non-destructive lint operation, but it says nothing about whether any code is modified, error vs warning handling, or limits on input size.
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?
One sentence, front-loaded with the action and ending with the return contract. Nothing redundant or padded.
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 one-parameter lint tool with no annotations and no output schema, the description covers what it does and what comes back well enough to invoke it correctly. Minor gaps remain around whether it is purely read-only and how severe findings are represented.
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?
Single parameter with 100% schema description coverage ('Raw TSPL/TSPL2 code'), so the schema already does the work. The description only reinforces that the input is TSPL/TSPL2 source; it adds no format, encoding, or size guidance 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?
States a specific verb (lint/validate) and resource (TSPL/TSPL2 label code), plus what it returns (structured diagnostics with positions and severity). The language naming implicitly separates it from epl_validate, cpcl_validate and zpl_validate, but it never explicitly says 'use the other validator for other languages'.
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?
Usage is implied by the verb 'validate' — an agent can infer it is called before printing or after generating TSPL. There is no explicit when-to-use, no preconditions, and no mention of the sibling validators as alternatives for other languages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zpl_command_helpAInspect
Look up one ZPL command in the maintained catalog: name, syntax, parameters (types, ranges, defaults) and whether the preview engine actually renders it — printer-side commands are honestly marked as not rendered.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language for the name and descriptions (default English). Command codes, syntax strings, examples and parameter names are protocol and never change. | |
| command | Yes | Command code with or without prefix, e.g. ^PO, BC, ~DG |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full load. It does disclose two real behavioral facts: the catalog is curated/maintained (so results are authoritative) and the tool reports whether the preview engine actually renders a command, flagging printer-side commands as not rendered. It says nothing about not-found behavior, completeness guarantees, or response shape beyond the field list.
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?
A single sentence, front-loaded with the action and resource, that packs the return contents and one important caveat without a wasted clause. Nothing is repeated from the name or schema.
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?
With no output schema, the description usefully substitutes by naming the returned fields (name, syntax, parameters with types/ranges/defaults, render status), which is exactly what an agent needs to interpret results. The gaps are minor: unknown-command behavior and whether lookups are exact-match only are unstated.
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 both parameters are documented in the schema, including the locale enum and the example command formats, so the baseline of 3 applies. The description adds no meaning beyond that — notably it never mentions the locale parameter or the accepted command-prefix forms.
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?
Names a specific verb and resource ("look up one ZPL command in the maintained catalog") and enumerates what the result contains: name, syntax, parameter types/ranges/defaults, and render support. That is far more informative than a tautology. It stops short of explicitly distinguishing itself from the closest sibling, explain_zpl, which an agent would have to reason about on its own.
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?
Usage is implied by "look up one ZPL command" — a reference lookup for a single command — but the description never says when to choose it over explain_zpl, zpl_validate, or zpl_compatibility, nor when not to. A reader can infer the catalog-lookup case but gets no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zpl_compatibilityAInspect
Compatibility RISK analysis of ZPL code against a specific printer model, given as manufacturer/model (e.g. 'zebra/zd421'). NOT an emulator and never says 'it works': reports the model's language posture with evidence level, size-rule findings and the scope of our preview.
| Name | Required | Description | Default |
|---|---|---|---|
| zpl | Yes | Raw ZPL code | |
| model | Yes | Printer model as manufacturer/model, e.g. zebra/zd421 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden and does well: it discloses the epistemic posture ('never says it works'), the evidence-level reporting, the size-rule findings, and the preview scope. It doesn't cover determinism, cost, or whether the analysis is static vs simulated beyond the emulator disclaimer, leaving a small gap.
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?
Purpose is front-loaded in the first clause with the model-format hint immediately after, and the negative framing follows as a guardrail. Dense but essentially waste-free; slightly overpacked into long clauses.
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?
With two fully documented params, no output schema, and no annotations, an agent needs to know what comes back and what the result does not claim — the description covers both (language posture with evidence level, size-rule findings, preview scope, no 'it works' verdict). Minor gaps remain around output shape and whether unsupported models produce an error.
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% and both parameters are already documented, including the manufacturer/model example. The description repeats the 'manufacturer/model (e.g. zebra/zd421)' format rather than adding new semantics, 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+resource ('Compatibility RISK analysis of ZPL code against a specific printer model') with the exact input format expected. It also pre-emptively separates itself from the emulation/preview siblings by saying 'NOT an emulator' and referencing 'the scope of our preview', so an agent can distinguish it from zpl_preview and zpl_validate without opening a schema.
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?
Clear about the context of use (risk assessment for a given model, not a pass/fail guarantee) and explicitly excludes the emulator interpretation, which is the most likely misread against zpl_preview. It stops short of naming siblings like zpl_validate or stating when to prefer those, so it isn't full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zpl_previewAInspect
Render ZPL label code to a PNG image via the Labelixa API. This is a SERVER-SIDE render for inspection — it is not a guarantee of how a specific physical printer will output the label.
| Name | Required | Description | Default |
|---|---|---|---|
| zpl | Yes | Raw ZPL code (^XA ... ^XZ) | |
| dpmm | No | Printer density in dots per mm (6, 8, 12 or 24) | |
| index | No | Which label to render when the stream contains several | |
| width_in | No | Label width in inches (at most 15) | |
| height_in | No | Label height in inches (at most 15) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and adds a genuinely valuable behavioral caveat: this is server-side rendering and does not guarantee physical printer output. It does not cover auth requirements, rate limits, or how the resulting PNG is delivered, which keeps it below a 5.
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 tight sentences with the core action front-loaded and the caveat immediately following. Nothing is wasted or redundant.
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 description names the output format (PNG), which is important since no output schema exists. It leaves open how the image is returned (URL vs. binary/base64) and whether multi-label streams yield multiple images, a minor but real gap.
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% and every parameter (zpl, dpmm, index, width_in, height_in) is documented inline, so the baseline of 3 applies. The description adds no syntax or semantic detail 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?
States a specific verb and resource ("Render ZPL label code to a PNG image") and names the underlying service, so the agent knows exactly what it produces. It does not explicitly contrast with siblings like zpl_validate, but the render-vs-validate distinction is inferable from the verb.
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 phrase "for inspection" implies a visualization use case, but there is no explicit when-to-use guidance or routing to alternatives such as zpl_validate (to check syntax) or zpl_compatibility. The agent must infer the workflow position.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zpl_validateAInspect
Pass/fail lint for ZPL: machine-readable diagnostics with line/column, code and severity (unknown commands, parameter range errors, layout overflow). Fast; run it before zpl_preview whenever you generate or edit ZPL. For a human-readable report with a score use explain_zpl instead. Pass the real label size — checks depend on it.
| Name | Required | Description | Default |
|---|---|---|---|
| zpl | Yes | Raw ZPL code | |
| dpmm | No | Printer density in dots per mm (6, 8, 12 or 24) | |
| width_in | No | Label width in inches (at most 15) | |
| height_in | No | Label height in inches (at most 15) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses machine-readable diagnostics, line/column, code, severity, the error categories checked, speed, and the dependency on real label dimensions. It does not explicitly say the tool is read-only or describe failure behavior, but 'lint' and 'pass/fail' make the safety profile clear enough for a validator.
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 front-loaded and compact. Each sentence adds a distinct piece of value: purpose and outputs, usage sequencing, sibling alternative, and parameter importance.
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 four-parameter validator with no output schema and no annotations, the definition supplies the key missing context: diagnostic structure, failure categories, when to call it, when not to call it, and the importance of correct label dimensions. Nothing essential for correct invocation 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?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful rationale beyond the schema: 'Pass the real label size — checks depend on it,' explaining why the width/height/density parameters matter rather than merely restating their defaults.
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: 'Pass/fail lint for ZPL.' It also names the diagnostic categories and distinguishes the tool from zpl_preview and explain_zpl, so an agent can select it without opening the schema.
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 gives explicit sequencing guidance ('run it before zpl_preview whenever you generate or edit ZPL') and an explicit alternative ('For a human-readable report with a score use explain_zpl instead'). This is a strong routing definition.
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.
11 tool updates
v0.5.2- Changed
barcode_generate1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
convert_zpl_dpi5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / source / maximumAdded value: +9007199254740991 - added
Input schema / properties / source / minimumAdded value: +-9007199254740991 - added
Input schema / properties / target / maximumAdded value: +9007199254740991 - added
Input schema / properties / target / minimumAdded value: +-9007199254740991
- Changed
cpcl_validate1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
epl_validate1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
explain_zpl3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dpmm / maximumAdded value: +9007199254740991 - added
Input schema / properties / dpmm / minimumAdded value: +-9007199254740991
- Changed
language_detect1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
tspl_validate1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
zpl_command_help1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
zpl_compatibility1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
zpl_preview3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dpmm / maximumAdded value: +9007199254740991 - added
Input schema / properties / dpmm / minimumAdded value: +-9007199254740991
- Changed
zpl_validate3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dpmm / maximumAdded value: +9007199254740991 - added
Input schema / properties / dpmm / minimumAdded value: +-9007199254740991
3 tool updates
v0.4.2- Changed
explain_zpl6 fields changed- removed
Input schema / properties / dpmm / maximumRemoved value: -24 - removed
Input schema / properties / dpmm / minimumRemoved value: -6 - changed
Input schema / properties / height_in / descriptionPrevious value: -"Label height in inches"New value: +"Label height in inches (at most 15)" - added
Input schema / properties / height_in / maximumAdded value: +15 - changed
Input schema / properties / width_in / descriptionPrevious value: -"Label width in inches"New value: +"Label width in inches (at most 15)" - added
Input schema / properties / width_in / maximumAdded value: +15
- Changed
zpl_preview7 fields changed- removed
Input schema / properties / dpmm / maximumRemoved value: -24 - removed
Input schema / properties / dpmm / minimumRemoved value: -6 - changed
Input schema / properties / height_in / descriptionPrevious value: -"Label height in inches"New value: +"Label height in inches (at most 15)" - added
Input schema / properties / height_in / maximumAdded value: +15 - added
Input schema / properties / index / maximumAdded value: +10000 - changed
Input schema / properties / width_in / descriptionPrevious value: -"Label width in inches"New value: +"Label width in inches (at most 15)" - added
Input schema / properties / width_in / maximumAdded value: +15
- Changed
zpl_validate6 fields changed- removed
Input schema / properties / dpmm / maximumRemoved value: -24 - removed
Input schema / properties / dpmm / minimumRemoved value: -6 - changed
Input schema / properties / height_in / descriptionPrevious value: -"Label height in inches"New value: +"Label height in inches (at most 15)" - added
Input schema / properties / height_in / maximumAdded value: +15 - changed
Input schema / properties / width_in / descriptionPrevious value: -"Label width in inches"New value: +"Label width in inches (at most 15)" - added
Input schema / properties / width_in / maximumAdded value: +15
1 tool update
v0.1.1- Changed
zpl_command_help1 field changed- added
Input schema / properties / localeAdded value: +{ + "description": "Language for the name and descriptions (default English). Command codes, syntax strings, examples and parameter names are protocol and never change.", + "enum": [ + "en", + "tr", + "de" + ], + "type": "string" +}
11 tool updates
v0.1.0- First observed
barcode_generate - First observed
convert_zpl_dpi - First observed
cpcl_validate - First observed
epl_validate - First observed
explain_zpl - First observed
language_detect - First observed
tspl_validate - First observed
zpl_command_help - First observed
zpl_compatibility - First observed
zpl_preview - First observed
zpl_validate
TDQS
Scored across 11 tools
Most tools target clearly distinct actions/resources: preview, validate, explain, compatibility, command help, DPI conversion, barcode generation, and language detection. The main overlap is between zpl_validate and explain_zpl, but descriptions explicitly distinguish a fast pass/fail lint from a human-readable scored report. The parallel epl/tspl/cpcl validators are unambiguous because of their language prefixes.
The vocabulary is readable and mostly snake_case, but ordering conventions vary: zpl_validate (prefix_action), convert_zpl_dpi (verb_object_detail), language_detect and barcode_generate (noun_verb), and zpl_command_help (prefix_noun_noun). The language-prefixed validators are consistent with each other, but the set as a whole mixes patterns.
Eleven tools is well-scoped for a label-code validation/rendering utility. Each tool covers a distinct operation: rendering, validation, explanation, compatibility, lookup, conversion, detection, and barcode generation. No tool appears redundant or gratuitous.
ZPL workflows are well covered end-to-end: preview, lint, explain, compatibility, command lookup, DPI conversion, and barcode generation. EPL, TSPL, and CPCL are only supported for validation, with no preview/explain equivalents, and there is no cross-language conversion or label-generation tool. These are notable but workable gaps for the stated purpose.
Maintenance
Related MCP Connectors
Turn your product list into print-ready label PDFs with barcodes, from your AI assistant.
Manage Zineps shipments, labels, orders, invoices, and partner operations with AI assistants.
Generate barcodes and QR codes in 35 symbologies: QR, Data Matrix, PDF417, EAN-13, Code 128, more.
Decode, render, validate barcodes: QR, DataMatrix, EAN, UPC, PDF417. All tools free, no auth.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables AI assistants to decode QR codes from images, with tools for scanning full images and enhancing blurry or reflective regions before decoding, plus quality diagnostics to guide retry strategies.3MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to decode and render barcodes/QR codes and validate GTINs via the Model Context Protocol, with both hosted and self-hosted deployment options.-
- AlicenseNot gradedqualityAmaintenanceEnables AI clients to prepare and preview labels, then safely submit physical print jobs to an Xprinter XP-330B through local stdio or authenticated remote access, with status, cancellation, and retry receipts.MIT
- AlicenseAqualityAmaintenanceEnables AI assistants to capture screenshots and PDFs, read web pages as Markdown, preview links, look up DNS/SSL/WHOIS and email records, verify addresses, generate QR codes, barcodes and social images, convert images, and translate text.1923 npmMIT