printshop-mcp
Allows printing to Epson inkjet, photo, and sublimation printers via Windows drivers, with support for saved print profiles, media types, trays, and proofing.
Allows printing to Kyocera laser and MFP printers via Windows drivers, with support for saved print profiles and proofing.
Allows printing to Mitsubishi dye-sub photo printers via Windows drivers, with support for saved print profiles and proofing.
Allows printing to Samsung laser and MFP printers via Windows drivers, with support for saved print profiles and proofing.
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., "@printshop-mcpmake badges for these 40 guests on A4 and show a proof before printing"
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.
printshop-mcp
English · Русский · 简体中文 · Español · Português · Deutsch · Français · 日本語 · 한국어 · Italiano · Türkçe · Polski · Українська · العربية · हिन्दी
🌐 ildargiv.github.io/printshop-mcp
The print shop inside your AI agent. Ask for "badges for these 40 guests, business cards and a flyer" and the agent designs them, packs them onto sheets, shows you an exact proof and prints them on your real printer - millimetre-accurate. And it remembers all your print profiles: printer, paper, tray, media type, quality, colour profile, calibration, even vendor-only driver options. Explain your printer once, never again.
A mixed sheet (1 flyer + 3 badges + 4 business cards) as the agent sees it before printing: crop marks only where you cut, long names shrunk to fit, grey border = what your printer can't print.
Status: v0.2, Windows. New: print any PDF (e.g. from other design skills) and automatic layout of many items. Next: self-learning from print defects, macOS/Linux.
Printer compatibility
For paper printers: inkjet, laser, photo, sublimation (souvenir transfer printing) and label printers. Not for 3D printers.
Works with any printer that has a Windows driver, whatever the brand: printing goes through the standard Windows print system, and vendor-only options (paper types, borderless, print quality) are kept in profiles through the driver's own settings window.
Printer type | Brands |
Inkjet | Epson · Canon · HP · Brother |
Laser and MFP | HP · Brother · Canon · Kyocera · Xerox · Ricoh · Konica Minolta · Sharp · Lexmark · OKI · Pantum · Samsung |
Photo (inkjet and dye-sub photo) | Epson · Canon · HP · DNP · Mitsubishi · Citizen · Canon Selphy |
Sublimation (souvenirs: mugs, T-shirts, puzzles) | Epson EcoTank / SureColor F (with sublimation ink) · Sawgrass · Ricoh |
Label / thermal | Zebra · TSC · Brother QL · Dymo · Xprinter |
Verified so far:
Printer | Type | Status |
Microsoft Print to PDF | virtual | ✅ full test suite |
Epson L8050 | inkjet, photo | ✅ trays, media types, margins detected · test print pending |
Printed with another model? Report it and it gets added here. macOS and Linux (CUPS) are planned.
Related MCP server: printbridge
Install
Claude Code (skill + MCP server in one plugin):
/plugin marketplace add ildargiv/printshop-mcp
/plugin install printshop@printshop-mcpAny MCP client (Claude Desktop, Cursor, Codex, ...):
{ "mcpServers": { "printshop": { "command": "uvx",
"args": ["--from", "git+https://github.com/ildargiv/printshop-mcp", "printshop-mcp"] } } }Pin a release instead of the latest code: git+https://github.com/ildargiv/printshop-mcp@v0.3.0
(see Releases; each release also has a wheel for pip install).
Needs uv and Edge or Chrome (used for rendering).
Why not just Ctrl+P?
Ctrl+P | printshop-mcp |
"Fit to page" silently scales: 90 mm becomes 88.7 mm | Rendered straight to device pixels: 1 mm in CSS = 1 mm on paper |
Content falls into the unprintable margin | Proof shows the printer's real unprintable zone; preflight warns |
The agent can't see the result | Proof images + JSON report: clipped text, low-dpi images, wrong paper |
Settings forgotten every time | Named profiles with the full driver state, calibration and ICC |
One kind of item per print | Badges, cards and flyers packed on shared sheets with crop marks |
What the agent gets
Skill (skills/printshop): the workflow (profiles -> design -> proof -> print -> fix the profile), HTML rules,
a layout reference (what fits on A4/Letter) and templates:
Template | |
| Event badges 90x55, 10 per A4 |
| Business cards 90x50, 10 per A4 |
| A6 flyers, 4 per A4 |
| Folded table tent / name card |
| Mixed: flyer + badges + business cards on one sheet |
| Sublimation mug wraps 200x95 (11 oz), printed mirrored |
MCP tools:
Tool | |
| Printers, papers, trays, media types, printable area, saved profiles |
| Remembered print setups; |
| Pack many items (HTML designs, PDFs, images) onto sheets, grouped by paper, with crop marks |
| Render + preflight an HTML file or any PDF: proof images, a job id and a cost estimate (sheets, ink coverage measured on the pixels, money if the profile has prices) |
| Print a proofed job (warnings need explicit confirmation) |
| Offline / out of paper / jammed, and the queue |
HTML conventions: each sheet is <section class="ps-sheet" style="width:210mm;height:297mm">, layout in mm.
data-fit="9pt" shrinks text to fit its box; data-cut adds crop marks.
Safety
Printing only after
proof(the job id is the token); jobs expire after 1 hour and print once.PRINTSHOP_MAX_SHEETS(default 50) caps paper use;PRINTSHOP_DRYRUN=1never touches the printer.HTML can only load local files from its own folder.
CLI
printshop-mcp printers
printshop-mcp proof badges.html --printer "My Printer"
printshop-mcp print <job_id> [--accept-warnings]License
MIT
Available Tools
10 toolsdelete_profileC
Forget a print profile.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
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. "Forget" hints at irreversible removal but says nothing about whether deletion is permanent, whether dependent settings (e.g., a default profile pointer) are affected, what errors occur if the name is unknown, or what the response looks like.
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?
It is a single short sentence with no waste, but the brevity comes at the cost of substance; the front-loaded verb is ambiguous rather than informative. Concision here is under-specification rather than efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and an undocumented parameter, a destructive tool should disclose irreversibility, error behavior, and argument meaning. The description supplies none of that, leaving the agent unable to call it confidently.
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 single parameter "name" has 0% schema description coverage, and the description adds no meaning: it does not state that it is the exact profile name, whether matching is case-sensitive, or what happens on a miss. The one-parameter baseline does not apply because nothing is explained anywhere.
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?
"Forget a print profile" implies removal of a print profile, and the name plus the sibling set (save_profile, list_profiles) make the intended operation inferable. However, the verb is metaphorical rather than a specific operation like "delete", so what actually happens to the profile is left to inference.
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?
There is no guidance on when to delete versus save or set as default, no prerequisites, no mention of what happens if the profile is currently the default, and no reference to any sibling tool. The agent must guess the usage context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_printerC
Papers, trays, media types, resolutions and printable area (A4) of a printer, plus its saved profiles.
| Name | Required | Description | Default |
|---|---|---|---|
| printer | Yes |
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, and it says nothing about read-only safety, authentication, or error behavior for an unknown printer name. The list of returned attributes weakly implies a non-mutating lookup, but that is inference rather than disclosure.
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 compact clause with no filler, and the most important content (what you get back) is front-loaded. It is a noun fragment rather than a complete sentence, which slightly weakens the lead.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema and no annotations, the description adequately covers the return contents but leaves the input contract and behavioral profile unaddressed. It is close to sufficient but has a clear gap on how to specify the printer.
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 0% for the single required 'printer' parameter, and the description does not say how a printer is identified (name, queue, ID, IP). The one parameter the agent must supply is left completely unexplained by both schema and prose.
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 enumerates the exact data the tool surfaces (papers, trays, media types, resolutions, printable area, saved profiles), which makes it clear this is a capability/configuration lookup for a single printer. It lacks an explicit verb and does not distinguish itself from siblings like printer_status or list_printers, so an agent must infer the distinction.
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?
There is no guidance on when to use this versus printer_status, list_printers, or list_profiles, nor any prerequisites (does the printer need to be online? registered?). The implied use case is recoverable from the content list, but nothing is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
layoutA
Automatically pack many items onto sheets (imposition) and write printable HTML, one file per paper group.
items: [{"name": "badge", "width_mm": 90, "height_mm": 55, "copies": 1, "group": "plain", "html": "<div ...>..." OR "src": "card.pdf" | "photo.jpg", "page": 1, "rotate": true, "fit": "fill"|"contain"}]
html: the item's design, filling its box (use position:absolute children, mm units, data-fit). Shared styles go into css. One entry per distinct item (e.g. one per guest), copies for identical ones.
src: a PDF page or image (e.g. a business card PDF from another tool), path relative to out's folder.
group: items that need different paper (cardstock vs plain) must have different groups; each group becomes its own file to proof and print with its own profile. sheet: A4, A3, A5, Letter, Legal, Tabloid or [width_mm, height_mm]. margin_mm: keep >= printer margin (~4). gap_mm: space between items (0 = shared cut lines). Items rotate automatically when that saves paper. out: .html path (or folder) for the result; must contain any src files. Returns files, sheet counts, paper use.
| Name | Required | Description | Default |
|---|---|---|---|
| css | No | ||
| out | No | ||
| items | Yes | ||
| sheet | No | A4 | |
| title | No | layout | |
| gap_mm | No | ||
| landscape | No | ||
| margin_mm | No | ||
| crop_marks | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden well: it discloses the file-writing side effect, one-file-per-group behavior, automatic rotation when it saves paper, gap semantics for shared cut lines, and return values. It does not state whether existing output files are overwritten or what failure modes look like, so it is strong but not complete.
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 purpose is front-loaded and the description uses a compact item example to convey nested semantics efficiently. It is dense but mostly earns its length because the schema itself provides no parameter descriptions; structure could be slightly cleaner, but there is little filler.
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, and the description compensates by summarizing returns as files, sheet counts, and paper use. It covers enough workflow and parameter context to invoke the tool correctly, though it leaves some optional parameters and overwrite/error behavior unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must supply parameter meaning, and it does so for the critical parameters: items and its subfields, sheet, margin_mm, gap_mm, out, and css. It omits top-level title, landscape, and crop_marks, but those gaps are relatively minor compared with the detailed item guidance it provides.
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: it packs items onto sheets for imposition and writes printable HTML, one file per paper group. This clearly distinguishes layout from sibling printer/proofing tools because it generates print-ready files rather than sending or previewing jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the paper-group workflow and the note that each group becomes its own file to proof and print with its own profile. However, the description does not explicitly name proof or print_job as alternatives or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_printersA
Installed printers with their saved profiles. The first printer is the Windows default.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It does earn credit for disclosing ordering semantics (the first entry is the Windows default), which the schema cannot convey. However, it says nothing about whether this is a read-only local call, whether it fails when no print spooler is available, or what each printer entry contains.
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 filler, and the useful ordering fact is included rather than buried. Every sentence 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 zero-argument enumerator with no output schema, the description covers what the list is and the one non-obvious property (default-first ordering). A brief note on what fields each printer exposes would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline of 4 applies; no parameter claims are made or needed.
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 the resource (installed printers) and adds the payload (saved profiles), so an agent knows what the call returns. It does not explicitly contrast with close siblings like list_profiles or describe_printer, which is the one thing separating it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus list_profiles, describe_printer, or printer_status. The agent must infer from the name alone that this is the enumerator and describe_printer is the detail view.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_profilesB
All remembered print profiles (optionally for one printer) and the default profile of each printer.
| Name | Required | Description | Default |
|---|---|---|---|
| printer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It usefully discloses that the result includes each printer's default profile alongside the saved profiles, which is non-obvious return-shape information, but it says nothing about ordering, pagination, or completeness of the list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded clause with no filler. It is a noun phrase rather than a full statement, so it reads slightly terse, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only list tool with no output schema and no annotations, the description conveys the result contents but leaves the filter value format and any result ordering unspecified. It is adequate, but an agent could still call it with the wrong kind of printer identifier.
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 0% for the single 'Printer' parameter, so the schema only gives a nullable string with no hint of whether it is a name or an ID. The description adds only that the parameter is optional and acts as a filter — useful but insufficient for the agent to construct a valid value.
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 the resource precisely ('all remembered print profiles', 'the default profile of each printer'), which is far more specific than the bare name. It does not, however, explicitly distinguish itself from siblings such as list_printers or describe_printer, leaving the agent to infer the boundary.
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 parenthetical '(optionally for one printer)' implies the filter use case, so partial guidance exists. There is no statement of when to prefer list_printers or describe_printer, and no exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
printer_statusC
Printer state (offline, out of paper, jammed...) and its print queue.
| Name | Required | Description | Default |
|---|---|---|---|
| printer | Yes |
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. It says what information is returned but does not disclose whether this is a safe read-only call, how offline or error states are represented, whether queue data is paginated, or what permissions are needed.
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?
It is a single front-loaded sentence fragment with no wasted words. The brevity is appropriate, though the fragment style leaves it under-specified rather than genuinely concise.
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 status tool this covers the high-level return content, but with no annotations, no output schema, and an undocumented required parameter, the definition is not complete enough. It should at least clarify the printer identifier format and any important failure or offline behavior.
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 has 0% description coverage for the single required 'printer' parameter. The description does not explain whether 'printer' should be a name, ID, network address, or other identifier, so an agent must guess the accepted value format.
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 resource: printer runtime state (with examples like offline, out of paper, jammed) and its print queue. It is clear what information the tool retrieves, but it does not explicitly differentiate itself from the sibling describe_printer or list_printers.
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 no guidance on when to use printer_status versus alternatives such as describe_printer, list_printers, or print_job. It also does not mention prerequisites, exclusions, or typical invocation contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
print_jobA
Send a proofed job to the printer. Requires a job_id from proof. If the proof had warnings, tell the user first and pass accept_warnings=true only after they agree.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| accept_warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden itself and does disclose the key gating behavior: printing is blocked behind a proof and behind user consent when warnings exist. It does not say what happens on success or failure, or whether a failed send leaves the job reusable.
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, zero waste, with the prerequisite front-loaded ahead of the conditional consent instruction. Every clause carries operational meaning.
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 two-parameter tool with no annotations and no output schema, the definition supplies the prerequisite, the consent flow, and the role of both parameters. What is missing is any statement of the result of a successful or failed print, which the absence of an output schema pushes partly onto the description.
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 0%, so the description must compensate, and it does: job_id is tied to the proof step and accept_warnings is given a precise gating condition ('only after they agree'). It does not state the default of accept_warnings (false) or how warnings are surfaced to the caller, leaving a small gap.
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 ('Send a proofed job to the printer') and names the upstream tool that supplies its input ('Requires a job_id from proof'), which separates it cleanly from the proof and layout siblings.
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?
Explicitly defines the precondition (a job_id obtained from proof) and the escalation path when warnings exist: tell the user first, then pass accept_warnings=true only after they agree. Both the when-to-use and the when-not-to-act conditions are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proofA
Render printable HTML exactly as it will print and check it. Returns a job (job_id, errors, warnings, per-sheet geometry, estimate: sheets, ink coverage measured on the pixels, cost if the profile has prices) and proof images: grey = area the printer cannot print, red/orange frames = problems. Give either html (a string) or path: an .html file (images resolve relative to it) or a .pdf (every page becomes a sheet of the page's size - use this to print PDFs made by other tools). Without printer/profile the default profile of the last used printer is taken.
| Name | Required | Description | Default |
|---|---|---|---|
| dpi | No | ||
| html | No | ||
| path | No | ||
| copies | No | ||
| printer | No | ||
| profile | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since there are no annotations, the description carries the full burden of behavioral disclosure. It describes the complex return value structure (job_id, errors, geometry, ink coverage, cost) and provides crucial context on the meaning of visual proof elements (grey vs. red/orange frames).
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 dense and long, but every sentence provides a necessary piece of information regarding input, output, or behavior, preventing it from becoming redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool lacking annotations and an output schema, the description is highly complete, covering input formats, default behaviors, and the detailed nature of the results.
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?
Given 0% schema description coverage, the description adds extreme value. It clarifies that 'html' can be either a string or a file path, and it defines the intended use case for different input formats (.html vs .pdf).
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: to render and check printable HTML/PDF. It goes beyond a simple rename to define the entire scope of the operation, including generating a proof.
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 provides good usage guidelines by specifying the input types (string vs. path) for HTML and offering advice on using PDF input for pages created by other tools. It also defines default behavior when printer/profile parameters are omitted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_profileA
Create or update a remembered print profile. Only the given fields change.
paper: "sheet" (paper size follows the HTML sheet, default) or "driver" (keep the paper set in the driver). tray / media: name (or part of it) or code from describe_printer. quality: draft|low|medium|high. color: color|mono. duplex: simplex|long_edge|short_edge. icc: path to a printer ICC profile, intent: perceptual|relative|saturation|absolute. dpi: render resolution (default 300). scale_x/scale_y (0.97-1.03) and offset_x_mm/offset_y_mm (-5..5): calibration applied to every job. mirror: print every sheet mirrored (sublimation / heat-transfer paper for mugs, T-shirts). Proofs stay readable. paper_price: cost of one sheet; ink_price_5pct: ink cost of one A4 page at 5% coverage of one colour (bottle or cartridge price / ISO page yield printed on the box); currency: e.g. "RUB", "USD". With these, every proof includes a cost estimate. tags/notes: what this profile is for ("business cards", "cardstock 300g") so it can be found later. open_driver_dialog: shows the printer driver's own settings window to the user; everything they choose there, including vendor-only options, is stored in the profile.
| Name | Required | Description | Default |
|---|---|---|---|
| dpi | No | ||
| icc | No | ||
| name | Yes | ||
| tags | No | ||
| tray | No | ||
| color | No | ||
| media | No | ||
| notes | No | ||
| paper | No | ||
| duplex | No | ||
| intent | No | ||
| mirror | No | ||
| printer | No | ||
| quality | No | ||
| scale_x | No | ||
| scale_y | No | ||
| currency | No | ||
| offset_x_mm | No | ||
| offset_y_mm | No | ||
| paper_price | No | ||
| make_default | No | ||
| ink_price_5pct | No | ||
| open_driver_dialog | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does well: it discloses merge semantics ('only the given fields change'), that scale/offset calibration applies to every job, that mirroring keeps proofs readable (sublimation use case), that cost fields make proofs include a cost estimate, and that open_driver_dialog captures vendor-only options into the profile. It omits persistence/overwrite risk for existing profile names and what happens when printer is omitted.
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 core statement is front-loaded in one sentence, followed by a compact, scannable parameter reference where nearly every line adds distinct information. Some lines are terse to the point of being cryptic (paper/tray phrasing) and the list lacks grouping, but there is little outright 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 23-parameter mutation tool with no annotations, no output schema, and zero schema descriptions, the description is unusually complete, covering most parameters with values and side effects. It is still missing the required name's role, which printer the profile binds to, and make_default, so an agent can call it but not with full confidence on identity-binding fields.
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 0% across 23 parameters, so the description must compensate and largely does: it supplies accepted enum values (quality, color, duplex, intent, paper), numeric ranges for scale and offset, the default for dpi, and the formula behind ink_price_5pct. Gaps remain for the required 'name', 'printer', and 'make_default', which are not explained at all.
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 pair and resource ('Create or update a remembered print profile') plus the important upsert nuance that 'only the given fields change', which tells an agent this is a partial-merge write rather than a replace. It is clearly distinct from list/delete/set_default siblings by name and effect, though it never explicitly routes away from 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?
Usage context is implied rather than stated: the tags/notes line ('so it can be found later') and the tray/media note ('code from describe_printer') give indirect routing to describe_printer, but there is no explicit when-to-use/when-not guidance, no mention of set_default_profile versus the make_default parameter, and no prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_default_profileB
Make a profile the default for its printer (and that printer the default for printing).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
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 a non-obvious side effect: the profile becomes default AND its printer becomes the printing default. However, it says nothing about prior defaults being overwritten, permission requirements, or error behavior for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the primary effect and parenthetically noting the secondary effect. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation tool with no annotations and no output schema, the description explains the behavior but leaves the parameter's identity, the fate of the previous default, and failure modes unaddressed. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the sole parameter 'name' is undocumented. The description partially compensates by framing it as 'a profile', implying name refers to the profile rather than the printer, but it does not clarify the accepted identifier format or whether printer names are accepted.
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 ('Make a profile the default') and even names the cascading effect on the printer's default. It is easily distinguished from siblings like save_profile and delete_profile, though it never explicitly contrasts with 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?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as save_profile for creating a profile first. The action itself implies intent, but nothing tells an agent under which conditions to pick this tool.
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.
10 tool updates
v0.3.0- First observed
delete_profile - First observed
describe_printer - First observed
layout - First observed
list_printers - First observed
list_profiles - First observed
print_job - First observed
printer_status - First observed
proof - First observed
save_profile - First observed
set_default_profile
TDQS
Scored across 10 tools
Most tools target clearly distinct actions (save/delete/set-default profile, proof, layout, print_job, printer_status). The only soft overlap is the trio list_printers, list_profiles, and describe_printer, which all return profile information, though the descriptions differentiate them (installed printers vs. profiles vs. detailed capabilities).
The set mostly follows a verb_noun convention (list_profiles, describe_printer, save_profile, set_default_profile, print_job, printer_status). The bare names proof and layout break the pattern slightly but are still readable and unambiguous in context.
Around 10 tools is well-scoped for a print workflow: discovery, profile management, proofing, imposition, printing, and status. Each tool earns its place with no redundant entries.
The surface covers the full lifecycle from printer inspection through profiling, proofing, layout, and printing, including cost estimation and driver access. Minor gaps remain: printer_status exposes the queue but there is no tool to cancel or pause a job, and no job history listing beyond the current queue.
Maintenance
Related MCP Connectors
Give your AI agents a design superpower. Generate, edit, and publish publication-grade decks, reports, landing pages, resumes, and marketing visuals directly within your agent workflow. Delivering frontier-level design quality at 3× the speed and 53× lower cost -from conversational prompt to live link or vector PDF in minutes.
Print-on-demand catalog, listings, and fulfillment for AI agents.
The open vocabulary of print for AI agents: terms, product envelopes, validation, fingerprint.
Print on demand for AI agents. No sign-up. Picture, words or logo on a tee, hoodie or tote.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to drive CorelDRAW via COM API, creating and editing documents, replacing text, manipulating shapes, running preflight checks, and batch-exporting production files from natural language instructions.3-
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to print documents directly on your own printer over a private network, without cloud services or open ports. Supports printing text, URLs, and files with per-person access keys, usage limits, and detailed job control.MIT
- AlicenseCqualityBmaintenanceEnables AI agents to autonomously create and edit graphic designs, multi-page PDF catalogs, brochures, social media assets, and slide decks on a local browser canvas. It provides vision-in-the-loop feedback, layout audits, and export capabilities for print-ready or web-ready outputs.53121 npmMIT
- AlicenseAqualityBmaintenanceEnables AI agents to print HTML, web pages, PDFs, and images to local printers by bridging to an existing client over WebSocket, including previews, printer discovery, batch jobs, and customizable PDF/print settings.16184 npmMIT