distru-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DISTRU_API_TOKEN | No | API token for the live Distru API. If unset, the server runs in fixture mode with simulated data. | |
| DISTRU_ALLOW_WRITES | No | Set to the exact string "true" to enable the write tool (distru_draft_sales_order). If unset, the server runs read-only. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| distru_list_productsA | List products from the Distru catalog (GET /public/v1/products). Filters combine with AND; values within a single list filter combine with OR. Prices and quantities are returned as decimal STRINGS, not numbers, to preserve exact precision - do not parse them as floats. Returns { data, next_page }; next_page is an absolute URL or null. |
| distru_get_productA | Fetch one product by id (GET /public/v1/products/{id}). Returns 404 if the id does not exist on this account. Ids are opaque UUID strings - never construct or parse one. |
| distru_get_inventoryA | Get on-hand inventory rolled up by a chosen set of attributes (GET /public/v1/inventory). groupings is REQUIRED and must include PRODUCT. Each grouping adds its id field to every row: PRODUCT adds product_id, LOCATION adds location_id, BATCH_NUMBER adds batch_number; omitted groupings are absent from the rows entirely. Groups with zero quantity are omitted, and deactivated products are excluded. Grouping by BATCH_NUMBER drops product-tracked products and always reports reserved as "0". This data is eventually consistent: a write can take about a second to show up here. |
| distru_list_ordersA | List sales orders (GET /public/v1/orders). Status is one of PENDING, PROCESSING, READY_TO_SHIP, DELIVERING, DELIVERED, COMPLETED, CANCELED. Totals are decimal strings. New status values may be added over time, so handle unknown tokens rather than assuming this list is closed. |
| distru_get_orderA | Fetch one sales order by id (GET /public/v1/orders/{id}), including its line items, charges, and any linked invoices. |
| distru_list_invoicesA | List invoices (GET /public/v1/invoices). Status is one of NOT_PAID, PARTIALLY_PAID, FULLY_PAID, OVER_PAID. paid_amount and remaining_amount are decimal strings. A voided invoice keeps its row and carries a voided_datetime. |
| distru_list_companiesA | List company relationships - customers, vendors, and brands all live here (GET /public/v1/companies). A product's brand is a company record, so this is also how you resolve a brand name to a brand_id for product filtering. |
| distru_match_po_to_catalogA | Match free-form purchase-order lines against the product catalog and report what could NOT be resolved. Read-only; writes nothing. Returns two buckets: |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
Each tool maps to a distinct Distru resource or action: list/get pairs are clearly separated by verb, inventory is a specialized rollup, and match_po_to_catalog handles a unique matching workflow. There is no pair of tools that would satisfy the same user intent.
All tools use the same distru_ prefix and snake_case naming, with list_/get_ following a consistent collection-vs-detail pattern. The longer match_po_to_catalog name still follows the action_resource style and is readable.
8 tools is a well-scoped size for a Distru data-access server. Each of the major read surfaces—products, inventory, orders, invoices, companies, and PO matching—has exactly the tools it needs, with no redundant helpers.
For a read/query-oriented server, the surface covers the core workflows well: product and order detail, inventory rollups, invoices, companies, and PO-to-catalog exception matching are all available. It lacks get-by-id for invoices/companies and offers no mutating operations, so lifecycle management tasks would dead-end, but that appears to be outside this set's read-only design.