inFlow Inventory MCP Server
Delivers manufacturing-run callback notifications to Slack via a transactional claim/ack outbox; each request is HMAC-signed (manufacturing-run-callback/v1 envelope) and verified before any Slack action, with ambiguous posts marked delivery_unknown for explicit reconciliation rather than automatic reposting.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@inFlow Inventory MCP ServerList all products with stock below 10 units."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
inFlow Inventory MCP Server
A Model Context Protocol (MCP) server that provides comprehensive tools for interacting with the inFlow Inventory API. This enables AI assistants like Claude to manage your inventory, orders, customers, and more.
Current package version: 1.4.0-alpha.2
Features
Products: List, search, create, update products and check inventory levels
Sales Orders: Create customer orders and patch existing orders without dropping unmentioned lines or serial numbers
Purchase Orders: Create vendor purchase orders, receive stock, and reverse received stock
Customers & Vendors: Manage customer and vendor records
Inventory Operations: Stock adjustments, transfers, counts, and manufacturing orders
Manufacturing Orders: Create or patch work orders while preserving output/input lines and serial numbers
Product Manufacturing: Read, compare, preview, and concurrency-check BOM, operation-template, and manufacturing-setting changes
Product Groups: Discover groups, options, variants, and per-location variant quantities
Planning & Audit: Product-group manufacturing audit and exact direct/leaf/net BOM requirements
Prices & Traceability: Exact pricing-scheme rows plus manufacturing-order line/pick/matching trace
Mutation Safety: Signed previews, dual current-state hashes, timestamps, durable status, idempotency, and readback verification
Serial Numbers: Query serial numbers from orders or product inventory lines
Reference Data: Locations, categories, pricing schemes, payment terms, currencies, tax codes
Webhooks: Subscribe to inFlow events
Related MCP server: Skulabs MCP Server
Prerequisites
Node.js 22
An active inFlow Inventory subscription with API add-on
inFlow API credentials (Company ID and API Key)
Installation
git clone https://github.com/bigl34/inflow-mcp-server.git
cd inflow-mcp-server
# Install dependencies
npm install
# Build the TypeScript
npm run buildConfiguration
Getting Your API Credentials
Log in to your inFlow Inventory account
Go to Settings > Integrations
Find your Company ID on the integrations page
Click Add New API Key to generate a new key
Environment Variables
Set the following environment variables:
# Required
export INFLOW_COMPANY_ID="your-company-id"
export INFLOW_API_KEY="your-api-key"
# Optional
export INFLOW_BASE_URL="https://cloudapi.inflowinventory.com" # Default
export INFLOW_API_VERSION="2026-04-13" # Default API version
# Safe preview/apply control plane (closed by default)
export INFLOW_ENABLE_SAFE_WRITES="false"
export INFLOW_ENABLE_STOCK_WRITES="false"
# Manufacturing pick-batch additionally requires this gate and its attestation
export INFLOW_ENABLE_MANUFACTURING_PICK_BATCH_WRITES="false"
# Deprecated diagnostic compatibility inputs; these authorize no safe writes
export INFLOW_ENABLE_MANUFACTURING_WRITES="false"
export INFLOW_ENABLE_PRICE_WRITES="false"
export INFLOW_ENABLE_PRODUCT_GROUP_WRITES="false"
export INFLOW_ENABLE_MO_SERIAL_WRITES="false"
export INFLOW_ENABLE_STANDARD_WRITES="false"
export INFLOW_STATE_DIR="$HOME/.local/state/inflow-mcp"
export INFLOW_RATE_LIMIT="60" # Requests per minute (default: 60)
export INFLOW_REQUEST_TIMEOUT="30000" # Request timeout in ms (default: 30000)
export INFLOW_MAX_RETRIES="3" # Max retries on 5xx/429 errors (default: 3)
export INFLOW_RETRY_DELAY="1000" # Initial retry delay in ms (default: 1000)
export INFLOW_DEBUG="true" # Enable debug logging (default: false)Manufacturing-run coordinator
The manufacturing-run coordinator is a separate HTTP/worker binary; it does
not run inside the stdio MCP server. Build first, then use
npm run validate:coordinator to validate the secure credential environment
without starting the listener, or npm run start:coordinator to start the
loopback service. The launcher reads its absolute 0600, single-link,
current-user-owned credential file from the Mac runtime configuration.
Build identity is derived from the running release artifacts; the coordinator
credential file must not contain INFLOW_ADAPTER_MANIFEST_HASH or
INFLOW_PROBE_BUILD assertions.
In addition to the normal inFlow company/API values, the coordinator credential environment requires:
INFLOW_COORDINATOR_HMAC_CURRENT_KID=coordinator-current
INFLOW_COORDINATOR_HMAC_CURRENT_SECRET=<at-least-32-bytes>
INFLOW_COORDINATOR_RUN_READY_WEBHOOK_URL=https://hooks.zapier.com/...
INFLOW_COORDINATOR_TERMINAL_WEBHOOK_URL=https://hooks.zapier.com/...Optional rotation and delivery controls are:
INFLOW_COORDINATOR_HMAC_NEXT_KID=coordinator-next
INFLOW_COORDINATOR_HMAC_NEXT_SECRET=<at-least-32-bytes>
INFLOW_COORDINATOR_WEBHOOK_AUDIENCE=zapier-webhook
INFLOW_COORDINATOR_WEBHOOK_MAX_ATTEMPTS=5
INFLOW_COORDINATOR_WEBHOOK_RETRY_DELAY_MS=5000
INFLOW_COORDINATOR_WEBHOOK_TIMEOUT_MS=10000
INFLOW_COORDINATOR_WEBHOOK_CLAIM_TTL_MS=30000Both callback URLs must be HTTPS and must not contain credentials. Callback
events are stored transactionally with their state transition and delivered
at least once with deterministic event IDs. The delivery timeout must be
shorter than the durable claim TTL. Each request body contains a canonical
manufacturing-run-callback/v1 envelope whose HMAC binds the callback kind,
event and operation identity, state revision, marker, audience, company,
timestamp, nonce, key ID, and payload hash. A callback workflow must verify
that body signature before any status, resolve, claim, or Slack action; HTTP
headers alone are not callback authorization. Terminal claims are bound to the
deterministic notification ID inside the verified payload, so an out-of-order
or replayed callback cannot claim another pending notification. Slack
notification posts use a separate claim/ack outbox: an ambiguous post must be marked
delivery_unknown and reconciled explicitly, never reposted automatically.
The coordinator's stock-moving manufacturing write flags remain closed until
their separately approved contract canary and production gate authorize them.
That coordinator boundary is separate from product BOM/config confirmation.
New manufacturing runs use manufacturing-run-identity/v2, keeping the
source serial and finished serial as separate immutable identities. Before
component collection, the coordinator validates the complete rooted expanded
MO hierarchy, excludes expanded structural subassemblies from consumption,
and binds the source serial to exactly one quantity-one consumable raw line at
the selected location. The binding is revalidated at readiness and immediately
before the dispatch fence. Exact bound serials may proceed when aggregate
availability covers the requested unit even if unrelated inventory is
allocated (for example, 27 on hand and 24 available); an unavailable binding
blocks with structured evidence and never substitutes another serial.
New v1 begins are refused. Stored v1 runs remain readable: an already-fenced
dispatch_uncertain run may perform exact readback-only reconciliation, while
other active v1 states are quarantined as blocked and cannot prepare or
dispatch a provider mutation.
Claude Desktop Configuration
Add to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"inflow-inventory": {
"command": "node",
"args": ["/path/to/inflow-mcp-server/dist/index.js"],
"env": {
"INFLOW_COMPANY_ID": "your-company-id",
"INFLOW_API_KEY": "your-api-key"
}
}
}
}Available Tools
Product Management
Tool | Description |
| Search and filter products |
| Get product details by ID (use |
| Preview/apply a bounded product create/update; patch-mode |
| Deprecated immediate write retained only for the 1.4 compatibility window |
| Get stock levels across locations |
| Batch get stock levels (max 100) |
| Get enriched BOM/manufacturing state for any product |
| Compare components, operation templates, and settings for 2-25 products |
| Preview or apply an exact-scope explicitly confirmed manufacturing configuration change |
| List product groups with options and variants |
| Get one product group with options and variants |
| Get variant quantities for a group at one location |
| Discover manufacturing operation types |
| Read or preview/apply exact pricing-scheme rows |
| Explicitly confirmed copy of selected components, operations, or settings without source row IDs |
| Audit option combinations and manufacturing consistency |
| Calculate exact direct, leaf, or net material requirements |
| Preview exact-ID group option/value/variant changes |
| Preview deterministic IDs for the create/attach/compensate saga |
Sales Orders
Tool | Description |
| Search and filter sales orders |
| Get order details by ID |
| Create an order or partially update an existing order. Updates preserve unmentioned header fields and lines, merge item patches by line ID or unambiguous product ID, and remove lines listed in |
Purchase Orders
Tool | Description |
| Search and filter purchase orders |
| Get order details by ID |
| Deprecated immediate write retained only for the 1.4 compatibility window |
| Deprecated immediate stock write retained only for the 1.4 compatibility window |
| Deprecated immediate stock write retained only for the 1.4 compatibility window |
Customers
Tool | Description |
| Search and filter customers |
| Get customer details by ID |
| Deprecated immediate write retained only for the 1.4 compatibility window |
Vendors
Tool | Description |
| Search and filter vendors |
| Get vendor details by ID |
| Deprecated immediate write retained only for the 1.4 compatibility window |
Inventory Operations
Tool | Description |
| List stock adjustments |
| Get adjustment details |
| Create/update stock adjustment |
| List stock transfers |
| Get transfer details |
| Create/update stock transfer |
| List inventory counts |
| Get count details |
| Create/update stock count |
| List work orders |
| Get work order details |
| Create a work order or partially update an existing one. Updates preserve unmentioned fields, patch output quantity/serials in place, merge input-line patches, and remove lines listed in |
| Join output lines, pick lines, pick matchings, and serial anomalies |
| Preview exact-ID linked serial changes; apply is canary-gated |
Status and safe writes
get_mcp_status returns additive mcp-status/v2 data without exposing the
company ID or credentials. writePolicies.safe.operations reports each
operation's fixed ordinary or stock classification, static adapter support,
effective apply state, required gates, and reason. Old per-domain status fields
remain present but are marked deprecated and disabled. legacyBypassActive is
always true while deprecated immediate-write tools are registered.
The safe control plane has only two general switches:
every supported preview/apply dispatch requires
INFLOW_ENABLE_SAFE_WRITES=true;stock-affecting dispatch also requires
INFLOW_ENABLE_STOCK_WRITES=true.
Manufacturing pick-batch additionally requires its dedicated environment gate
and valid coordinator attestation for the final build. Product
BOM/manufacturing configuration retains its explicit-confirmation policy and
also requires the master safe-write gate. Every applicable gate is checked
again immediately before network dispatch, so closing a gate invalidates an
existing preview. Closing a gate cannot reverse a completed write; unknown
outcomes remain journalled and are reconciled by readback without redispatch.
get_mutation_status reads that durable journal and never repeats a write.
The 1.4.x compatibility line retains the old immediate upsert_*, receipt,
and webhook-delete tools as deprecated interfaces. Their descriptions and
every invocation emit prominent high-severity bypass telemetry, but they remain
callable and are not controlled by INFLOW_ENABLE_SAFE_WRITES. New automation
must never fall back to one after a safe rejection and should use
the stable preview-first names: set_product, set_sales_order,
set_purchase_order, set_purchase_order_receipts, set_customer,
set_vendor, set_stock_adjustment, set_stock_transfer, set_stock_count,
set_manufacturing_order, set_taxing_scheme, set_webhook, and
remove_webhook. Generic product writes reject fields owned by price,
product-group, or BOM/manufacturing tools. Unknown and mixed operations fail
closed. Static support remains per concrete adapter, so opening a gate cannot
expose an unfinished adapter.
set_product is a released ordinary adapter. Patch mode deep-merges supplied
customFields keys into the complete current custom-field object, including
explicit falsy and null values; omitted sibling keys are preserved. Patch
mode does not delete keys. Replace mode retains whole-object semantics.
Idempotency keys are required for creates, additive changes, stock-affecting
changes, and multi-step mutations. Deterministic full replacement with
conclusive readback does not require a key. Deletes bind the exact target in the
preview, verify absence, and return already_absent when repeated against a
missing target.
Serial Numbers
Tool | Description |
| Extract serial numbers assigned to sales order lines |
| Extract serial numbers assigned to purchase order lines |
| Search fulfilled sales orders for a serial number |
| Aggregate serial numbers from fulfilled sales orders |
| Get all serial numbers for a serialized product using product inventory lines |
| List serial numbers across products that track serials |
Reference Data
Tool | Description |
| List warehouse locations |
| Get location details |
| Get bin/shelf suggestions |
| List product categories |
| List pricing tiers |
| List payment terms |
| List tax schemes |
| Create/update tax scheme |
| List tax codes |
| List currencies |
| List adjustment reasons |
| List custom fields |
| Get dropdown options |
| List inFlow users |
Webhooks
Tool | Description |
| List webhook subscriptions |
| Create/update webhook |
| Delete webhook |
Usage Examples
List Products
List all active products in the "Electronics" categoryCreate a Sales Order
Create a sales order for customer "Acme Corp" with:
- 5 units of product SKU-001 at $29.99 each
- 10 units of product SKU-002 at $15.00 each
Required by next FridayPatch a Sales Order
Update sales order SO-1001:
- change the required date to next Monday
- update line abc123 to quantity 2 with serial numbers SN-001 and SN-002
- remove line def456Receive a Purchase Order
Receive all remaining items on purchase order PO-1001 at the Main WarehouseReverse a Purchase Order Receipt
Unreceive 1 unit of product SKU-001 from purchase order PO-1001 as a dry run firstCheck Inventory
What's the current stock level for product "Widget Pro" across all locations?Compare and update a BOM safely
Call compare_product_boms with the target product and analogous variants, then
preview the desired change:
{
"productId": "target-product-id",
"mode": "replace",
"components": [
{ "childProductId": "component-id", "quantity": "1" }
],
"dryRun": true
}Apply only by repeating the request with dryRun:false, the signed
previewToken, currentSemanticHash, currentWriteShapeHash,
entityTimestamp, desiredHash, any returned idempotencyKey, and
confirmation:{scope,confirmationHash} copied from the reviewed fresh preview.
The confirmation hash must be the full lowercase 64-character value. The
server reconstructs the scope from live state and runtime identity and trusts
neither supplied field. It validates confirmation before no-op, idempotency
creation, journalling, or dispatch; a stale build, tenant, source, target, or
state requires a new preview and confirmation.
The CLI flow is:
bash "$HOME/biz/scripts/cli-run.sh" inflow-inventory-manager \
set-bom --id PRODUCT_ID --mode replace --components '[]'
bash "$HOME/biz/scripts/cli-run.sh" inflow-inventory-manager \
set-bom --id PRODUCT_ID --mode replace --components '[]' \
--apply true --confirm \
--confirm-preview-hash FULL_64_CHARACTER_HASHINFLOW_ENABLE_MANUFACTURING_WRITES and
attestations/manufacturing.json are deprecated compatibility inputs and do
not authorize or block set_product_manufacturing_config or
copy_product_manufacturing_config. Those tools retain exact preview
confirmation and now require INFLOW_ENABLE_SAFE_WRITES=true at apply. The
manufacturing probe remains useful as non-authorizing API/serializer and
optimistic-concurrency characterization. Stock-moving manufacturing-order
writes require both general gates; pick-batch also requires its dedicated
coordinator gate and attestation.
Manufacturing pick-batch live canary v2
npm run probe:manufacturing-canary -- --mode pick-batch --scenario <absolute-path> --approvals <absolute-path> --runtime-material <absolute-path>
runs the checkpointed v2 protocol through the credentialed launcher. The
launcher reads the existing owner-only coordinator credential file, requires
all JSON materials to be absolute owner-only regular files, and refuses to run
unless the master, stock, and coordinator production gates are closed. It never prints
credentials or material bodies. The lower-level
npm run probe:manufacturing-pick-batch entry point remains useful for offline
tests but is not the live operator boundary.
The older manufacturing-pick-batch-canary-scenario/v1 manifest is refused as
not live-executable. Keep
INFLOW_ENABLE_MANUFACTURING_PICK_BATCH_WRITES absent/false throughout the
canary and use a dedicated idle INFLOW_RATE_LIMIT=20 process. The command
uses:
two-subject manifest (complete has no operations; staging has operations);
stage approvals printed from the current checkpoint/plan;
component intents, canary-only component serials, sentinel exclusion
evidence, and exact expected rejection status/code pairs. V2 accepts only a
predeclared HTTP status in 400, 409, 412, or 422 plus a non-empty
provider code; the observed status and code must both match exactly. The
characterized unavailable-serial response is HTTP 400 with provider code
NegativeSerialNumberInventory.
The command is intentionally multi-run. With no approval it creates an
owner-only checkpoint and prints the exact create plan. After each approved
stage it stops at the next approval boundary: create, stock-move,
negative-probes, read-only manual-completion-read, generated cleanup, and
attest. Every mutation is durably fenced before dispatch, is dispatched at
most once, and resumes with readback only. Full manufacturing-order reads use
the provider-supported lines/operations/picks/matchings/puts include set;
operation timesheets are normalized when present but are not a live include
relationship. Cleanup is
generated from the latest full bodies and rowversions; attestation is issued
only after exact canonical inventory/serial restoration and real residual
discovery.
The final attest rerun performs fresh full-MO, order-number/marker list, and
product inventory-line reads after approval; cached cleanup evidence cannot
mint an attestation if any provider state has drifted.
Live prerequisites are five already isolated, operator-approved canary products: two finished products, one nonserialized structural subassembly, one serialized leaf component with dedicated serials, and one nonserialized leaf component. Each finished product has only the structural subassembly in its BOM; the subassembly owns both leaf components so the expanded-subassembly leaf-only contract is exercised. A dedicated location/reason, exact BOM and operation shapes, and approval of the two deterministic inert MO IDs are also required. This command does not provision or seed them. Provisioning, exact stock-adjustment apply/reversal, and cleanup must first pass through the separate checkpointed fixture workflow before the higher-risk canary stock stage runs.
Ordinary-domain canaries are release tests, not expiring runtime permissions. Every live canary requires separate operator approval for an exact inert resource; none runs merely because a safe-write gate is open. The approved inactive-product price fixture must start inactive with no price rows, and its two exact pricing schemes must be safe for disposable test prices:
npm run probe:domain -- prices "inactive-product-id" --approve-external-writeThis probe exercises the production price serializer (including server-assigned
row IDs), stale timestamps, preservation, remove/clear, and cleanup, then emits
release evidence. Product-group and MO-serial release canaries use the same
entry point with product-groups or mo-serials, exact
They prove full-array preservation/compensation or serial/inventory net-zero
restoration respectively. A passing result does not open a runtime gate or make
an adapter supported; release still requires a code change and normal review.
Look Up Serial Numbers
Show all in-stock serial numbers for product "Widget Pro"Create Stock Transfer
Transfer 50 units of "Widget Pro" from "Main Warehouse" to "Retail Store"API Features
Filtering
Most list operations support filtering. For example:
list_products with name="Widget" and isActive=truePagination
Large result sets are paginated. Use skip and count parameters:
count: Number of records to return (max 100)skip: Number of records to skip
Note: The default page size is 20 records. Always specify count when you need all records.
Sorting
All list operations support sorting:
sort: Property name to sort by (e.g., "name", "modifiedDate", "orderDate")sortDesc: Set totruefor descending order
list_products with sort="modifiedDate" and sortDesc=trueTotal Count
To get the total number of matching records (useful for pagination UI), use includeCount:
list_sales_orders with status="Open" and includeCount=trueResponse includes:
{
"data": [...],
"totalCount": 42
}Smart Search
Some endpoints support smart parameter for fuzzy searching across multiple fields:
list_customers with smart="acme" // Searches name, email, phone
list_sales_orders with smart="SO-2025" // Searches order fieldsIncludes
Use the include parameter to fetch related data:
get_sales_order with include=["customer", "lines", "lines.product"]
get_product with include=["inventoryLines"]The 2026-04-13 API rejects itemBoms.childProduct even though nested includes
work for relationships such as productOperations.operationType. The BOM tools
therefore fetch the product/BOM once, then resolve child products with a
rate-limited concurrency of four. Failed child enrichment produces warnings and
never drops a BOM row.
Partial Updates
upsert_sales_order and upsert_manufacturing_order support safe partial updates when id is provided:
Existing fields and lines that are not mentioned are preserved.
Line patches merge by explicit line ID, or by product ID when there is exactly one matching line.
Sales order lines listed in
deleteLineIdsare removed.Manufacturing order input lines listed in
deleteInputLineIdsare removed.Serial numbers can be patched without rebuilding the whole order manually.
Concurrency Control
When updating records, include the timestamp field from the original record to prevent conflicts.
Rate Limiting
The inFlow API has a rate limit of 60 requests per minute. This server implements:
Token bucket rate limiting: Automatically paces requests to stay within limits
Automatic retries: Retries on 5xx errors and rate limit (429) responses with exponential backoff
Configurable limits: Override via
INFLOW_RATE_LIMITenvironment variable
Error Handling
The server returns descriptive error messages from the inFlow API. Common errors include:
401 Unauthorized: Invalid API key
404 Not Found: Resource doesn't exist
409 Conflict: Timestamp mismatch (record was modified)
429 Too Many Requests: Rate limit exceeded (automatically retried)
Development
# Watch mode for development
npm run dev
# Build for production
npm run build
# Run the server
npm start
# Run tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage
npm run test:coverageAPI Documentation
License
MIT
Available Tools
86 toolsaudit_product_group_manufacturingC
Audit every attached variant against its option matrix and manufacturing baseline.
| Name | Required | Description | Default |
|---|---|---|---|
| locationId | No | ||
| maxVariants | No | ||
| productGroupId | Yes | ||
| includeInactive | No | ||
| baselineProductId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a read/validation operation but doesn't state whether it mutates data, what happens when variants fail the audit, whether rate limits or pagination apply (the maxVariants param hints at scale), or what auth is needed. This leaves meaningful behavioral gaps for a 5-param tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, efficient sentence with no filler. However, for a tool with five parameters and no annotations, this brevity is under-specification rather than genuine conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, no-annotation, no-output-schema tool with 0% schema description coverage, the description is far too thin. It omits parameter meanings, return values, side effects, and usage context, leaving an agent unable to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for five undocumented parameters. It explains none of them: productGroupId, locationId, maxVariants (with default 250 and max 500), includeInactive, and baselineProductId. The mention of a 'manufacturing baseline' hints at baselineProductId, but that weak connection is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (audit/validate) acting on variants, an option matrix, and a manufacturing baseline. It is a validation operation, distinguishable from sibling mutations like set_product_group_config or create_product_group_variants. However, 'audit' is slightly abstract and the description doesn't clarify whether it returns findings or fixes anything, which would sharpen it against siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like compare_product_boms or get_product_group_variant_quantities. An agent cannot tell from the description whether this is a pre-flight check, a data repair, or a reporting call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_bom_requirementsC
Calculate exact direct, leaf, or net BOM requirements at one location.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | net | |
| maxDepth | No | ||
| productId | Yes | ||
| locationId | Yes | ||
| stockBasis | No | available | |
| maxProducts | No | ||
| buildQuantity | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only, non-destructive calculation but never says so, and it discloses nothing about truncation behavior (maxDepth/maxProducts caps), how stockBasis affects results, or what the computation returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is appropriately short, though its brevity is partly a symptom of under-specification rather than discipline.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter computation tool with no annotations and no output schema, the description is far too thin. An agent cannot determine depth/limit semantics, stock basis behavior, or expected result shape from what is given.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 7 parameters. The description names the three mode values, which covers one enum, but says nothing about stockBasis (available vs onHand), maxDepth/maxProducts limits, or that buildQuantity is a decimal-string quantity. Most parameter meaning is left undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (calculate) and resource (BOM requirements), and enumerates the three modes (direct, leaf, net), which sets it apart from get_bill_of_materials and compare_product_boms. It stops short of explicitly naming those siblings, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to use this over get_bill_of_materials, compare_product_boms, or get_inventory_summary, no stated prerequisites (e.g., an existing BOM and configured manufacturing config), and no exclusions. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_product_bomsC
Compare manufacturing components, operations, and settings for 2-25 products.
| Name | Required | Description | Default |
|---|---|---|---|
| productIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Compare' implies a non-mutating read, but nothing states the return shape, ordering, error behavior when an ID is invalid, or cost/rate characteristics given the 25-product cap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the action front-loaded and the cardinality constraint attached. No filler, though the brevity contributes to the gaps elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and a completely undocumented parameter, the description leaves the agent without return-format, error, or ID-format information. It is too thin for the complexity of a multi-product comparison.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (productIds) with 0% schema description coverage, so the schema itself explains nothing about format or meaning. The description's '2-25 products' merely restates the schema's minItems/maxItems and adds no semantics about ID form, existence requirements, or duplicate handling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Compare') and the compared resources ('manufacturing components, operations, and settings') scoped to products, which separates it from read-oriented siblings like get_bill_of_materials or get_product. 'Settings' is somewhat vague, but the core action and domain are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose this over fetching each product's BOM individually, no prerequisites, and no mention of what conditions make comparison appropriate. The 2-25 bound implies batch use but is not framed as usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_product_manufacturing_configB
Preview or copy selected manufacturing sections from one product to another without reusing source row IDs. Apply requires the exact full confirmation scope and hash returned by a fresh preview.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | replace | |
| dryRun | No | ||
| sections | No | ||
| confirmation | No | ||
| previewToken | No | ||
| idempotencyKey | No | ||
| sourceProductId | Yes | ||
| targetProductId | Yes | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| expectedWriteShapeHash | No | ||
| allowInactiveComponents | No | ||
| expectedEntityTimestamp | No | ||
| expectedTargetTimestamp | No | ||
| expectedSourceConfigHash | No | ||
| expectedTargetConfigHash | No | ||
| expectedSourceWriteShapeHash | No | ||
| expectedTargetWriteShapeHash | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose two non-obvious traits: source row IDs are not reused, and apply is gated on a fresh preview's exact scope plus confirmation hash. It does not say what replace mode does to the target's existing config, whether the change is reversible, or what permissions are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no filler, and the preview-vs-apply constraint is front-loaded in the second sentence. Slightly compressed relative to the amount of behavior an agent still needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a high-complexity mutation with a nested confirmation object, 18 parameters, no annotations, and no output schema. The description covers the preview/apply gate but omits the semantic difference between modes, the meaning of the confirmation fields, and the consequences of applying, leaving significant gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 18 parameters, so the description must compensate. It hints at sections and the confirmation scope/hash, but leaves mode (patch vs replace), dryRun, previewToken, idempotencyKey, allowInactiveComponents, and the eight expected* hash parameters entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (preview/copy) and resource (manufacturing sections from one product to another), and the 'without reusing source row IDs' clause signals a distinct behavior. It is distinguishable from set_product_manufacturing_config and audit_product_group_manufacturing, but it never names a sibling to sharpen the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the two-phase workflow (preview first, then apply with the returned scope and hash), which is useful invocation guidance. However, it gives no explicit when-to-use/when-not direction versus the nearby set_product_manufacturing_config, compare_product_boms, or audit_product_group_manufacturing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_product_group_variantsC
Preview deterministic product/variant IDs for a compensated create-and-attach saga. Apply stays blocked until its canary.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | ||
| variants | Yes | ||
| previewToken | No | ||
| idempotencyKey | No | ||
| productGroupId | Yes | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses deterministic ID generation and a saga pattern, but omits critical details like the dryRun default, what previewToken is for, idempotency requirements, and how the expected hash fields affect safety. The opacity around 'canary' leaves the apply flow unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler, and the core action is front-loaded. The brevity is appropriate structurally, though the content is too sparse to be fully useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a complex mutation tool with 9 parameters, nested arrays, no output schema, and no annotations, the description is severely incomplete. It provides high-level saga context but leaves the agent unable to call the tool correctly without guessing at core behaviors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description mentions no parameters at all. With 9 parameters including required nested variants and hash fields, the description does nothing to explain their meaning or usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Preview') and resource ('product/variant IDs'), but the phrase 'compensated create-and-attach saga' is opaque jargon that obscures whether the tool creates, previews, or does both. It does not clearly distinguish itself from siblings like create_product_group_variants or set_product_group_config.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. The clause 'Apply stays blocked until its canary' hints at a precondition for a subsequent apply, but does not tell an agent when previewing is appropriate or what canary means in practice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_webhookA
[LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use remove_webhook instead. Delete a webhook subscription
| Name | Required | Description | Default |
|---|---|---|---|
| webhookId | Yes | The webhook ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses critical traits: it is a legacy immediate write, high risk, and bypasses INFLOW_ENABLE_SAFE_WRITES. It does not state irreversibility or permission requirements, but the risk profile is unusually well surfaced for a delete tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, with the critical risk warning and deprecation notice front-loaded before the core purpose. Every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter delete tool with no output schema and rich schema coverage, the description gives all needed context: what it does, why it is risky, and which alternative to use. Nothing an agent needs to decide or call correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (single parameter webhookId with a clear description), so the schema already fully documents the parameter. The description adds no syntax or format detail beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a webhook subscription') and explicitly names the preferred sibling tool ('Use remove_webhook instead'), so an agent can distinguish this legacy tool from its replacement without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance by stating 'Use remove_webhook instead' and warns of high risk and safe-write bypass, which functions as a clear 'do not use unless...' condition. No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bill_of_materialsB
Get a stable, enriched product manufacturing configuration including BOM rows, components, operations, settings, and concurrency metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| productId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two real behavioral traits: the result is 'stable' (a deterministic snapshot rather than a live recomputation) and it includes 'concurrency metadata' (implying an optimistic-concurrency token). It still omits whether the call is read-only, what happens for an unknown productId, and any auth or rate-limit notes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the return-content list is compact and informative. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description partially fills that gap by enumerating the returned sections. However, with no annotations and an undocumented required parameter, an agent still lacks enough context about when to call it and what the productId must be.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter (productId) with 0% schema description coverage, and the description adds no meaning to it — no format, ID source, or behavior when the ID is unknown. The description's field list describes the response, not the input, so it does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (a product's manufacturing configuration / bill of materials) and enumerates the returned contents: BOM rows, components, operations, settings. It does not differentiate itself from close siblings such as compare_product_boms, calculate_bom_requirements, or copy_product_manufacturing_config, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no statement of prerequisites, and no named alternative. The description never even mentions that a productId is required or when this lookup is preferable to get_product or compare_product_boms.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_customerC
Get detailed information about a specific customer
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Related data to include | |
| customerId | Yes | The customer ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not say this is a read-only lookup, what 'detailed information' actually comprises, whether related data expansion has performance cost, or what happens with an unknown customerId.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is appropriately sized but so terse that it defers entirely to the name and schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should compensate by describing what details are returned and how the include parameter behaves. It says nothing, leaving the agent unable to predict the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters (though the 'include' description is itself thin). The tool description adds no parameter meaning at all, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('get') and resource ('customer') with scope implied by 'specific customer', which distinguishes it from list_customers. However it never explicitly contrasts itself with the sibling set (get_vendor, get_sales_order, etc.), so an agent gets no help beyond the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no mention of when to prefer list_customers, and no prerequisites. Usage can only be inferred from the name and the required customerId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_custom_field_dropdown_optionsC
Get dropdown options for custom fields of a specific entity type
| Name | Required | Description | Default |
|---|---|---|---|
| entityType | Yes | The entity type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, but it only states what is fetched. It does not disclose whether this is a read-only lookup, permission requirements, or whether the returned options are filtered by anything (e.g., active values).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, appropriately sized sentence with the resource and scope front-loaded and no filler. It is efficient, though it sacrifices explanatory depth for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool this is roughly adequate, but with no output schema the agent gets no notion of the returned option structure (labels, values, grouping by field). Given no annotations either, a little more context would materially help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single enumerated entityType parameter, so the schema already documents the input fully. The description's phrase 'of a specific entity type' merely echoes that, adding no format or selection semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (Get) and resource (dropdown options for custom fields) scoped to an entity type, so the agent understands what it returns. However, it does not distinguish this from the sibling list_custom_field_definitions, leaving the boundary between 'definitions' and 'dropdown options' to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to use this tool versus list_custom_field_definitions or any other sibling, nor any prerequisite stated. The agent must guess the intended situation from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inventory_summaries_batchB
Get inventory summaries for multiple products at once (max 100)
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Related data to include | |
| productIds | Yes | Array of product IDs (max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses only the max-100 cap (already in the schema) and does not state whether this is a safe read, whether missing/invalid product IDs cause failures, auth requirements, or rate/partial-success behavior for a batch call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the batch scope front-loaded and no filler. Everything stated is relevant and appropriately sized for a two-parameter getter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with full schema coverage and no output schema, the essentials are present, but the absence of annotations plus the lack of any behavioral detail (partial failure, permissions, what a 'summary' contains) leaves it only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both productIds and include. The description's only parameter note ('max 100') merely repeats the schema's maxItems and the productIds description, adding no new meaning. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (inventory summaries) and adds the batching scope ('multiple products at once, max 100'), which meaningfully distinguishes it from the sibling get_inventory_summary. However, it never names that singular sibling explicitly, so the differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for multiple products at once' implies when to prefer this over a single-product lookup, but there is no explicit when-to-use/when-not statement and no explicit reference to get_inventory_summary as the alternative. Usage is only inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inventory_summaryC
Get inventory quantities for a product across all locations
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Related data to include (e.g., locationSummaries, sublocationSummaries) | |
| productId | Yes | The product ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. 'Get' implies a read operation, but it says nothing about permissions, whether inactive/zero-quantity locations are included, pagination, or the shape of the quantities returned. This is a significant gap for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence that front-loads the resource and scope. It is appropriately sized, though it is so terse that it leaves obvious questions unanswered rather than being wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with full schema coverage and no output schema, this is minimally adequate. However, with no annotations and no explanation of the return shape or the meaning of 'inventory quantities' across locations, more context would help an agent confirm expected results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (productId, include) are documented in the schema, so the baseline is 3. The description adds only 'across all locations', which scopes the result but says nothing about how the include parameter behaves (e.g., locationSummaries, sublocationSummaries).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('inventory quantities') plus the scope ('for a product across all locations'), so the agent knows exactly what is returned. It does not however name or distinguish itself from the sibling get_inventory_summaries_batch, which covers similar ground.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this single-product call versus get_inventory_summaries_batch, nor any prerequisite or exclusion. The agent must infer usage purely from the wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_locationC
Get details of a specific location
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | ||
| locationId | Yes | The location ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Get' implies a read operation, but the description does not disclose authentication requirements, whether the response is paginated, what the 'include' parameter does, or what happens if the location is not found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It is concise, though its brevity contributes to under-specification rather than clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema and no annotations, the description is incomplete. It does not explain the include parameter, the shape of the returned details, or any behavioral context an agent would need to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: locationId is documented as 'The location ID,' but the 'include' array has no schema description. The tool description adds no parameter meaning beyond the schema and does not explain the optional include parameter at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Get details of a specific location.' It distinguishes a single-location lookup from the sibling list_locations implicitly through 'specific location,' though it does not name the alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as list_locations or get_suggested_sublocations. The implied usage is a single-location lookup by ID, but no conditions, prerequisites, or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_manufacturing_orderC
Get details of a specific manufacturing order
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | ||
| manufacturingOrderId | Yes | The manufacturing order ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it says nothing beyond the word 'Get'. It doesn't disclose what happens when the ID is unknown, whether the read is safe/cached, or what the returned payload contains. A read-only implication is inferable from the verb but is never confirmed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler and the essential resource front-loaded. It is efficient, though its brevity edges toward under-specification rather than genuine conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a lookup tool with no output schema, no annotations, and an undocumented 'include' parameter, the description is too thin. An agent lacks the return-shape and parameter-expansion context needed to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: manufacturingOrderId is documented in the schema, but the 'include' array has no description anywhere. The description neither explains what 'include' expands nor how the order ID is formatted, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb ('Get') and resource ('manufacturing order') with a scope qualifier ('a specific'). An agent can tell it fetches one order by ID, but the description does nothing to separate it from near-neighbors like list_manufacturing_orders or get_manufacturing_order_trace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all. With siblings such as list_manufacturing_orders, get_manufacturing_order_trace, upsert_manufacturing_order, and set_manufacturing_order in the toolset, the description gives no cue about when this fetch is the right choice or what prerequisites it needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_manufacturing_order_traceC
Trace manufacturing output lines, input picks, pick matchings, and serial anomalies.
| Name | Required | Description | Default |
|---|---|---|---|
| manufacturingOrderId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a diagnostic read that aggregates several data sets, but says nothing about whether it mutates anything, what 'serial anomalies' actually means, permissions required, or how large the payload may be. For a trace/diagnostic tool with zero annotation coverage this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is appropriately sized for its informational content, though the token list reads slightly like keyword stuffing rather than prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool returns a multi-part trace with no output schema and no annotations, so the description is the only source of behavioral and parameter context. It names the data categories but explains neither the return shape nor the identifier semantics, leaving the agent under-informed for a non-trivial diagnostic call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter manufacturingOrderId has no description in either the schema or the description text. The description never tells the agent what identifier form to supply (internal ID, order number, etc.), which is the one piece of information a caller actually needs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (trace) and enumerates the resources surfaced: output lines, input picks, pick matchings, serial anomalies. That is materially more informative than the sibling get_manufacturing_order, so differentiation is implied. It stops short of a 5 because it never explicitly names the sibling it contrasts with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance. The description does not mention the related sibling reconcile_manufacturing_order_serials, nor does it say whether this is a read-only lookup or a step before reconciliation. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mcp_statusB
Inspect local inFlow MCP capabilities, safety gates, and optional API reachability.
| Name | Required | Description | Default |
|---|---|---|---|
| probeApi | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully signals that default inspection is 'local' while API reachability is 'optional', hinting that only the probe path touches the network. However, it omits side effects, cost/latency, auth requirements, and what happens when the probe fails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the core action front-loaded and no filler. It is efficient, though the abstract noun list makes the back half slightly dense for one clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations and no output schema exist, so the description must explain both behavior and results. It has low parameter complexity (1 optional boolean), but it never describes the shape of the returned status/health information, leaving the agent unable to anticipate the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single boolean 'probeApi' is undocumented in the schema. The phrase 'optional API reachability' loosely maps to probeApi and implies it is off by default, adding some meaning, but the description never names the parameter or states the default explicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Inspect') and resource ('local inFlow MCP capabilities, safety gates, and optional API reachability'). It is clearly a meta/diagnostic tool distinct from every sibling (which all operate on ERP entities), though the enumerated nouns ('capabilities', 'safety gates') are a bit abstract about what is actually returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives or when NOT to call it. Use is only implied by the word 'Inspect'; an agent is left to infer that this is a preflight/health-check tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mutation_statusB
Read durable mutation status. Reconciliation performs a fresh supported-adapter read and never repeats a write.
| Name | Required | Description | Default |
|---|---|---|---|
| reconcile | No | ||
| operationId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose one meaningful guarantee: reconciliation performs a fresh read and never repeats a write, which tells the agent the tool is non-destructive even in reconcile mode. However, it never explains what the default (non-reconcile) path returns — cached/stale status? — nor any auth or rate-limit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste, and the core purpose is front-loaded before the reconciliation caveat. Every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 0% schema coverage on a required parameter, the description is too thin. An agent cannot tell what the status payload looks like, how to obtain operationId, or how reconcile interacts with the default read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two parameters. The description partially compensates for 'reconcile' by explaining its effect, but says nothing about 'operationId' (required), its format, or where an agent obtains it, even though the schema only supplies a regex pattern.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (read durable mutation status) and adds a qualifier about reconciliation semantics. It is clear enough to distinguish from generic CRUD siblings, but it does not differentiate itself from the similarly-named sibling get_mcp_status, and 'mutation' is used without defining which subsystem's mutations are in scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this tool, when to poll vs. wait, or when to set reconcile=true vs. false. The mention of what reconciliation does hints at a mode of use but never states the condition that should select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_operation_typeC
Get one manufacturing operation type.
| Name | Required | Description | Default |
|---|---|---|---|
| operationTypeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and falls well short: it says nothing about read-only safety, error behavior for an unknown ID, permissions, or what the returned operation type contains. Only the fact that it is a singular fetch is inferable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero filler or repetition. It is efficient, though arguably too terse to be useful rather than genuinely well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a lookup tool with an undocumented required parameter, no annotations, and no output schema, the description is too thin. It does not explain what a 'manufacturing operation type' is, how to obtain the ID, or what the caller receives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the one required parameter, operationTypeId, and the description never mentions it or explains its format/source. The agent must infer that the 'one' operation type is identified by an ID rather than by name or other key.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('one manufacturing operation type'), so the scope (single vs. collection) is clear. However, it never names its obvious sibling list_operation_types, so the agent gets no explicit differentiation from the list variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus list_operation_types, nor any prerequisite (e.g., needing an ID obtained from the list call). The single-retrieval shape implies usage but nothing is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productA
Get detailed information about a specific product by ID. Use include=itemBoms to get the bill of materials (components needed to manufacture this product).
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Related data to include. Options: category, customFields, itemBoms (bill of materials), inventoryLines (serial numbers/serial numbers for trackSerials products) | |
| productId | Yes | The product ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Get' implies a read, and it discloses that include=itemBoms expands the payload, which is useful. It does not cover failure behavior (unknown ID), whether the include expansion is expensive, or whether results are cached/live.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, scoping clause front-loaded and the include hint appended. No filler, though the second sentence duplicates a term (itemBoms) that already appears in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple single-resource read tool with complete schema coverage and no output schema, so return-shape explanation is unnecessary. The only real omission is routing guidance versus get_bill_of_materials, which leaves a small ambiguity among siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented, including the full option list for 'include'. The description adds a definition of itemBoms only, leaving category/inventoryLines unelaborated. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get detailed information about a specific product by ID'), which cleanly separates it from list_products. It also names one concrete capability (itemBoms). It stops short of explicitly disambiguating against sibling BOM tools, so it is clear but not sibling-differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one useful usage hint (use include=itemBoms for the bill of materials), which is genuine when-to-use guidance for a parameter. However, siblings get_bill_of_materials and compare_product_boms exist, and the description never says when to prefer those over this tool's include flag, nor any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_product_groupB
Get one product group with ordered options, option values, and attached product variants.
| Name | Required | Description | Default |
|---|---|---|---|
| productGroupId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose the read shape (a single group with its ordered options, values and variants), which is genuine behavioral context about the response. However, nothing is said about permissions, not-found behavior, or nesting depth, leaving meaningful gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence, front-loaded with the verb and resource and then the payload detail. No filler, though it is terse enough that the missing guidance is a function of under-specification rather than brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully names the returned components, which partly compensates. But with no annotations and zero parameter documentation, an agent still cannot tell what the ID should be or what could go wrong, so it is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter productGroupId, and the description adds nothing about its format, source, or whether it is an internal ID or a user-facing key. With only one parameter the definition should at least anchor what identifier is expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Get') plus resource ('one product group') and it enumerates the payload contents (ordered options, option values, attached product variants). It implicitly separates itself from list_product_groups (plural) and get_product_group_variant_quantities, but never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of the obvious alternatives (list_product_groups, get_product_group_variant_quantities). The agent must infer the selection rules from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_product_group_variant_quantitiesC
Get product-variant quantities for one product group at one location.
| Name | Required | Description | Default |
|---|---|---|---|
| locationId | Yes | ||
| productGroupId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read operation via 'Get' but does not disclose whether quantities are aggregated by location, whether missing variants are omitted or zeroed, or what permissions are needed. For a tool with zero annotation coverage this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Every word contributes to scoping the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 0% schema description coverage, the description is the only source of meaning and it does not explain what a 'quantity' represents (on-hand, available, committed) or the return shape. It is too thin for the information vacuum surrounding it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so both parameters rely on name alone. The description partially compensates by mapping the concepts 'one product group' and 'one location' to the two required params, but adds no format, ID-type, or scope detail beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('product-variant quantities') scoped to one product group and one location. An agent can distinguish this from siblings like get_product, get_product_group, or create_product_group_variants. It lacks explicit sibling differentiation, but the scoping detail makes the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as get_product_group, get_inventory_summary, or create_product_group_variants. The description implies a read of variant-level quantities but never states prerequisites or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_product_pricesC
Get all price rows for a product using exact pricing-scheme IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| productId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read via 'Get', but says nothing about pagination, whether scheme names are resolved, auth requirements, or the shape of returned rows.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the verb and resource. No filler, though the misleading pricing-scheme clause costs some clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, no annotations, and an undocumented required parameter. For a retrieval tool whose return values and identifier format are entirely unspecified, the description does not provide enough to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single required parameter productId is undocumented in both schema and description. Worse, the phrase 'pricing-scheme IDs' suggests a parameter that does not exist, adding confusion rather than clarifying productId's format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb+resource (get price rows for a product) is clear and it contrasts with the write sibling set_product_prices. However, the trailing clause 'using exact pricing-scheme IDs' describes something the schema does not support — the only input is productId — which muddies the stated purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no named alternatives. The reader can infer it is the read counterpart to set_product_prices, but nothing states that, nor whether it should be used instead of list_pricing_schemes for price lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_product_serialsA
Get all serial numbers (serial numbers) for a specific product using inventoryLines. Much faster than order-based lookup. Returns serials with stock status (quantityOnHand=0 means sold/shipped).
| Name | Required | Description | Default |
|---|---|---|---|
| productId | Yes | The product ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses output semantics (serials carry stock status, and quantityOnHand=0 indicates sold/shipped), which is genuinely valuable. It says nothing about pagination on a 'get all' call, auth requirements, or result size limits, leaving those gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and the key performance hint. Minor waste in the redundant 'serial numbers (serial numbers)' phrasing, but otherwise tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey return shape, and it does explain that serials come back with stock status and gives the quantityOnHand=0 interpretation. For a single-parameter read tool this is nearly sufficient; pagination behavior is the remaining omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (productId) and schema description coverage is 100%, so the schema already documents it. The description confirms the parameter is product-scoped but adds no format or sourcing detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get all serial numbers for a specific product) and names the underlying lookup path (inventoryLines). It implicitly separates itself from order-based siblings via 'Much faster than order-based lookup,' though it does not name them directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the phrase 'for a specific product' and the comparative note about speed versus order-based lookup, which hints this is the preferred path for a single product. However, no sibling is named explicitly (e.g. get_sales_order_serials, list_all_serials) and there is no when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_purchase_orderC
Get detailed information about a specific purchase order
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Related data to include (e.g., vendor, location, lines, lines.product) | |
| purchaseOrderId | Yes | The purchase order ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. "Get" implies a read, but it does not state what "detailed information" includes, whether the optional include parameter triggers extra queries, or what the response looks like for a tool with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no filler and the key scoping qualifier front-loaded. It is appropriately sized but arguably too sparse given the undisclosed include behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read with full schema coverage and no output schema, the description is minimally adequate. It still leaves the notable include-expansion behavior and the returned detail level unexplained, which an agent would want to know before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both purchaseOrderId and the include array (with its vendor/location/lines nesting hints) are already documented in the schema. The description adds nothing about parameters, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (purchase order) with a scoping word ("a specific") that implicitly separates it from list_purchase_orders. However, it never names a sibling or explains how it differs from get_sales_order or get_manufacturing_order, so sibling differentiation is absent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this versus list_purchase_orders, nor any prerequisites (e.g., that a valid purchaseOrderId must come from the list call). Usage must be inferred from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_purchase_order_serialsB
Extract serial numbers (serial numbers) from a specific purchase order. Returns all serial numbers assigned to line items on this order.
| Name | Required | Description | Default |
|---|---|---|---|
| purchaseOrderId | Yes | The purchase order ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the read-only nature and return semantics ("Returns all serial numbers assigned to line items"), but says nothing about pagination, empty orders, ordering, or permissions, which is a modest gap for a simple lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core action front-loaded. The parenthetical "(serial numbers)" restating the noun is minor redundancy, but nothing else wastes space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read with no output schema, the description covers what the tool does and what it returns. It is nearly complete; only the absence of any disambiguation from serial-focused siblings keeps it from being fully sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter with 100% schema description coverage, so the schema already documents purchaseOrderId. The description confirms it targets a specific purchase order but adds no format, example, or constraint beyond that, matching the baseline for schema-covered params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Extract") and resource ("serial numbers from a specific purchase order") and clarifies scope as serials assigned to line items on that order. It is clear on its own, but it never differentiates itself from the many serial-related siblings (get_sales_order_serials, get_product_serials, list_serial_numbers, search_serial_number), which an agent must disambiguate against.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives. An agent gets no help deciding between this and get_sales_order_serials / get_product_serials / list_serial_numbers; only the resource implied by the name distinguishes it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sales_orderC
Get detailed information about a specific sales order
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Related data to include (e.g., customer, location, lines, lines.product) | |
| salesOrderId | Yes | The sales order ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and provides essentially none: it does not say what happens on an invalid/missing ID, whether the read is safe, what 'detailed information' comprises, or how the include expansion behaves. 'Detailed' is the only behavioral claim and it is vague.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no filler, and the resource is front-loaded. It is arguably too terse, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read with full schema coverage and no output schema, the description is minimally adequate, but it omits error behavior and the semantics of the include expansion, leaving the agent to guess at return shape and failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both salesOrderId and the include array (with dot-path examples like lines.product) documented in the schema itself. The description adds no parameter meaning beyond the schema, which is the expected baseline when coverage is this high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (sales order) scoped to a single record via 'specific', which implicitly separates it from list_sales_orders. However, it does not explicitly name or contrast with any sibling, so differentiation must be inferred from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of the obvious alternative (list_sales_orders) or how the 'include' parameter should drive usage. The agent must infer everything from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sales_order_serialsB
Extract serial numbers (serial numbers) from a specific sales order. Returns all serial numbers assigned to line items on this order.
| Name | Required | Description | Default |
|---|---|---|---|
| salesOrderId | Yes | The sales order ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the return content ('all serial numbers assigned to line items on this order') but says nothing about permissions, pagination on large orders, or what happens when an order has no serialized line items, which matters for an unbounded list-style return.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the purpose front-loaded, which is appropriate for a simple one-parameter tool. The parenthetical '(serial numbers)' immediately after the same phrase is redundant filler, costing it a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-read lookup with no output schema and full schema coverage, the description adequately covers what the tool returns and where the data comes from. It is only missing volume/pagination expectations for orders with many serialized line items.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter with 100% schema description coverage, so the schema already documents salesOrderId. The description only implies the parameter via 'a specific sales order' and adds no format or sourcing detail beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('extract') and resource ('serial numbers') scoped to a single sales order, which implicitly separates it from the warehouse-wide siblings list_all_serials and search_serial_number. It does not explicitly name the nearest siblings (get_purchase_order_serials, get_product_serials), so differentiation is left partly to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use guidance, no prerequisites, and never names the alternative tools (get_product_serials, get_purchase_order_serials, list_serial_numbers) an agent should compare against. The only routing signal is the 'specific sales order' scoping, which is incidental rather than stated as guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_adjustmentC
Get details of a specific stock adjustment
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | ||
| adjustmentId | Yes | The stock adjustment ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Get' implies a read operation, but it doesn't disclose permissions, pagination, whether it returns full or partial data, or error behavior for missing IDs. For a retrieval tool with zero annotation coverage and no output schema, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every word earns its place and the core action is immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a retrieval tool with no annotations, no output schema, and an undocumented optional 'include' parameter, the description is too thin. It doesn't explain what fields are returned, what 'include' does, or failure behavior, leaving an agent without enough context to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%. The required adjustmentId parameter is documented in the schema itself ('The stock adjustment ID'), but the optional 'include' parameter has no description anywhere. The description adds no detail about what 'include' accepts or what adjustmentId format is expected, so it does not compensate for the coverage gap. Baseline 3 for partial coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Get details of a specific stock adjustment.' This clearly identifies a retrieval operation and distinguishes it from mutation siblings like set_stock_adjustment and upsert_stock_adjustment. It doesn't explicitly name the list sibling get_stock_adjustments, but the singular/plural naming and 'specific' qualifier make the scoping reasonably clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The sibling list includes list_stock_adjustments, set_stock_adjustment, and upsert_stock_adjustment, and the description gives no indication of when this single-record fetch is appropriate versus listing or mutating.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_countC
Get details of a specific stock count
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | ||
| stockCountId | Yes | The stock count ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing. 'Get' implies a read, but there is no statement about permissions, whether 'details' includes lines/locations, or error behavior for an unknown ID.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero wasted words. It is efficient, though the brevity reflects under-specification rather than disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a fetch tool with no output schema and one entirely undocumented parameter ('include'), the description should at minimum explain what is returned and how to expand it. As written, an agent cannot tell what 'details' means or how to shape the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: stockCountId is documented in the schema, but the 'include' array has no description anywhere and the description does not compensate. It adds no meaning about what fields are expandable or what the ID format looks like.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('a specific stock count'), which is clear on its own. However, it does not distinguish itself from the sibling list_stock_counts or upsert_stock_count, so the agent must infer the singular-vs-list distinction from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'a specific stock count' weakly implies use when you have a single ID, but there is no explicit when-to-use guidance and no mention of list_stock_counts as the alternative for enumeration. The agent is left to infer routing from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_transferB
Get details of a specific stock transfer
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | ||
| transferId | Yes | The stock transfer ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only retrieval ('Get details'), which is reasonable, but it doesn't disclose error behavior (e.g., what happens for an invalid ID), authorization requirements, or return shape. It's minimally adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, clear sentence with no wasted words. It is front-loaded with the verb and resource, though it could be slightly more informative without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with no output schema, the description is minimally sufficient. However, it omits guidance on the 'include' parameter and behavioral context (auth, errors), leaving gaps that the description could reasonably fill given its brevity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: 'transferId' is documented, but the optional 'include' parameter has no description in either the schema or the tool description. The description adds no meaning beyond the schema, so a baseline 3 is appropriate given partial coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('stock transfer') scoped to a single record, which distinguishes it from the sibling list_stock_transfers. It doesn't name the sibling explicitly, but the singular 'specific' vs. list differentiation is clear from the name and description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'specific' implies retrieval by identifier, which hints at usage. However, there is no explicit when-to-use vs. when-not guidance, no mention of alternatives like list_stock_transfers, and no statement of prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_suggested_sublocationsC
Get suggested sublocations (bins/shelves) for a location
| Name | Required | Description | Default |
|---|---|---|---|
| locationId | Yes | The location ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it discloses almost nothing: it never says the call is read-only, what 'suggested' is based on (existing sublocations, capacity, defaults, usage history), or whether the result is exhaustive or a heuristic ranking. The key behavioral trait of this tool is the suggestion algorithm, and it is entirely unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the parenthetical gloss is the one piece of information that earns its place. It is efficient, though the terseness is part of why behavior is under-described rather than a sign of disciplined economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter lookup with no output schema and no annotations, this is close to minimally viable. The unresolved meaning of 'suggested' and the absence of any read-only/side-effect signal leave the agent guessing about what the tool actually returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single required 'locationId' parameter, so the schema already documents the input and the baseline is 3. The description adds no syntax, format, or sourcing detail (e.g., where the location ID comes from) beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get suggested sublocations') and adds a clarifying gloss that sublocations are 'bins/shelves', which disambiguates unfamiliar domain vocabulary. It does not name or contrast against any sibling, but no sibling covers this resource, so the risk of confusion is low.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no stated alternative. The reader must infer that this is called when picking a bin/shelf for a location, and nothing explains when a static list_locations-style call would be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vendorC
Get detailed information about a specific vendor
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Related data to include | |
| vendorId | Yes | The vendor ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Get' implies a read, but there is no disclosure of permissions, error behavior for unknown IDs, or what 'detailed information' actually contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no waste. It is efficient, though the brevity is partly the result of under-specification rather than disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the agent must guess the return shape. Critically, the 'include' parameter accepts arbitrary strings but neither the schema nor the description lists valid values, so an agent cannot use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are documented structurally, making 3 the baseline. The description adds nothing about the 'include' array or vendorId format, but it is not required to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb ('Get') plus resource ('vendor') with a stated scope ('a specific vendor', i.e. single-item lookup). It reads distinctly from list_vendors and upsert_vendor, though it never explicitly names them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus list_vendors or how to obtain a vendorId. The tool's role is inferable from the name but the description supplies no usage conditions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_adjustment_reasonsC
List all stock adjustment reasons
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| sort | No | Property to sort by (e.g., name) | |
| count | No | ||
| sortDesc | No | Sort in descending order | |
| includeCount | No | Include total record count in response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It merely says 'List all' and omits pagination behavior, read-only confirmation, authorization needs, and return shape, leaving significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single clear sentence with the resource and scope front-loaded. It is efficient, though the extreme brevity leaves gaps better addressed in the other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter list tool with no output schema and no annotations, the description is incomplete. It does not explain pagination, sorting, or what 'all' means in a paginated context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, with descriptions for sort, sortDesc, and includeCount but not skip or count. The description adds no parameter meaning, so it fails to compensate for the uncovered parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (stock adjustment reasons) with scope 'all'. It is distinguishable from list_stock_adjustments, which lists adjustments rather than reasons, though it does not explicitly name that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus list_stock_adjustments or get_stock_adjustment, nor any prerequisites. Usage is only implied by the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_all_serialsB
List all serial numbers (serial numbers) across ALL products that track serials. Uses inventoryLines for fast retrieval. Much faster than order-based aggregation.
| Name | Required | Description | Default |
|---|---|---|---|
| inStockOnly | No | Only return serials that are still in stock (quantityOnHand > 0) | |
| maxProducts | No | Maximum number of products to fetch (default: 100, max: 500) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose a real behavioral trait: the internal inventoryLines path and its speed advantage over order-based aggregation. It still omits return shape, pagination behavior, and whether large result sets are truncated, so it is helpful but incomplete for an un-annotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences that get to the scope and the performance rationale immediately. Minor waste in the redundant '(serial numbers)' parenthetical following 'serial numbers'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A read-only bulk list tool with two fully documented optional params and no output schema is mostly covered, but the description never indicates what a returned record contains or how results are grouped/limited beyond maxProducts. Adequate, with a visible gap on return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both inStockOnly and maxProducts are documented in the schema), so the baseline is 3. The description adds no filter syntax or default behavior beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List), resource (serial numbers), and scope (across ALL products that track serials), which implicitly separates it from product-scoped or order-scoped siblings. However, it never names the closest siblings (list_serial_numbers, search_serial_number, get_product_serials), so the agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'Much faster than order-based aggregation' hints that this is the preferred bulk-retrieval path, but there is no explicit when-to-use/when-not guidance and no alternative tool named. The agent gets a nudge, not a routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesC
List all product categories
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| sort | No | Property to sort by (e.g., name) | |
| count | No | ||
| include | No | Related data to include (e.g., parentCategory, subCategories) | |
| sortDesc | No | Sort in descending order | |
| includeCount | No | Include total record count in response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says 'List all' but supports skip/count pagination and include parameters, contradicting a naive 'all' interpretation. No mention of pagination defaults, return shape, or read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with a clear verb and object. It is concise, though arguably too terse given the tool's pagination and include capabilities.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with 6 parameters, no annotations, and no output schema, the description is inadequate. It should clarify pagination behavior, the include options, and how categories relate to sibling resources like product groups.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% with 6 parameters. The description adds nothing about parameters, but the schema documents sort, include, sortDesc, and includeCount adequately. Baseline 3 is appropriate since the schema does most of the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource ('List all product categories'). It states scope as 'all', but does not differentiate from the many sibling list_* tools (list_products, list_product_groups) or clarify the distinction between categories and product groups. Still, the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this vs alternatives. With dozens of sibling list_* tools, an agent cannot know whether categories differ from product groups. No exclusions, no prerequisites, no conditions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_currenciesB
List all currencies configured in inFlow
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| sort | No | Property to sort by (e.g., name, code) | |
| count | No | ||
| sortDesc | No | Sort in descending order | |
| includeCount | No | Include total record count in response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it only implies a read operation. It does not disclose pagination behavior, default sort order, return format, or other traits relevant to a 5-parameter list endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero wasted words. It is appropriately sized for the purpose statement it provides.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, the description establishes the core purpose and domain. However, with no output schema and no annotations, it omits enough about pagination, sorting, and return content that an agent may need to inspect the schema to use it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no meaning for any of the five optional parameters. With only 60% schema description coverage, undocumented parameters like 'skip' and 'count' receive no explanation from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('currencies') and adds scope ('configured in inFlow'). No sibling tool covers currencies, so it is unmistakable which resource this acts on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives no guidance about when to use this tool versus alternatives, nor any conditions or exclusions. The intended use is obvious from 'List', but the description itself provides no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_customersC
Search and list customers with optional filtering
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter by customer name (partial match) | |
| skip | No | Number of records to skip | |
| sort | No | Property to sort by (e.g., name, modifiedDate) | |
| count | No | Number of records to return (max 100) | |
| No | Filter by email | ||
| phone | No | Filter by phone | |
| smart | No | Smart search across customer fields (name, email, phone) | |
| include | No | Related data to include (e.g., contacts, pricingScheme, paymentTerms) | |
| isActive | No | Filter by active status | |
| sortDesc | No | Sort in descending order | |
| locationId | No | Filter by location ID | |
| includeCount | No | Include total record count in response | |
| pricingSchemeId | No | Filter by pricing scheme ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and fails to. It is a 13-parameter read tool with no mention of pagination behavior, the max-100 cap on results, default page size, or authentication/permission needs — all of which are things an agent calling it would need before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is not bloated, though one sentence is arguably too thin for a 13-parameter tool (that under-specification is captured under contextual completeness rather than conciseness).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 13 parameters, no annotations, and no output schema, the one-line description is under-specified. It omits return shape, pagination/skip-count interaction, sorting defaults, and the meaning of 'smart' vs specific-field filters, leaving gaps that neither annotations nor an output schema fill.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (name, skip, sort, count, smart, include, etc.) is already documented in the schema. The description adds only the generic claim of 'optional filtering', which does not extend meaning 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('list') and resource ('customers') with the search/filter scope. However, it does nothing to distinguish itself from siblings like get_customer or the analogous list_vendors, so an agent gets no routing help beyond the name itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'with optional filtering' only implies that filters exist; it gives no when-to-use guidance, no indication of when to prefer get_customer (single record) over this bulk list, and no exclusions or prerequisites. No alternative tools are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_custom_field_definitionsC
List all custom field definitions
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| sort | No | Property to sort by (e.g., name, entityType) | |
| count | No | ||
| sortDesc | No | Sort in descending order | |
| entityType | No | Filter by entity type | |
| includeCount | No | Include total record count in response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, yet it discloses nothing beyond that it is a listing operation. It is silent on pagination behavior (skip/count), whether results are paginated or capped, default sort order, and what the definition objects contain. 'List' weakly implies a safe read, but that is the extent of the disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single efficient sentence with no filler, which is good structure, but the terseness crosses into under-specification rather than genuine conciseness. Nothing is front-loaded because there is only one clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no annotations and no output schema, the definition leaves too much unspecified: pagination semantics, default sorting, and the relationship between entityType and the returned definitions are all unstated. An agent can call it, but cannot call it confidently or correctly on first attempt.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Six parameters exist with only 67% schema description coverage, and the description adds no parameter meaning at all. The undocumented 'skip' and 'count' parameters, which control pagination, are left for the agent to guess, and the description never clarifies that entityType filters the listing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb ('List') and resource ('custom field definitions'), so an agent knows exactly what object it retrieves. It does not, however, distinguish itself from the nearby get_custom_field_dropdown_options or explain how these definitions relate to entity types. Clear but undifferentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites, and no routing to alternatives such as get_custom_field_dropdown_options. The agent must infer usage purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_locationsC
List all warehouse/inventory locations
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| sort | No | Property to sort by (e.g., name) | |
| count | No | ||
| include | No | Related data to include | |
| sortDesc | No | Sort in descending order | |
| includeCount | No | Include total record count in response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It says 'List all' but never discloses pagination behavior, that skip/count control page size, or whether the result is capped — a notable gap for a 6-parameter listing tool. Nothing about auth, rate limits, or return shape is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence is efficient, but for a six-parameter listing tool it reads as under-specification rather than deliberate conciseness. Nothing is wasted, but very little is said.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, no annotations, six parameters, and two of them undocumented — the description would need to compensate for those gaps and does not. An agent can guess the call but cannot predict the response shape or paging semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 67%, and skip and count have no descriptions in the schema at all. The description adds no parameter meaning whatsoever, so the two undocumented paging parameters remain unexplained in both structured data and prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List ... locations') and scopes it to warehouse/inventory locations, so the agent knows exactly what entity is returned. It does not, however, differentiate from siblings like get_location or get_suggested_sublocations, leaving the agent to infer the list-vs-single distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites, and no pointer to the sibling tools (get_location, get_suggested_sublocations) that an agent might otherwise pick. The agent must infer that this is the enumeration entry point from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_manufacturing_ordersC
Search and list manufacturing/work orders
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| sort | No | Property to sort by (e.g., orderDate, orderNumber) | |
| count | No | ||
| status | No | ||
| include | No | ||
| sortDesc | No | Sort in descending order | |
| locationId | No | Filter by location ID | |
| orderDateTo | No | ||
| orderNumber | No | Filter by order number | |
| includeCount | No | Include total record count in response | |
| orderDateFrom | No | ||
| outputProductId | No | Filter by output product |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but it only implies a read operation through the word 'list'. It says nothing about pagination via skip/count, whether includeCount is expensive, default sort order, or what is returned, all of which matter for a 12-parameter query tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded phrase with no wasted words, which is good structurally. However, the brevity reads as under-specification rather than disciplined conciseness given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter list tool with no annotations and no output schema, the description is far too thin: filtering semantics, pagination, sorting defaults, and result shape are all unaddressed. An agent could call it, but not confidently or correctly in edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, and six parameters (skip, count, status, include, orderDateTo, orderDateFrom) carry no schema description at all. The description adds zero parameter detail, so it fails to compensate for the coverage gap; it cannot even clarify the enum semantics of status.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (search and list) plus the resource (manufacturing/work orders), which is clearly distinct from the singular get_manufacturing_order sibling. It does not, however, explicitly contrast itself with that sibling or explain what 'search' means versus listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given: it never says to use this for browsing/collecting orders versus get_manufacturing_order for a single known order, nor does it describe prerequisites or pagination expectations. The agent must infer routing from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_operation_typesC
List manufacturing operation types.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| sort | No | ||
| count | No | ||
| isActive | No | ||
| sortDesc | No | ||
| includeCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. It doesn't state whether this is a read-only operation (though 'List' implies read), whether it's paginated, what fields are returned, or any rate limits. A purely descriptive sentence with no behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, efficient sentence. No waste, front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no annotations, no output schema, and 0% schema description coverage, the description is entirely inadequate. It doesn't explain parameters, return format, or usage context. An agent would have to guess how to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% with 6 parameters (skip, sort, count, isActive, sortDesc, includeCount) that are completely undocumented. The description doesn't mention any parameters or their purpose, failing to compensate for the schema gap. An agent cannot know how to use pagination, filtering, or sorting from this.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb (List) and specific resource (manufacturing operation types). Distinguishes from sibling get_operation_type by the list-vs-get pattern, though doesn't explicitly say so. Clear enough for an agent to understand the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this vs get_operation_type or other list tools. No prerequisites or context about operation types. A sibling get_operation_type exists, but the description doesn't say to use list for discovery and get for details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_payment_termsC
List all payment terms
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| sort | No | Property to sort by (e.g., name) | |
| count | No | ||
| sortDesc | No | Sort in descending order | |
| includeCount | No | Include total record count in response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing about pagination behavior (skip/count exist), default result size, sort defaults, permissions, or response shape. It only restates the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence is front-loaded and waste-free, but it is under-specified rather than genuinely concise for a five-parameter listing tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with no annotations, partial schema coverage, and no output schema, the description leaves the agent without paging behavior, default limits, or result structure. It is not complete enough to call the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 60% schema description coverage and five parameters, the description adds zero meaning: skip and count have no schema description either, and the description does not explain paging, sort semantics, or the includeCount flag. The schema itself is partially documented, so the description should have compensated and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (payment terms), so an agent immediately knows what it returns. There is no competing sibling on this topic, so sibling differentiation is not needed, but nothing beyond the bare action is conveyed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no context on when to use this tool, whether pagination or sorting is expected, or how it relates to any other payment-term operation. No when-to-use or exclusion guidance at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pricing_schemesC
List all pricing schemes/price levels
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| sort | No | Property to sort by (e.g., name) | |
| count | No | ||
| sortDesc | No | Sort in descending order | |
| includeCount | No | Include total record count in response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about pagination defaults, permissions, or what fields a scheme contains. Apart from implying a read-only listing, it discloses no behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, front-loaded with the operation. It is efficient, though the brevity is in part under-specification rather than disciplined conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter list tool with no annotations, no output schema, and two undocumented parameters, the description is far too thin. An agent gets no help on result shape, paging semantics, or typical usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, leaving 'skip' and 'count' undocumented, and the description adds no parameter meaning at all. It neither names the paging parameters nor explains sort/includeCount behavior beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('List all pricing schemes/price levels'), which is an unambiguous read operation over a specific entity. It doesn't explicitly differentiate itself from adjacent list tools such as list_taxing_schemes or list_tax_codes, but the resource noun is distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives, nor any stated prerequisites or scope conditions. The agent must infer usage purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_product_groupsC
List inFlow product groups with ordered options and attached variants.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| sort | No | ||
| count | No | ||
| sortDesc | No | ||
| includeCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It implies a read operation but does not disclose pagination behavior, whether results are filtered/sorted, volume expectations, or permissions. For a list tool with five parameters, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, stating the resource and its contents first. It is efficient, though the extreme brevity is part of the underlying under-specification problem rather than excess prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter list tool with no annotations and no output schema, the description leaves pagination, sorting, and result shape entirely unexplained. It is not complete enough for an agent to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage across five parameters (skip, sort, count, sortDesc, includeCount) and the description mentions none of them. It fails to compensate for pagination/sorting semantics that an agent must know to invoke correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('List inFlow product groups') and adds what a group contains (ordered options and attached variants). It does not differentiate itself from sibling list tools such as list_products or list_categories, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives like list_products or get_product_group, and no prerequisites or context. Usage is only implied by the verb 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_productsC
Search and list products from inFlow Inventory with optional filtering
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No | Filter by SKU | |
| name | No | Filter by product name (partial match) | |
| skip | No | Number of records to skip | |
| sort | No | Property to sort by (e.g., name, sku, modifiedDate) | |
| count | No | Number of records to return (max 100) | |
| smart | No | Smart search across multiple fields (name, description, SKU, barcode) | |
| barcode | No | Filter by barcode | |
| include | No | Related data to include. Options: category, customFields, inventoryLines (serial numbers). Use filter trackSerials=true to get only serialized products. | |
| isActive | No | Filter by active status | |
| sortDesc | No | Sort in descending order | |
| categoryId | No | Filter by category ID | |
| description | No | Filter by description | |
| categoryName | No | Filter by category name (case-insensitive, resolves to categoryId) | |
| includeCount | No | Include total record count in response | |
| trackSerials | No | Filter to only return products that track serial numbers (serial numbers) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states it's a read operation implicitly through 'search and list', but doesn't describe return format, pagination behavior, rate limits, or authentication requirements. For a tool with 15 parameters and no annotations, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, efficient sentence that is front-loaded and wastes no words. It clearly states the core function without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 15 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain pagination (skip/count), sorting behavior, the smart search vs individual filters, or what 'include' does. The schema provides field-level descriptions, but the description should tie these together and explain overall behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 15 parameters. The description adds no parameter-specific information beyond what's in the schema. Baseline 3 is correct when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specifies the verb (search/list), resource (products), and source system (inFlow Inventory), which distinguishes it from get_product (single retrieval) and upsert_product (mutation). However, it doesn't explicitly differentiate itself from sibling list_* tools beyond the resources being different.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like get_product or smart search. The description mentions 'optional filtering' but doesn't explain when to use which filter or why one would choose list vs search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_purchase_ordersC
Search and list purchase orders with optional filtering
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | Number of records to skip | |
| sort | No | Property to sort by (e.g., orderDate, orderNumber) | |
| count | No | Number of records to return (max 100) | |
| smart | No | Smart search across order fields | |
| status | No | Filter by order status (single value or array) | |
| include | No | Related data to include (e.g., vendor, lines, lines.product) | |
| sortDesc | No | Sort in descending order | |
| vendorId | No | Filter by vendor ID | |
| locationId | No | Filter by destination location ID | |
| orderDateTo | No | Filter by order date (to) - ISO format | |
| orderNumber | No | Filter by order number | |
| includeCount | No | Include total record count in response | |
| orderDateFrom | No | Filter by order date (from) - ISO format | |
| expectedDateTo | No | Filter by expected date (to) | |
| expectedDateFrom | No | Filter by expected date (from) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, and it discloses almost nothing: no default page size, no statement that results are paginated or capped (count max 100 lives only in the schema), no mention of the read-only nature, and no note on sort/filter interaction. For a 15-parameter list endpoint this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is efficient, though the terseness comes partly from under-specification rather than disciplined compression.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fifteen parameters, no annotations, and no output schema mean the description is the only place to explain paging behavior, default ordering, and what 'include' returns. None of that is present, so an agent must reverse-engineer expected behavior from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with all 15 parameters documented inline, including the status enum values, sort examples, and include paths. The description adds no parameter meaning 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.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('search and list') plus resource ('purchase orders'), which clearly separates it from get_purchase_order, upsert_purchase_order, and receive_purchase_order in the sibling list. It stops short of explicitly naming those siblings as the non-list alternatives, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'with optional filtering' hints that all filters are discretionary, but there is no statement of when to reach for this tool versus get_purchase_order (single fetch) or list_sales_orders (other resource). No prerequisites, no exclusions, no alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sales_ordersC
Search and list sales orders with optional filtering
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | Number of records to skip | |
| sort | No | Property to sort by (e.g., orderDate, orderNumber) | |
| count | No | Number of records to return (max 100) | |
| smart | No | Smart search across order fields | |
| status | No | Filter by order status (single value or array) | |
| include | No | Related data to include (e.g., customer, lines, lines.product) | |
| totalTo | No | Filter by maximum total | |
| sortDesc | No | Sort in descending order | |
| totalFrom | No | Filter by minimum total | |
| customerId | No | Filter by customer ID | |
| locationId | No | Filter by location ID | |
| orderDateTo | No | Filter by order date (to) - ISO format | |
| orderNumber | No | Filter by order number | |
| includeCount | No | Include total record count in response | |
| orderDateFrom | No | Filter by order date (from) - ISO format | |
| requiredDateTo | No | Filter by required date (to) | |
| requiredDateFrom | No | Filter by required date (from) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses nothing about pagination (the skip/count interplay), the hard max of 100 records in the schema, default sort behavior, whether the result is a full page or truncated, or cost/rate characteristics — all relevant for a 17-parameter query tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no filler and the core action front-loaded. It is not padded, though it is arguably too terse given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter list tool with no annotations and no output schema, the description is insufficient: return shape, pagination semantics, and the meaning of includeCount/include interactions are left entirely to the schema. An agent can call it, but cannot predict the response or pagination behavior from the definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter (skip, sort, status enum, include nesting, date ranges). The description's 'optional filtering' adds no format or syntax detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource ('Search and list sales orders') and notes that filtering is optional. It implicitly distinguishes itself from the singular sibling get_sales_order, but never names an alternative tool or scope boundary, so it stops just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to reach for this tool versus get_sales_order, upsert_sales_order, or the various list_* siblings. The only hint is the word 'optional' regarding filtering, which is not a usage condition an agent can act on.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_serial_numbersB
List all serial numbers (serial numbers) from fulfilled sales orders. Useful for building a serial number inventory. WARNING: This fetches all orders and may be slow.
| Name | Required | Description | Default |
|---|---|---|---|
| maxOrders | No | Maximum number of orders to fetch (default: 200, max: 1000) | |
| productId | No | Filter by product ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one important trait: the call fetches all orders and may be slow. It says nothing about permissions, pagination behavior, or result ordering, so the behavioral picture remains partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the operation stated first and the performance warning last, so it is front-loaded and easy to scan. The parenthetical "(serial numbers)" merely repeats the noun and is dead weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-optional-parameter list tool with no output schema and no annotations, the description covers the operation and a performance caveat. It omits the relationship between the 'fetches all orders' warning and the maxOrders cap, and gives no sense of the returned shape or ordering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (maxOrders, productId) are already documented with defaults and bounds. The description adds no syntax, format, or interaction detail 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) plus resource (serial numbers) and narrows the source to fulfilled sales orders, which implicitly separates it from siblings like list_all_serials or get_product_serials. It never names an alternative explicitly, so the differentiation is inferable rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Useful for building a serial number inventory" gives a use case but no when-to-use versus alternatives such as list_all_serials, get_sales_order_serials, or search_serial_number. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_stock_adjustmentsC
Search and list stock adjustments with optional filtering
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| sort | No | Property to sort by (e.g., adjustmentDate, adjustmentNumber) | |
| count | No | ||
| status | No | Filter by status | |
| include | No | Related data to include | |
| reasonId | No | Filter by adjustment reason ID | |
| sortDesc | No | Sort in descending order | |
| locationId | No | Filter by location ID | |
| includeCount | No | Include total record count in response | |
| adjustmentDateTo | No | Filter by date (to) | |
| adjustmentNumber | No | Filter by adjustment number | |
| adjustmentDateFrom | No | Filter by date (from) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. "List/search" implies a read operation, but it discloses nothing about pagination behavior (skip/count hint at paging), result limits, ordering defaults, or auth requirements. For a 12-parameter query tool this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the core purpose front-loaded and no wasted words. It is appropriately sized, though it is perhaps too terse to be maximally useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with 12 params, 83% schema coverage, and no output schema, the description is minimally adequate. It omits return shape/pagination expectations that an agent would benefit from, but the rich schema compensates for most parameter-level gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83% (high), so the schema already documents nearly all parameters including enums and filters. The description adds nothing beyond "optional filtering," so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search/list) and resource (stock adjustments), clearly distinguishing it from get_stock_adjustment and upsert_stock_adjustment by the plural/list framing. However, it doesn't explicitly name or differentiate from siblings in the text itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"with optional filtering" implies it's a query tool but gives no when-to-use guidance, no exclusions, and no pointer to alternatives like get_stock_adjustment for a single record. An agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_stock_countsC
List stock count/inventory count records
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| sort | No | Property to sort by (e.g., countDate) | |
| count | No | ||
| status | No | ||
| include | No | ||
| sortDesc | No | Sort in descending order | |
| locationId | No | Filter by location ID | |
| includeCount | No | Include total record count in response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It implies a read-only list operation but says nothing about pagination behavior (skip/count), default result size, or what happens when filters are omitted — all relevant for an 8-parameter query tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no padding and the resource front-loaded. It is concise, though the brevity comes at the cost of the missing guidance noted in other dimensions rather than being a model of well-targeted concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no annotations, no output schema, and 50% schema coverage, this one-line description is insufficient. An agent cannot tell how to paginate, filter, or interpret results from what is given.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, and the description adds no parameter meaning at all beyond the generic resource name. The undocumented parameters (skip, count, status, include) get no compensation from the description, leaving half the inputs semantically opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('stock count/inventory count records'), clarifying the resource with a synonym. It does not, however, distinguish itself from siblings like get_stock_count or upsert_stock_count, so an agent must infer the list-vs-get-vs-write boundary from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use context, no guidance on the available filters (status, locationId), and no mention of alternatives such as get_stock_count for a single record. The agent gets no help deciding whether this or a sibling tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_stock_transfersC
Search and list stock transfers between locations
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| sort | No | Property to sort by (e.g., transferDate, transferNumber) | |
| count | No | ||
| status | No | Filter by status | |
| include | No | ||
| sortDesc | No | Sort in descending order | |
| includeCount | No | Include total record count in response | |
| toLocationId | No | Filter by destination location | |
| fromLocationId | No | Filter by source location | |
| transferDateTo | No | ||
| transferNumber | No | Filter by transfer number | |
| transferDateFrom | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and delivers almost none of it. It never states that this is a read-only operation, nor does it mention pagination behavior despite skip/count/includeCount existing, nor does it describe ordering or result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the resource and scoping qualified up front and no filler. It is efficient, though the brevity comes at the cost of substance rather than being purely economical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, zero-required, no-output-schema, no-annotation list tool, one sentence is insufficient. The agent is left without pagination, filtering, sorting, or safety context for an operation whose behavior is entirely undescribed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 12 parameters and only 58% schema description coverage, the description must compensate, but it adds nothing beyond the phrase 'between locations' loosely pointing at fromLocationId/toLocationId. Unlabeled parameters such as skip, count, include, transferDateFrom and transferDateTo remain undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (search/list) and resource (stock transfers), plus a scope qualifier (between locations) that tells the agent this returns transfer records. It does not explicitly differentiate itself from get_stock_transfer, upsert_stock_transfer, or set_stock_transfer, so a reader must infer the list-vs-single-vs-mutate split.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance: nothing says to use this for browsing/filtering transfers versus get_stock_transfer for one record or upsert/set_stock_transfer for writes. The word 'Search' loosely implies filtering, but no conditions or alternatives are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tax_codesC
List all tax codes
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| sort | No | Property to sort by (e.g., name) | |
| count | No | ||
| sortDesc | No | Sort in descending order | |
| includeCount | No | Include total record count in response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says 'List all tax codes,' implying a read-only operation, but it does not disclose pagination behavior, sorting defaults, authentication requirements, rate limits, or whether 'all' ignores the skip/count parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no wasted wording and the core action is front-loaded. However, it is arguably too terse for a tool with five optional parameters and offers no structural cues about filtering, sorting, or pagination.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given five parameters, no annotations, no output schema, and many sibling tools, the description is incomplete. It provides only the basic purpose and omits parameter semantics, pagination behavior, sorting behavior, and how this tool relates to taxing schemes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has five parameters with only 60% description coverage. The description does not mention skip, count, sort, sortDesc, or includeCount, and adds no meaning beyond the schema. Because schema coverage is below 80%, the description should compensate for undocumented parameters but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List all tax codes.' It is clear what operation is performed, but it does not distinguish this tool from related sibling tools such as list_taxing_schemes or upsert_taxing_scheme, nor does it explain the relationship between tax codes and taxing schemes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It does not mention list_taxing_schemes, any prerequisites, or when listing tax codes is appropriate. The only implied usage is the generic action of listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_taxing_schemesC
List all taxing schemes
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| sort | No | Property to sort by (e.g., name) | |
| count | No | ||
| include | No | Related data to include | |
| sortDesc | No | Sort in descending order | |
| includeCount | No | Include total record count in response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and only six words, the description carries the full burden but provides nothing: no safety profile, no pagination, no response format, no rate limits, and no mention that this is a read-only operation. It is completely silent on all behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (one short sentence) and front-loads the action. However, it is under-specified rather than optimally concise – the brevity leaves gaps that could be filled without sacrificing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with six optional parameters, no annotations, and no output schema, the description is far too sparse. It doesn't explain defaults, pagination behavior, or what data is returned, leaving the agent to infer everything from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the schema descriptions for sort, include, sortDesc, and includeCount provide meaning. The description adds no parameter information, but with moderate schema coverage the baseline is 3. It could be improved by explaining the pagination parameters (skip, count).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('taxing schemes'), which clearly distinguishes it from the sibling upsert_taxing_scheme (write) and set_taxing_scheme (set). It does not differentiate from other list_* tools, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It doesn't mention that it only retrieves schemes and should not be used to create/update, nor does it suggest when to choose list_taxing_schemes over list_tax_codes or other listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_team_membersB
List all team members/users in the inFlow account
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| sort | No | Property to sort by (e.g., name, email) | |
| count | No | ||
| sortDesc | No | Sort in descending order | |
| includeCount | No | Include total record count in response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It omits pagination (skip/count), authentication needs, rate limits, and return shape, and 'all' is potentially misleading given the paginated schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no wasted words. It is appropriately sized for the tool name, even though it under-specifies elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, 60% schema coverage, no annotations, and no output schema, the description is too thin. It does not explain pagination behavior, total counts, or response structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 60% (skip and count are undocumented), and the description adds no parameter meaning. With 5 parameters and no compensation, an agent cannot tell what skip/count do or their defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('team members/users') with account scope ('in the inFlow account'). No sibling tool covers team members, so an agent can identify it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, prerequisites, or alternatives are named. The word 'all' implies an unfiltered account-wide listing, but an agent gets no guidance on pagination or when to prefer it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vendorsB
Search and list vendors with optional filtering
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter by vendor name (partial match) | |
| skip | No | Number of records to skip | |
| sort | No | Property to sort by (e.g., name, modifiedDate) | |
| count | No | Number of records to return (max 100) | |
| No | Filter by email | ||
| include | No | Related data to include (e.g., contacts, paymentTerms) | |
| isActive | No | Filter by active status | |
| sortDesc | No | Sort in descending order | |
| includeCount | No | Include total record count in response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It notes only that filtering is optional (implying an unfiltered call returns all vendors) but says nothing about pagination defaults, result caps, ordering behavior, or permissions for what is a 9-parameter list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single seven-word sentence with no filler and the core action front-loaded. It is efficient, though arguably under-specified rather than deliberately tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 optional parameters at 100% schema coverage and no output schema, the description is barely adequate. It omits pagination/default behavior and how results are returned, which an agent calling a list endpoint would benefit from knowing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters are already documented in the schema (partial match, max 100, sort fields, include options). The description adds no syntax, format, or default details beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('Search and list vendors') that distinguishes it from the mutation siblings upsert_vendor/set_vendor and the single-record get_vendor. However, it never explicitly names those alternatives, so the differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'with optional filtering' implies the tool is for filtered browsing, but there is no explicit when-to-use, when-not-to-use, or pointer to get_vendor for a single vendor. Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhooksB
List all webhook subscriptions
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It implies a read-only operation but doesn't disclose details like pagination, rate limits, authentication requirements, or response format. For a tool with zero annotation coverage, this is inadequate, as it leaves critical behavioral traits unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with zero wasted words. It front-loads the core action ('list all webhook subscriptions') efficiently, making it easy to parse. Every word earns its place, achieving optimal conciseness for such a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete for a tool that likely returns a list of webhooks. It doesn't explain what data is returned, handling of errors, or system constraints. For a list operation with no structured output documentation, more context is needed to guide the agent effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so the schema fully documents the absence of inputs. The description adds no parameter information, which is appropriate here. Baseline is 4 for 0 parameters, as no additional semantics are needed beyond the schema's clear indication of no inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('list') and resource ('webhook subscriptions'), making the purpose immediately understandable. It distinguishes from siblings like create_webhook and delete_webhook by indicating a read operation. However, it doesn't specify scope (e.g., 'all' is implied but not explicit about filtering or pagination), keeping it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication), compare to other list tools (e.g., list_customers), or indicate use cases (e.g., checking existing subscriptions before creating/deleting). This leaves the agent with minimal context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
receive_purchase_orderA
[LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use set_purchase_order_receipts instead. Receive items on a purchase order by adding entries to the PO's receiveLines[] array via PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | Specific items to receive (creates new receive line entries) | |
| locationId | No | Warehouse location ID for received items | |
| receiveAll | No | Receive all remaining quantity on every line | |
| receiveDate | No | Receive date (ISO 8601, defaults to now) | |
| purchaseOrderId | Yes | The purchase order ID | |
| allowOverReceive | No | Allow receiving more than ordered quantity |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral burden. It does this well: it flags the tool as LEGACY, IMMEDIATE WRITE, and HIGH RISK, explains that it bypasses INFLOW_ENABLE_SAFE_WRITES, and states the exact write mechanism (appending to receiveLines[]). These are important traits an agent would not infer from the schema alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the critical risk warning in brackets, then gives the alternative and the mechanism in two compact sentences. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description does an excellent job of warning about the risky write behavior and directing to the safer alternative. Minor gap: it does not describe what happens on success or error, but that may be acceptable for a legacy tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters thoroughly. The description adds no additional parameter syntax or constraints beyond what is in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (receive items), the resource (purchase order), and the exact mechanism (adding entries to receiveLines[] via PUT). It also names the sibling that should be used instead, which distinguishes it from set_purchase_order_receipts and unreceive_purchase_order.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent not to use this tool and to use set_purchase_order_receipts instead, which is a clear when-not/when-to-use instruction. The alternative is named directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reconcile_manufacturing_order_serialsC
Preview exact-ID serial reconciliation. Apply requires a separately approved stock-moving canary.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| dryRun | No | ||
| inputPicks | No | ||
| outputLines | No | ||
| previewToken | No | ||
| idempotencyKey | No | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| manufacturingOrderId | Yes | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the dry-run-first posture and an external approval gate for writes, but omits permissions, reversibility, conflict behavior on exact-ID mismatch, and the role of the idempotency/hash parameters. Real value added, but far short of what an 11-param mutation tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with no filler; the preview/apply split is stated first. It is terse rather than bloated, though the terseness tips into under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an eleven-parameter serial-mutating tool with zero annotation coverage, no output schema, and no parameter documentation, the description leaves too much undefined for an agent to invoke it safely — the concurrency-hash and idempotency safeguards are never mentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 11 parameters, so the description must compensate and largely does not. 'Exact-ID' hints at serial-number matching semantics, but dryRun, previewToken, idempotencyKey, expectedDesiredHash, expectedSemanticHash, expectedWriteShapeHash, and expectedEntityTimestamp are entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (serial reconciliation) and the preview framing, but 'reconcile' is left undefined — an agent cannot tell whether this patches serial assignments, replaces them, or validates existing links. It does not differentiate itself from siblings like get_manufacturing_order_trace or search_serial_number beyond the word 'preview'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the preview path is the default and that the apply path requires a separately approved 'stock-moving canary', which is a genuine usage gate. However, no sibling alternative is named, and there is no guidance on when preview should escalate to apply or what constitutes approval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_webhookC
Preview exact webhook removal. Apply remains blocked until delete/readback semantics are canary-proven.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | ||
| webhookId | Yes | ||
| previewToken | No | ||
| idempotencyKey | No | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose a real behavioral trait: this is a preview/dry-run and apply is blocked pending canary validation, meaning it will not perform a destructive action. But the "canary-proven" phrasing is jargon, and nothing is said about permissions, the previewToken flow, or the hash parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the preview constraint front-loaded; there is little wasted text. The second sentence is dense jargon but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no annotations and no output schema, a two-sentence description that omits the token/hash workflow is far from complete. An agent lacks the information needed to construct a valid apply call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 8 parameters at 0% schema description coverage, and the description explains none of them. It never mentions webhookId, dryRun, previewToken, idempotencyKey, or any of the four expected*Hash parameters, leaving the entire parameter contract undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb ("Preview") and resource ("webhook removal"), giving a rough sense of the action. However, it does not distinguish this tool from the sibling delete_webhook, and "exact" is vague. An agent cannot tell why it would call remove_webhook versus delete_webhook from this text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence implies that applying is currently blocked, but it never states when an agent should use this tool instead of delete_webhook or set_webhook. There is no explicit usage context or exclusion, only an opaque status remark.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_serial_numberB
Search for a serial number/serial number across fulfilled sales orders. Returns the order details if found. WARNING: This searches by fetching orders - may be slow for large order volumes.
| Name | Required | Description | Default |
|---|---|---|---|
| maxOrders | No | Maximum number of orders to search (default: 500, max: 2000) | |
| serialNumber | Yes | The serial number to search for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that the search works by fetching orders and can be slow at high volume, and that it returns order details when found. It omits other behavior an agent needs: what happens on no match, whether multiple matches are possible, and any auth scoping.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with purpose front-loaded, then return behavior, then a clearly flagged warning. No filler, though the redundant 'serial number/serial number' phrasing is a minor wobble.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter search with no output schema, the description covers purpose, result shape, and a performance caveat, which is reasonably complete. It still leaves gaps about match multiplicity and what the returned order details contain, which matter when no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both serialNumber and maxOrders (with default 500 / max 2000) are already documented in the schema. The description adds only indirect context via the performance note, which loosely relates to maxOrders, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search for a serial number') scoped to a specific domain ('across fulfilled sales orders') and notes the return ('order details if found'). However, it does not differentiate from the many sibling serial tools (list_serial_numbers, get_sales_order_serials, list_all_serials), so an agent cannot tell why this one is chosen over those.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this versus get_sales_order_serials, list_serial_numbers, or list_all_serials. The performance warning implies caution for large volumes but never names an alternative tool or condition that would route the agent elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_customerD
Preview-first replacement for the deprecated immediate customer write. Apply remains unavailable until its domain adapter and canary are complete.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | patch | |
| dryRun | No | ||
| values | No | ||
| customerId | No | ||
| previewToken | No | ||
| idempotencyKey | No | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It does add one important fact (apply is currently unavailable) and implies dryRun defaults to true, but omits critical traits for a mutation tool: auth/permission requirements, reversibility, and what a preview returns. The 'split-brain preview/apply' behavior is only hinted at.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the workflow framing, no wasted fluff. But it spends its limited budget on deprecation/roadmap context rather than actionable invocation detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with no annotations, no output schema, and a non-trivial preview/apply state machine, the description is far short. It never explains the required call sequence, defaults, or the concurrency/hash parameters the agent must supply.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% with 10 parameters, several non-obvious: previewToken, idempotencyKey, and three expected*Hash fields, expectedEntityTimestamp, dryRun, mode. The description mentions none of them, so an agent cannot know that apply requires a previewToken or how the expected hashes act as optimistic-concurrency guards.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description calls this a 'Preview-first replacement for the deprecated immediate customer write,' which hints at a preview workflow but never states the core purpose clearly: setting/updating a customer record. It frames itself relative to a deprecated tool instead of stating verb+resource. An agent must infer that this is the customer-write path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies preview-first behavior and says 'Apply remains unavailable until its domain adapter and canary are complete,' but gives no explicit when-to-use vs alternatives, no guidance against the sibling upsert_customer, and no explanation of how previewToken chains into the apply flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_manufacturing_orderC
Preview-first replacement for the deprecated immediate manufacturing-order write. Apply remains unavailable until its domain adapter and canary are complete.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | patch | |
| dryRun | No | ||
| values | No | ||
| previewToken | No | ||
| idempotencyKey | No | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| manufacturingOrderId | No | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose important traits: preview-first behavior and that apply/write is currently unavailable. Beyond that it explains nothing about the mutation semantics, idempotency, hash checks, or what a preview produces.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core concept front-loaded, so it is appropriately sized. But the phrasing is cryptic and omits the concrete functionality an agent needs, so the brevity trades away usefulness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with nested objects, no annotations, and no output schema, this description is far too thin. It leaves the preview/apply model, parameter usage, and expected behavior almost entirely unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 10 parameters with 0% schema description coverage, and the description mentions none of them. Critical parameters like dryRun (default true), mode (patch/replace), previewToken, idempotencyKey, and the three expected*Hash guards are entirely undocumented in either the schema or the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource (manufacturing-order write) and states it is a 'preview-first replacement for the deprecated immediate' write, which narrows its role. However, it never states a clear verb+action for what the tool actually does, and it does not distinguish itself from the sibling upsert_manufacturing_order. Purpose is implied rather than defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies preview should be used and that apply is unavailable, giving partial when-to-use context. But it names no alternatives (e.g., upsert_manufacturing_order) and gives no explicit condition for choosing this over its siblings, leaving routing guidance to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_productD
Preview or apply a bounded product write with signed preconditions and verified readback.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | patch | |
| dryRun | No | ||
| values | No | ||
| productId | No | ||
| previewToken | No | ||
| idempotencyKey | No | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It hints at safety features ('signed preconditions', 'verified readback') and a 'bounded' write, but does not disclose permissions required, what happens in dry-run versus apply, or how the preconditions work. For a mutation tool with 10 parameters, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, which is concise. However, it is too vague to be useful, so it doesn't earn its place. It is front-loaded but lacks substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 parameters, nested objects, no output schema, no annotations, and siblings that handle similar operations, this description is grossly incomplete. It does not provide enough information for an agent to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It mentions 'signed preconditions' and 'verified readback' but doesn't map these to specific parameters like expectedDesiredHash, previewToken, or dryRun. The parameters remain opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says it will 'Preview or apply a bounded product write', which is vague and tautological. It does not clarify what a 'bounded product write' is or how it differs from sibling tools like upsert_product or set_product_manufacturing_config. The verb 'set' in the name and 'write' in the description are too generic to distinguish from alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus upsert_product, set_product_manufacturing_config, or other set_* tools. The description mentions 'preview or apply' but doesn't explain when to choose one mode over the other or prerequisites like signed preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_product_group_configB
Preview exact-ID product-group option/value/variant changes. Apply stays blocked until group nested-write semantics are canary-proven.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| dryRun | No | ||
| options | No | ||
| variants | No | ||
| previewToken | No | ||
| idempotencyKey | No | ||
| productGroupId | Yes | ||
| removeOptionIds | No | ||
| removeVariantIds | No | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| removeOptionValueIds | No | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that the apply path is disabled (a significant operational constraint), but says nothing about the previewToken lifecycle, hash-based precondition failures (expectedDesiredHash/expectedSemanticHash), idempotencyKey behavior, or what the preview returns. Partial coverage for a complex 14-parameter mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler, and the core scope constraint leads. It is appropriately sized for a short definition, though the second sentence is cryptic enough that the brevity comes partly at the cost of clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, nested-object mutation tool with no annotations, no output schema, and 0% schema coverage, the description is far too thin. It omits the parameter workflow (preview token -> apply), hash preconditions, idempotency expectations, and return semantics, leaving the agent unable to invoke it correctly beyond a rough guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 14 parameters, so the description must compensate, and it barely does. 'exact-ID' hints at ID-based referencing and 'option/value/variant' loosely maps to the options/optionValues/variants arrays, but previewToken, idempotencyKey, the four expected*Hash fields, and the remove*Id arrays go entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Preview') and resource ('product-group option/value/variant changes'), which distinguishes it from siblings like create_product_group_variants, get_product_group, and set_product_manufacturing_config. It is clear about what the tool touches, though the name ('set_...config') versus the actual preview-only behavior creates slight tension.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It conveys the key operating condition — 'Apply stays blocked until group nested-write semantics are canary-proven' — which tells the agent this is effectively a dry-run/preview path. However, it never routes the agent to an alternative tool for actually applying changes, nor states prerequisites or when preview is required versus optional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_product_manufacturing_configA
Preview or apply a concurrency-checked product BOM, operation-template, and manufacturing-settings change. Apply requires the exact full confirmation scope and hash returned by a fresh preview.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | patch | |
| dryRun | No | ||
| productId | Yes | ||
| components | No | ||
| autoAssemble | No | ||
| confirmation | No | ||
| previewToken | No | ||
| idempotencyKey | No | ||
| removeItemBomIds | No | ||
| productOperations | No | ||
| expectedConfigHash | No | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| expectedWriteShapeHash | No | ||
| allowInactiveComponents | No | ||
| expectedEntityTimestamp | No | ||
| expectedProductTimestamp | No | ||
| includeQuantityBuildable | No | ||
| removeProductOperationIds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose a non-obvious behavioral trait: the operation is concurrency-checked and apply requires a hash-bound confirmation produced by a fresh preview. It still omits permissions, idempotency behavior (idempotencyKey is in the schema but unexplained), and how removals or partial failures are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, no filler, with the preview/apply distinction and the confirmation-hash precondition front-loaded. Every clause carries weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter, deeply nested mutation tool with no annotations and no output schema, the description covers the single most safety-critical fact (preview -> hash -> apply) but leaves most of the argument surface unexplained. Adequate as a guardrail, incomplete as a usage contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 19 parameters, so the description must compensate and largely does not. It vaguely gestures at BOM, operation templates, and settings (components, productOperations, autoAssemble) but says nothing about mode 'patch' vs 'replace', dryRun, idempotencyKey, the expected* hash guards, or the remove* arrays.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (preview/apply) and a precise resource: product BOM, operation-template, and manufacturing-settings configuration. It is clearly the mutating 'set' counterpart to read-oriented siblings like get_bill_of_materials or copy_product_manufacturing_config, though it never names a sibling explicitly to draw that line.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear workflow rule: preview first, and apply only with the exact full confirmation scope and hash from a fresh preview. That is genuinely actionable guidance. It stops short of stating when to prefer this tool over upsert_product or copy_product_manufacturing_config, or what happens when the concurrency check fails.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_product_pricesB
Preview or safely apply product price rows. Apply requires the master safe-write gate.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| dryRun | No | ||
| prices | No | ||
| productId | Yes | ||
| previewToken | No | ||
| idempotencyKey | No | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| removeProductPriceIds | No | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose a real prerequisite: apply requires the 'master safe-write gate'. But it leaves the safety mechanics opaque — the dryRun default, idempotency key, previewToken, and the expected*hash guards are all unaddressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the preview/apply distinction and followed by the gating condition. Both sentences earn their place; the terseness is only a problem because content is missing, not because of padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation tool with nested price rows, idempotency, concurrency hashes, and no annotations or output schema, the description is far too thin to guide a correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 11 parameters, so the description must compensate and largely fails to. 'Preview or apply' loosely maps to dryRun/mode, but productId, prices, removeProductPriceIds, idempotencyKey and the various hash/timestamp guards are never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource combination ('Preview or safely apply product price rows') and distinguishes the read sibling get_product_prices from the write path. It's clear, though it never names the sibling it is contrasting against.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Preview or safely apply' implies the two operating modes, and 'Apply requires the master safe-write gate' gives a precondition for the write path. However, it doesn't say when to choose preview versus apply, or point to get_product_prices/list_pricing_schemes for discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_purchase_orderC
Preview-first replacement for the deprecated immediate purchase-order write. Apply remains unavailable until its domain adapter and canary are complete.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | patch | |
| dryRun | No | ||
| values | No | ||
| previewToken | No | ||
| idempotencyKey | No | ||
| purchaseOrderId | No | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden, and it does disclose the important trait that this is preview-first and that apply is currently disabled. That is useful context. However, it omits behavior around dryRun defaults, previewToken lifecycle, idempotencyKey, the various expected* hash guards, and what happens to the entity on apply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the most important context (preview-first, apply unavailable), with no filler. It is tight, though it errs toward under-specification rather than over-verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity mutation tool with 10 undocumented parameters, optimistic-concurrency hashes, and no output schema, two sentences are far from sufficient. An agent lacks the preview/apply workflow, hash semantics, and any parameter meaning needed to invoke it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are 10 parameters with 0% schema description coverage, and the description explains none of them. Critical parameters like previewToken, idempotencyKey, expectedDesiredHash, expectedSemanticHash, expectedWriteShapeHash, and expectedEntityTimestamp are entirely opaque, leaving an agent unable to supply them correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description frames the tool as a 'preview-first replacement for the deprecated immediate purchase-order write,' which identifies the resource (purchase order) and hints at a mutation intent. However, it never states what the tool actually does in its current state (a preview, since apply is unavailable), and the verb 'set' is only implied. It is distinguishable from siblings only loosely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It notes that the apply path is unavailable until the domain adapter and canary are complete, which is a genuine usage caveat. But it gives no guidance on when to use this versus upsert_purchase_order or set_purchase_order_receipts, and no prerequisites or triggers for the preview path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_purchase_order_receiptsC
Preview exact purchase-order receipt changes. Apply remains blocked until receipt/unreceipt stock semantics are canary-proven.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | ||
| action | Yes | ||
| dryRun | No | ||
| receiveAll | No | ||
| previewToken | No | ||
| receiveLines | Yes | ||
| unreceiveAll | No | ||
| idempotencyKey | No | ||
| receiveLineIds | No | ||
| purchaseOrderId | Yes | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It does disclose a key constraint: apply remains blocked until stock semantics are canary-proven. That is useful, but it does not explain permissions, side effects, reversibility, what the preview returns, or how dryRun/previewToken/hashes behave.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the purpose and then the apply constraint. It is efficiently sized, though the phrase 'canary-proven' is jargon that reduces clarity without adding precision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter tool with no annotations, no output schema, and 0% schema description coverage, the description is far too sparse. It does not explain how to invoke the tool, what the required receiveLines should contain, what the preview returns, or how the various hash/token fields are used.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 14 parameters, including dryRun, previewToken, idempotencyKey, and multiple expected-hash fields. The description adds no parameter meaning at all, so it fails to compensate for the complete lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: preview purchase-order receipt changes. It is clear about the preview scope, but does not distinguish itself from sibling tools like receive_purchase_order or unreceive_purchase_order, leaving some ambiguity about how it relates to the direct receive/unreceive operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage by stating that apply is blocked until semantics are canary-proven, so an agent knows this tool is currently for preview rather than apply. However, it never says when to use this tool instead of the direct receive/unreceive siblings, nor what alternatives exist for actually applying changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_sales_orderB
Preview-first replacement for the deprecated immediate sales-order write. Apply remains unavailable until its domain adapter and canary are complete.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | patch | |
| dryRun | No | ||
| values | No | ||
| previewToken | No | ||
| salesOrderId | No | ||
| idempotencyKey | No | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral weight. It usefully discloses that apply is unavailable and that this is a preview-first replacement, but it omits critical details such as side effects, authentication requirements, preview lifecycle, and the meaning of the many hash/idempotency parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler, and the key constraint (preview-first, apply unavailable) is front-loaded. It is appropriately sized for the information it chooses to convey.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a complex 10-parameter mutation tool with nested objects, no output schema, and no annotations, the description is far too incomplete. It omits parameter explanations, usage scenarios, and return behavior, leaving an agent with major gaps to fill.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 10 parameters with 0% description coverage, and the description mentions none of them. It does not compensate for the lack of parameter documentation, leaving mode, dryRun, previewToken, and the expected* hashes entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the tool as a preview-first replacement for a deprecated sales-order write operation, which conveys its resource and intent. However, it does not explicitly name or differentiate from the likely sibling upsert_sales_order, leaving some ambiguity about when each should be chosen.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the tool should be used in preview mode and that apply is currently unavailable, which hints at when it applies. But it provides no explicit guidance on alternatives, prerequisites, or when to avoid it, so usage remains largely inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_stock_adjustmentC
Preview-first replacement for the deprecated immediate stock-adjustment write. Apply remains unavailable until its domain adapter and canary are complete.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | patch | |
| dryRun | No | ||
| values | No | ||
| previewToken | No | ||
| idempotencyKey | No | ||
| stockAdjustmentId | No | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It does disclose a genuinely non-obvious constraint: apply is currently unavailable so only preview works until the adapter and canary complete. But it omits the preview/apply workflow details, idempotency behavior, and what the dryRun default implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core identity front-loaded, so there is little waste. But it is under-specified rather than truly concise, leaving the reader without enough to act.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation-adjacent tool with no annotations, no output schema, and 0% param coverage, the two-sentence description is inadequate. It never explains the preview-token flow, the hash guards, or the preview-to-apply transition an agent must understand to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 10 parameters, and the description adds nothing about any of them. Critical fields like previewToken, the three expected*Hash values, idempotencyKey, mode, and dryRun are left entirely undocumented, so the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it is a 'preview-first replacement for the deprecated immediate stock-adjustment write,' which hints at the resource (stock adjustment) but never clearly states the actual verb/outcome (preview a stock adjustment change). It does not distinguish itself from close siblings like upsert_stock_adjustment, set_stock_count, or set_stock_transfer beyond naming 'deprecated immediate write.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies this tool should be used instead of the deprecated immediate write and notes 'Apply remains unavailable,' giving some implied usage context. However, it never explicitly says when to use this vs. upsert_stock_adjustment or the other set_* siblings, nor what workflow to follow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_stock_countB
Preview-first replacement for the deprecated immediate stock-count write. Apply remains unavailable until its domain adapter and canary are complete.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | patch | |
| dryRun | No | ||
| values | No | ||
| previewToken | No | ||
| stockCountId | No | ||
| idempotencyKey | No | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one important operational fact: the write/apply path is currently gated behind an incomplete adapter and canary. It says nothing about permissions, idempotency behavior, what previewToken/expected*Hash preconditions do when violated, or what a preview returns, which is a substantial gap for a 10-parameter mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the core differentiator (preview-first) and the blocking constraint front-loaded. No filler, though both sentences spend words on replacement/deprecation history rather than on operability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, nested-object, hash-guarded, no-output-schema tool, this description is far too thin. It omits the preview-to-apply flow, the meaning of the three expected-hash guards, idempotency semantics, and required inputs, leaving the agent unable to construct a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 10 parameters, so the description must compensate and it essentially does not. Only an indirect mapping exists ('Preview' ~ dryRun/previewToken, 'Apply' ~ dryRun=false); mode, values, idempotencyKey, expectedDesiredHash, expectedSemanticHash, expectedWriteShapeHash and expectedEntityTimestamp are entirely unexplained anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource (stock-count write) and its distinguishing trait (preview-first, replacing the deprecated immediate write), so an agent can separate it from list_stock_counts/get_stock_count and from the legacy write path. It stops short of plainly stating what the tool produces, expressing its purpose relative to a predecessor and a deployment status instead, and never contrasts with the sibling upsert_stock_count.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one real usage constraint — apply is unavailable, so only the preview path is usable — which is genuine when-not guidance. However it names no alternative tool for actually committing a stock count (upsert_stock_count exists) and does not explain when a dry run vs. a commit should be chosen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_stock_transferC
Preview-first replacement for the deprecated immediate stock-transfer write. Apply remains unavailable until its domain adapter and canary are complete.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | patch | |
| dryRun | No | ||
| values | No | ||
| previewToken | No | ||
| idempotencyKey | No | ||
| stockTransferId | No | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that apply is unavailable (a real behavioral fact), but says nothing about auth requirements, whether dryRun defaults to true, what previewToken does, or reversibility of the eventual write. Several critical behaviors (idempotencyKey, expected*Hash fields) are left entirely unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the preview-first nature; no padding. But the second sentence reads as an operational status note rather than tool guidance, which weakens its usefulness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, unannotated, no-output-schema mutation-style tool with hash-locking and idempotency semantics, the description is far too thin. It omits parameter meaning, safety profile, return behavior, and the preview/apply handshake that its own name implies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% with 10 parameters including nested objects, enum, and hash-locking fields. The description mentions none of them – no explanation of mode, dryRun, previewToken, idempotencyKey, or the four expected*Hash guards. This is a severe gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states this is a 'preview-first replacement for the deprecated immediate stock-transfer write,' which conveys a replacement/preview intent, but it never names the resource operation clearly and the second sentence about 'Apply remains unavailable' muddies what the tool actually does. Across many siblings named 'set_*' and 'upsert_stock_transfer', the agent is left unsure whether this writes, previews, or is inert.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It hints at a preview-first workflow but gives no when-to-use/when-not-to-use, no guidance on dryRun vs previewToken, and no routing versus 'upsert_stock_transfer' or 'set_stock_adjustment'. The phrase about apply being unavailable is the closest thing to guidance but is ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_taxing_schemeC
Preview-first replacement for the deprecated immediate taxing-scheme write. Apply remains unavailable until its domain adapter and canary are complete.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | patch | |
| dryRun | No | ||
| values | No | ||
| previewToken | No | ||
| idempotencyKey | No | ||
| taxingSchemeId | No | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does add real value by revealing the tool is preview-only until the adapter/canary are ready and that it replaces a deprecated immediate write. However, it omits key traits for a 10-parameter write tool: idempotency behavior, what the hashes and previewToken gate, and what happens once apply is enabled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no wasted words and the deprecation context front-loaded. The tradeoff is that the terseness tips into crypticness rather than efficient completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with nested objects, an enum, conditional preview/apply flow, and no output schema or annotations, this description is far too thin. It neither explains the parameter contract nor the preview-to-apply lifecycle, leaving the agent without enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 10 parameters (mode, dryRun, values, previewToken, idempotencyKey, taxingSchemeId, three hash fields, expectedEntityTimestamp), and the description explains none of them. Critical precondition-style params like expectedDesiredHash and previewToken are left entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource (taxing-scheme write) and frames itself as a preview-first replacement, but the actual verb is muddled: it says 'Apply remains unavailable,' so it is unclear whether the tool currently performs any write at all. It also fails to distinguish itself from the sibling upsert_taxing_scheme, leaving the agent guessing which to call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description discloses one constraint (apply is not yet available, so only previewing works) but gives no when-to-use guidance or routing versus upsert_taxing_scheme / list_taxing_schemes. The agent must infer the correct alternative entirely on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_vendorC
Preview-first replacement for the deprecated immediate vendor write. Apply remains unavailable until its domain adapter and canary are complete.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | patch | |
| dryRun | No | ||
| values | No | ||
| vendorId | No | ||
| previewToken | No | ||
| idempotencyKey | No | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that this is preview-first and that apply remains unavailable until an adapter and canary are complete, which is important safety context. However, it omits permissions, reversibility, rate limits, and what a preview returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, but it is under-specified rather than concise. For a 10-parameter tool with no annotation or output schema coverage, the brevity leaves critical information missing. The second sentence about apply being unavailable is front-loaded but the whole text does not earn its place as sufficient documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 10-parameter mutation tool with no annotations, no output schema, and 0% schema description coverage, the description is far too sparse. It does not explain parameters, return behavior, when to use the tool, or how preview and apply modes relate. It is inadequate for the complexity of the interface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 10 parameters with 0% description coverage, and the description mentions none of them. Parameters such as mode, dryRun, previewToken, idempotencyKey, and the expected hash fields are left completely undocumented. The description adds no semantic meaning beyond what the bare schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says this is a preview-first replacement for a deprecated immediate vendor write, which signals a vendor mutation tool. However, it never explicitly states what the tool currently does (e.g., previews vendor changes) and the note that apply remains unavailable leaves the actual operation ambiguous. It also does not differentiate from sibling upsert_vendor by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage context is that this replaces a deprecated immediate write and that apply is unavailable. There is no explicit guidance on when to choose this over upsert_vendor or get_vendor, nor any prerequisite or exclusion conditions. An agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_webhookC
Preview-first replacement for the deprecated immediate webhook write. Apply remains unavailable until its domain adapter and canary are complete.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | patch | |
| dryRun | No | ||
| values | No | ||
| webhookId | No | ||
| previewToken | No | ||
| idempotencyKey | No | ||
| expectedDesiredHash | No | ||
| expectedSemanticHash | No | ||
| expectedWriteShapeHash | No | ||
| expectedEntityTimestamp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose a key operational constraint: this is preview-first and apply is currently unavailable. That is valuable context beyond the schema. However, it omits other important traits such as whether the tool mutates state, what a preview returns, whether idempotency or tokens are required, and how the many parameters affect behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler and front-loads the preview-first positioning. It is structurally clean and easy to parse, though it is arguably too terse for a 10-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 undocumented parameters, no annotations, and no output schema, the description is not complete enough to safely guide invocation. It provides one critical caveat but leaves parameter behavior, return semantics, and sibling selection entirely unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 10 parameters, so the description must compensate for missing parameter documentation. It does not mention a single parameter, mode, default, or constraint. An agent gets no semantic guidance beyond raw schema types and enum values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the tool as a 'preview-first replacement for the deprecated immediate webhook write,' which gives some sense of its domain and relationship to a prior behavior. However, it never states a clear verb+resource (e.g., 'previews webhook changes' or 'sets webhook configuration') and does not explicitly distinguish itself from siblings such as upsert_webhook or remove_webhook. The purpose is inferable but vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies this tool is for preview rather than immediate application, and warns that 'Apply remains unavailable until its domain adapter and canary are complete.' That is useful usage context, but there is no explicit guidance on when to choose this over upsert_webhook, nor a clear statement of prerequisites or when-not-to-use conditions. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unreceive_purchase_orderA
[LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use set_purchase_order_receipts instead. Remove receive line entries from a PO to reverse received stock. Supports exact ID removal, product-based LIFO removal, or full unreceive.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | Products to unreceive by quantity — auto-matches receive lines newest-first | |
| dryRun | No | Preview what would be removed without making changes | |
| unreceiveAll | No | Remove ALL receive lines (fully unreceive the entire PO) | |
| receiveLineIds | No | Specific receive line IDs to remove entirely | |
| purchaseOrderId | Yes | The purchase order ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does unusually well: it discloses that this is a legacy immediate (non-deferred) write, that it bypasses the safe-writes gate, and that it is high risk. It omits reversibility, permission requirements, and what happens to existing stock/ledger entries when lines are removed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The risk banner is front-loaded, the redirect to the replacement tool follows, and the capability summary closes it out — three tight clauses with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, annotation-free mutation with no output schema, the description covers purpose, risk, bypass behavior, and the alternative tool. Gaps remain around dryRun usage, parameter precedence/conflicts, and whether the operation is reversible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds mode semantics that map onto parameter combinations: exact ID removal (receiveLineIds), product-based LIFO removal (items), and full unreceive (unreceiveAll). It does not mention dryRun or the precedence when multiple mode parameters are supplied together.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Remove receive line entries from a PO to reverse received stock') and immediately distinguishes itself from the sibling set_purchase_order_receipts, which it tells the agent to prefer. An agent can identify this tool's role and risk profile without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative ('Use set_purchase_order_receipts instead') and gives the reason (legacy, high risk, bypasses INFLOW_ENABLE_SAFE_WRITES), effectively stating when NOT to use it. It also enumerates the three supported removal modes so the agent knows which invocation patterns apply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_customerA
[LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use set_customer instead. Create a new customer or update an existing one
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Customer ID (required for updates) | |
| fax | No | Fax number | |
| name | Yes | Customer name | |
| No | Email address | ||
| phone | No | Phone number | |
| remarks | No | Notes/remarks | |
| website | No | Website URL | |
| contacts | No | Contact persons | |
| isActive | No | Whether customer is active | |
| timestamp | No | Timestamp for concurrency control | |
| currencyCode | No | Currency code | |
| customFields | No | Custom field values | |
| billingAddress | No | Billing address | |
| paymentTermsId | No | Payment terms ID | |
| taxingSchemeId | No | Taxing scheme ID | |
| pricingSchemeId | No | Pricing scheme ID | |
| shippingAddress | No | Shipping address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does so well for the risky part: it flags LEGACY, IMMEDIATE WRITE, HIGH RISK, and that it BYPASSES INFLOW_ENABLE_SAFE_WRITES. It does not describe return shape or the concurrency/timestamp behavior (timestamp param), but the risk profile is the critical disclosure here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely tight: the critical warning is front-loaded in a bracketed banner, followed by the redirect and the one-line purpose. Every clause earns its place and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter mutation tool with nested objects and no output schema, the description supplies the essential safety context and the migration target. It omits return/mutation-status behavior, which is a minor gap given the fully documented schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all 17 parameters (including nested contacts/billingAddress/shippingAddress) are already documented in the schema. The description adds no parameter-level meaning beyond what the schema provides; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource combination ('Create a new customer or update an existing one') and explicitly names the preferred sibling tool (set_customer). The agent can distinguish this from upsert_product/set_customer without opening the schema. Slightly generic on the upsert semantics but fully clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent away: 'Use set_customer instead.' That is a concrete alternative for the common case. It does not state the narrow condition under which this legacy path is still appropriate (e.g., when INFLOW_ENABLE_SAFE_WRITES is off), leaving a small inference gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_manufacturing_orderA
[LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use set_manufacturing_order instead. Create a new manufacturing order or update an existing one. When id is provided, performs a partial update: unmentioned header fields and line items are preserved, outputSerialNumbers/outputQuantity patch the parent output line in place, inputLines[] patches merge into existing component lines by id (or unambiguous productId), and any deleteInputLineIds are removed. Without id, creates a new MO from outputProductId, outputQuantity, optional inputItems, and optional outputSerialNumbers.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Order ID (required for updates) | |
| remarks | No | ||
| orderDate | No | Order date (ISO format) | |
| timestamp | No | Rowversion for optimistic concurrency — pass the value from the last GET | |
| inputItems | No | Input/component items (used for create only — unused on updates) | |
| inputLines | No | Input-line patches for updates. Each entry merges into an existing component line by `id` (or unambiguous `productId`); entries with no match are appended as new lines. Set `quantity`, `serialNumbers`, or `sublocation` to patch those fields; omit to preserve them. | |
| locationId | No | Location ID | |
| isCancelled | No | Set true to cancel the MO while preserving the rest of its state | |
| isCompleted | No | ||
| orderNumber | No | Order number (e.g. MO-SYNTHETIC-001) | |
| pickRemarks | No | ||
| customFields | No | ||
| requiredDate | No | Required completion date (ISO format) | |
| outputQuantity | No | Quantity to manufacture (required for creates; patches the output line on updates) | |
| putAwayRemarks | No | ||
| outputProductId | No | Product ID being manufactured (required for creates) | |
| outputSublocation | No | Sublocation for the output line | |
| deleteInputLineIds | No | manufacturingOrderLineId values to remove from the order during an update. | |
| outputSerialNumbers | No | Serial numbers / serial numbers for the output/finished product. On updates, patches quantity.serialNumbers on the parent output line; pass [] to clear. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it declares the legacy immediate-write status, the safe-writes bypass, and high risk up front, then documents partial-update semantics (unmentioned fields preserved, output line patched in place, inputLines merged by id or unambiguous productId, deleteInputLineIds removed). This is unusually rich disclosure for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical warning and redirect are front-loaded before any mechanics, and every subsequent sentence adds substantive merge/patch semantics. Dense but zero waste for a 19-parameter upsert.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-param, nested-object mutation tool with no annotations and no output schema, the create-vs-update mechanics are well covered. Remaining gaps are minor: optimistic-concurrency expectations (the `timestamp` rowversion) and required-field enforcement for creates are left to the schema rather than explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 74%, above the baseline threshold, and the description still adds real meaning: it explains that `id` switches create vs update mode, that `inputItems` is create-only, that `inputLines[]` merges rather than replaces, and that `outputSerialNumbers` patches the parent output line (pass [] to clear). It stops short of covering concurrency (`timestamp`) behavior in prose, which the schema handles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource and covers both modes explicitly: 'Create a new manufacturing order or update an existing one,' with the update branch triggered by `id`. It also names the sibling it supersedes, so the agent can distinguish it from set_manufacturing_order without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Opens with an explicit redirect ('Use set_manufacturing_order instead') and a risk flag, then gives the exact condition that selects each mode (`id` present = partial update, absent = create). Both when-to-use and when-to-avoid are stated, nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_productA
[LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use set_product instead. Create a new product or update an existing one. Include ID to update.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Product ID (required for updates) | |
| sku | No | Product SKU | |
| cost | No | Product cost | |
| name | Yes | Product name | |
| weight | No | Product weight | |
| barcode | No | Product barcode | |
| isActive | No | Whether product is active | |
| timestamp | No | Timestamp for concurrency control (required for updates) | |
| categoryId | No | Category ID | |
| weightUnit | No | Weight unit (e.g., kg, lb) | |
| description | No | Product description | |
| customFields | No | Custom field values | |
| defaultPrice | No | Default selling price | |
| reorderPoint | No | Reorder point quantity | |
| reorderQuantity | No | Quantity to reorder |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose critical behavior: legacy immediate write, high risk, and bypassing INFLOW_ENABLE_SAFE_WRITES. It does not cover auth requirements, return behavior, or full mutation side effects, but the key risk context is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The warning and alternative are front-loaded in the first sentence, followed by the create/update rule. It is short, direct, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 15-parameter mutation with no annotations and no output schema, the description supplies the essential selection context: deprecation, risk, and the preferred alternative. Output behavior and deeper side effects are not described, but the schema is fully documented and the main decision context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 15 parameters, including that ID and timestamp are required for updates. The description adds only the create-vs-update distinction, which is also implied by the schema's ID description, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: create or update a product. It also distinguishes this tool from set_product by explicitly recommending the alternative, so an agent can route correctly without opening another schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit guidance: use set_product instead, and this legacy tool is high-risk immediate write that bypasses safe writes. The condition for avoiding it is unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_purchase_orderA
[LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use set_purchase_order instead. Create a new purchase order or update an existing one
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Purchase order ID (required for updates) | |
| items | No | Order line items | |
| remarks | No | Order remarks/notes | |
| vendorId | Yes | Vendor ID | |
| orderDate | No | Order date (ISO format) | |
| timestamp | No | Timestamp for concurrency control | |
| locationId | No | Destination location/warehouse ID | |
| orderNumber | No | Order number | |
| currencyCode | No | Currency code (e.g., USD) | |
| customFields | No | Custom field values | |
| expectedDate | No | Expected delivery date (ISO format) | |
| shippingAddress | No | Shipping address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses critical behavioral traits: legacy status, immediate write behavior, high risk, and bypassing the INFLOW_ENABLE_SAFE_WRITES safety mechanism. Missing details on concurrency (timestamp param), idempotency, or what happens on partial failures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise two-sentence structure with critical warning front-loaded in brackets. Every sentence earns its place and directs immediate action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 parameters with complex nested objects (items array, shipping address) and no output schema, the description provides essential context about the tool's risk and preferred alternative. Missing behavioral details around concurrency control (timestamp) and failure modes, but the warning adequately alerts agents to avoid this path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for all 12 parameters including nested items object. The description adds no parameter-level details beyond what the schema provides. Baseline 3 is appropriate when schema does all documentation work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (upsert = create or update) and resource (purchase order), and explicitly scopes it as a legacy immediate write. It clearly distinguishes itself from the preferred 'set_purchase_order' alternative. A 5 would require additional scope details beyond what the schema already provides.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the preferred alternative tool ('set_purchase_order') and warns to avoid this tool due to high risk. Clear directive that this is a legacy path. Nothing left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_sales_orderA
[LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use set_sales_order instead. Create a new sales order or update an existing one. When id is provided, performs a partial update: unmentioned header fields and line items are preserved, item patches are merged into existing lines by id (or unambiguous productId), and lines listed in deleteLineIds are removed. Without id, creates a new order from the provided fields.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Sales order ID (required for updates) | |
| items | No | Order line items. For updates, each item patches an existing line when it has a matching `id` (salesOrderLineId) or unambiguous `productId`; items without a match are appended as new lines. Unmentioned existing lines are preserved. | |
| remarks | No | Order remarks/notes | |
| orderDate | No | Order date (ISO format) | |
| timestamp | No | Timestamp for concurrency control | |
| customerId | No | Customer ID (required for creates; preserved from the existing order on updates) | |
| locationId | No | Location/warehouse ID | |
| orderNumber | No | Order number | |
| currencyCode | No | Currency code (e.g., USD) | |
| customFields | No | Custom field values | |
| requiredDate | No | Required/ship date (ISO format) | |
| deleteLineIds | No | salesOrderLineId values to remove from the order during an update. | |
| billingAddress | No | Billing address | |
| paymentTermsId | No | Payment terms ID | |
| taxingSchemeId | No | Taxing scheme ID | |
| nonCustomerCost | No | Non-customer cost. Accepts a plain number (e.g. 12.34) or the API money object { value: "12.34000", isPercent: false }. Normalised to the money object before sending, because the Cloud API rejects a bare number with HTTP 422. | |
| pricingSchemeId | No | Pricing scheme ID | |
| shippingAddress | No | Shipping address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well: it flags a HIGH RISK legacy immediate write that bypasses INFLOW_ENABLE_SAFE_WRITES, and spells out preservation/merge/delete semantics for updates. It stops short of permissions, concurrency (beyond the schema's `timestamp`), or error behavior, so it is not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the warning and the preferred alternative, then describes update vs create semantics. Dense but every clause (bypass risk, replacement tool, preservation rules) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter mutation tool with no annotations and no output schema, the description covers the critical decisions: which tool to use, and how update semantics treat existing fields and lines. Residual gaps on auth and return behavior are minor and partly mitigated by the rich schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, items, deleteLineIds, customerId and the rest. The description restates the create-vs-update trigger and merge rules rather than adding syntax or format detail beyond the schema, matching the baseline for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (create/update a sales order) and explicitly routes the agent to the sibling `set_sales_order`. The id-present vs id-absent split lets an agent distinguish create from update without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the preferred alternative ('Use set_sales_order instead') and conditions usage on whether `id` is supplied. When-to-use and when-not-to-use are both stated, not inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_stock_adjustmentA
[LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use set_stock_adjustment instead. Create or update a stock adjustment to add or remove inventory
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Adjustment ID (required for updates) | |
| items | Yes | Items to adjust | |
| remarks | No | Notes/remarks | |
| reasonId | No | Adjustment reason ID | |
| timestamp | No | ||
| locationId | Yes | Location ID where adjustment occurs | |
| customFields | No | ||
| adjustmentDate | No | Adjustment date (ISO format) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries full behavioral burden. It discloses two critical traits: that this is a legacy immediate write, and that it bypasses INFLOW_ENABLE_SAFE_WRITES (a safety gate). It also says it mutates inventory (add or remove). Gaps remain: no mention of permissions required, reversibility, or rate limits, but the safety-bypass disclosure is the most important behavioral fact for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The critical warning is front-loaded, followed by the alternative, then the action. The structure maximizes the chance an agent sees the risk before the purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-risk mutation tool with no annotations and no output schema, the description covers the essential 'don't use this' guidance but omits operational details like required permissions, whether changes are reversible, and what happens to existing adjustment data on update. It is minimum viable but not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so most parameters are documented in the schema itself. The description adds no parameter-level detail beyond restating 'add or remove inventory'. Baseline 3 is appropriate when the schema does the heavy lifting and the description adds nothing new.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource: 'Create or update a stock adjustment to add or remove inventory.' This clearly distinguishes it from list_stock_adjustments and get_stock_adjustment. However, it is somewhat cluttered by the legacy warning banner before the actual purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says '[LEGACY IMMEDIATE WRITE — HIGH RISK] Use set_stock_adjustment instead.' This names the alternative tool and gives a clear condition for when not to use this one. A rare example of strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_stock_countA
[LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use set_stock_count instead. Create or update a stock count for inventory counting
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Stock count ID (required for updates) | |
| remarks | No | ||
| countDate | No | Count date (ISO format) | |
| timestamp | No | ||
| locationId | Yes | Location ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it delivers the most important trait: this write is immediate and bypasses a safety switch. However, it does not say what permissions are needed, how existing count data behaves on update, or what happens when the safety flag is active.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The risk banner and redirect are front-loaded in the first two clauses, and the remaining sentence is a single compact purpose statement. Zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deprecated, high-risk mutation with no annotations and no output schema, the description supplies the critical context: deprecation, risk nature, and the correct replacement. It falls short of fully covering the five parameters, but an agent has enough to decide never to call it unless explicitly required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, and the description itself adds no parameter detail (remarks and timestamp are undocumented anywhere). However, the tool's key semantic — create vs update, with id required for updates — is conveyed by the schema's own id description, so the description only needs to signal 'upsert', which it does. Baseline is a 3; description neither compensates nor misleads.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair and resource ('Create or update a stock count') and explicitly names the sibling that supersedes it, 'set_stock_count'. An agent can distinguish this tool from the other ~50 siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-not: this is a LEGACY IMMEDIATE WRITE that bypasses INFLOW_ENABLE_SAFE_WRITES, and directs the agent to 'Use set_stock_count instead.' The alternative and the condition selecting it are named outright.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_stock_transferA
[LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use set_stock_transfer instead. Create or update a stock transfer between locations
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Transfer ID (required for updates) | |
| items | Yes | Items to transfer | |
| remarks | No | Notes/remarks | |
| timestamp | No | ||
| customFields | No | ||
| toLocationId | Yes | Destination location ID | |
| transferDate | No | Transfer date (ISO format) | |
| fromLocationId | Yes | Source location ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden, and it delivers the critical behavioral facts: this is a legacy immediate write that bypasses INFLOW_ENABLE_SAFE_WRITES and is high risk. That is far more than the schema offers. It stops short of describing irreversibility, permissions, or partial-failure behavior for a bulk-item mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three clauses, zero waste, and the highest-stakes information (legacy, high risk, bypasses safe writes) is front-loaded in brackets before the functional description. Ideal structure for a danger-flagged tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, nested-object mutation with no annotations and no output schema, the description supplies the two things an agent most needs: the safety warning and the preferred alternative. It lacks any note on what the call returns (e.g., created transfer id) or on safe-write flag behavior after the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75% (id, items, remarks, toLocationId, transferDate, fromLocationId all documented in the schema), so the schema largely carries parameter meaning. The description adds no parameter-level detail (e.g., id being required for updates, timestamp format, customFields usage), leaving the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource pair ('Create or update a stock transfer between locations') and immediately distinguishes itself from the sibling set_stock_transfer by declaring itself legacy and preferring the sibling. An agent can classify it correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent away: 'Use set_stock_transfer instead.' This is unambiguous when-not guidance naming the exact alternative, which is the strongest form of usage direction short of documenting the narrow migration case where this tool is still needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_taxing_schemeA
[LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use set_taxing_scheme instead. Create or update a taxing scheme
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Scheme ID (required for updates) | |
| name | Yes | Taxing scheme name | |
| isDefault | No | Whether this is the default scheme |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does disclose a great deal: immediate write semantics, HIGH RISK, and that it bypasses the INFLOW_ENABLE_SAFE_WRITES safeguard. What it does not cover is reversibility or what an update does to unspecified fields, which is minor given the schema's additionalProperties:false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The risk warning and the redirect are front-loaded in a bracketed banner, followed by one short purpose clause. Nothing is wasted and the most decision-relevant information comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description supplies the critical missing context: it is a legacy high-risk write and there is a safer replacement. Return-value behavior is unspecified, but that is a small gap given how decisively the tool is routed away from.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (id, name, isDefault) is already documented, including that id is required for updates. The description adds no parameter-level meaning 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair and resource ('Create or update a taxing scheme') and explicitly names the sibling it should be replaced by (set_taxing_scheme). An agent can distinguish it from the dozens of other upsert_* siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-not guidance: 'Use set_taxing_scheme instead' routes the agent away from this tool, and the LEGACY tag explains why. This is exactly the alternative-naming the dimension rewards.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_vendorA
[LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use set_vendor instead. Create a new vendor or update an existing one
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Vendor ID (required for updates) | |
| fax | No | Fax number | |
| name | Yes | Vendor name | |
| No | Email address | ||
| phone | No | Phone number | |
| address | No | Vendor address | |
| website | No | Website URL | |
| contacts | No | Contact persons | |
| isActive | No | Whether vendor is active | |
| timestamp | No | Timestamp for concurrency control | |
| currencyCode | No | Currency code | |
| customFields | No | Custom field values | |
| paymentTermsId | No | Payment terms ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it discloses that this is a legacy immediate (non-deferred) write, that it is high risk, and that it bypasses the INFLOW_ENABLE_SAFE_WRITES gate. It does not explain concurrency behavior (the timestamp parameter) or whether the write can be undone, so it falls short of a full behavioral profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short fragments, with the risk warning and the recommended alternative front-loaded ahead of the plain functional statement. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter mutation with nested objects and no output schema, the description covers the highest-value missing context (risk level and the alternative tool), and the schema covers all parameters. Remaining gaps — response shape after create vs update and concurrency handling — are minor but real.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all 13 parameters (including the nested address and contacts objects) are already documented in the schema, so the baseline is 3. The description adds no parameter-level meaning beyond that — it never mentions id-required-for-update semantics itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the exact operation (upsert of a vendor, create-or-update) and immediately distinguishes itself from the sibling set_vendor by marking itself legacy and risky. An agent can tell which of the two vendor-write tools to pick without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use set_vendor instead" is an explicit, unambiguous routing directive naming the preferred alternative, plus the condition (this one bypasses safe writes) that explains why. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_webhookA
[LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use set_webhook instead. Create or update a webhook subscription
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Webhook ID (required for updates) | |
| url | Yes | Webhook endpoint URL | |
| events | Yes | Events to subscribe to | |
| isActive | No | Whether webhook is active |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it discloses that this is a legacy immediate write that bypasses the INFLOW_ENABLE_SAFE_WRITES guard and is high risk. It does not cover auth requirements, reversibility of updates, or create-vs-update semantics (id handling), so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded: the risk/legacy warning and the redirect to set_webhook come before the functional sentence. The bracketed block is dense but every element earns its place, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter mutation tool with no annotations and no output schema, the description supplies the critical missing context (legacy status, bypassed safety flag, preferred alternative) while the schema fully covers inputs. Only the create-vs-update behavioral difference and return semantics are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (id, url, events, isActive) are already documented in the schema, including the 'required for updates' note on id. The description adds no additional parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair and resource ('Create or update a webhook subscription') and immediately names the sibling that supersedes it (set_webhook). An agent can tell exactly what this does and how it relates to the other webhook tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent away from this tool ('Use set_webhook instead') and flags it as legacy, which is clear when-not guidance. It stops short of saying when, if ever, this tool is still the correct choice, so it is not a full when/when-not/alternatives treatment.
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.
86 tool updates
v1.4.0-alpha.2- First observed
audit_product_group_manufacturing - First observed
calculate_bom_requirements - First observed
compare_product_boms - First observed
copy_product_manufacturing_config - First observed
create_product_group_variants - First observed
delete_webhook - First observed
get_bill_of_materials - First observed
get_custom_field_dropdown_options - First observed
get_customer - First observed
get_inventory_summaries_batch - First observed
get_inventory_summary - First observed
get_location - First observed
get_manufacturing_order - First observed
get_manufacturing_order_trace - First observed
get_mcp_status - First observed
get_mutation_status - First observed
get_operation_type - First observed
get_product - First observed
get_product_group - First observed
get_product_group_variant_quantities - First observed
get_product_prices - First observed
get_product_serials - First observed
get_purchase_order - First observed
get_purchase_order_serials - First observed
get_sales_order - First observed
get_sales_order_serials - First observed
get_stock_adjustment - First observed
get_stock_count - First observed
get_stock_transfer - First observed
get_suggested_sublocations - First observed
get_vendor - First observed
list_adjustment_reasons - First observed
list_all_serials - First observed
list_categories - First observed
list_currencies - First observed
list_custom_field_definitions - First observed
list_customers - First observed
list_locations - First observed
list_manufacturing_orders - First observed
list_operation_types - First observed
list_payment_terms - First observed
list_pricing_schemes - First observed
list_product_groups - First observed
list_products - First observed
list_purchase_orders - First observed
list_sales_orders - First observed
list_serial_numbers - First observed
list_stock_adjustments - First observed
list_stock_counts - First observed
list_stock_transfers - First observed
list_tax_codes - First observed
list_taxing_schemes - First observed
list_team_members - First observed
list_vendors - First observed
list_webhooks - First observed
receive_purchase_order - First observed
reconcile_manufacturing_order_serials - First observed
remove_webhook - First observed
search_serial_number - First observed
set_customer - First observed
set_manufacturing_order - First observed
set_product - First observed
set_product_group_config - First observed
set_product_manufacturing_config - First observed
set_product_prices - First observed
set_purchase_order - First observed
set_purchase_order_receipts - First observed
set_sales_order - First observed
set_stock_adjustment - First observed
set_stock_count - First observed
set_stock_transfer - First observed
set_taxing_scheme - First observed
set_vendor - First observed
set_webhook - First observed
unreceive_purchase_order - First observed
upsert_customer - First observed
upsert_manufacturing_order - First observed
upsert_product - First observed
upsert_purchase_order - First observed
upsert_sales_order - First observed
upsert_stock_adjustment - First observed
upsert_stock_count - First observed
upsert_stock_transfer - First observed
upsert_taxing_scheme - First observed
upsert_vendor - First observed
upsert_webhook
TDQS
Scored across 86 tools
With 86 tools, many overlap: upsert_* and set_* pairs exist for most entities, multiple serial-lookup tools (search_serial_number, list_serial_numbers, get_product_serials, list_all_serials), and receipt tools overlap with purchase-order updates. An agent must parse long descriptions to distinguish legacy vs preview-first replacements, and some boundaries remain unclear.
Names consistently use snake_case verb_noun conventions (list_products, get_sales_order, set_webhook), with predictable prefixes for list/get/upsert/set/delete/remove. Minor legacy vs newer 'set' verbs coexist but the pattern is stable.
86 tools is far beyond a well-scoped set; the server includes many deprecated legacy writes plus preview-only replacements that cannot yet apply, inflating the surface. This is an extreme mismatch for an inventory MCP and will burden tool selection.
Core transaction types have create/read/update paths, but many admin/lookup entities (locations, categories, pricing schemes, payment terms, tax codes, currencies, custom fields, team members) are list-only with no create/update/delete. Also many set_* write tools are preview-only and apply remains unavailable, leaving significant gaps for full lifecycle operations.
Maintenance
Related MCP Connectors
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Operate Obriym CRM from your AI assistant: leads, deals, orders, catalog, stock, marketplaces.
Enable AI assistants to interact seamlessly with Feeef e-commerce stores, products, and orders usi…
Inventory management for small organizations: search, assign, report, order, set up by chat.
Related MCP Servers
- FlicenseBqualityNot gradedmaintenanceEnables AI assistants to interact with Inflow Inventory API for managing ingredients/products and inventory operations. Supports product creation, updates, search, and stock adjustments through natural language commands.9-
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI agents to interact with Skulabs inventory management system through comprehensive tools for managing products, orders, customers, and analytics. Supports voice agents like Retell AI and desktop applications like Claude for natural language inventory operations.-
- AlicenseBqualityDmaintenanceEnables AI assistants to manage consignment and retail business operations through the ConsignCloud API, including inventory management, sales tracking, vendor accounts, and analytics.261GPL 3.0
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with ECOUNT ERP through natural language, providing tools for products, inventory, sales, purchases, and more.2315 npm3MIT