Skip to main content
Glama

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 jobs

  • Select 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-check

  • Print 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\batch1

Quick 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 stop

Flag

Meaning

--copies N

Number of copies, from 1 to 20

--printer NAME

Installed printer name or alias

--profile NAME

Use a saved print profile

--pages 1-3,5

Select PDF pages

--bw / --color

Print in monochrome or color

--duplex long

Two-sided printing on the long edge

--duplex short

Two-sided printing on the short edge

--duplex off

Single-sided printing

--orientation portrait|landscape

PDF orientation

--recursive

Include subfolders

--pdf

Select PDF files only

--name GLOB

Include matching filenames, such as TTSTHAC*

--exclude GLOB

Exclude matching filenames

--newer-than DATE

Include files modified after the given date or time

--preview

List files and estimate sheets without printing

--force

Bypass duplicate and large-job safeguards

Stop all printing

/print stop

This 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.pdf comes before file10.pdf

  • Does not search subfolders unless --recursive is used

  • Treats /print as an explicit request to print, so it does not ask for confirmation again

  • Does 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 draft

Printer aliases and path aliases are empty by default. Configure them for the current computer. Two profiles are included:

  • invoice: one copy, color, single-sided

  • draft: 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\folder

Natural-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

PDF

.pdf

pdf-to-printer with its bundled SumatraPDF; no PDF file association is required

Word

.doc, .docx, .docm, .rtf

Microsoft Word COM automation

Excel

.xls, .xlsx, .xlsm, .csv

Microsoft Excel COM automation

PowerPoint

.ppt, .pptx, .pptm

Microsoft PowerPoint COM automation

Images

.bmp, .gif, .jpg, .jpeg, .png, .tif, .tiff

Silent Windows System.Drawing.Printing.PrintDocument

Text

.txt, .log

Silent Windows System.Drawing.Printing.PrintDocument

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-printer command-line interface

  • Word, Excel, and PowerPoint use hidden COM automation with alerts disabled

  • Images and text are sent directly to the Windows spooler using StandardPrintController

  • Unsupported 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

paths

string[]

required

Files or folders to inspect

recursive

boolean

false

Include subfolders

extensions

string[]

all supported

Limit extensions, such as ['pdf', 'docx']

max_files

number

500

Maximum result count, from 1 to 1000

name_pattern

string

unrestricted

Filename inclusion glob

exclude_pattern

string

none

Filename exclusion glob

newer_than

string

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

paths

string[]

required

Files or folders to print

recursive

boolean

false

Include subfolders

extensions

string[]

all supported

Limit file types

max_files

number

500

Maximum file count, from 1 to 1000

printer

string

Windows default

Installed printer name or alias

copies

number

1

Copies, from 1 to 20

pages

string

all pages

PDF pages such as 1-3,5

duplex

enum

simplex

simplex, duplex-long-edge, or duplex-short-edge

orientation

enum

document default

portrait or landscape for PDF

monochrome

boolean

false

Print PDF in monochrome

profile

string

none

Saved print profile

name_pattern

string

unrestricted

Filename inclusion glob

exclude_pattern

string

none

Filename exclusion glob

newer_than

string

unrestricted

Include files modified after a date/time

safety_threshold

number

20

File count above which force is required

force

boolean

false

Bypass duplicate and large-job safeguards

confirmed

true

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

quick_print

Parses /print flags and previews or prints the result

cancel_print_jobs

Cancels selected job IDs or every job for one printer

stop_all_printing

Cancels pending jobs in every Windows print queue

get_print_history

Reads up to 500 jobs submitted through Printer MCP

retry_print_job

Reprints the same files and options using a history ID

get_print_settings

Reads aliases, profiles, and safety settings

set_printer_alias

Adds or updates an alias after verifying the printer exists

set_path_alias

Adds or updates an alias after verifying the path is accessible

set_print_profile

Adds or updates a reusable print profile

remove_print_setting

Removes a printer alias, path alias, or profile

set_print_safety

Configures the large-job threshold and duplicate window

printer_health_check

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.json

  • Reprinting an identical file within five minutes stops the whole job and reports the earlier history ID

  • Use --force only when the duplicate is intentional

  • Jobs containing more than 20 files stop and report the file count and page estimate

  • Change these defaults through set_print_safety or data/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 --version

Installation

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 test

npm 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 $entryPoint

Alternatively, 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.0

Verify the registration:

codex mcp get printer
codex mcp list

Completely 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 start

The 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_PATH

This 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.md

Development

npm run check
npm test

src/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

  1. Run codex mcp get printer to confirm the server is registered.

  2. Open %USERPROFILE%\.codex\mcp-servers\printer-mcp and run npm test.

  3. Completely close and reopen Codex.

No printer is found

Check Windows Settings > Bluetooth & devices > Printers & scanners, then run:

Get-Printer | Select-Object Name, DriverName, PortName

Set a Windows default printer or specify an installed printer by name.

PDF printing fails

  • Run npm install again to restore all pdf-to-printer files

  • Check whether antivirus software quarantined the bundled SumatraPDF executable

  • Verify the printer name with list_printers

  • Test 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.0

Restart Codex afterward. Split large jobs into batches to make successes and failures easier to track.

Current limitations

  • /print defaults to one copy and does not search subfolders

  • PDF 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.Drawing without opening Paint or Notepad

  • Cancellation 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 printer

This 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 tools
cancel_print_jobsCancel queued print jobsA
Destructive

Cancels specified Windows print queue job IDs, or all queued jobs for one printer. This cannot be undone and requires explicit user intent.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idsNo
printerNo
all_jobsNo
confirmedYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 sheetsB
Read-only

Previews selected files and estimates PDF pages and paper sheets before printing. Non-PDF files are conservatively estimated. Does not print.

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesNo
pathsYesFile/folder paths or @path-alias values.
copiesNo
duplexNosimplex
max_filesNo
recursiveNo
extensionsNo
newer_thanNoOnly files modified after this ISO date/time.
name_patternNoFilename glob such as TTSTHAC*.pdf.
exclude_patternNoFilename glob to exclude.

TDQS

B3.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 historyA
Read-only

Lists recent Printer MCP submissions and stable history IDs for retry and duplicate diagnostics. Does not print.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 queueB
Read-only

Lists current print jobs for one printer or alias. Does not change jobs.

ParametersJSON Schema
NameRequiredDescriptionDefault
printerNo

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 profilesA
Read-only

Lists saved printer aliases, path aliases, profiles, duplicate window, and safety threshold. Does not print.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 jobA
Read-only

Previews files selected by paths, aliases, recursion, extension, glob, exclusion, and date filters. Does not print.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsYesFile/folder paths or @path-alias values.
max_filesNo
recursiveNo
extensionsNo
newer_thanNoOnly files modified after this ISO date/time.
name_patternNoFilename glob such as TTSTHAC*.pdf.
exclude_patternNoFilename glob to exclude.

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 printersA
Read-only

Lists installed Windows printers, aliases, and the default printer. Does not print.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 healthA
Read-only

Checks Windows printing, default printer, PDF engine, Office apps, local storage, and optional local/UNC paths. Does not print.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsNo

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

quick_printRun a quick print commandB
Destructive

Parses the argument text from /print, including flags, aliases, profiles, filters, preview, and force. Requires explicit slash-command intent and confirmed=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYes
confirmedYes

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
nameYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 jobA
Destructive

Prints the original files and options from a prior Printer MCP history ID. Requires explicit user intent and confirmed=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmedYes
history_idYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
aliasYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasYes
printerYes

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
pagesNo
copiesNo
duplexNo
printerNo
monochromeNo
orientationNo

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
safety_thresholdNo
duplicate_window_minutesNo

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 printingA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmedYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 17 tool updatesv1.1.0
    • First observedcancel_print_jobs
    • First observedestimate_print_job
    • First observedget_print_history
    • First observedget_print_queue
    • First observedget_print_settings
    • First observedinspect_print_job
    • First observedlist_printers
    • First observedprint_paths
    • First observedprinter_health_check
    • First observedquick_print
    • First observedremove_print_setting
    • First observedretry_print_job
    • First observedset_path_alias
    • First observedset_print_profile
    • First observedset_print_safety
    • First observedset_printer_alias
    • First observedstop_all_printing

TDQS

A3.6/5.0

Scored across 17 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count4/5

17 tools is slightly heavy but each earns its place across aliases, profiles, queue control, history, and diagnostics. No obvious redundant or filler tools.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    6
    13 npm
    12
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to submit PDFs or JSON-rendered templates to local printers, check printer status, and manage print jobs through MCP tools.
    11 npm
    MIT