Skip to main content
Glama

Server Details

Phasio is the operating platform contract manufacturers run on: quoting, production, and back office across additive, CNC, molding, and every process in between. This connector gives LLMs like Claude, ChatGPT and Grok access to your Phasio workspace, so you can interact naturally with your manufacturing data.

Commercial - Which customers drive the most revenue? How storefront self-service orders compare against quotes your team builds by hand? Where do carts convert and where they stall?

Parts - Inspect any parts volume, bounding box, minimum wall thickness and watertightness, with rendered orthogonal views. Find near-duplicates of a part you've already made before you quote it again.

Pricing - Run quotes against parts using your LLM. Ask the model to explain why a part got a certain price, and to tune and refine your pricing equations.

Production - Where a job's parts sit on the routing right now? What's been scrapped and why, and which other jobs were caught by the same failed build?

Setup - Easily configure pricing equations, shop floor routing and your QMS agentically.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.2/5.0

Scored across 19 tools

Disambiguation5/5

Each tool targets a distinct operation: read-only queries (query, aggregate), pricing calculations (generateQuote, explainPrice), configuration inspection (describeConfiguration, describeDataModel, describeQueryableFields), production monitoring (getProductionHistory, getProductionProgress), and write actions (save, delete, publishEquation). Overlapping concepts like pricing are clearly differentiated (explainPrice for existing lines, generateQuote for hypotheticals).

Naming Consistency4/5

Tool names mostly follow a verb_noun pattern (getCustomerOverrides, inspectPartRevision, publishEquation), but there is a mix of verbs (aggregate, delete, query, save) and a describe* group (describeConfiguration, describeDataModel, describePricingEquationApi, describeQueryableFields). While not perfectly uniform, the naming is readable and predictable enough for an agent to infer purpose.

Tool Count4/5

With 19 tools, the server is slightly above the ideal 3-15 range but each tool serves a clear, non-redundant purpose in the manufacturing/pricing domain. The count feels justified given the breadth of functionality (pricing, production, configuration, data model, document handling) without being excessive.

Completeness4/5

The tool surface covers the core workflows: reading/querying data, explaining and generating quotes, inspecting parts, tracking production, and managing configuration entities via save/delete. Minor gaps exist (e.g., no direct order creation, which is likely handled externally), but the primary operations are well-covered with no dead ends.

Available Tools

19 tools
aggregateA
Read-onlyIdempotent
Inspect

Aggregate a dataset: sum/avg/count/min/max of a field, optionally grouped by one or more fields, with an optional RSQL filter. Use this for cross-cutting questions like highest-value customers (aggregate order, sum, localPrice, groupBy=[customerOrganisationName], filter="state==ORDER") or revenue by process. Datasets that carry a voided/deleted flag exclude those rows by default (see the Scope line from describeQueryableFields); line-item datasets like requisition are NOT scoped by their parent order's status, so filter explicitly for placed-orders-only revenue. Datasets: order, partRevision, partSpecification, productionStep, customerOrganisation, cart, requisition, workOrder, processPrices, materialPrices, postProcessing, typescriptEquation, operation, batchMovement, scrap, material, color, jurisdiction, leadTime, precisionPrices, infill, taxJurisdiction, taxComponent, paymentTerm, discount, shippingBox, shippingMethod, routingTemplate, kanbanColumn, documentTemplate. Call describeQueryableFields(entity) for valid field names.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo'asc' or 'desc' by the metric value (default desc).
fieldNoNumeric field to aggregate (required for all metrics except count). Use describeQueryableFields(entity) for valid names.
limitNoMax groups to return (1-50, default 20).
entityYesDataset to aggregate. One of: order, partRevision, partSpecification, productionStep, customerOrganisation, cart, requisition, workOrder, processPrices, materialPrices, postProcessing, typescriptEquation, operation, batchMovement, scrap, material, color, jurisdiction, leadTime, precisionPrices, infill, taxJurisdiction, taxComponent, paymentTerm, discount, shippingBox, shippingMethod, routingTemplate, kanbanColumn, documentTemplate.
filterNoOptional RSQL filter applied before aggregating (same syntax as query).
metricYessum, avg, count, min or max.
groupByNoOptional fields to group by (e.g. customerOrganisationName, technology). Omit for a single total.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond that: default exclusion of voided/deleted rows, the line-item scoping caveat, and the default sort/limit behavior (desc, 20). It does not describe the exact return shape, but with no output schema and a read-only aggregation tool, the added context is strong.

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?

The description is dense but well-organized: the core operation and examples come first, followed by the scoping caveat and dataset list. The dataset list is long but necessary since the schema repeats it and the tool needs valid entity names. Every sentence earns its place, though the list could arguably be trimmed by pointing to describeQueryableFields.

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 aggregation tool with 7 parameters and no output schema, the description covers the key decision points: which metric needs which field, how grouping works, how filtering works, and the voided/deleted scoping caveat. It does not describe the response format, but for an aggregation tool the return shape is fairly predictable and the description already points to describeQueryableFields for field discovery.

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 100%, so the schema already documents every parameter. The description adds meaning by explaining the metric-field relationship ('field required for all metrics except count'), giving a concrete groupBy/filter example, and clarifying that omitting groupBy yields a single total. It also points to describeQueryableFields for valid field names, which is useful cross-tool guidance.

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 ('Aggregate a dataset') and immediately enumerates the supported operations (sum/avg/count/min/max), optional grouping, and optional filtering. It also names concrete use cases (highest-value customers, revenue by process) and lists the valid datasets, which distinguishes it from sibling tools like query and explainPrice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use this tool ('Use this for cross-cutting questions like...') and gives a concrete example with parameters. It also warns about a subtle scoping issue: datasets with a voided/deleted flag exclude those rows by default, and line-item datasets like requisition are NOT scoped by parent order status, so the agent must filter explicitly. This is exactly the kind of when/why guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteA
DestructiveIdempotent
Inspect

