inFlow Inventory MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| INFLOW_DEBUG | No | Enable debug logging (optional, default: false) | |
| INFLOW_API_KEY | Yes | Your inFlow API Key (required) | |
| INFLOW_BASE_URL | No | Base URL for inFlow API (optional, default: https://cloudapi.inflowinventory.com) | |
| INFLOW_COMPANY_ID | Yes | Your inFlow Company ID (required) | |
| INFLOW_RATE_LIMIT | No | Requests per minute limit (optional, default: 60) | |
| INFLOW_API_VERSION | No | API version date string (optional, default: 2025-06-24) | |
| INFLOW_MAX_RETRIES | No | Maximum number of retries on 5xx/429 errors (optional, default: 3) | |
| INFLOW_RETRY_DELAY | No | Initial retry delay in milliseconds (optional, default: 1000) | |
| INFLOW_REQUEST_TIMEOUT | No | Request timeout in milliseconds (optional, default: 30000) |
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 |
|---|---|
| list_productsC | Search and list products from inFlow Inventory with optional filtering |
| 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). |
| 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. |
| get_inventory_summaryC | Get inventory quantities for a product across all locations |
| get_inventory_summaries_batchB | Get inventory summaries for multiple products at once (max 100) |
| get_bill_of_materialsB | Get a stable, enriched product manufacturing configuration including BOM rows, components, operations, settings, and concurrency metadata. |
| compare_product_bomsC | Compare manufacturing components, operations, and settings for 2-25 products. |
| 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. |
| list_product_groupsC | List inFlow product groups with ordered options and attached variants. |
| get_product_groupB | Get one product group with ordered options, option values, and attached product variants. |
| get_product_group_variant_quantitiesC | Get product-variant quantities for one product group at one location. |
| list_sales_ordersC | Search and list sales orders with optional filtering |
| get_sales_orderC | Get detailed information about a specific sales order |
| 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 |
| list_purchase_ordersC | Search and list purchase orders with optional filtering |
| get_purchase_orderC | Get detailed information about a specific purchase order |
| 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 |
| 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. |
| 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. |
| list_customersC | Search and list customers with optional filtering |
| get_customerC | Get detailed information about a specific customer |
| 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 |
| list_vendorsB | Search and list vendors with optional filtering |
| get_vendorC | Get detailed information about a specific vendor |
| 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 |
| list_stock_adjustmentsC | Search and list stock adjustments with optional filtering |
| get_stock_adjustmentC | Get details of a specific stock adjustment |
| 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 |
| list_stock_transfersC | Search and list stock transfers between locations |
| get_stock_transferB | Get details of a specific stock transfer |
| 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 |
| list_stock_countsC | List stock count/inventory count records |
| get_stock_countC | Get details of a specific stock count |
| 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 |
| list_manufacturing_ordersC | Search and list manufacturing/work orders |
| get_manufacturing_orderC | Get details of a specific manufacturing order |
| 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 |
| list_locationsC | List all warehouse/inventory locations |
| get_locationC | Get details of a specific location |
| get_suggested_sublocationsC | Get suggested sublocations (bins/shelves) for a location |
| list_categoriesC | List all product categories |
| list_pricing_schemesC | List all pricing schemes/price levels |
| list_payment_termsC | List all payment terms |
| list_taxing_schemesC | List all taxing schemes |
| upsert_taxing_schemeA | [LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use set_taxing_scheme instead. Create or update a taxing scheme |
| list_tax_codesC | List all tax codes |
| list_currenciesB | List all currencies configured in inFlow |
| list_adjustment_reasonsC | List all stock adjustment reasons |
| list_custom_field_definitionsC | List all custom field definitions |
| get_custom_field_dropdown_optionsC | Get dropdown options for custom fields of a specific entity type |
| list_team_membersB | List all team members/users in the inFlow account |
| list_webhooksB | List all webhook subscriptions |
| upsert_webhookA | [LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use set_webhook instead. Create or update a webhook subscription |
| delete_webhookA | [LEGACY IMMEDIATE WRITE — HIGH RISK: BYPASSES INFLOW_ENABLE_SAFE_WRITES] Use remove_webhook instead. Delete a webhook subscription |
| 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. |
| 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. |
| 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. |
| 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. |
| 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). |
| 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. |
| list_operation_typesC | List manufacturing operation types. |
| get_operation_typeC | Get one manufacturing operation type. |
| get_mcp_statusB | Inspect local inFlow MCP capabilities, safety gates, and optional API reachability. |
| get_mutation_statusB | Read durable mutation status. Reconciliation performs a fresh supported-adapter read and never repeats a write. |
| get_product_pricesC | Get all price rows for a product using exact pricing-scheme IDs. |
| set_product_pricesB | Preview or safely apply product price rows. Apply requires the master safe-write gate. |
| 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. |
| audit_product_group_manufacturingC | Audit every attached variant against its option matrix and manufacturing baseline. |
| calculate_bom_requirementsC | Calculate exact direct, leaf, or net BOM requirements at one location. |
| get_manufacturing_order_traceC | Trace manufacturing output lines, input picks, pick matchings, and serial anomalies. |
| reconcile_manufacturing_order_serialsC | Preview exact-ID serial reconciliation. Apply requires a separately approved stock-moving canary. |
| set_product_group_configB | Preview exact-ID product-group option/value/variant changes. Apply stays blocked until group nested-write semantics are canary-proven. |
| create_product_group_variantsC | Preview deterministic product/variant IDs for a compensated create-and-attach saga. Apply stays blocked until its canary. |
| set_productD | Preview or apply a bounded product write with signed preconditions and verified readback. |
| set_sales_orderB | Preview-first replacement for the deprecated immediate sales-order write. Apply remains unavailable until its domain adapter and canary are complete. |
| set_purchase_orderC | Preview-first replacement for the deprecated immediate purchase-order write. Apply remains unavailable until its domain adapter and canary are complete. |
| set_customerD | Preview-first replacement for the deprecated immediate customer write. Apply remains unavailable until its domain adapter and canary are complete. |
| set_vendorC | Preview-first replacement for the deprecated immediate vendor write. Apply remains unavailable until its domain adapter and canary are complete. |
| set_stock_adjustmentC | Preview-first replacement for the deprecated immediate stock-adjustment write. Apply remains unavailable until its domain adapter and canary are complete. |
| set_stock_transferC | Preview-first replacement for the deprecated immediate stock-transfer write. Apply remains unavailable until its domain adapter and canary are complete. |
| set_stock_countB | Preview-first replacement for the deprecated immediate stock-count write. Apply remains unavailable until its domain adapter and canary are complete. |
| set_manufacturing_orderC | Preview-first replacement for the deprecated immediate manufacturing-order write. Apply remains unavailable until its domain adapter and canary are complete. |
| set_taxing_schemeC | Preview-first replacement for the deprecated immediate taxing-scheme write. Apply remains unavailable until its domain adapter and canary are complete. |
| set_webhookC | Preview-first replacement for the deprecated immediate webhook write. Apply remains unavailable until its domain adapter and canary are complete. |
| set_purchase_order_receiptsC | Preview exact purchase-order receipt changes. Apply remains blocked until receipt/unreceipt stock semantics are canary-proven. |
| remove_webhookC | Preview exact webhook removal. Apply remains blocked until delete/readback semantics are canary-proven. |
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 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.