This server has clear, well-structured tool definitions with good naming conventions and comprehensive parameter schemas. All 18 tools follow verb_noun naming (run_report, get_vendors, create_inventory_adjustment, etc.). However, descriptions are inconsistent in depth, output schemas are not documented, and error handling guidance is absent. Parameter descriptions are present but lack specifics about constraints, valid ranges, and recovery guidance. The server would benefit from documenting what each tool returns and providing actionable error messages.
Add item lines to an existing purchase order.
Create an inventory adjustment set and add item lines to it. Used to record quantity corrections for items at a specific location. Each line specifies an item, quantity adjusted, and unit cost.
Create a new purchase order for a vendor at a specific location. Automatically upserts items by public_id if they don't exist, then adds lines with quantities and costs.
Get ending inventory levels (qty owned and cost owned) grouped by location and department as of a given date.
Get ending inventory levels (qty, cost, and retail price) grouped by location and vendor as of a given date. Defaults to today.
No output schemas documented for any tool. LLMs cannot plan downstream tool calls or validate responses without knowing field names and types. This violates the response-shaper pattern and blocks tool chaining.
Missing error handling guidance for all tools. When API calls fail (network error, authentication, not found, malformed input), tools should return actionable recovery hints like 'Try list_vendors() first' or 'Invalid vendor_id format, must be numeric'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 61 | 2026-07-28+ | v2 |
| 2026-03-09 | C | 60 | - | v1 |
Look up a specific inventory item by its internal item_id or public_id (SKU). Returns full item details including description, pricing, vendor, and in-stock info.
Get the inventory history of a specific item by querying both Inventory Transactions (all qty changes) and Inventory Transfers (movements between locations). Accepts either the internal item_id or the public_id (SKU). Optionally filter by date range.
Calculate how many units are sold per month, broken down by item. Supply a vendor_id to get velocity for every item belonging to that vendor, or supply item_id/public_id for a single item. Returns per-item averages and monthly totals plus the full raw detail rows.
Get sales metrics (total cost and net qty sold) grouped by location and department for a given date range.
Get net sales and net qty sold grouped by location and vendor for a given date range.
Get item counts (ending inventory quantity owned) by vendor, grouped by location, vendor name, item ID, and item description. Useful for checking how many units of each item a vendor has across locations.
Get items sold by a specific vendor within a date range, grouped by location, vendor, item ID, and description. Returns qty sold, total cost, open PO qty, on-hand qty, and last sold date.
Search for Heartland Retail vendors by name. Returns vendor id, name, code, status, and contact info. Use this to look up a vendor's id before using it in other tools like get_vendor_item_counts.
List all available Heartland Retail grouping dimensions with descriptions. Use these dotted names in the groups parameter of run_report.
List all Heartland Retail locations. Returns location id, name, code, and status. Use this to look up a location's id before using it in tools like create_inventory_adjustment.
List all available Heartland Retail reporting metrics organized by category. Use these dotted names in the metrics parameter of run_report.
Run a Heartland Retail reporting analyzer query. Returns sales, inventory, and other metrics for the specified date range and groupings.
Update item fields: price, cost, description, and custom attributes. Specify either item_id or public_id to identify the item.
Parameter descriptions lack specifics about constraints and formats. For example, dates are marked 'ISO 8601 format (YYYY-MM-DD)' but no validation is described. vendor_id is required but no guidance on what constitutes a valid ID. per_page accepts 1-200 but only mentioned in description, not in schema constraints.
Mutually exclusive parameters not documented. For example, get_item_history accepts either item_id or public_id (one required), get_item_sales_velocity accepts vendor_id OR item_id OR public_id (at least one required), but no parameter description states the mutual exclusion or requirement rule.
No pagination limits or defaults documented in output schemas. Tools like run_report, get_vendors, and get_item_history accept per_page parameters but do not document the default, maximum, or whether results are truncated.
Destructive operations (create_inventory_adjustment, update_item, create_purchase_order) lack dry-run or confirmation step. Agents may trigger inventory corrections or PO creation unintentionally without a safeguard.
No tool annotations present. Destructive tools (create_inventory_adjustment, update_item, create_purchase_order) should declare destructiveHint=true; read-only tools should declare readOnlyHint=true. This helps agents reason about side effects.