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: OpenPrints 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
Full sectioned health report for a ZPL label (syntax, size/DPI, orientation, barcodes, fonts, memory) with an honest score: only assessable sections count, the rest say 'not assessed'. 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 | |
| height_in | No | Label height in inches |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that only assessable sections count and others are marked 'not assessed', and that findings depend on the label size. This gives the agent a clear picture of the tool's behavior and limitations, though it doesn't mention error handling or the exact return structure.
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. The purpose is front-loaded, and the key usage tip is placed at the end. 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?
For a complex tool with no output schema, the description explains the report's scope and scoring honesty. It covers the main concerns an agent would have, but could arguably mention that the report might be lengthy or that it returns a structured result. Still, it's sufficiently complete for an agent to decide to call 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?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds value by emphasizing the critical role of width_in and height_in ('Pass the real label size') and implicitly tying them to the size/DPI section. This goes beyond the schema's basic type/description info.
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 produces a 'Full sectioned health report for a ZPL label' and enumerates specific aspects (syntax, size/DPI, orientation, barcodes, fonts, memory). It distinguishes itself from siblings like zpl_validate (which likely only validates) and zpl_preview (rendering) by emphasizing a comprehensive diagnostic report with an honest scoring mechanism.
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 an important usage hint ('Pass the real label size — findings depend on it') but does not explicitly state when to use this tool versus alternatives like zpl_validate or zpl_compatibility. It implies it's for a detailed health assessment, but lacks explicit exclusions or alternative routing.
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 | |
| height_in | No | Label height in inches |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It usefully discloses that this is a server-side render via an external API and warns that output is not a guarantee of physical printer output. However, it does not describe return format, error behavior, or external-API implications such as latency or failures.
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 with no filler: the first states the core action, and the second delivers a relevant caveat. It is appropriately front-loaded and every phrase 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 moderate external rendering tool with all parameters documented and no output schema, the description provides the essential selection and invocation context: what it renders, how, and a key limitation. It is slightly light on post-call behavior (how the PNG is returned or errors surface), but the core context is present.
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%, with each parameter already documented including defaults and constraints. The description adds no parameter-level nuance beyond identifying the input as ZPL label code, so the baseline 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 opens with a specific verb and resource: 'Render ZPL label code to a PNG image via the Labelixa API.' It adds a clear differentiating qualifier ('SERVER-SIDE render for inspection'), which makes it easy to tell apart from validation/explanation siblings like zpl_validate and explain_zpl even without naming them.
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 usage context ('for inspection') and an explicit exclusion: it is 'not a guarantee of how a specific physical printer will output the label.' It does not name sibling alternatives or state when to prefer zpl_validate, but the intended use case is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zpl_validateAInspect
Lint/validate ZPL and return the structured diagnostics report (unknown commands, parameter range errors, layout overflow, etc.) as JSON. 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 | |
| height_in | No | Label height in inches |
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 states that the tool returns a structured diagnostics report as JSON and lists the categories of checks performed (unknown commands, parameter range errors, layout overflow). It also hints that results depend on label size. It does not explicitly declare read-only behavior, but the nature of a validator and the mention of returning a report strongly imply a non-destructive operation. This is adequate for a validation tool, though it could mention whether it modifies anything or requires authentication.
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 fluff. The first sentence front-loads the purpose and output, and the second adds a critical usage tip. Every word earns its place, and the structure is efficient and clear.
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 the tool's moderate complexity (4 parameters, no output schema), the description is complete enough for an agent to call it correctly. It states the input (ZPL), the output (JSON report), and the dependency on size parameters. It does not describe the exact JSON structure, but that is not strictly required since the description says 'structured diagnostics report' and lists common error types. It also implicitly distinguishes from other validators via the tool name. Minor omissions like behavior on success are easily inferred.
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% as all four parameters have descriptions in the schema, providing the baseline of 3. The description adds value by explicitly emphasizing the importance of the size parameters ('Pass the real label size — checks depend on it.'), which goes beyond the schema's terse descriptions of width_in and height_in. It informs the agent that these parameters materially affect the tool's behavior, making it more than a bare restatement.
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 verb 'Lint/validate' and the resource 'ZPL', and specifies the output as a structured diagnostics report in JSON with examples of error types. It differentiates from sibling validators by explicitly naming ZPL, making it unambiguous which language it handles.
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 provides a clear, actionable usage instruction: 'Pass the real label size — checks depend on it.' This gives context on how to use the tool effectively, but it does not explicitly mention when to use this tool over sibling validators like epl_validate or tspl_validate, nor does it state exclusions. It implies usage for ZPL validation via the name and content, so it earns a 4 for clear context without explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 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
The four language validators are cleanly separated by language prefix, and preview, barcode generation, DPI conversion, and language detection have distinct purposes. Only zpl_validate and explain_zpl overlap meaningfully as both analyze ZPL and can report issues, though explain_zpl's sectioned health-report framing helps separate them.
The validators follow a clear <language>_validate pattern and ZPL tools generally share a zpl_ prefix. However, barcode_generate and language_detect use object_verb order, while convert_zpl_dpi and explain_zpl lead with verbs, creating mixed but readable conventions.
Eleven tools is well within the appropriate range for a label-printing utility server and each area of functionality has a dedicated tool without obvious redundancy. The count feels earned: validation for four languages plus ZPL-specific rendering, compatibility, conversion, help, and diagnostics.
The server covers detection, validation for all four major label languages, barcode generation, and a solid ZPL workflow from command lookup through rendering, conversion, compatibility, and health reporting. The main gap is that preview, conversion, and command help exist only for ZPL, not for TSPL/EPL/CPCL.
Maintenance
Related MCP Connectors
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.
Generate QR codes for URLs, PIX, Wi-Fi, vCards, WhatsApp and more. For AI agents.
Generate barcode and QR labels offline for products, packages and assets.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Snipe-IT inventory systems through comprehensive asset and consumable operations. Supports creating, updating, tracking, and managing IT assets, consumables, maintenance records, file attachments, and generating labels.1-

OpenPrints MCPofficial
AlicenseNot gradedqualityDmaintenanceEnables AI agents to browse products, upload designs, place print orders, track shipments, and manage account balance via natural language.14 npmMIT- AlicenseNot gradedqualityCmaintenanceEnables encoding 100+ barcode symbologies and decoding common 1D/2D formats, plus terminal QR codes.1MIT
- 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