labelixa-mcp
OfficialSummary: labelixa-mcp renders, validates, debugs, and converts thermal-printer label code (ZPL, EPL, TSPL, CPCL) through 11 tools in this local package.
Render ZPL to a PNG image for visual inspection (
zpl_preview), choosing density (6/8/12/24 dpmm), label size, and which label in a multi-label stream.Validate/lint label code and get structured JSON diagnostics with positions and severity —
zpl_validate,epl_validate,tspl_validate,cpcl_validate(unknown commands, parameter ranges, layout overflow).Generate standalone barcodes as SVG or PNG: code128, code39, ean13, upca, upce, itf14, msi, qrcode, datamatrix, pdf417 (
barcode_generate).Detect the printer language of raw code (ZPL/EPL/TSPL/CPCL) with a confidence tier, not a probability (
language_detect).Assess printer compatibility risk for ZPL against a model like
zebra/zd421— language posture, size-rule findings, preview scope; never claims "it works" (zpl_compatibility).Look up ZPL commands in a catalog: name, syntax, parameters, render support; optional locale en/tr/de (
zpl_command_help).Rescale ZPL between DPIs (203/300/600) with warnings for unrescaled embedded
^GF/~DGbitmaps (convert_zpl_dpi).Get a full ZPL health report (syntax, size/DPI, orientation, barcodes, fonts, memory) with an honest score (
explain_zpl).Note: EPL/TSPL/CPCL previews, templates, bulk generation, image-to-ZPL and barcode reading are remote-server-only;
zpl_previewis a render, not a print guarantee.
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 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?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions output formats (SVG/PNG) but omits critical behavior such as data validation constraints (e.g., EAN-13 requires specific digit lengths), error handling, whether the tool is synchronous, or any side effects. The absence of such information leaves the agent underinformed about potential failures or limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that leads with the core action and output, followed by the supported types. There is no superfluous content, and the information is front-loaded, making it easy for an agent to quickly understand the tool's purpose and capabilities.
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 tool with 3 parameters, no output schema, and no annotations, the description covers the primary purpose and output format but lacks details on data constraints per barcode type, return value specifics, and error behavior. While an agent can infer basic usage, the absence of these details makes the tool only minimally complete for reliable invocation.
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 67% (data and type have descriptions, format does not). The description adds value by listing all supported barcode types, which goes beyond the type parameter's generic example, and by clarifying the 'format' parameter with 'SVG text or PNG image'. This compensates for the missing format description and provides essential context for parameter selection.
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 clearly states the tool's function: 'Generate a standalone barcode' with explicit output formats (SVG text or PNG image) and a comprehensive list of supported barcode types. This verb+resource combination makes the tool's purpose unambiguous and distinct from the sibling tools, which are all focused on label language validation and preview rather than barcode generation.
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?
No guidance is provided on when to use this tool versus alternatives. The description does not mention any conditions, exclusions, or references to sibling tools (like validation or preview tools). An agent must infer that this tool is for generating standalone barcodes, but there is no explicit 'use when' or 'instead of' directive.
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 provided, the description carries the full behavioral burden. It discloses the critical non-obvious behavior that embedded ^GF/~DG bitmap data is NOT rescaled and that a Warnings block is emitted instead of silent passing. It does not fully specify the output structure, but it covers the most important behavioral edge case.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core action is front-loaded, and the critical caveat about bitmap data follows immediately with a clear behavioral consequence.
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 stateless conversion tool, the description is nearly complete: it states the conversion purpose and the important warning behavior. The only gap is that it doesn't explicitly state the returned value is the converted ZPL string, but that is strongly implied by 'output' and the conversion context.
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 documentation coverage is 100%, so the baseline is 3; the description adds no additional parameter semantics beyond what the schema already states. The dpi values listed in the description overlap with the schema's allowed values, though it omits 152 dpi, which is minor.
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 names a specific verb ('Rescale') and resource ('ZPL coordinates between printer resolutions'), immediately distinguishing it from sibling validation and preview tools. The mention of 203/300/600 dpi, plus the bitmap-data caveat, makes the tool's scope precise.
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 clearly implies when to use the tool: when ZPL coordinates need conversion between printer resolutions. It doesn't explicitly list when not to use it or name alternative tools, but the context is unambiguous enough for an agent to select it correctly among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cpcl_validateBInspect
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 are provided, so the description carries the full burden of behavioral disclosure. While it mentions 'lint/validate' and 'return the structured diagnostics report (findings with positions and severity) as JSON', it does not explain what happens on invalid input (e.g., error messages, exit codes), whether it mutates anything (it shouldn't, but it's not stated), or if there are any side effects. For a read-only validation tool, the lack of explicit non-destructive confirmation is a 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?
The description is a single, complete sentence that is front-loaded with the core action ('Lint/validate CPCL label code') and then details the output. It has no filler words and every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single parameter and no output schema, the description covers the main purpose and return type. However, it lacks important context such as example input/output, error handling, or limitations. Given the simplicity, it is adequate but not exhaustive.
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 describes the parameter ('cpcl') with a description 'Raw CPCL code'. The tool description adds the context that this code is 'label code' to be validated, but it doesn't add syntax or format details (e.g., encoding, maximum length). Since schema coverage is 100%, the baseline is 3, and the description adds only marginal value by clarifying the purpose of the parameter.
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 clearly states what the tool does: 'Lint/validate CPCL label code' and specifies the resource (CPCL label code). It distinguishes itself from siblings like zpl_validate by explicitly focusing on CPCL, which is a different label language. The verb 'Lint/validate' is specific and action-oriented.
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 does not provide any guidance on when to use this tool versus alternatives. It doesn't mention scenarios where CPCL validation is preferred over other validation tools (e.g., zpl_validate, epl_validate, tspl_validate). There are no explicit exclusions or conditions, leaving the agent to infer usage from the language name.
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 provided, the description carries the full burden and discloses the core behavior: it returns a structured diagnostic report with findings, positions, and severity as JSON. This goes beyond merely restating the tool name and informs the agent of the return format, though it does not explicitly address side effects 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 a single sentence with no filler, front-loading the action and resource and immediately stating the output format. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter lint/validate tool with a fully documented input and no output schema, the description is complete: it names the input, the operation, and the structured JSON output. An agent has enough information to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the single parameter ('Raw EPL/EPL2 code') with 100% coverage, so the description does not need to add much. The description does not repeat or add parameter details, but the schema already provides sufficient meaning.
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 uses a specific verb pair ('Lint/validate') and clearly identifies the resource ('EPL/EPL2 label code') and the deliverable (a structured diagnostics report as JSON). It differentiates from sibling tools like zpl_validate and tspl_validate by naming the exact language family.
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 clearly establishes the context for use: validating EPL/EPL2 label code and receiving structured diagnostics. It does not explicitly name alternatives, but the language-specific resource makes the appropriate selection unambiguous.
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 full burden and does disclose meaningful behavior: the report is sectioned, only assessable sections count, and unassessable ones say 'not assessed'. It also explains that findings depend on the supplied label size. It stops short of covering auth, side effects, or rate limits, but for an analysis/report tool the core behavioral traits are well communicated.
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 definition is front-loaded with the key purpose and score, then routes to the alternative, then adds the important parameter caveat. It is dense but every sentence carries useful information, though the parenthetical section list makes it slightly packed.
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 usefully explains the return shape: a sectioned health report with a 0-100 score and explicit 'not assessed' sections. Combined with the parameter guidance, it is complete enough for correct invocation, with only minor gaps around edge cases such as invalid ZPL.
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 already 100%, so the baseline is 3, but the description adds operational meaning beyond the schema by stressing that the real label size must be passed because findings depend on it. The mention of optional model-driven compatibility is already in the schema, but the emphasis on size parameters is useful guidance.
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: a human-readable health report for a finished ZPL label with a 0-100 score and named sections. It explicitly distinguishes itself from the sibling zpl_validate by contrasting review/explanation with a quick pass/fail check.
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 an explicit use case (review or explain a label to a person) and names the alternative tool for the adjacent use case (zpl_validate for quick pass/fail while editing). It also adds a concrete prerequisite: 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 provided, the description carries the full burden. It discloses that the tool is heuristic, returns a confidence tier (high/medium/low) and signal codes, and explicitly states it does not return a probability. This gives the agent important expectations about output quality and format, though it doesn't elaborate on error handling or edge cases.
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 concise, with the core purpose front-loaded in the first sentence and a supplementary detail in the second. There is no fluff, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description appropriately explains the return structure (language, confidence tier, signal codes) and clarifies the heuristic nature. It covers the essential information an agent needs to interpret results, though it could mention how to handle ambiguous inputs or what signal codes mean in practice.
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% since the single parameter 'code' is well-documented as 'Raw label code to classify'. The description adds no additional meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: detecting the printer language (ZPL, EPL, TSPL, CPCL) from raw label code. It uses a specific verb ('detect') and enumerates the exact resource types, which distinguishes it from language-specific validators like zpl_validate or epl_validate.
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 implies the use case: when you need to identify the language of raw label code. However, it does not explicitly mention alternatives or provide conditions for when to use this tool versus the sibling validation/preview tools. The guidance is implied rather than explicit.
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 must carry the behavioral disclosure burden. It does state that the tool returns a structured diagnostics report as JSON, which is a useful behavioral detail. However, it does not disclose side effects (e.g., read-only, no modification) or error handling behavior, leaving some uncertainty for a mutation-averse agent.
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 that front-loads the purpose and immediately states the output format. No filler, no redundancy. It earns its place efficiently.
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 simple single-parameter validator, the description covers the input (TSPL/TSPL2 code) and the output (structured JSON report with positions and severity). It does not describe edge cases or failure modes, but those are minor for a lint tool. The description is adequate for an agent to invoke the 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?
The schema covers the single parameter fully (100% coverage) with a description ('Raw TSPL/TSPL2 code') that matches the tool description. The description adds no additional meaning beyond the schema; it only repeats the language type. Baseline of 3 applies because schema already documents the parameter adequately.
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 clearly states a specific verb ('Lint/validate') and resource ('TSPL/TSPL2 label code'), and specifies the output as a structured JSON diagnostics report. It differentiates from sibling validators (zpl_validate, epl_validate, cpcl_validate) by naming the target language explicitly, so an agent can select it without confusion.
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 implies it is for TSPL/TSPL2 code but does not explicitly state when to use this tool versus alternatives (e.g., 'use zpl_validate for ZPL'). There are no exclusions or conditions, so usage context is implied rather than explicit.
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?
With no annotations present, the description carries the full transparency burden. It does more than describe the action by revealing a behavioral nuance: preview-engine render support is reported honestly, and printer-side commands are explicitly marked as not rendered. It does not cover edge behavior like unknown command codes, but it offers meaningful context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that starts with the action and resource, then packs the returned fields and the rendering caveat into a colon-separated list. There is no filler or redundancy.
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?
No output schema exists, so it is important that the description summarizes the returned data: name, syntax, parameter types/ranges/defaults, and renderability. It provides enough context for a straightforward lookup tool, though exact output formatting and error behavior are not described.
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 schema already documents the command code format and locale semantics. The description only says it returns parameter metadata and does not add new meaning to the tool's own input parameters.
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 opens with a specific action ('Look up one ZPL command') and a clear resource ('maintained catalog'), then enumerates the returned content. It does not explicitly distinguish itself from the similar-looking explain_zpl sibling, so it misses the highest bar for sibling differentiation.
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 'Look up one ZPL command' implies the intended use case, but there is no explicit statement of when to prefer this over siblings such as explain_zpl, zpl_validate, or zpl_preview. No exclusion or conditional guidance is provided, so usage is only implied.
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?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently states what the tool reports (language posture, evidence level, size-rule findings, scope of preview) and what it never claims ('it works'). This gives the agent a clear understanding of the tool's output and limitations, which is more than most descriptions provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero fluff. It front-loads the purpose and immediately disambiguates from an emulator, then enumerates the output components. Every clause earns its place, and the structure is easy to parse quickly.
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?
Despite having no output schema, the description lists the key elements the tool returns (language posture, evidence level, size-rule findings, scope of preview), which gives the agent a reasonable expectation of the response. It also covers the model format. It doesn't go into exhaustive detail on output structure, but for a risk-analysis tool this is sufficient for an agent to decide whether to invoke it.
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 input schema already describes both parameters with 100% coverage. The description adds value by giving a concrete example for the model parameter ('zebra/zd421') and clarifies the expected format (manufacturer/model). This goes beyond the schema's generic description and helps the agent construct valid input.
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 clearly states a specific verb and resource: 'Compatibility RISK analysis of ZPL code against a specific printer model'. It also distinguishes itself from an emulator and explicitly states it never says 'it works', which sets it apart from sibling tools like zpl_preview and zpl_validate. The example manufacturer/model format further anchors the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it is for compatibility risk analysis, not emulation, and it explicitly says 'NOT an emulator'. It also implies its role by mentioning 'reports the model's language posture', which signals it is for assessment, not validation or preview. However, it does not explicitly name sibling tools as alternatives (e.g., 'use zpl_validate for syntax checking'), leaving the agent to infer the distinction from the sibling names.
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. It usefully discloses that rendering happens server-side via an external API and that the output is not a guarantee of physical printer behavior, but it omits whether the call is read-only/non-destructive, whether authentication is required, and how errors are surfaced.
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, both earning their place: the first states the core action and output, the second front-loads the key limitation. There is no redundant or filler text.
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 five-parameter render tool with full schema coverage and no output schema, the description covers the essential return type (PNG image) and the most important behavioral caveat (printer fidelity). It leaves minor gaps around error handling and multi-label behavior, but the schema covers the latter via the 'index' parameter.
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 all five parameters are already documented in the input schema. The description adds no additional meaning about the 'zpl', 'dpmm', 'index', 'width_in', or 'height_in' parameters, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Render ZPL label code to a PNG image') and names the backend API. It is clearly distinct from validation or help siblings, but it does not explicitly name or contrast with alternatives like zpl_validate or barcode_generate.
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 the tool is for previewing output before printing, and the caveat about physical printers hints at when not to treat the result as authoritative. However, there is no explicit when-to-use or when-not-to-use guidance, and no sibling tools are named as alternatives.
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 behavioral burden and does well: it discloses that diagnostics are machine-readable with line/column, code, and severity, covers diagnostic categories, and notes the tool is fast. It does not explicitly state that validation is read-only or whether it stops at the first error, but the core behavior is clear.
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 compact and front-loaded with the core validation purpose and output shape. Each sentence adds useful routing, prerequisite, or parameter guidance 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?
For a four-parameter validation tool with a fully documented schema and no output schema or annotations, the description supplies enough: purpose, diagnostic format, usage sequencing, alternative tool, and the important label-size dependency. No critical information for correct invocation appears 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 coverage is 100%, so the parameter details are already documented. The description adds useful semantic guidance by stressing that the real label size should be passed because validation checks 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 names a specific operation, 'Pass/fail lint for ZPL,' and explains the diagnostics it returns. It clearly distinguishes this validation tool from zpl_preview and explain_zpl, so an agent can select it without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to run it before zpl_preview whenever generating or editing ZPL, and routes human-readable reporting to explain_zpl. It also states that the real label size must be passed because checks depend on it.
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.
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
Tools mostly target clearly distinct operations: per-language validators (zpl/epl/tspl/cpcl_validate) are unambiguous, and the descriptions explicitly contrast explain_zpl vs zpl_validate and zpl_preview vs zpl_compatibility. The only mild overlap is the human-report vs pass/fail pair, which the descriptions do resolve, so nothing causes real misselection.
All names are snake_case and mostly follow a language_verb or verb_language pattern, but verb placement is inconsistent (zpl_validate vs explain_zpl, convert_zpl_dpi) and some use extra nouns (zpl_command_help) while others are generic (barcode_generate, language_detect). Readable but not a single predictable convention.
With 11 tools the set sits comfortably in the well-scoped 3-15 range, and each tool covers a distinct capability (validate, explain, preview, convert, lookup, detect, barcode, compatibility) rather than redundant variants.
ZPL has full lifecycle coverage (validate, explain, preview, dpi conversion, command help, compatibility), but EPL, TSPL and CPCL only get a validate tool—no preview, explain, conversion or command lookup for those languages. This asymmetry is a notable gap for a multi-language label server, though agents can still work around it via ZPL-first workflows.
Maintenance
Related MCP Connectors
- Zineps MCPOAuthcom.zineps
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.
AI tools for MyPost A4 labels, 4x6 thermal printers and LabelChop resources.
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.1922 npmMIT