Delete one row of a writable entity: leadTime, materialPrices, operatorSettings, paymentTerm, postProcessing, processPrices, shippingMethod, taxComponent, taxJurisdiction, typescriptEquation. Irreversible. Each entity has its own refusals (see describeQueryableFields(entity)); e.g. a live pricing equation is refused.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesId of the row to delete.
entityYesEntity to delete from. One of: leadTime, materialPrices, operatorSettings, paymentTerm, postProcessing, processPrices, shippingMethod, taxComponent, taxJurisdiction, typescriptEquation. The server validates this value; describeDataModel names the current writable set.

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 description aligns with that. It adds value by stating the operation is irreversible and by explaining that each entity has its own refusal rules (e.g., live pricing equation), which is beyond what annotations provide.

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 sentences, front-loaded with the action and entity list, and includes the critical irreversibility warning immediately. No wasted words.

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 destructive tool with two parameters and no output schema, the description covers the core operation, entity set, irreversibility, and refusal mechanism. It does not mention the return value or error handling, but these are not strictly necessary for a delete operation given the annotations and simple parameter set.

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 100% (both 'entity' and 'id' have descriptions). The description adds a note that the server validates the entity value and that describeDataModel names the current writable set, which is a minor enhancement but does not materially expand on parameter semantics beyond the schema.

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 states a specific verb ('Delete') and resource ('one row of a writable entity') and enumerates the exact entities it applies to. This clearly distinguishes it from sibling tools like 'save' or 'update' by specifying the operation and scope.

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 description provides clear context for when to use it (to delete a row) and cautions about irreversibility and entity-specific refusals, referencing describeQueryableFields for details. It does not explicitly name alternative tools or exclusion conditions, but the context is sufficient for an agent to decide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

describeConfigurationA
Read-onlyIdempotent
Inspect

Describe the manufacturer's setup: a summary of processes, materials, finishing, tax, shipping and documents, plus the operator-level settings that have no dataset — storefront controls (login, order limits, invoice/PO, feature flags), currencies and exchange rates, accounting integration, contact details, permitted and email domains, payment information and onboarding progress. Pass 'section' to read one part. For row-level detail use query(entity=...); for problems in the setup use lintConfiguration.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionNoOptional: one section only. One of: summary, operator, storefront, currencies, accounting, contact, domains, notifications, payment, onboarding. Omit for all sections.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context that these are operator-level settings with 'no dataset' and that section limits the output, but it does not address return format or pagination. No contradiction with 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?

The first sentence is dense but information-rich, enumerating coverage areas without filler. The two follow-up sentences are crisp and provide usage and routing. Minor redundancy with the schema's section list prevents a 5.

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?

Given no output schema, the description covers all major content areas and explains how to scope a read. It doesn't specify the exact return envelope or formatting, but for a read-only describe tool with one optional parameter, that is a minor 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?

The schema description covers 100% of the single parameter, including the list of section values and the default behavior of omitting section. The description's 'Pass section to read one part' adds no new semantic detail beyond the schema.

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 opening phrase 'Describe the manufacturer's setup' names a specific verb and resource, then enumerates the content scope clearly. It also distinguishes itself from row-level and lint tools by naming query and lintConfiguration, so an agent can tell it apart from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to pass 'section' to read one part, and gives clear routing rules: use query(entity=...) for row-level detail and lintConfiguration for setup problems. This provides both when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

describeDataModelA
Read-onlyIdempotent
Inspect

