Printer MCP
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., "@Printer MCPprint every PDF in D:\Invoices\batch1, two copies each"
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.
Printer MCP
English | ไทย
A local MCP server for printing files on Windows through Codex, using natural-language requests or the /print quick command. It supports PDF, Microsoft Office documents, images, text files, local paths, and UNC network paths.
Printer MCP runs locally over MCP stdio. Print jobs are submitted by the Windows computer running Codex directly to printers installed on that computer.
Features
Print one file or every supported file in a folder
Use
/print <path>for common print jobsSelect a printer or use the Windows default printer
Configure copies, PDF pages, orientation, monochrome mode, and duplex mode
Inspect files and estimate PDF pages before printing
List installed printers and current print queues
Save printer aliases, path aliases, and reusable print profiles
Detect duplicate print attempts within a configurable time window
Require confirmation for large jobs
Filter by filename glob, exclusion glob, and modification date
Review history, retry previous jobs, and cancel queued jobs
Run system diagnostics with
/print-checkPrint silently without opening application windows or print dialogs
Handle paths containing spaces, Unicode characters, and UNC shares
Require explicit user intent before any tool submits a physical print job
Related MCP server: mcp-printer
Quick Print
Display help without printing anything:
/print how to use
/print help
/print ?
/print ใช้งายยังไงAfter installing the server and restarting Codex, print a file or folder with:
/print D:\Invoices\invoice-001.pdf
/print D:\Invoices\batch1
/print \\fileserver\shared\invoices\batch1Quick flags
Put the path before the options. Wrap option values containing spaces in quotes.
/print D:\Invoices\batch1 --copies 2
/print D:\Invoices\batch1 --pdf --bw
/print D:\Invoices\batch1 --duplex long
/print D:\Invoices\batch1 --recursive
/print D:\Invoices\invoice.pdf --pages 1-3,5
/print D:\Invoices\batch1 --printer office
/print D:\Invoices\batch1 --profile draft
/print D:\Invoices --name "TTSTHAC*" --exclude "Expense*"
/print D:\Invoices --newer-than 2026-10-01
/print D:\Invoices\batch1 --preview
/print D:\LargeBatch --force
/print stopFlag | Meaning |
| Number of copies, from 1 to 20 |
| Installed printer name or alias |
| Use a saved print profile |
| Select PDF pages |
| Print in monochrome or color |
| Two-sided printing on the long edge |
| Two-sided printing on the short edge |
| Single-sided printing |
| PDF orientation |
| Include subfolders |
| Select PDF files only |
| Include matching filenames, such as |
| Exclude matching filenames |
| Include files modified after the given date or time |
| List files and estimate sheets without printing |
| Bypass duplicate and large-job safeguards |
Stop all printing
/print stopThis calls stop_all_printing, which cancels every job still present in every Windows print queue on the computer. It does not delete or modify source files. A page already transferred to a printer may be too late to cancel.
Default /print behavior:
Uses the Windows default printer
Prints one copy of each file
Prints every supported file when the path is a folder
Sorts filenames naturally, so
file2.pdfcomes beforefile10.pdfDoes not search subfolders unless
--recursiveis usedTreats
/printas an explicit request to print, so it does not ask for confirmation againDoes not create a print job if the path is missing or no supported files are found
Aliases and profiles
/print @receipts\batch1
/print D:\Invoices\batch1 --printer office
/print D:\Invoices\batch1 --profile invoice
/print D:\Invoices\batch1 --profile draftPrinter aliases and path aliases are empty by default. Configure them for the current computer. Two profiles are included:
invoice: one copy, color, single-sideddraft: one copy, monochrome, duplex on the long edge
You can configure settings through Codex with a request such as Create a path alias named receipts for D:\Receipts, or edit data/settings.json directly.
Other quick commands
/queue
/cancel 42
/cancel all
/retry <history-id>
/print-check
/print-check \\server\share\folderNatural-language requests can express more detail:
Print every PDF in D:\Invoices\batch1, two copies each.
Print pages 1-3 and 5 of D:\Invoices\invoice.pdf.
Print this file in monochrome with long-edge duplex.
Print every PDF in this folder and its subfolders using Office Printer.
Inspect the files in this folder before printing.
Show the default printer queue.Supported file types
Type | Extensions | Printing method |
|
| |
Word |
| Microsoft Word COM automation |
Excel |
| Microsoft Excel COM automation |
PowerPoint |
| Microsoft PowerPoint COM automation |
Images |
| Silent Windows |
Text |
| Silent Windows |
Word, Excel, and PowerPoint files require the matching Microsoft Office desktop application. PDF printing does not require Adobe Acrobat or a configured default PDF application.
Silent Mode
All supported file types print in the background without opening an application window, preview window, or print dialog:
PDF uses SumatraPDF through the
pdf-to-printercommand-line interfaceWord, Excel, and PowerPoint use hidden COM automation with alerts disabled
Images and text are sent directly to the Windows spooler using
StandardPrintControllerUnsupported files return an error instead of falling back to the default application
Virtual printers that need user input, such as Microsoft Print to PDF asking for an output filename, may not be suitable for unattended Silent Mode. Use a physical printer for unattended jobs.
MCP tools
list_printers
Lists installed Windows printers with default, offline, and network status, plus driver and port information. This tool is read-only and never submits a print job.
inspect_print_job
Expands and lists the files that would be printed without sending anything to a printer.
Parameter | Type | Default | Description |
|
| required | Files or folders to inspect |
|
|
| Include subfolders |
|
| all supported | Limit extensions, such as |
|
|
| Maximum result count, from 1 to 1000 |
|
| unrestricted | Filename inclusion glob |
|
| none | Filename exclusion glob |
|
| unrestricted | Include files modified after an ISO date/time |
The result reports matched files, missing paths, unsupported files, truncation state, and totals by type.
estimate_print_job
Counts PDF pages and estimates paper consumption before printing. It accounts for copies, PDF page selection, and duplex mode. Non-PDF files are counted as at least one page each and clearly marked as estimates.
print_paths
Submits files to a printer. It supports individual files, multiple files, folders, and UNC paths.
Parameter | Type | Default | Description |
|
| required | Files or folders to print |
|
|
| Include subfolders |
|
| all supported | Limit file types |
|
|
| Maximum file count, from 1 to 1000 |
|
| Windows default | Installed printer name or alias |
|
|
| Copies, from 1 to 20 |
|
| all pages | PDF pages such as |
|
|
|
|
|
| document default |
|
|
|
| Print PDF in monochrome |
|
| none | Saved print profile |
|
| unrestricted | Filename inclusion glob |
|
| none | Filename exclusion glob |
|
| unrestricted | Include files modified after a date/time |
|
|
| File count above which |
|
|
| Bypass duplicate and large-job safeguards |
|
| required | Confirms that the user explicitly requested printing |
If any directly specified path is missing, the operation stops before printing any file. If an individual file fails after submission begins, the server continues with the remaining files and returns separate submitted and failed lists.
get_print_queue
Reads the current jobs for one printer without changing or cancelling them. The optional printer parameter defaults to the Windows default printer.
Additional tools
Tool | Purpose |
| Parses |
| Cancels selected job IDs or every job for one printer |
| Cancels pending jobs in every Windows print queue |
| Reads up to 500 jobs submitted through Printer MCP |
| Reprints the same files and options using a history ID |
| Reads aliases, profiles, and safety settings |
| Adds or updates an alias after verifying the printer exists |
| Adds or updates an alias after verifying the path is accessible |
| Adds or updates a reusable print profile |
| Removes a printer alias, path alias, or profile |
| Configures the large-job threshold and duplicate window |
| Checks Node, PowerShell, SumatraPDF, Office, printing capabilities, printers, and paths |
Duplicate and large-job safeguards
Successful jobs store file paths, sizes, and modification times in
data/history.jsonReprinting an identical file within five minutes stops the whole job and reports the earlier history ID
Use
--forceonly when the duplicate is intentionalJobs containing more than 20 files stop and report the file count and page estimate
Change these defaults through
set_print_safetyordata/settings.json
The server keeps up to 500 history entries. Each entry has a UUID that can be used with /retry <history-id>.
Safety model
Printing and queue cancellation have external effects. Therefore print_paths, quick_print, retry_print_job, and cancellation tools are declared as write/destructive MCP tools and require confirmed: true.
An MCP client should set confirmed: true only after an explicit instruction such as Print this file, Print the PDFs in batch1, or /print D:\Invoices\batch1.
Requests such as show, check, inspect, what files are here, or what would be printed must use inspect_print_job and must not submit a print job.
Requirements
Windows 10 or Windows 11
Node.js 20 or later
npm
A working printer installed in Windows
Microsoft Office desktop for Word, Excel, and PowerPoint files
Read access to every local path or network share being printed
Check the installed versions:
node --version
npm --version
codex --versionInstallation
Open PowerShell and run:
$installPath = Join-Path $env:USERPROFILE '.codex\mcp-servers\printer-mcp'
git clone https://github.com/riniort/printer-mcp.git $installPath
Set-Location -LiteralPath $installPath
npm install
npm run check
npm testnpm test is a non-printing smoke test. It verifies all 17 MCP tools, five prompts, /print stop, quick flags, settings, printer discovery, inspection, page estimation, queues, and health checks.
Connect to Codex
Register the MCP server through the Codex CLI:
$entryPoint = Join-Path $env:USERPROFILE '.codex\mcp-servers\printer-mcp\src\index.js'
codex mcp add printer -- node $entryPointAlternatively, add it manually to %USERPROFILE%\.codex\config.toml:
[mcp_servers.printer]
command = "node"
args = ['C:\Users\YOUR_USERNAME\.codex\mcp-servers\printer-mcp\src\index.js']
startup_timeout_sec = 30.0
tool_timeout_sec = 300.0Verify the registration:
codex mcp get printer
codex mcp listCompletely close and reopen Codex after adding or changing the MCP server so it loads the latest tools and /print prompt.
Run manually
Set-Location -LiteralPath (Join-Path $env:USERPROFILE '.codex\mcp-servers\printer-mcp')
npm startThe server communicates through MCP stdio, so it waits for JSON-RPC from an MCP client and normally displays no browser or application window. Codex starts the process automatically from config.toml; you do not need to run npm start separately during normal use.
Test against a real folder without printing
Set PRINTER_MCP_TEST_PATH to let the smoke test inspect PDF files in a specific path:
$env:PRINTER_MCP_TEST_PATH = '\\server\share\batch1'
npm test
Remove-Item Env:PRINTER_MCP_TEST_PATHThis invokes inspection only and does not submit a print job.
Project layout
printer-mcp/
├─ data/
│ ├─ settings.json aliases, profiles, and safety settings
│ └─ history.json duplicate protection and retry history
├─ src/
│ ├─ index.js MCP server, prompts, and tools
│ ├─ quick-command.js `/print` flag parser
│ ├─ storage.js settings, history, and file signatures
│ └─ printers.ps1 Windows printer, Office, image, and text integration
├─ test/
│ └─ smoke.mjs non-printing MCP smoke test
├─ package.json
├─ package-lock.json
├─ LICENSE
├─ README.md
└─ README.th.mdDevelopment
npm run check
npm testsrc/index.js declares MCP prompts and tools, src/quick-command.js parses quick flags, src/storage.js manages settings and history, and src/printers.ps1 integrates with Windows printers and the appropriate application for each file type.
Do not write ordinary log messages to server stdout, because it carries MCP JSON-RPC. Write diagnostics to stderr instead.
Troubleshooting
/print is unavailable
Run
codex mcp get printerto confirm the server is registered.Open
%USERPROFILE%\.codex\mcp-servers\printer-mcpand runnpm test.Completely close and reopen Codex.
No printer is found
Check Windows Settings > Bluetooth & devices > Printers & scanners, then run:
Get-Printer | Select-Object Name, DriverName, PortNameSet a Windows default printer or specify an installed printer by name.
PDF printing fails
Run
npm installagain to restore allpdf-to-printerfilesCheck whether antivirus software quarantined the bundled SumatraPDF executable
Verify the printer name with
list_printersTest one PDF before printing a complete folder
Word, Excel, or PowerPoint printing fails
Confirm that the matching Microsoft Office desktop application is installed
Open the file manually to verify that it is not damaged
Close any Office dialog waiting for user input
Verify that Office can print normally to the same printer
A UNC path cannot be opened
Test the path from PowerShell under the same Windows account running Codex:
Get-ChildItem -LiteralPath '\\server\share\folder'If this fails, check the network or VPN connection, share permissions, and Windows credentials.
A job times out
Increase tool_timeout_sec in %USERPROFILE%\.codex\config.toml, for example:
tool_timeout_sec = 600.0Restart Codex afterward. Split large jobs into batches to make successes and failures easier to track.
Current limitations
/printdefaults to one copy and does not search subfoldersPDF options are passed directly to the PDF print engine; behavior for other formats depends on Office or the Windows printing API
Images and text print through Windows
System.Drawingwithout opening Paint or NotepadCancellation only affects jobs still in a Windows queue; a printer may already have received part of a job
Virtual printers may show a save dialog and are not suitable for unattended printing
The server has no built-in authentication because it is designed to run locally through
stdio
Disconnect from Codex
codex mcp remove printerThis removes the MCP registration but does not delete %USERPROFILE%\.codex\mcp-servers\printer-mcp.
License
Released under the MIT License. You may use, modify, distribute, sublicense, and sell copies of the software, including for commercial purposes, provided that the copyright and permission notice are retained. The software is provided without warranty.
Available Tools
17 toolscancel_print_jobsCancel queued print jobsADestructive
Cancels specified Windows print queue job IDs, or all queued jobs for one printer. This cannot be undone and requires explicit user intent.
| Name | Required | Description | Default |
|---|---|---|---|
| job_ids | No | ||
| printer | No | ||
| all_jobs | No | ||
| confirmed | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the fundamental danger is known. The description reinforces with 'cannot be undone' and the explicit-intent requirement, which adds a useful confirmation nuance, but does not disclose special behaviors such as partial failures when some job IDs are invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the scope front-loaded and the irreversibility warning second. No filler; every clause adds information an agent needs before calling a destructive tool.
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 annotations cover the safety profile, so the description need not explain returns. Still, it omits the relationship between all_jobs, printer, and job_ids (mutual exclusion? precedence?) and the role of the confirmed parameter, leaving real gaps for a destructive 4-param tool.
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 carries the burden. It implicitly maps job_ids, printer, and all_jobs ('specified job IDs, or all queued jobs for one printer'), but says nothing about the required 'confirmed' flag beyond a vague 'explicit user intent', leaving one of four parameters unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: cancelling queued Windows print jobs by ID or all queued jobs for a printer. The 'queued' scoping helps distinguish it from siblings like stop_all_printing and retry_print_job, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage via 'requires explicit user intent' and the irreversible warning, which signals caution. However, it never says when to prefer this over stop_all_printing or how it relates to retry_print_job/inspect_print_job, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_print_jobEstimate pages and sheetsBRead-only
Previews selected files and estimates PDF pages and paper sheets before printing. Non-PDF files are conservatively estimated. Does not print.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | ||
| paths | Yes | File/folder paths or @path-alias values. | |
| copies | No | ||
| duplex | No | simplex | |
| max_files | No | ||
| recursive | No | ||
| extensions | No | ||
| newer_than | No | Only files modified after this ISO date/time. | |
| name_pattern | No | Filename glob such as TTSTHAC*.pdf. | |
| exclude_pattern | No | Filename glob to exclude. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, and the description reinforces this with 'Does not print' plus a useful behavioral nuance: non-PDF files are 'conservatively estimated.' That estimation heuristic is genuine added context not present in the annotations.
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?
Three short sentences, no filler, with the preview/estimate purpose front-loaded before the disclaimer. Slightly terse given the complexity, 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?
With 10 parameters and no output schema, the description should say more about what the estimate returns (per-file counts, totals, sheet math) and how filtering options like recursive/extensions affect scope. It gives only the headline 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?
Schema description coverage is only 40% across 10 parameters; copies, duplex, max_files, recursive, extensions and pages carry no description in either place. The description mentions no parameter behavior at all, so it fails to compensate for the coverage 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: 'Previews selected files and estimates PDF pages and paper sheets before printing.' 'Does not print' crisply separates it from print_paths/quick_print, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'before printing' implies the workflow position, but there is no explicit when-to-use vs inspect_print_job or when-not guidance, and no mention of alternatives such as print_paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_print_historyGet Printer MCP historyARead-only
Lists recent Printer MCP submissions and stable history IDs for retry and duplicate diagnostics. Does not print.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and a closed world, so the safety profile is covered. The description reinforces this with 'Does not print,' which is genuinely useful in a print-focused toolset, but adds nothing about ordering, retention, or result shape beyond that.
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 compact sentences with the purpose front-loaded and the negative constraint last; there is essentially no filler. The 'stable history IDs' phrase is slightly cryptic but still earns its place by hinting at the return payload.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations gap, the description does a fair job of indicating what comes back (submissions plus stable history IDs). It omits which history IDs feed which sibling tool and says nothing about the limit/counting behavior, leaving a small but real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single 'limit' parameter, so the schema supplies only type/default/min/max with no meaning. The description never mentions result count, default size, or pagination, leaving the one parameter's semantics unexplained.
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 ('Lists recent Printer MCP submissions and stable history IDs') and explicitly disambiguates from the print-family tools with 'Does not print.' It is clearly separable from siblings like get_print_queue or inspect_print_job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for retry and duplicate diagnostics' gives clear context for when an agent should reach for this tool, which pairs naturally with sibling retry_print_job. It stops short of naming explicit alternatives or when-not conditions, so it is not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_print_queueGet Windows print queueBRead-only
Lists current print jobs for one printer or alias. Does not change jobs.
| Name | Required | Description | Default |
|---|---|---|---|
| printer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so 'Does not change jobs' merely restates what structured data provides. No additional behavioral context (permissions, empty-queue behavior, whether the optional parameter can be omitted) is disclosed.
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 compact sentences with zero filler, and the primary action is front-loaded ahead of the safety clarification.
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 read-only listing tool with no output schema, the description covers the essentials. However, it leaves ambiguous behavior around the optional parameter (which printer is listed when none is supplied) and gives no sense of return shape or volume.
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 single 'printer' parameter is optional, so the description carries the burden. It usefully clarifies that the value may be a printer name or an alias, but says nothing about accepted syntax or what happens when the parameter is omitted.
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 ('Lists current print jobs') with scope ('for one printer or alias'), which separates it from the historical sibling get_print_history by the word 'current'. It stops short of naming an alternative explicitly, so a 5 is not warranted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the word 'current' suggests checking live queue state, and 'Does not change jobs' reassures it is a safe read. There is no statement of when to prefer this over inspect_print_job, list_printers, or get_print_history, and no prerequisites given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_print_settingsGet print aliases and profilesARead-only
Lists saved printer aliases, path aliases, profiles, duplicate window, and safety threshold. Does not print.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuine value with 'Does not print,' preempting the confusion that a print-settings tool might trigger output, and by enumerating the returned categories; it stops short of describing format or defaults.
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 short sentences, zero filler, with the content enumeration front-loaded and the scope-limiting caveat placed at the end where it reads as a qualifier. 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?
With no output schema, the description usefully enumerates what is returned (aliases, profiles, duplicate window, safety threshold), which is the right compensation. It does not indicate structure or default values, but for a parameterless read tool this is close to complete.
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 and the baseline is 4. The schema is an empty object, consistent with the parameterless signature.
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 ('Lists') and enumerates exactly what it retrieves: printer aliases, path aliases, profiles, duplicate window, and safety threshold. This clearly separates it from the set_*/remove_* siblings and from queue/history tools, though it does not name a specific alternative tool.
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 explicit statement of when to call this versus siblings like list_printers or get_print_queue. The only usage signal is the negative 'Does not print,' which implies it is safe to consult settings before acting, but that guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_print_jobInspect a print jobARead-only
Previews files selected by paths, aliases, recursion, extension, glob, exclusion, and date filters. Does not print.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | File/folder paths or @path-alias values. | |
| max_files | No | ||
| recursive | No | ||
| extensions | No | ||
| newer_than | No | Only files modified after this ISO date/time. | |
| name_pattern | No | Filename glob such as TTSTHAC*.pdf. | |
| exclude_pattern | No | Filename glob to exclude. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so 'Does not print' is largely redundant with the structured safety profile. The description adds the useful domain framing of what selection semantics are applied, but says nothing about return shape, truncation at max_files, or whether results are capped.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the capability first, the crucial disambiguating constraint second. Every clause earns its place with 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 read-only preview tool with no output schema, annotations carry the safety burden and the description covers the selection surface. The main residual gap is the return shape (file list? match count? would-be page count?) given the print-job naming, but that is a minor omission.
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 only 57%, but the description names six of the seven selection mechanisms (paths, aliases, recursion, extension, glob, exclusion, date filters), effectively compensating for undocumented schema entries. Only max_files goes unmentioned in both places, though its 500/1000 bounds are self-explanatory.
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 (previews) and enumerates what is being selected (files by path/alias/recursion/extension/glob/exclusion/date). The closing 'Does not print' cleanly separates it from print_paths and quick_print. It does not, however, explicitly differentiate itself from estimate_print_job, which is the closest conceptual sibling.
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 negative constraint 'Does not print' implicitly tells the agent when this tool is wrong (i.e., when actual printing is wanted), but no sibling is named and no positive trigger condition is given. The agent must infer that this is the dry-run/preview counterpart to the print tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_printersList Windows printersARead-only
Lists installed Windows printers, aliases, and the default printer. Does not print.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, covering the safety profile. The description adds useful behavioral context by specifying what is enumerated (installed printers, aliases, default printer) and reinforcing non-printing, though it omits details like permissions, pagination, or output format.
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 short sentences with zero waste, front-loading the primary action and scope before the clarifying 'Does not print' clause. 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-parameter, read-only listing tool with rich annotations and no output schema, the description sufficiently explains what will be returned (printers, aliases, default) and what will not happen (printing). No essential information is missing for correct 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?
The tool has zero parameters, which sets the baseline at 4. The description does not need to explain parameter semantics, and no gaps exist to compensate for.
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 (Lists) and resource (installed Windows printers, aliases, default printer), clearly distinguishing it from print-action siblings like print_paths and quick_print. The phrase 'Does not print' further sharpens 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?
Provides clear context that this is a listing tool and explicitly not a printing tool, which implies when to use it. However, it does not name alternatives (e.g., get_print_queue) or state exclusions or prerequisites, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
printer_health_checkCheck Printer MCP healthARead-only
Checks Windows printing, default printer, PDF engine, Office apps, local storage, and optional local/UNC paths. Does not print.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description reinforces this with 'Does not print' and adds that path checks may be local or UNC, but says nothing about runtime, whether UNC probes require credentials or network access, or how results are reported. With annotations carrying the safety burden, this is adequate but not rich.
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 short sentences with zero filler, and the scope enumeration plus the non-printing constraint are front-loaded. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-output-schema read-only diagnostic, the description covers what is checked and the non-destructive nature well. It stops short of describing the shape of the health report or how partial failures on UNC paths surface, which would fully close the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single 'paths' parameter, so the description must compensate. It does add meaning by noting the paths are optional and may be local or UNC, which aligns with required=0. It still does not explain expected path format, array behavior, or what happens when a path is unreachable, so compensation is partial.
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 (checks) and enumerates the exact resources inspected: Windows printing, default printer, PDF engine, Office apps, local storage, and optional local/UNC paths. The closing 'Does not print' separates it decisively from action-oriented siblings like print_paths and quick_print, so an agent can route correctly without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies diagnostic usage and rules out printing, which is useful routing context. However, it never states when to run this versus alternatives such as get_print_settings or list_printers, nor any prerequisites or when-not-to-use conditions. Usage is inferred rather than specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
print_pathsPrint files or foldersADestructive
Prints selected files with aliases, profiles, filters, duplicate protection, and a large-job safety threshold. Requires explicit user intent and confirmed=true.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Bypass duplicate and large-job safeguards after explicit user intent. | |
| pages | No | ||
| paths | Yes | File/folder paths or @path-alias values. | |
| copies | No | ||
| duplex | No | ||
| printer | No | Installed printer name or saved alias. | |
| profile | No | ||
| confirmed | Yes | ||
| max_files | No | ||
| recursive | No | ||
| extensions | No | ||
| monochrome | No | ||
| newer_than | No | Only files modified after this ISO date/time. | |
| orientation | No | ||
| name_pattern | No | Filename glob such as TTSTHAC*.pdf. | |
| exclude_pattern | No | Filename glob to exclude. | |
| safety_threshold | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=false, so the safety profile is covered structurally. The description adds real context beyond that: the confirmation gate, duplicate protection, and a large-job safety threshold. It stops short of explaining what happens when the threshold is exceeded or how force interacts with it, which the schema partially fills.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the capability summary front-loaded and the confirmation requirement placed prominently. Nothing is padded, though the terseness is arguably a symptom of under-documentation rather than disciplined editing.
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 17-parameter destructive tool with no output schema and only 35% schema description coverage, the description is far too thin. It never explains filter combination behavior, what the safety threshold does when tripped, what the duplicate check compares, or what the caller receives back on a partial failure.
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 only 35% across 17 parameters, so the schema does not carry the load. The description names categories that map loosely to parameters (aliases, profiles, filters, safety threshold), but many parameters such as pages, copies, duplex, orientation, monochrome, and recursive get no clarification anywhere. It partially compensates but leaves a large 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?
The description states a specific verb and resource ('Prints selected files') and enumerates the capability surface (aliases, profiles, filters, duplicate protection, safety threshold). It is clearly distinguishable from administrative siblings like set_printer_alias or list_printers, though it never names the close sibling quick_print or estimate_print_job, which an agent must pick between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one real prerequisite: explicit user intent plus confirmed=true. That is useful when-to-use signal, but there is no guidance on choosing this over quick_print or estimating first with estimate_print_job, and no when-not conditions. Usage is implied rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quick_printRun a quick print commandBDestructive
Parses the argument text from /print, including flags, aliases, profiles, filters, preview, and force. Requires explicit slash-command intent and confirmed=true.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | ||
| confirmed | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is carried by structured data. The description reinforces the gate by stating confirmed=true is required, but it never discloses what is actually destroyed or consumed (paper, printer state, job submission) or whether the action is reversible. The framing as "parses" also mildly understates the destructive behavior the annotations declare, though it does not directly contradict them.
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 tight sentence with no filler, and the precondition is placed after the capability rather than buried. Slightly back-loaded for a destructive tool, but there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema tool with zero parameter documentation, the description is thin. It says nothing about what a successful call produces, which printer/profile it targets by default, what "preview" and "force" actually change, or how failures surface — all things an agent needs before invoking an irreversible operation.
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 carry the load. It partially does: it identifies "command" as the argument text from /print and enumerates the kinds of tokens it may contain (flags, aliases, profiles, filters, preview, force), and it states the required value of "confirmed". It still omits the concrete syntax or examples of the command string, so compensation is incomplete.
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 verb is "parses" and the resource is "the argument text from /print," which is mechanically specific but leaves the user-visible effect ambiguous — it never states that a print job is actually submitted. It also fails to distinguish itself from close siblings like print_paths, estimate_print_job, or inspect_print_job, so an agent must guess which print entry point applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one real precondition — "Requires explicit slash-command intent and confirmed=true" — which tells the agent when the tool is legitimate. However, it names no alternatives and no when-not-to-use conditions, so the routing decision among the 17 sibling print tools is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_print_settingRemove a print alias or profileA
Removes one saved printer alias, path alias, or print profile. Does not affect files, printers, or queued jobs.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description usefully bounds the blast radius by stating it affects only a saved alias/profile and not files, printers or queued jobs, which is the key added context for a removal tool. It does not state reversibility, required permissions, or behavior on a missing name, so it goes only slightly beyond the annotations.
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 short sentences, zero filler, with the destructive action and its scope limitation front-loaded before any qualifier.
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 two-parameter removal tool with no output schema, the description covers what is removed and what is unaffected, which is most of what an agent needs. It stops short of covering failure modes (unknown name), permission requirements, and whether the removal can be undone, so it is not fully complete.
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 carries the burden; it partially compensates by naming the three deletable kinds that map to the 'kind' enum and noting only one item is removed per call. It says nothing about the 'name' parameter, such as whether it must match an existing alias exactly or whether lookup is case-sensitive.
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 ('Removes one saved printer alias, path alias, or print profile') and enumerates exactly the three kinds the sibling set_* tools create. An agent can distinguish it from set_printer_alias, set_path_alias and set_print_profile without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb and the enumerated kinds, and the second sentence clarifies scope ('Does not affect files, printers, or queued jobs'). However, there is no explicit when-to-use framing, no mention of the counterpart set_* tools, and no prerequisite or error guidance (e.g., what happens if the named alias does not exist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retry_print_jobRetry a Printer MCP history jobADestructive
Prints the original files and options from a prior Printer MCP history ID. Requires explicit user intent and confirmed=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmed | Yes | ||
| history_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation risk is covered; the description adds useful context the annotations cannot, namely that it replays the original files and options and that a confirmed=true user-intent gate is mandatory. It does not say whether the reprint can be cancelled or what a failed replay leaves behind.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences; the action is front-loaded and the safety condition follows immediately with 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?
With no output schema and annotations already covering the safety profile, the description supplies action, source of data, and the confirmation gate. It leaves minor gaps about failure behavior and whether the reprint is interruptible, but nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning, and it does: history_id is identified as a 'prior Printer MCP history ID' and confirmed is tied to 'explicit user intent ... confirmed=true'. UUID format and the const:true constraint remain only in the schema, but both parameters are semantically explained.
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 ('Prints the original files and options') and scopes the source to a prior history ID, which separates it from quick_print and print_paths. It stops short of explicitly contrasting with the closest sibling, inspect_print_job, which also takes a history ID.
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?
Gives a clear precondition: 'Requires explicit user intent and confirmed=true.' This tells the agent when the call is legitimate, though it never names alternatives (e.g., re-running via quick_print, or inspecting first with inspect_print_job).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_path_aliasSave a path aliasA
Creates or replaces a short @alias for a local or UNC file/folder path after verifying that it exists.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| alias | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-destructive, non-open-world write, so the bar is lower. The description adds real context beyond them: it discloses that the operation is an upsert ('creates or replaces'), that existing aliases will be overwritten, and that the target path is validated for existence before the write.
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 tight sentence with the verb and resource front-loaded and no filler. Every clause (creates/replaces, @alias, local or UNC path, existence verification) carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema and annotations covering the safety profile, the description is nearly sufficient: it covers mutation semantics, target validation, and path scope. Minor gaps remain on failure modes (e.g. what happens if verification fails) and alias collision handling.
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 carries the burden and does partially compensate: it names the alias as 'short @alias' and characterizes the path as a 'local or UNC file/folder path'. It still does not describe the alias character restrictions or error behavior for an invalid/duplicate alias, so the compensation is partial.
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 (creates or replaces) and a specific resource (a short @alias for a file/folder path), so the agent knows exactly what this tool produces. It separates itself from set_printer_alias by resource type (path vs printer), though that differentiation is implicit rather than called out.
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 'after verifying that it exists' gives an implied precondition for the path argument, which is useful context. However there is no explicit when-to-use guidance, no when-not to use it, and no alternative named (e.g. set_printer_alias for printers).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_printer_aliasSave a printer aliasB
Creates or replaces a short alias for an installed Windows printer.
| Name | Required | Description | Default |
|---|---|---|---|
| alias | Yes | ||
| printer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine context by disclosing upsert semantics ('Creates or replaces'), which the annotations do not convey, but it says nothing about what happens to an existing alias beyond replacement, permission requirements, 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?
A single sentence, front-loaded with the operation and resource, with no filler. Nothing here needs trimming or reordering.
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 two-parameter tool with annotations present and no output schema, the description covers the essentials minimally. It is adequate but leaves the 0%-documented parameters and the replace-overwrite behavior under-specified.
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 carries the entire burden for two parameters and mostly fails. 'Short alias' hints at the alias naming intent but omits the enforced pattern (^[a-zA-Z0-9_-]+$) and gives no guidance on how the printer argument is identified (name vs. queue).
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 pair ('Creates or replaces') and a precise resource ('a short alias for an installed Windows printer'), so an agent can distinguish it from set_path_alias, which targets paths rather than printers. It stops just short of explicitly contrasting the two siblings, so a 4 rather than 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 use this tool versus set_path_alias or set_print_profile, and no prerequisites or exclusions. The phrase 'for an installed Windows printer' only faintly implies a precondition that the printer must already exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_print_profileSave a print profileA
Creates or replaces a reusable print profile for copies, printer/alias, color, duplex, orientation, and PDF pages.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| pages | No | ||
| copies | No | ||
| duplex | No | ||
| printer | No | ||
| monochrome | No | ||
| orientation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, non-open-world operation. The description adds genuinely useful context with 'creates or replaces', signaling upsert-by-name overwrite behavior, but does not address permissions, whether an existing profile of the same name is silently clobbered, or any 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?
One front-loaded sentence, no filler, the core action ('creates or replaces') leads and the covered fields follow. Nothing needs trimming or reordering.
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 7-parameter mutation tool with no output schema, the description covers the mutating fields and upsert semantics, and annotations carry the safety profile. It still leaves gaps on the required, pattern-constrained 'name' parameter and the 'pages' string syntax, which an agent would need to nail for a correct call.
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 carries the burden and largely succeeds: it maps six of the seven parameters (copies, printer/alias, color/monochrome, duplex, orientation, PDF pages). It omits the required 'name' parameter and the enum values for duplex/orientation, which the agent must still discover from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair ('creates or replaces') and a precise resource ('reusable print profile'), then enumerates the settings it covers. It is distinguishable from siblings like set_printer_alias or quick_print, though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'reusable' implies the intended context (saving settings for repeated use rather than one-off printing via quick_print or print_paths), but there is no explicit when-to-use, when-not-to-use, or named alternative. Usage must be inferred from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_print_safetyConfigure print safeguardsB
Updates the large-job file threshold and/or duplicate-print detection window used by Printer MCP.
| Name | Required | Description | Default |
|---|---|---|---|
| safety_threshold | No | ||
| duplicate_window_minutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, closed-world mutation, so the safety profile is covered. The description adds which two behaviors are configured, which is genuine context, but it omits whether omitted parameters are left unchanged, what defaults are, and whether changes apply to active jobs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; both configurable settings are named immediately and nothing redundant is included.
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 mutation with annotations covering the safety profile, the entry is serviceable but leaves real gaps: no defaults, no statement that omitted fields are preserved, and no unit for the threshold, which is ambiguous given the 1-1000 bound. An agent can call it, but may not be able to predict the effect 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?
Schema description coverage is 0%, so the description must carry the burden, and it does map both parameters to real meanings (safety_threshold = large-job file threshold, duplicate_window_minutes = duplicate-print detection window). However it never clarifies the unit or basis of the threshold (files, pages, size), and the schema's min/max bounds and 'and/or' optionality are the only other semantics available.
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 (Updates) plus the two exact settings touched, large-job file threshold and duplicate-print detection window, which distinguishes it from the alias, profile, and print-execution siblings. It stops short of explicitly contrasting with the nearest neighbors, but an agent can identify the tool's domain without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when this tool should be used, no prerequisites, and no reference to any alternative sibling such as get_print_settings or set_print_profile. The 'and/or' phrasing hints that either parameter may be supplied, but that is the only usage signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_all_printingStop all printingADestructive
Cancels every job currently present in every installed Windows print queue. This cannot be undone and requires an explicit '/print stop' or equivalent user request.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmed | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds the crucial irreversibility statement ('cannot be undone') and the explicit-request gate, which are meaningful beyond the annotations, though it says nothing about the state of partially printed jobs or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero waste; the scope is front-loaded and the danger/precondition follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-output-schema destructive tool, the description supplies enough: scope, irreversibility, and activation gating. Only the required 'confirmed' argument's mechanics are left entirely to the schema.
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% and the single required parameter 'confirmed' is never mentioned in the description. The const:true constraint makes the intent partly self-evident in the schema, and the 'explicit user request' language loosely maps to it, but the description does not tell the agent that it must pass confirmed=true.
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 (Cancels), resource (every job in every installed print queue), and exhaustive scope. The 'every ... every' wording implicitly separates it from the targeted sibling cancel_print_jobs, so an agent can route without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete precondition: it should only fire on an explicit '/print stop' or equivalent user request. That is clear when-to-use guidance, though it never names cancel_print_jobs as the scoped alternative for partial cancellation.
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.
17 tool updates
v1.1.0- First observed
cancel_print_jobs - First observed
estimate_print_job - First observed
get_print_history - First observed
get_print_queue - First observed
get_print_settings - First observed
inspect_print_job - First observed
list_printers - First observed
print_paths - First observed
printer_health_check - First observed
quick_print - First observed
remove_print_setting - First observed
retry_print_job - First observed
set_path_alias - First observed
set_print_profile - First observed
set_print_safety - First observed
set_printer_alias - First observed
stop_all_printing
TDQS
Scored across 17 tools
Most tools target distinct resource+action pairs (aliases, profiles, queue, history, safety). The main overlap is inspect_print_job vs estimate_print_job (both preview files) and print_paths vs quick_print (both print), but descriptions clarify the differences adequately.
Predominantly consistent verb_noun snake_case (set_printer_alias, get_print_queue, cancel_print_jobs, retry_print_job). Minor deviations: printer_health_check puts the noun first, and quick_print lacks a clear verb_noun structure, but overall it is predictable.
17 tools is slightly heavy but each earns its place across aliases, profiles, queue control, history, and diagnostics. No obvious redundant or filler tools.
Strong lifecycle coverage: create/remove aliases and profiles, print, preview, estimate, queue management, history/retry, and health checks. Minor gaps like editing an existing profile in place (set overwrites) or per-printer pause are workable.
Maintenance
Related MCP Connectors
Use your Mac, Windows or Linux computer from ChatGPT, Claude or Codex: files, commands, documents.
3D print farm management for AI. Monitor, queue, and control prints on your SimplyPrint account.
Cloud printing integration for AI-assisted app development via ezeep.
Print & mail PDF/HTML/Markdown/text/DOCX/images to US addresses; pay per call in x402 USDC on Base.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI assistants to print documents, manage print queues, and control printers on macOS/Linux systems via the CUPS printing system. Supports printing PDFs, text files, and other formats with options like duplex printing, landscape orientation, and multiple copies.613 npm12MIT
- AlicenseNot gradedqualityCmaintenanceLet Claude print documents on any USB or network printer.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables Claude AI to securely access files, run shell commands, and search through a Windows computer with explicit user permission.7 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to submit PDFs or JSON-rendered templates to local printers, check printer status, and manage print jobs through MCP tools.11 npmMIT