MCP server exposing the Mintsoft WMS API as LLM tools — read-only by default, writes gated behind an explicit client allowlist, every call audit-logged.
Strong foundation with 34 well-named, read-only tools covering a comprehensive Mintsoft WMS API surface. All tools have descriptions (avg ~90 chars, within baseline 34-392 range) and explicit input schemas with typed parameters. Naming follows verb_noun convention consistently (get_, list_, search_, track_). However, descriptions are terse and lack LLM-optimized guidance on WHEN to use each tool vs. alternatives, dependency hints, or recovery paths. Parameter descriptions are minimal (often just the field name restated). Output schemas are not documented, LLMs cannot predict response structure for chaining. Error handling is absent from tool definitions. No tool annotations (readOnlyHint, idempotentHint) despite all being read-only. Pagination is present but inconsistently documented.
List the alternative SKUs / barcodes (AltCodes) mapped to a product.
Get one ASN (inbound) by ID.
Read a bundle's make-up: SKU, Name, and Components (each with ProductId, SKU, Quantity). NB: bundles are hidden from Product/Search — find them via list_products(client_id=…) or by ID.
Get one accounting invoice by ID.
Get full detail for one Mintsoft order by its numeric order ID.
Get the comments logged against an order.
Output schemas not documented. LLMs cannot predict response structure, forcing them to guess field names for downstream tool chaining. E.g., get_order returns order details but response fields are not specified.
Descriptions lack LLM-optimized guidance. Most are 45-70 chars, restating the name rather than explaining WHEN to use the tool vs. alternatives or what prerequisites exist. E.g., 'List returns' does not explain when to call this vs. get_return.
Parameter descriptions are minimal. Most restate the parameter name (e.g., 'The order ID') without explaining format, range, or constraints. LLMs cannot infer whether order_id is 1-10 digits, what happens if it's invalid, or how to obtain one.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Resolve an exact order number to its internal Mintsoft order ID.
Get the line items for an order.
Get full detail for one product by its numeric product ID.
Get inventory (stock by location) for a product.
Get one return by ID.
Stock-flow (movement) history for a product over the last N days (default 30).
Stock levels for a warehouse, for products updated in the last N days (default 31).
Stock levels for products changed in the last N days (default 7). Prefer this over the full StockLevels (which can time out).
List ASNs (inbound goods-in / advance shipping notices).
List clients (brands) in the account.
List courier services.
List accounting invoices (needs Accounting permission on the account).
List all storage locations in a warehouse.
List the sales channels (Shopify, Amazon, etc.) configured in Mintsoft.
List order rules (automation rules).
List all order status names and their IDs.
List orders by status ID (e.g. NEW=1, DESPATCHED=4, QUERYRAISED=13, AWAITINGPICKING=15, PICKED=17). limit max 100.
List products (paged). limit max 100. client_id filters to one client (0 = all). Unlike search_products, this listing INCLUDES bundles — use it to find a bundle's product ID.
List replenishment points (stock-level triggers).
List returns.
List product suppliers.
List the zones (location-charge zones) of a warehouse.
List warehouses.
Resolve a primary SKU to its internal product ID.
READ-ONLY discontinue footprint for a SKU before retiring it: stock on hand, live-order allocations, inbound/backorder, bundle membership, plus alt-code & replen info. Returns a blocker list and a `clear` flag. Identify by sku (+client_id) or product_id. Safe on any client.
Search orders by order number. exact=True does an exact match (recommended).
Search products by SKU or name.
Find an order by its courier tracking number.
No tool annotations despite all 34 tools being read-only. Missing readOnlyHint annotation prevents LLMs from understanding that these tools are safe to call without confirmation and do not modify state.
No error handling guidance in tool definitions. LLMs do not know what to do if a lookup fails (e.g., order_id not found). Should return actionable errors like 'Order 12345 not found. Try search_orders() with the order number.'