Explain the manufacturer's data model: what each query dataset means and how they relate (part -> specification -> requisition -> order, with production and pricing attached). Call this first to understand how to traverse between datasets.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safe read-only nature is fully covered by structured data. The description adds no additional behavioral context such as authentication or rate limits, but none is needed here; it provides conceptual rather than behavioral transparency.

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 sentences, each earning its place: the first defines the tool's content and structure, the second gives a precise invocation directive. The description is information-dense with no filler or repetition.

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 an introductory, zero-parameter, read-only explanatory tool, the description is complete. It tells the agent exactly what will be learned, how datasets relate, and when to call it first, without needing to document parameters or return formats.

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 and the input schema is empty with 100% schema description coverage, so no parameter documentation is required. The description correctly avoids inventing parameter details, and the baseline for a zero-parameter tool is satisfied.

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 clearly states a specific verb ('Explain') and resource ('the manufacturer's data model'), and details the content: what each query dataset means and how they relate. The part -> specification -> requisition -> order chain with production and pricing distinguishes this from sibling tools like describeQueryableFields and describeConfiguration.

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 instruction 'Call this first to understand how to traverse between datasets' gives explicit usage context and temporal placement among sibling tools. It does not name alternatives or exclusions, but the 'first' guidance is strong enough for an agent to know when to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

describePricingEquationApiA
Read-onlyIdempotent
Inspect

Start here before reading, writing or changing a pricing equation. Returns the TypeScript contract the equation runs against (specification, revision, requisition, customer, workflow, done(), variable(), round, useDimension, createBands; for scope ORDER: parts, subtotal, customer, addLineItem), narrowed to the given scope + ownerId: its technology, material names and material variable names, lead-time names, and which modules the manufacturer has. Explains the loop: save(entity=typescriptEquation) to validate and store a version, generateQuote(equationId) to test it, then — only on the manufacturer's explicit request — publishEquation to make it live. Pass includeSource=true to also get the live equation's source, or equationId= to get the source of one specific version (a draft, for example) with its live/not-live state.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeYesWhich equation to describe the equation API for: PROCESS (a manufacturing process), POST_PROCESSING (a finish), or ORDER (the manufacturer's single order-level equation that adds whole-order line items). Same values as typescriptEquation.scope.
ownerIdNoThe owner: processPrices.id (UUID) for scope PROCESS, postProcessing.id (integer, as a string) for scope POST_PROCESSING. Omit for scope ORDER. Not an equationId.
equationIdNoA typescriptEquation id (UUID) of the same scope + ownerId: append THAT version's source instead of the live one, live or not. Use it to read back a draft before you test, revise or publish it.
includeSourceNotrue to append the LIVE equation's name, variables and full source. Default false.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it as read-only, idempotent, and non-destructive. The description adds that it returns the contract and optionally the live source or a specific version, and explains the workflow loop. It does not contradict the annotations and provides useful context beyond the safety flags, such as the fact that it returns source only when requested.

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?

The description is a single dense paragraph but front-loads the critical instruction ('Start here') and then enumerates the contract and workflow. While long, every sentence adds value—no filler. It could be broken into bullets, but the structure is logical and easy to scan.

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?

With no output schema, the description must explain what the tool returns, which it does thoroughly by listing contract components and explaining the workflow. It also covers optional parameters and their effects. For a complex tool that serves as an entry point, this is 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 schema covers all four parameters with detailed descriptions, so the baseline is 3. The description adds value by explaining the interplay: 'Pass includeSource=true to also get the live equation's source, or equationId=<id> to get the source of one specific version' and clarifying ownerId omission for ORDER scope. This goes beyond the schema's individual parameter descriptions.

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 'Start here before reading, writing or changing a pricing equation,' immediately establishing its role as an entry point. It clearly states it 'Returns the TypeScript contract the equation runs against' and enumerates the contract contents, which is a specific verb and resource. This distinguishes it from sibling tools like save, generateQuote, and publishEquation, which are part of the workflow it describes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to start here before any other pricing-equation operation, then outlines the sequence: save to validate, generateQuote to test, and publishEquation only on explicit request. It also clarifies when to use includeSource and equationId, and that ownerId is omitted for ORDER scope. This gives clear when-to-use and alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

describeQueryableFieldsA
Read-onlyIdempotent
Inspect

List the filterable fields (and enum values) for a query dataset, so you can build a valid RSQL filter. For a writable entity it also lists the fields save() accepts and what delete() refuses; for a write-only entity such as operatorSettings it lists only those.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityYesDataset to describe. One of: order, partRevision, partSpecification, productionStep, customerOrganisation, cart, requisition, workOrder, processPrices, materialPrices, postProcessing, typescriptEquation, operation, batchMovement, scrap, material, color, jurisdiction, leadTime, precisionPrices, infill, taxJurisdiction, taxComponent, paymentTerm, discount, shippingBox, shippingMethod, routingTemplate, kanbanColumn, documentTemplate. Write-only entities (no dataset; describes the fields save() accepts): operatorSettings.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, non-destructive behavior, and the description aligns with that. It adds valuable conditional behavior: writable entities also get save/delete field info, while write-only entities like operatorSettings only get the save-related fields. This goes beyond what annotations provide.

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 tightly written sentences with no filler. The main purpose is front-loaded, and the conditional behavior is stated compactly. Every clause 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 single-parameter, read-only describe tool with no output schema, the description fully covers what the tool returns: filterable fields, enum values, save() fields, delete() refusal fields, and the write-only exception. Nothing essential is missing for an agent to invoke it correctly.

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 100% for the single entity parameter, so the baseline is 3. The description adds meaning beyond the schema by explaining entity categories ('writable entity', 'write-only entity'), giving operatorSettings as an example, and tying the parameter to RSQL filtering and save/delete behavior.

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: 'List the filterable fields (and enum values) for a query dataset.' It states the purpose ('so you can build a valid RSQL filter') and further distinguishes itself by covering save() accepted fields and delete() refused fields, making it clear how this differs from sibling describe tools.

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 description gives clear usage context: use it to construct RSQL filters for query datasets, and for writable entities to learn what save() and delete() accept or refuse. It does not explicitly name alternatives or say when not to use it, but the intended scenarios are well implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explainPriceA
Read-onlyIdempotent
Inspect

Explain why an existing requisition (order line) costs what it does. Recomputes its price from its actual configuration and returns the price breakdown plus the pricing-equation variables behind it, and compares against the stored quotedPrice to flag if that snapshot is stale. Individual pricing-equation variables can be manually overridden per line, so a returned variable value may be an override rather than what the equation would compute. To understand a price, examine these variables and reconcile them against describePricingEquationApi(includeSource=true) (the formula and how each variable is derived) and query materialPrices (by processPricesId + materialId, for the material's density and the rate values the equation reads off the material); a variable that doesn't reconcile with the equation and material rates has been overridden. For a hypothetical or what-if part, use generateQuote instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
requisitionIdYesThe requisition id (query(entity="requisition")).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations. While annotations declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, the description adds critical behavioral context: it recomputes the price from actual configuration, returns a price breakdown plus pricing-equation variables, compares against stored quotedPrice to flag staleness, and warns that individual variables may be manually overridden. This is rich behavioral disclosure that the annotations alone do not provide.

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?

The description is a single dense paragraph that front-loads the core purpose and then provides necessary detail about overrides and reconciliation. It is not overly long given the complexity of the tool's behavior. It could arguably be split into clearer sections, but every sentence earns its place and the structure is logical: purpose, behavior, caveat, reconciliation guidance, alternative.

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 tool with one parameter, no output schema, and rich behavioral complexity, the description is remarkably complete. It explains what the tool does, what it returns, how to interpret the results, how to reconcile against other tools, and when to use a different tool. There is no obvious missing information that an agent would need to call this tool correctly.

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 schema already provides 100% coverage for the single parameter requisitionId, including a description of how to query it. The tool description doesn't need to add much parameter-level detail. It does add context by explaining that the requisition is an existing order line, which reinforces the parameter's meaning. Since the schema covers the parameter fully, a baseline of 3 applies, and the description's contextual reinforcement earns a 4.

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: 'Explain why an existing requisition (order line) costs what it does.' It then distinguishes itself from the sibling generateQuote by explicitly stating that hypothetical/what-if parts should use generateQuote instead. This makes the tool's purpose unmistakable and clearly differentiates it from related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool versus alternatives. It states that for hypothetical or what-if parts, one should use generateQuote instead. It also gives a detailed reconciliation workflow, telling the agent to examine variables against describePricingEquationApi(includeSource=true) and query materialPrices. This is exactly the kind of when-to-use and how-to-use guidance that helps an agent select and invoke the tool correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

findSimilarPartsA
Read-onlyIdempotent
Inspect

Find the part revisions most similar in shape to a given one. Similarity is a geometric shape-descriptor distance: 0 = identical shape, up to ~1.414 = unrelated (cosine ~= 1 - d^2/2). It is rotation- and scale-invariant, so it matches shape/proportion and ignores absolute size and orientation — two parts of the same shape at different sizes score as very similar; use inspectPartRevision for real dimensions. As a rule of thumb distance < 0.05 is a near-duplicate. Requires the part revision's UUID (find one via query(entity="partRevision")).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax neighbours to return (1-20, default 5).
maxDistanceNoOptional distance cut-off. Omit for the nearest N regardless of distance; pass ~0.05 to restrict to near-duplicates only.
partRevisionIdYesUUID of the part revision to find neighbours for.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds meaningful behavioral context beyond the readOnlyHint and idempotentHint annotations: it explains rotation/scale invariance, the numeric distance scale (0 to ~1.414), and a rule of thumb for near-duplicates. No contradictions with 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?

Well-structured with the purpose stated first, followed by the similarity metric, threshold guidance, and prerequisite. Every sentence provides essential information without fluff, making it easy for an agent to parse.

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?

With no output schema, the description sufficiently explains what to expect (similar parts) and how to interpret distances, plus provides a threshold. It covers the input requirement and the core semantics, making it complete for a read-only tool. The annotations already handle safety.

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 100%, so the baseline is 3. The description enriches parameter semantics by explaining the meaning of maxDistance (distance cut-off, with ~0.05 for near-duplicates) and ties it to the distance scale. It also gives guidance for obtaining partRevisionId via query, which is beyond the schema's simple 'UUID' description.

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?

Clearly states it finds part revisions most similar in shape, with a precise definition of similarity as a geometric distance. It also explicitly distinguishes itself from inspectPartRevision by noting that real dimensions are covered there, so an agent can tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete guidance on when to use it (shape/proportion matching) and when not to (if real dimensions are needed, use inspectPartRevision). Also explains the prerequisite (UUID) and how to obtain it via query(entity='partRevision').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generateQuoteA
Read-onlyIdempotent
Inspect

Price a part configuration on demand and return the price breakdown plus the pricing-equation variables that make up the price. Use for a part not yet ordered, or to test a change (different process/material/quantity, or override an input variable). Pass equationId to test a non-live equation version saved via save(entity=typescriptEquation); call once with and once without it to compare it against live. Purely a calculation — nothing is saved. To explain the price of an EXISTING order line, use explainPrice instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
unitsNoMeasurement units: CENTIMETERS, MILLIMETERS, METRES, INCHES, FEET. Default MILLIMETERS.
colorIdNoOptional colour id.
currencyNoOptional quote currency (e.g. USD, GBP). Defaults to the operator's currency.
infillIdNoOptional infill id.
quantityYesNumber of parts to quote.
processIdYesprocessPrices UUID (query(entity="processPrices")).
variablesNoOptional overrides for pricing-equation input variables (name -> number). Changes the equation's inputs, never its formula.
equationIdNoOptional: price with this equation (a non-live version from save(entity=typescriptEquation)) instead of the live one. It must belong to processId or to one of postProcessingIds. Omit for the live price.
leadTimeIdNoOptional lead-time UUID.
materialIdYesMaterial id valid for the chosen process.
revisionIdYesPart revision UUID (query(entity="partRevision")).
precisionIdNoOptional precision id.
customerOrgIdNoOptional customer organisation id (for customer-specific pricing).
postProcessingIdsNoOptional post-processing ids.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint true/false, lowering the bar. The description adds meaningful behavioral context beyond those flags: 'Purely a calculation — nothing is saved', plus how equationId tests non-live versions without persisting anything. No contradictions or hidden side effects are 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?

The description is dense but every sentence earns its place: purpose, use cases, equationId testing workflow, no-side-effects guarantee, and sibling routing. It is front-loaded with the primary action and contains no filler or repetition of the input schema.

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 14-parameter tool with no output schema, the description covers the essential context: what it returns, when to use it, how to test equations, that nothing is persisted, and which sibling handles the existing-order case. With 100% schema parameter coverage handling the field details, nothing needed for 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 description coverage is 100%, so the baseline is 3; the description earns higher by adding semantics for equationId (non-live version from save(entity=typescriptEquation), comparison workflow) and variables ('Changes the equation's inputs, never its formula'). This adds meaning beyond the schema's field-level text, especially for the trickier parameters.

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 concrete verb and resource: 'Price a part configuration on demand and return the price breakdown plus the pricing-equation variables.' It clearly distinguishes the tool from explainPrice by positioning generateQuote for un-ordered parts or hypothetical changes, not existing order lines.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance ('Use for a part not yet ordered, or to test a change'), a concrete test procedure (call once with equationId and once without to compare against live), and names the sibling alternative for the opposite case: 'To explain the price of an EXISTING order line, use explainPrice instead.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getCustomerOverridesA
Read-onlyIdempotent
Inspect

Return the pricing configured specifically for one customer organisation, as opposed to the storefront defaults: customer-specific processes (with their bounding box and bulk quantities), material rates, precision and infill options, and catalogue price tiers on the customer's article references. Use it to answer 'does customer X have special pricing?'.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerOrganisationIdYesId of the customer organisation (customerOrganisation.id).

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, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations by specifying that results are scoped to one customer organisation and listing what is returned, without contradicting any annotation.

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?

The description is two sentences with no filler: the first sentence states scope and enumerates what is returned, and the second provides a concrete use-case question. Every clause adds useful information.

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 read-only, one-parameter tool with no output schema, the description is complete: it identifies the required input, defines the scope precisely, and explains the return contents well enough for an agent to know what to expect. No additional context is needed to invoke it correctly.

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?

The input schema already documents customerOrganisationId fully at 100% coverage, including its type and semantic reference. The description reinforces the parameter by mapping it to 'customer X' in the use-case sentence, but adds no new parameter-level detail beyond what the schema provides.

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: 'Return the pricing configured specifically for one customer organisation.' It clearly contrasts this with storefront defaults and enumerates the exact types of overrides included, making the tool's purpose unambiguous and distinct from broad pricing tools.

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 description explicitly states when to use it: 'Use it to answer "does customer X have special pricing?"' It also establishes the boundary against storefront defaults. It does not explicitly name alternative sibling tools, but for a single-purpose getter the usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getDocumentTemplateA
Read-onlyIdempotent
Inspect

Return one document template in full: its type, language, page size and the HTML content that is rendered for confirmations, invoices, estimates, traveller sheets or labels. List templates first with query(entity="documentTemplate").

ParametersJSON Schema
NameRequiredDescriptionDefault
documentTemplateIdYesId of the template (documentTemplate.id). Find it via query(entity="documentTemplate").

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description adds value by explaining exactly what data is returned (type, language, page size, HTML content) and the scope (for confirmations, invoices, estimates, etc.), which is behavioral context beyond the annotations. It does not mention error handling or rate limits, but for a simple read operation this is sufficient.

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 no filler. The primary purpose is front-loaded, followed by a precise retrieval hint. Every word earns its place, and the structure helps an agent parse the information quickly.

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 single-parameter read tool with strong annotations and a clear schema, the description covers the purpose, the key data returned, and how to obtain the required ID. It does not describe the exact output format (e.g., JSON structure), but since there is no output schema and the listed fields are intuitive, this is a minor gap. Error conditions are also not mentioned, but the read-only, idempotent nature minimizes risk.

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?

The schema description already fully explains the documentTemplateId parameter (integer, the template's ID, found via query). The description reinforces this by mentioning query, but does not add any new semantics about the parameter. With 100% schema coverage, a baseline of 3 is appropriate; the description does not further enrich parameter understanding.

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 clearly states the verb (Return), the resource (document template), and the specific content (type, language, page size, HTML content). It also differentiates from query by indicating this returns the full template rather than a list. The purpose is unmistakable and distinct from siblings like query or delete.

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 description provides practical usage guidance by instructing the agent to first list templates with query(entity='documentTemplate') to obtain the ID. This establishes a clear workflow. However, it does not explicitly state when to prefer this over alternatives (e.g., 'use this to get full details, not query'), though the intent is obvious. Slight gap in explicit alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getOnboardingProgressA
Read-onlyIdempotent
Inspect

Return the manufacturer's onboarding-wizard progress: each step (setup-processes, setup-pricing-equations, setup-post-processing, setup-tax-jurisdictions, setup-tax, configure-shipping, configure-payment-options, add-terms-of-service) with its status and completion time. lintConfiguration findings reference these step ids.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the read-only safety profile. The description adds value by specifying the exact return content—status and completion time per onboarding step—and the relationship to lintConfiguration findings, which is behaviorally useful 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?

The description is a single front-loaded sentence that begins with the core action and then provides a complete list of steps without redundancy or filler. Every element earns its place, including the useful lintConfiguration tie-in.

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 no parameters, the description carries the burden of explaining return semantics and it does so adequately: it names all steps and the fields returned (status, completion time). It could add details about status value formats or how to interpret missing steps, but the current information is sufficient for most calling contexts.

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, so there is nothing for the description to add about parameter meanings. The description focuses on what is returned, which is appropriately aligned with the empty input schema.

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 uses a specific verb ('Return') and a precise resource ('manufacturer's onboarding-wizard progress'), enumerating the exact steps returned. This clearly separates it from siblings like getProductionProgress, which concerns production rather than onboarding.

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 description makes the use case clear: it returns onboarding step statuses and completion times, and explicitly links to lintConfiguration findings by noting those findings reference these step ids. It does not explicitly mention alternatives or exclusions, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getProductionHistoryA
Read-onlyIdempotent
Inspect

What has happened to ONE requisition's parts in production: a chronological log of batch moves and scrap events (with the scrap reason), plus other requisitions that passed through the same build step as any scrap (i.e. parts impacted by the same failure). Find a requisition id via query(entity="requisition"). This is scoped to a single requisition — for scrap across the shop floor (totals, most common reasons, scrap by stage/operation, or over a time window) use query(entity="scrap") or aggregate(entity="scrap", ...) directly; do NOT loop this tool over requisitions.

ParametersJSON Schema
NameRequiredDescriptionDefault
requisitionIdYesThe requisition id (find it via query(entity="requisition")).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, so safety is covered. The description adds useful behavioral context by detailing what the output contains (log of moves, scrap events with reasons, and impacted requisitions). It does not contradict annotations and provides enough insight into the tool's behavior.

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?

The description is dense but efficient. The first sentence packs the core purpose and output, and the second sentence gives usage guidance. It is slightly long but every clause adds value, so it earns a 4 rather than a 5.

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 tool with no output schema, the description clearly explains what the return includes (chronological log, scrap reasons, impacted requisitions). It also explains how to obtain the input, the scope, and alternatives. An agent has everything needed to call it correctly without further research.

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?

The only parameter, requisitionId, has a schema description that already explains it and how to find it. The tool description repeats that hint without adding new meaning. Since schema coverage is 100%, the baseline is 3, and the description does not elevate it further.

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 clearly states the tool's function: it returns a chronological log of batch moves and scrap events for a single requisition, including scrap reasons and other impacted requisitions. It explicitly distinguishes itself from siblings like query and aggregate by scoping to one requisition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool versus alternatives: for single-requisition history, and explicitly says to use query/aggregate for shop-floor-level scrap analysis, and warns not to loop this tool over requisitions. This is unambiguous and prevents misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getProductionProgressA
Read-onlyIdempotent
Inspect

Where a requisition's parts are right now: the quantity sitting at each production step/operation, in routing order. Find a requisition id via query(entity="requisition").

ParametersJSON Schema
NameRequiredDescriptionDefault
requisitionIdYesThe requisition id (find it via query(entity="requisition")).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds useful behavioral context by specifying that results are current quantities at each production step and that ordering follows the routing sequence, which is not available from 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?

The description is two sentences with no wasted words. The core behavior is front-loaded, and the prerequisite lookup instruction 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?

For a single-parameter read-only tool, the description covers what is returned, how results are ordered, and how to obtain the required id. It does not specify the output structure, but the high-level return content is adequately described.

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?

The single parameter requisitionId is fully documented in the schema, including how to find it via query. The description repeats this hint but adds little beyond the schema, so the baseline of 3 applies.

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 clearly identifies the resource (a requisition's parts) and the specific information returned (quantities at each production step/operation, in routing order). The phrase 'right now' helps distinguish it from getProductionHistory. Although no explicit verb like 'retrieve' appears, the intent is unmistakable.

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 gives a clear prerequisite: find a requisition id via query(entity="requisition"). However, it does not explicitly state when to prefer this tool over siblings such as getProductionHistory or query, leaving the selection context mostly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspectPartRevisionA
Read-onlyIdempotent
Inspect

Inspect a single part revision: returns its geometric metrics (volume, surface area, bounding box, minimum wall thickness, convex hull volume, watertightness) together with a single image showing the six orthogonal views (+X, -X, +Y, -Y, +Z, -Z) of the part, each cell labelled with its camera direction. Use this to answer any question about a part's geometry, manufacturability, size, or appearance. Requires the part revision's UUID.

ParametersJSON Schema
NameRequiredDescriptionDefault
partRevisionIdYesThe UUID of the part revision to inspect.

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, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds meaningful behavioral detail beyond annotations by specifying exactly what is returned: the metric list and the image with six orthographic views, which helps the agent understand the tool's output shape and side-effect-free 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?

Two sentences front-load the core purpose and output, then give usage guidance and the input requirement. There is no filler and 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 single-parameter read-only tool with no output schema, the description fully covers what the tool returns, what questions it answers, and what input is required. An agent has everything needed to select and invoke the tool correctly.

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 100% and the single parameter partRevisionId is already described as 'The UUID of the part revision to inspect.' The description only restates that a UUID is required, adding no new semantics beyond the schema, so the baseline 3 applies.

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: 'Inspect a single part revision' and then enumerates the exact outputs: geometric metrics and a labelled six-view image. This clearly differentiates it from siblings like findSimilarParts or query by stating the resource and result set.

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 description explicitly says 'Use this to answer any question about a part's geometry, manufacturability, size, or appearance,' giving clear when-to-use context. It does not name alternative tools or exclusion conditions, but the stated use case is strong enough for an agent to route correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lintConfigurationA
Read-onlyIdempotent
Inspect

Check the manufacturer's setup for problems and report them by severity. BLOCKER = quoting or checkout cannot work (no process, no live pricing equation, a material missing an equation variable, no default tax jurisdiction, no shipping method, no payment path); WARNING = works but likely wrong (finish not offered on any process, jurisdiction with no components, no terms of service, unverified email domain, expired exchange rate); INFO = worth a look. Each finding names the onboarding step that fixes it and the entity involved. Call this first when asked whether the setup is complete or why quoting fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoOptional minimum level to report: BLOCKER, WARNING or INFO (default INFO = everything).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral detail beyond annotations by specifying that findings are categorized by severity and that each finding names the onboarding step and entity involved.

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?

The description is front-loaded with the core purpose and then provides structured severity definitions. Every sentence earns its place: the severity taxonomy, the finding content note, and the usage trigger are all directly useful for correct invocation.

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 simple tool with one optional parameter and no output schema, the description is complete. It explains what the tool does, what findings contain, and when to call it, while annotations cover the read-only, idempotent, non-destructive behavior.

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 schema already documents the single optional 'level' parameter and its default, so baseline credit applies. The description adds semantic weight by defining what BLOCKER, WARNING, and INFO actually mean and what types of issues fall into each category.

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 states a specific action and resource: 'Check the manufacturer's setup for problems' and report them by severity. It defines BLOCKER, WARNING, and INFO with concrete conditions, making it clear this is a validation/linting tool rather than a describe or query tool. It also ties the purpose to setup completeness and quoting failures, which distinguishes it from siblings.

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 description gives an explicit trigger: 'Call this first when asked whether the setup is complete or why quoting fails.' This clearly tells an agent when to use the tool, but it does not explicitly mention when not to use it or name any alternative sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publishEquationA
Destructive
Inspect

SENSITIVE — changes live storefront prices immediately. Makes a saved, validated typescriptEquation version the LIVE pricing equation of its process, post-processing, or the order level; the previous live version stops pricing at once, and every customer quote from now on uses the new one. Do this ONLY when the manufacturer explicitly asked to make this specific version live, after generateQuote(equationId) on several real parts compared against the live price, and after telling them what will change. Never publish to 'try it out': generateQuote(equationId) tests a version without publishing. Requires confirm=true and the id of the version you are replacing (or NONE). Before this, a new version prices nothing (lint PROCESS_NO_LIVE_EQUATION). Reversal: publish the previous version again with this tool. The same action is also available as save(entity="typescriptEquation", id=, data={isLive: true, replacesLiveEquationId, confirm: true}).

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesMust be true. Send it only after the manufacturer explicitly asked to make this version live and you tested it with generateQuote(equationId) on several real parts.
equationIdYesThe typescriptEquation id (UUID) to make live. It must be a validated version of this manufacturer.
replacesLiveEquationIdYesThe id of the version that is live right now for the same process / post-processing / order level, or the string NONE when nothing is live yet. Read it first: query(entity="typescriptEquation", filter="processPricesId==<id>;isLive==true") or processPrices.activeTypescriptEquationId. A mismatch is refused.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already set destructiveHint=true and readOnlyHint=false, but the description adds critical context: it changes live prices immediately, stops the previous version from pricing, requires confirm=true and replacesLiveEquationId, explains the reversal (republish previous version), and clarifies that a new version prices nothing before publishing. This goes well beyond annotations, covering side effects, prerequisites, and recovery.

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?

The description is dense but every sentence earns its place: it front-loads the sensitive nature, lists prerequisites, testing, alternatives, reversal, and the alternative save action. It is structured logically and avoids filler. Length is justified by the complexity and risk of the operation.

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 mutation tool with no output schema and high risk, the description covers prerequisites, exact side effects, how to verify the current live version, reversal strategy, and a non-destructive alternative. Nothing an agent needs to call it safely and correctly 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?

The input schema already documents all three parameters at 100% coverage, so baseline is 3. The description adds extra semantics: the meaning of 'NONE' for replacesLiveEquationId, the instruction to query the current live id first, and that a mismatch is refused. It also ties confirm to the prerequisite testing. These additions add real value beyond the schema descriptions.

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 precise verb ('makes ... the LIVE pricing equation') with a specific resource (typescriptEquation version) and scope (its process, post-processing, or order level). Clearly distinguishes from generateQuote (testing) and save (alternative action) by naming them. An agent can tell exactly what this tool does and what it does not do.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use (only after manufacturer request, testing with generateQuote on real parts, and informing the manufacturer) and when-not-to-use (never for 'try it out', instead use generateQuote). Names the alternative action (save with isLive: true) and the prerequisite of reading the current live id. This is exemplary routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

queryA
Read-onlyIdempotent
Inspect

Query the manufacturer's live data with an RSQL filter. Datasets: order (Orders and quotes share the same entity. The state field distinguishes QUOTE, ORDER, and DRAFT. Payment status is independent: a placed PO/invoice order can remain UNPAID until settlement. 'price' is the order total in the order's own 'currency'; 'localPrice' is the same total converted to the operator's home currency ('localCurrency'). Sum localPrice (not price) to compare revenue across orders in different currencies. 'source' is the sales channel: INBOUND = placed by the customer through the storefront (self-service, online); OUTBOUND = created and sent out by the manufacturer's team (a staff-built quote). Filter or group by source to split self-service vs staff-created orders.); partRevision (Part revisions (a versioned 3D part). 'designName' is the manufacturer's INTERNAL name for the part design — not what the customer sees; when a user names a part they usually mean the customer-facing requisition.name, so prefer that for matching user references. Geometry detail is via inspectPartRevision.); partSpecification (Part specifications: how a part revision is to be made (process, material, finish).); productionStep (A stage in production: a build group of parts undergoing one operation (e.g. 3D Print, Post-Process, Quality Control). Parts move from step to step as they are manufactured.); customerOrganisation (Customer organisations (the manufacturer's customers).); cart (Storefront shopping carts (status OPEN, CONVERTED to an order, or DELETED). Use for conversion analysis.); requisition (Requisitions: a part specification ordered on an order (the order line item; carries quantity and pricing). 'name' is the CUSTOMER-FACING part name — this is what customers and users call the line, so match it when someone refers to a part by name (filter name=="...", or name-contains via RSQL). It is distinct from the manufacturer's internal partRevision.designName; the same physical part can have a different customer-facing name here. pricePaid is the actual per-line revenue in the parent order's currency; localPricePaid is the same in the operator's home currency (sum this for cross-order revenue). quotedPrice is a snapshot taken at quote time and can be stale (use explainPrice to recompute).); workOrder (Work orders: production execution for a requisition (quantity to build, routing template). 'steps' is the ordered list of operations this work order will go through on the shop floor (its routing) — read it to know what will be done to build this order.); processPrices (Manufacturing processes and their pricing configuration. 'pricingAlgo' says how a process is priced: TS_EQUATION processes use a TypeScript pricing equation (activeTypescriptEquationId; read it with describePricingEquationApi(includeSource=true)); any other value is a legacy built-in algorithm with no equation to read. The row folds in the process's setup: boundingBox (max part size L x W x H), bulkQuantities (the quantity breaks shown for bulk pricing), materialVariables (the per-material variable names the equation reads), and counts of materials, post-processings, precision and infill options. isInternal processes are hidden from the storefront. A row with a customerOrganisationId is a customer-specific copy of a process.); materialPrices (A material's pricing configuration for one process (a process x material pairing). Carries the material (materialId/materialName), its density, and 'variables' — the material's TypeScript-equation variable values (operator-defined name=value pairs the pricing equation reads off the material). Use to see a material's rates without reverse-engineering them from quotes: filter by processPricesId and materialId (both from partSpecification). The 'variables' text isn't itself filterable — filter on materialId/processPricesId/density/isDefault instead. Rates are process-specific, so the same material can appear once per process.); postProcessing (Post-processing / finishing options the manufacturer offers (e.g. painting, polishing). 'type' says how it is priced: TS_EQUATION ones have their own TypeScript equation (activeTypescriptEquationId; read it with describePricingEquationApi(scope=POST_PROCESSING, ownerId, includeSource=true)); any other type is a legacy built-in formula with no equation to read. 'processes' lists the processes it is available on, 'operations' the shop-floor operations it adds, 'colors' its colour choices and 'incompatibleMaterials' the materials it cannot be applied to. Options sharing a mutuallyExclusiveGroup cannot be combined on one part.); typescriptEquation (TypeScript pricing equations (metadata only — describePricingEquationApi(includeSource=true) for the live source). 'scope' is PROCESS (processPricesId), POST_PROCESSING (postProcessingId) or ORDER (the operator's single order-level equation that adds whole-order line items; both ids null); 'isLive' tells whether it is the one currently used for quoting. Several draft equations can sit next to the live one; 'origin' is UI or MCP (written through save) and 'createdBy' the authoring user.); operation (Manufacturing operations (shop-floor stations) in 'sequence' order, e.g. 3D Print, Post-Process, Quality Control. Parts move operation to operation; batches moved at an operation are grouped into production steps (build groups). Column meanings: productionStepType is the station kind — BASE (a normal station), DOWNLOAD_PARTS_AS_GROUP (parts are downloaded as one build file), UPLOAD_THREED_NESTED (a nested build / bill of parts is uploaded), QUALITY_CONTROL (inspection; scrap is recorded here). viewType is the backlog's default view at this station: PART lists individual parts, BUILD lists build groups. buildConstraint says which parts may share one build group: NONE, MATERIAL (same material), MATERIAL_AND_COLOR, MATERIAL_AND_SHEET_THICKNESS. stepNamePrefix + stepNamingStrategy control how a new build group is named when a batch arrives: ALWAYS_RENAME (new name every time), RENAME_IF_BUILD_CHANGED (new name only when the build composition changed), INHERIT_FROM_PREVIOUS (keep the previous station's group name). allowOverproduction lets staff move more parts than the ordered balance. durationHours is the planning estimate for time spent at the station. isCompletedStatus marks the station whose exit means the part is finished. automations run when staff progress parts here (NOTIFY_ON_ORDER_COMPLETED). Referenced by productionStep.operationId and scrap.operationId.); batchMovement (Forward batch moves through production: each row is a batch of parts ADVANCING from one operation to the next (throughput). Scrap events are NOT here — see the scrap dataset for those. 'batchSize' is the quantity that moved; 'operationName' is the operation the batch left; 'toOperationName' is the one it moved to. Filter by createdAt for a time window or requisitionId/workOrderId for one job. For a SCRAP RATE by operation, aggregate sum(batchSize) here grouped by [operationName] (the parts that passed) and aggregate scrap the same way (the parts scrapped); rate = scrap / (scrap + moved) at each operation.); scrap (Scrap events: parts scrapped as they move through production. This is the floor-wide scrap log — query or aggregate it DIRECTLY for any scrap question; do not gather scrap by iterating requisitions or getProductionHistory. 'reason' is the free-text scrap cause; 'batchSize' is the quantity scrapped; 'operationName' is the operation the scrap happened at; filter by createdAt for a time window or requisitionId/workOrderId for one job. To find what causes the most scrap, aggregate sum(batchSize) grouped by reason (or operationName). For a scrap RATE you also need the parts that passed — aggregate the batchMovement dataset by operationName and divide.); material (The material catalogue (platform materials plus the manufacturer's own). Rates are NOT here — a material only has prices once it is paired with a process; query materialPrices (materialId==) for those.); color (Colour options. Each colour belongs to one materialPrices row (a material on a process) or to one post-processing; 'kind' says which and the matching *Id column points at the parent.); jurisdiction (The platform's tax-jurisdiction catalogue: every code a taxJurisdiction can be created for, with its name and country. Platform reference data, identical for every manufacturer (not tenant data). Use it to find the isoCode for save(entity="taxJurisdiction"): filter by country (the Country enum name, e.g. GERMANY) and read the region names; DEFAULT and EXEMPT are the two special codes.); leadTime (Lead-time options offered at checkout. 'buffer' is the number of days added to the production estimate; the default one is pre-selected on the storefront and read by the pricing equation.); precisionPrices (Precision / tolerance options sold per process, each with a price adder. A row with a customerOrganisationId is a customer-specific override of the base option.); infill (Infill options per process (FDM-style density presets). 'infillValue' is the fill percentage; the default is pre-selected on the storefront. A row with a customerOrganisationId is a customer override.); taxJurisdiction (Tax setup per jurisdiction (country / region). 'components' lists the tax components applied (name and percentage) and 'totalPercentage' their sum. The DEFAULT jurisdiction is the fallback when a customer's address matches nothing; EXEMPT is used for tax-exempt customers.); taxComponent (Reusable tax components (e.g. VAT 19%) that jurisdictions combine. See taxJurisdiction.components for where each is applied.); paymentTerm (Payment terms offered to customers (e.g. Net 30). accountingSystemTermId links the term to the connected accounting system.); discount (Discounts: GENERIC (a code any customer can use), CUSTOMER (a code for one customer) or INSTANT (applied automatically). Active means endTime is in the future.); shippingBox (Shipping box sizes used to pack orders (dimensions in unitBasis).); shippingMethod (Shipping methods offered at checkout. shippingMode is FIXED_PRICE (flat price, optional weight tiers and a country list), CARRIER_ACCOUNT (live rates from the manufacturer's carrier account) or SELF_COLLECTION (pick-up). Tier and country detail is folded into the row.); routingTemplate (Routing templates: the ordered operations a work order goes through. 'steps' is the sequence of operation names. A template can be generic or bound to one partSpecification. When the storefront setting isApprovedRoutingTemplateRequired is on, only approved templates can be used.); kanbanColumn (Order-board (kanban) columns in display order. 'automations' lists what fires when an order enters the column (NOTIFY_CUSTOMER_OF_NEW_STATUS, SEND_INVOICE, SEND_ORDER_CONFIRMATION).); documentTemplate (Document templates (order confirmation, invoice, estimate, traveller sheets, labels) per language. Metadata only — use getDocumentTemplate(id) to read the HTML content.). Operators: == != =gt= =ge= =lt= =le= =in=(a,b) =out=(a,b); combine with ';' (AND) and ',' (OR). Each row is returned as 'field=value' pairs and always includes its id and foreign keys (the join keys); pass 'fields' to select specific columns (any field from describeQueryableFields). Call describeDataModel to see how datasets relate, and describeQueryableFields(entity) to learn a dataset's filterable fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort as 'field,asc' or 'field,desc', using a field listed by describeQueryableFields.
limitNoMax rows (1-50, default 20).
entityYesWhich dataset to query. One of: order, partRevision, partSpecification, productionStep, customerOrganisation, cart, requisition, workOrder, processPrices, materialPrices, postProcessing, typescriptEquation, operation, batchMovement, scrap, material, color, jurisdiction, leadTime, precisionPrices, infill, taxJurisdiction, taxComponent, paymentTerm, discount, shippingBox, shippingMethod, routingTemplate, kanbanColumn, documentTemplate.
fieldsNoOptional: choose which columns to return, by field name. Any field listed by describeQueryableFields(entity) can be selected. The row 'id' and foreign-key ('*Id') fields are always included. Omit for the default columns.
filterNoRSQL filter, e.g. field==value;other=gt=5 (';'=AND, ','=OR). Call describeQueryableFields for the valid field names. Omit to return recent rows.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so with that bar lowered the description adds genuine behavioral detail beyond them: rows return as 'field=value' pairs, always include id and foreign keys, fields selects columns but id/FK stay included, limit defaults to 20, and filter combines with ';'=AND / ','=OR. No contradiction with any annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and the body is consistently organized dataset-by-dataset with a parallel structure, which is a strength. However, the description runs several thousand words; while each parenthetical adds semantic value, the aggregate length strains an agent scanning for selection and pushes against 'every sentence earns its place.' Dense and defensible, but heavy for orientation.

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?

Exceptionally complete for a 29-dataset query tool with 100% schema coverage and no output schema: it covers dataset semantics, operator set, result format, default limit, and routes deeper access to describeQueryableFields, describeDataModel, describePricingEquationApi, inspectPartRevision, and explainPrice instead of duplicating exhaustive field lists. Nothing needed to pick a dataset or compose a filter is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds the tool's real value: semantic distinctions the schema's enum list cannot convey — price vs localPrice for cross-currency revenue, requisition.name vs partRevision.designName for user reference matching, source INBOUND/OUTBOUND for channel splits, materialPrices 'variables' not being filterable, and the price vs quotedPrice staleness note. The RSQL operator syntax is also expanded well beyond the schema's single example.

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 opening sentence states a specific verb (query), resource (manufacturer's live data), and mechanism (RSQL filter), making the tool's role unambiguous before the 29-dataset enumeration. It also delimits what it is not by pointing to describeDataModel and describeQueryableFields, and it is clearly distinct from sibling aggregate (aggregation) and the various describe/lint/save tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Routing guidance is explicit and recurring: 'do not gather scrap by iterating requisitions or getProductionHistory' tells the agent to query scrap directly; 'Rates are NOT here — query materialPrices (materialId==<id>)' redirects to the correct dataset; every typescriptEquation/postProcessing points to describePricingEquationApi(includeSource=true) for live source; stale quotedPrice is handled via 'use explainPrice to recompute'; and describeQueryableFields/describeDataModel are named for field and relationship questions. These are concrete when-vs-alternative decisions, not vague context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

saveA
Destructive
Inspect

Create (no id) or update (with id) one row of a writable entity: leadTime, materialPrices, operatorSettings, paymentTerm, postProcessing, processPrices, shippingMethod, taxComponent, taxJurisdiction, typescriptEquation. Field list and rules per entity: describeQueryableFields(entity). Some updates change live behaviour at once (e.g. overwriting a live pricing equation); the reply says when that happened.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoId of the existing row to update. Omit to create a new row.
dataYesThe fields to write. Call describeQueryableFields(entity) for the field list per entity.
entityYesEntity to write. One of: leadTime, materialPrices, operatorSettings, paymentTerm, postProcessing, processPrices, shippingMethod, taxComponent, taxJurisdiction, typescriptEquation. The server validates this value; describeDataModel names the current writable set.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and readOnlyHint=false. The description adds valuable context that some updates change live behavior at once and that the reply signals such events, which goes 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 sentences with zero fluff. The create/update distinction and entity list are front-loaded, and the behavioral caution is placed at the end. 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 write tool with no output schema, the description covers operation semantics, entity scope, field lookup, and a behavioral caveat about live changes. Nothing an agent needs to call it correctly is missing.

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 100% and each property has a meaningful description (entity lists allowed values, data explains to call describeQueryableFields, id explains create/update distinction). The description adds no new parameter-level semantics beyond what the schema provides, so baseline 3 applies.

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 states a clear verb (create/update), a specific resource (one row of a writable entity), and enumerates the entity list. It distinguishes itself from siblings like delete, query, and publishEquation by focusing on the create/update write operation.

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?

It gives explicit guidance on when to create vs update (presence of id) and points to describeQueryableFields for field rules. It does not name alternative tools or exclusion criteria, but the operation is self-explanatory and the reference to describeQueryableFields serves as a helper.

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. 19 tool updates
    • First observedaggregate
    • First observeddelete
    • First observeddescribeConfiguration
    • First observeddescribeDataModel
    • First observeddescribePricingEquationApi
    • First observeddescribeQueryableFields
    • First observedexplainPrice
    • First observedfindSimilarParts
    • First observedgenerateQuote
    • First observedgetCustomerOverrides
    • First observedgetDocumentTemplate
    • First observedgetOnboardingProgress
    • First observedgetProductionHistory
    • First observedgetProductionProgress
    • First observedinspectPartRevision
    • First observedlintConfiguration
    • First observedpublishEquation
    • First observedquery
    • First observedsave

Publisher details

Operator
Phasio · Publisher source
Vendor relationship
First-party · Publisher source
Restrictions
Requires a paid Phasio account

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables managing workspace products, inventory, orders, manufacturing, and traceability through natural language in AI assistants like ChatGPT, Codex, and Claude.
    MIT
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Connects Claude to PrintSmith Vision for read-only AI-assisted print shop management. It enables users to query customer data, production job statuses, and financial summaries through natural language.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables manufacturing traceability queries and analysis through GraphRAG, supporting semantic search, graph traversal, natural language to Cypher, defect chain retrieval, requirement traceability, and product health dashboards.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources