Printix MCP Server
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., "@Printix MCP Serverlist all printers in the Berlin site"
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.
Printix MCP Server
MCP server for Printix's Cloud Print API (now part of Tungsten Automation) - printer/queue, site, workstation, and read-only user/group lookups - for AI assistants and the WYRE Conduit gateway.
Authentication
Printix issues a client_id/client_secret pair per tenant, obtained through the Printix Administrator dashboard - there is no single WYRE-level integration credential; each MSP-managed customer tenant supplies its own pair, and only one pair is active per tenant at a time (issuing a new one invalidates the previous pair).
The pair is exchanged for a short-lived (~1-hour) OAuth access token via POST https://auth.printix.net/oauth/token (grant_type=client_credentials, client_id/client_secret in a form body). This server handles that exchange internally, and re-authenticates the same way when a token expires or is rejected - Printix does not support refresh tokens (removed 2024-12-17; the docs describe the prior refresh-token approach as "not standard OAuth2").
Callers only ever need to supply the two long-lived values below - not the short-lived access token.
Every resource in Printix's Cloud Print API is scoped under a tenant path (/cloudprint/tenants/{tenantId}/...). This server resolves the tenant ID once per credential pair by calling the API root (GET /cloudprint, the documented HATEOAS entry point that "returns a list of links to accessible tenants") and caching it alongside the access token.
Related MCP server: PrintVaultMCP
Configuration
Env var | Description |
| Client ID from the Printix Administrator dashboard. |
| Client secret paired with the client ID. |
|
|
|
|
| When set, the HTTP transport requires a valid |
|
|
Tools
Tenant
printix_get_tenant- get the tenant this credential pair is scoped to (tenant ID and its API root link).
Printers / Queues
printix_list_printers- list print queues/printers, optionally filtered and paged.printix_get_printer- get a single printer/queue and its properties/capabilities.
Sites
printix_list_sites- list sites (physical locations), paged.printix_get_site- get a single site's details.
Workstations
printix_list_workstations- list workstation monitoring data, paged.printix_get_workstation- get a single workstation's details.
Users (read-only)
printix_list_users- list users, optionally filtered by query/role, paged.printix_get_user- find a single user by ID.
Groups (read-only)
printix_list_groups- list/search groups, paged.printix_get_group- fetch a single group's details.
Scope
This is a v1 surface covering the MSP fleet-monitoring/admin value of Printix's Cloud Print API, not end-user print-job workflow. Explicitly out of scope for now:
Print Jobs (submit/retrieve/delete) - end-user print workflow, not MSP admin value.
Cards (register/search/delete) - a niche auth-card identity feature.
Networks and SNMP Configurations - provisioning-heavy, higher-risk write surfaces.
User and group mutation (create/delete) - real account-management consequences (licensing, access removal); only read (list/get) is exposed for both. Worth a deliberate separate decision later.
They can be added as a follow-up once there's a clear MSP workflow need.
This server was built against the Cloud Print API (printix.github.io), not the narrower Partner API (printix.bitbucket.io), which is scoped to tenant provisioning rather than day-to-day fleet management.
Development
npm install
npm run build
npm test
npm run lint # tsc --noEmitDocker
docker build -t printix-mcp .
docker run -p 8080:8080 \
-e PRINTIX_CLIENT_ID=... \
-e PRINTIX_CLIENT_SECRET=... \
printix-mcpAvailable Tools
11 toolsprintix_get_groupA
Fetch a single Printix group and its details by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| groupId | Yes | Printix group ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of indicating behavior. 'Fetch' conveys a read-only retrieval operation, but the description does not disclose what happens for invalid IDs, whether related details are nested, or any other runtime behavior. It is minimally transparent 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?
The description is a single, front-loaded sentence with no filler. Every word contributes meaning, and the key qualifier ('by ID') appears early enough for an agent to understand the tool's core behavior quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter lookup tool, the description covers what the tool does, the target resource, and the identifier needed. It lacks details about return structure or error behavior, but given the low complexity and absence of an output schema, it is reasonably complete for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the 'groupId' parameter. The description adds little beyond the schema, only reinforcing that the group is fetched by ID. This meets the baseline without adding extra semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') with a clear resource ('a single Printix group') and a distinguishing qualifier ('by ID'). This cleanly differentiates it from printix_list_groups and the other get/list sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context: use this when you have a specific group ID and want that group's details. However, it does not explicitly mention alternatives like printix_list_groups or state when not to use this tool, so guidance is only implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
printix_get_printerA
Get a single Printix printer/queue and its properties/capabilities by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| printerId | Yes | Printix printer/queue ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It communicates that this is a read operation ('Get') and that the result contains properties/capabilities, but it does not address error behavior, invalid IDs, or authorization needs. Some useful context is provided, but significant behavioral gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that leads with the action and object, and every phrase earns its place: 'single' disambiguates from list operations, 'by ID' clarifies the lookup method, and 'properties/capabilities' signals return content. It is tight and free of 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 low-complexity tool with one required parameter and no output schema, the description covers the key facts: what is retrieved, how it is identified, and what kind of data is returned. Minor gaps such as error semantics and exact return structure prevent a perfect score, but the description is largely sufficient for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes printerId as 'Printix printer/queue ID' with 100% coverage. The description only restates the lookup concept as 'by ID' and adds no additional semantic meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb ('Get'), names the specific resource ('single Printix printer/queue'), and adds scope ('by ID') and return content ('properties/capabilities'). This clearly differentiates it from sibling tools like printix_list_printers without needing to inspect 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?
The phrase 'by ID' implies the tool is for fetching a specific resource when an identifier is known, but it does not explicitly state when to use it instead of alternatives or how it relates to printix_list_printers. Usage guidance is present only by implication, not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
printix_get_siteB
Get a single Printix site (physical location) by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | Yes | Printix site ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only says 'Get' implying a read operation, but doesn't disclose error behavior (e.g., 404 if site not found), required permissions, or what the response contains. For a simple read tool, some minimal disclosure would be expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that gets to the point immediately. There is zero waste, and it is appropriately sized for a tool with one parameter.
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?
The tool is simple (one param, no output schema), so a minimal description can suffice. However, the description doesn't mention what the response contains (e.g., site details) or any prerequisites. It's adequate for an agent to infer the basic call, but lacks the richness expected from a well-documented 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 100% (siteId is described as 'Printix site ID'). The description adds no additional meaning beyond the schema; it merely restates the parameter name. Baseline 3 is appropriate since the schema already documents the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action (Get), the resource (single Printix site), and the key detail (by ID). This clearly distinguishes it from list_sites, which retrieves multiple sites. However, it doesn't explicitly differentiate from other get_* siblings beyond the resource name, which is the expected pattern.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this vs alternatives. It doesn't mention that you need a valid site ID (perhaps from list_sites) or that this is for a specific known site. The description is silent on usage context, leaving the agent to infer that it's for a specific site given an ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
printix_get_tenantA
Get the Printix tenant this credential pair is scoped to (tenant ID and its API root link).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. The word 'Get' plus the stated output (tenant ID and API root link) clearly indicates a read-only retrieval operation with no side effects. This is sufficient transparency for a zero-parameter tool, though it does not mention failure modes or auth requirements beyond the implicit credential scoping.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire definition is a single concise sentence that delivers the core purpose and output information without waste. It is front-loaded and easy to parse.
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 getter with no output schema, the description provides the essential information: what it retrieves and what it returns. Nothing critical for 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?
The tool has zero parameters, so there are no parameter semantics to explain. The baseline of 4 applies because the description adds no parameter-related detail, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and names a distinct resource ('the Printix tenant'), which clearly sets it apart from sibling tools that operate on workstations, users, groups, printers, sites, etc. It also clarifies that the returned data is scoped to the current credential pair, giving a precise sense of what is being retrieved.
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 context is clear: this tool is for retrieving the tenant associated with the current credentials. It does not explicitly list alternatives or say when not to use it, but with no parameters and a unique resource among siblings, the usage context is strong enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
printix_get_userA
Find a single Printix user by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | Printix user ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It communicates that this is a lookup/read operation for a single entity, but it does not describe response behavior, not-found handling, authentication needs, or side effects. Basic transparency is present, but richer context is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action, resource, and identifier. There is no wasted wording or redundant elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter getter with no output schema, the description is mostly complete: it names the entity, the lookup mode, and the required identifier. It does not specify the return shape or error behavior, but the low complexity makes this a minor gap rather than a major 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 description coverage is 100%, and the schema already defines userId as the Printix user ID. The description adds no additional meaning or constraints beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Find'), names the resource ('Printix user'), and identifies the distinguishing scope ('single ... by ID'). This clearly separates it from list-oriented siblings like printix_list_users and other get tools.
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 use when the caller has a specific user ID and needs one record rather than a list, but it does not explicitly state when to use this tool versus alternatives such as printix_list_users or printix_get_group. The guidance is inferable, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
printix_get_workstationA
Get a single Printix workstation by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| workstationId | Yes | Printix workstation ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure. 'Get' clearly indicates a read operation with no side effects, but the description does not mention return format, error behavior, or required permissions. For a simple getter, this is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes to the agent's understanding of the operation and target resource.
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 getter with high schema coverage, the description covers the essential selection and invocation context. The lack of an output schema is partially mitigated by the straightforward nature of a 'get' operation, though adding common response or not-found behavior would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter is already documented as 'Printix workstation ID.' The description repeats the concept without adding new semantic detail such as format, source, or validation rules, so it does not elevate beyond 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?
The description clearly states the action ('Get'), the resource ('a single Printix workstation'), and the identifier ('by ID'). It differentiates from list-style siblings by conveying that this is a single-resource lookup, though it does not explicitly name alternatives.
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 'by ID' implies this tool should be used when the agent already has a specific workstationId and needs that single resource. However, it does not explicitly contrast with printix_list_workstations or state when not to use it, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
printix_list_groupsA
List/search Printix groups for the tenant, paged.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number. | |
| query | No | Optional free-text search filter. | |
| pageSize | No | Results per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It does disclose pagination and tenant scoping, but it does not mention defaults, ordering, query matching behavior, or output format. This is minimal but not misleading.
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 short, front-loaded sentence that names the action, resource, scope, and pagination behavior. There is no filler or redundant restating of the tool name.
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 list/search tool with a fully documented input schema, the description provides the essential purpose and pagination behavior. However, with no annotations and no output schema, it leaves open details like default page size and result shape, so it is adequate but 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?
The input schema already documents all three parameters with 100% coverage, so the description does not need to repeat them. It adds only the alignment of 'search' with query and 'paged' with page/pageSize, without adding defaults, bounds, or parameter interactions.
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 action ('List/search'), a specific resource ('Printix groups'), and a scope ('for the tenant'), plus pagination. This clearly separates it from sibling tools like printix_get_group, which retrieves a single group.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this tool when you need to list or search groups rather than fetch one group. It does not explicitly name the alternative get_group tool or state exclusions, but the 'list/search' phrasing and the sibling tool names make the intended usage reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
printix_list_printersA
List Printix print queues/printers for the tenant, optionally filtered by search query and paged.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number. | |
| query | No | Optional free-text search filter. | |
| pageSize | No | Results per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the burden of behavioral disclosure. It does convey that this is a read-style listing operation with optional filtering and paging, but it does not explain query matching behavior, default page size, result shape, or any tenant-scoping caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the main purpose and then mentions the optional filter and pagination. There is no redundant or unnecessary content.
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 list operation with fully documented optional parameters, the description provides adequate context. However, with no output schema, it would benefit from mentioning what fields or objects are returned, and from noting pagination defaults such as page size 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 100%, so the schema already documents all three parameters. The description adds only that query is a search filter and the result is paged, which is minimal but acceptable given the schema already provides per-parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('List'), a specific resource ('Printix print queues/printers'), and a scope ('for the tenant'). It also distinguishes itself from sibling tools like printix_get_printer, which retrieves a single printer rather than listing all of them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates this is the tool for listing printers tenant-wide, with optional query filtering and pagination. It does not explicitly mention printix_get_printer as the alternative for retrieving a single printer, so it lacks an explicit exclusion, but the listing context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
printix_list_sitesA
List Printix sites (physical locations) for the tenant, paged.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number. | |
| pageSize | No | Results per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does mention that the tool is 'paged', which is a behavioral detail, and 'for the tenant' clarifies scope. However, it does not disclose potential side effects (though 'List' implies read-only), authentication requirements, error behavior, or pagination defaults. The description adds minimal behavioral context beyond the implicit read-only nature and paging, so it meets the baseline but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It front-loads the verb and resource, then adds clarifying scope and pagination. Every element ('List', 'sites', 'physical locations', 'for the tenant', 'paged') contributes value, making it efficient and well-structured.
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?
The tool is a simple list operation with two optional parameters and no output schema or annotations. The description covers the core purpose, scope, and paging. It does not specify the return format or field details, but for a list operation this is often acceptable given the agent can infer from the tool name and context. Minor gaps like default page size or max page size are not critical for calling the tool correctly. The description is sufficiently complete for a low-complexity 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 coverage is 100%: both 'page' and 'pageSize' have descriptions ('Zero-based page number.' and 'Results per page.'). The description's mention of 'paged' adds no new parameter semantics beyond what the schema already provides. Since coverage is high, the baseline of 3 is appropriate; the description does not need to compensate for missing schema details.
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 clear verb 'List', a specific resource 'Printix sites', and clarifies that sites mean 'physical locations'. It also specifies the scope 'for the tenant' and notes pagination. This clearly distinguishes it from siblings like printix_get_site (singular) and other list tools (users, groups, printers, workstations) without needing to open schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives. It does not mention that printix_get_site should be used for a single site, nor does it indicate any exclusions or conditions. The only hint is the plural 'sites' in the name, which is implicit. No explicit when-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
printix_list_usersA
List Printix users for the tenant, optionally filtered by search query or role, paged.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number. | |
| role | No | Optional role filter. | |
| query | No | Optional free-text search filter. | |
| pageSize | No | Results per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden of disclosing behavior. It does mention paging and optional filters, which are meaningful traits. It does not mention return shape, default page size, ordering, or authentication expectations, though these are less critical for a list-style read operation.
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. It efficiently communicates action, scope, optional filters, and pagination, and every phrase contributes useful 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 simple list tool, the description covers the essential context: what is listed, scope, filtering, and pagination. The absence of an output schema is not critical because 'List users' implies a collection of user objects, though slight gaps remain around response format and default paging 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 100%, so each parameter is already documented. The description adds the organizing idea that query and role are optional filters and that page/pageSize control paging, but it does not add per-parameter meaning beyond the schema. This matches the baseline for high schema coverage.
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 ('List') and resource ('Printix users'), with clear tenant scope and optional filters/paging. This clearly distinguishes it from sibling tools like printix_get_user (single user) and printix_list_groups (different resource).
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 intended use is inferable: use this when you need to enumerate or search users in the tenant. However, it does not explicitly state when to prefer this over alternatives like printix_get_user or printix_search-type tools, nor does it mention exclusions or fallback guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
printix_list_workstationsA
List Printix workstations (client-device monitoring data) for the tenant, paged.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number. | |
| pageSize | No | Results per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It does disclose paging behavior and the data category, but it does not mention whether results have defaults, ordering, rate limits, or any authentication requirements. For a simple read-only list 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?
The entire description is a single, efficient sentence that front-loads the resource and action, then adds scope and pagination. 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?
This is a low-complexity list tool with fully described parameters, no required arguments, and no output schema. The description names the resource, tenant scope, and paging behavior, which is sufficient for an agent to select and invoke it correctly. A default page-size mention would have made it 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?
The input schema already fully documents both parameters (page and pageSize) with 100% coverage, so the description does not need to add parameter detail. The word 'paged' reinforces the schema but adds little beyond it, matching the baseline for high schema coverage.
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 clear verb ('List'), a specific resource ('Printix workstations'), and an explicit scope ('for the tenant'). It also clarifies that the data is 'client-device monitoring data,' which distinguishes it from other list operations and from the singular get_workstation 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 tenant-level scope and paging behavior imply when this tool would apply, and the list/get sibling pattern makes the intended general usage inferable. However, the description does not explicitly say when to choose this over printix_get_workstation or mention any exclusions.
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.
11 tool updates
v0.1.0- First observed
printix_get_group - First observed
printix_get_printer - First observed
printix_get_site - First observed
printix_get_tenant - First observed
printix_get_user - First observed
printix_get_workstation - First observed
printix_list_groups - First observed
printix_list_printers - First observed
printix_list_sites - First observed
printix_list_users - First observed
printix_list_workstations
TDQS
Scored across 11 tools
Every tool targets a distinct resource/action pair: each of the five core resources has one list operation and one get-by-ID operation, with no overlapping verbs. The only singleton, get_tenant, is clearly unique.
All tool names use the same printix_ prefix with a consistent verb_noun pattern: printix_list_* for collection queries and printix_get_* for single-resource lookups. There is no mixing of styles or vague verb usage.
11 tools is a well-scoped count for a Printix query surface: five resources are each covered by a list/get pair, plus the tenant lookup. No tool is redundant or unnecessary.
The read-only resource coverage is broad, but the server has no create/update/delete or print-job/lifecycle operations, so any management workflow beyond listing and fetching dead-ends. This is a significant gap for a Printix administration context.
Maintenance
Related MCP Connectors
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.
Connect AI agents to Process Street workflows, tasks, runs, data sets, and operational records.
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
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 npm11MIT
- AlicenseAqualityFmaintenanceEnables AI assistants to manage 3D printing inventory, filament spools, printers, projects, and print trackers through a self-hosted Print Vault instance.40AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Bambuddy's 3D printer management API, including printer status, print queue, filament spools, and camera snapshots.5GPL 3.0
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to submit PDFs or JSON-rendered templates to local printers, check printer status, and manage print jobs through MCP tools.469 npmMIT