Skip to content

Finale Inventory MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.3.3 · published by io.usefulapi

Read Finale Inventory products, stock, orders and shipments; create draft purchase orders.

Deletes · 1

13 tools: 1 can delete or cancel things and 12 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http finale-inventory https://finale-inventory.usefulapi.io/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

13 tools

Deletes or cancels 1Claude Code: deny
  • finale_create_draft_purchase_orderWRITE.No findings

    Why it is in this group

    • The name "finale_create_draft_purchase_order" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE. Creates a purchase order for a supplier in status ORDER_CREATED, i.e. an editable draft. It is NOT locked (committed), received, completed or emailed, no stock changes and no money moves: review and commit it in Finale. Products are looked up first (one single read each; products whose resource URL differs from the SKU cost collection reads, bounded to 3 or one full product-list read), then ONE POST creates the order; the call is never retried, so check finale_list_orders before repeating it after an error. POST /{account}/api/order/.

    Annotations the server declares

    • title: Create a draft purchase order (WRITE)
    • destructiveHint: true
Only reads 12Claude Code: allow
  • finale_get_orderOne order in full: header, line items (productUrl, quantity, unitPrice), roles (customer or supplier), adjustments, shipment and invoice URLs, notes.No findings

    Why it is in this group

    • The name "finale_get_order" says "get": a word for reading.
    Description, as the server wrote it
    One order in full: header, line items (productUrl, quantity, unitPrice), roles (customer or supplier), adjustments, shipment and invoice URLs, notes. GET /{account}/api/order/{orderId}.

    Annotations the server declares

    • title: Get an order
    • readOnlyHint: true
  • finale_get_productOne product in full: ids, description, UPC/ASIN, dimensions and weight, cost, supplier list, reorder guidelines, price list, custom fields.No findings

    Why it is in this group

    • The name "finale_get_product" says "get": a word for reading.
    Description, as the server wrote it
    One product in full: ids, description, UPC/ASIN, dimensions and weight, cost, supplier list, reorder guidelines, price list, custom fields. GET /{account}/api/product/{id} (falls back to a productId filter when the resource URL differs).

    Annotations the server declares

    • title: Get a product
    • readOnlyHint: true
  • finale_get_product_stockStock of one product summed over Finale's stock entries: totals for quantityOnHand, quantityOnOrder and quantityReserved, and the same per location/sublocation.No findings

    Why it is in this group

    • The name "finale_get_product_stock" says "get": a word for reading.
    Description, as the server wrote it
    Stock of one product summed over Finale's stock entries: totals for quantityOnHand, quantityOnOrder and quantityReserved, and the same per location/sublocation. Downloads the WHOLE inventoryitem collection (Finale offers no filter; large on big accounts), so it counts as one collection read of the 300 per hour: avoid calling it in a loop. GET /{account}/api/inventoryitem/.

    Annotations the server declares

    • title: Get stock levels of a product
    • readOnlyHint: true
  • finale_get_shipmentOne shipment in full, including its shipment items (product, facility, quantity), packages and transfers.No findings

    Why it is in this group

    • The name "finale_get_shipment" says "get": a word for reading.
    Description, as the server wrote it
    One shipment in full, including its shipment items (product, facility, quantity), packages and transfers. GET /{account}/api/shipment/{shipmentId}.

    Annotations the server declares

    • title: Get a shipment
    • readOnlyHint: true
  • finale_list_facilitiesList Finale locations and sublocations: facilityName, facilityUrl (use it in other tools), parentFacilityUrl (set for sublocations), status.No findings

    Why it is in this group

    • The name "finale_list_facilities" says "list": a word for reading.
    Description, as the server wrote it
    List Finale locations and sublocations: facilityName, facilityUrl (use it in other tools), parentFacilityUrl (set for sublocations), status. GET /{account}/api/facility/.

    Annotations the server declares

    • title: List locations (facilities)
    • readOnlyHint: true
  • finale_list_inventory_itemsCurrent stock as Finale stores it: one entry per product, location, lot and order with quantityOnHand, quantityOnOrder (committed purchase orders) and quantityReserved (committed s…No findings

    Why it is in this group

    • The name "finale_list_inventory_items" says "list": a word for reading.
    Description, as the server wrote it
    Current stock as Finale stores it: one entry per product, location, lot and order with quantityOnHand, quantityOnOrder (committed purchase orders) and quantityReserved (committed sales orders). The inventoryitem collection has no server-side filter, so the WHOLE collection is downloaded (one collection read of the 300 per hour; can be large on big accounts, up to the 50,000 character result cap) and filtered here: pass product_id or facility_url. For per-product totals use finale_get_product_stock. GET /{account}/api/inventoryitem/.

    Annotations the server declares

    • title: List stock entries
    • readOnlyHint: true
  • finale_list_inventory_transfersList stock transfers between locations: product, from/to facility, quantity, lot, send and receive dates.No findings

    Why it is in this group

    • The name "finale_list_inventory_transfers" says "list": a word for reading.
    Description, as the server wrote it
    List stock transfers between locations: product, from/to facility, quantity, lot, send and receive dates. GET /{account}/api/inventorytransfer/.

    Annotations the server declares

    • title: List stock transfers
    • readOnlyHint: true
  • finale_list_ordersList orders without their line items: orderId, type (SALES_ORDER or PURCHASE_ORDER), status (ORDER_CREATED, ORDER_LOCKED = committed, ORDER_COMPLETED, ORDER_CANCELLED), dates, orig…No findings

    Why it is in this group

    • The name "finale_list_orders" says "list": a word for reading.
    Description, as the server wrote it
    List orders without their line items: orderId, type (SALES_ORDER or PURCHASE_ORDER), status (ORDER_CREATED, ORDER_LOCKED = committed, ORDER_COMPLETED, ORDER_CANCELLED), dates, origin/destination facility, reference number, total. Get the items with finale_get_order. For a large order history always pass updated_since (Finale cuts unfiltered collections at 120,000 rows before applying other filters). GET /{account}/api/order/.

    Annotations the server declares

    • title: List orders (sales and purchase)
    • readOnlyHint: true
  • finale_list_partiesList party groups (customers, suppliers, carriers): partyId (derived from partyUrl; use it as supplier_party_id when drafting a purchase order), name (description), type, roles, st…No findings

    Why it is in this group

    • The name "finale_list_parties" says "list": a word for reading.
    Description, as the server wrote it
    List party groups (customers, suppliers, carriers): partyId (derived from partyUrl; use it as supplier_party_id when drafting a purchase order), name (description), type, roles, status. GET /{account}/api/partygroup/.

    Annotations the server declares

    • title: List customers and suppliers
    • readOnlyHint: true
  • finale_list_productsList products (SKUs): productId, internalName, status, productUrl, manufacturer, UPC, packing.No findings

    Why it is in this group

    • The name "finale_list_products" says "list": a word for reading.
    Description, as the server wrote it
    List products (SKUs): productId, internalName, status, productUrl, manufacturer, UPC, packing. Optional exact filters on productId and status. Collections come back ordered by lastUpdatedDate; for large catalogs narrow with updated_since or page with next_updated_since. GET /{account}/api/product/.

    Annotations the server declares

    • title: List products
    • readOnlyHint: true
  • finale_list_shipmentsList shipments (sales shipments, purchase receipts, transfers): shipmentId, type, status (for example SHIPMENT_INPUT, SHIPMENT_PACKED, SHIPMENT_SHIPPED), order, origin/destination,…No findings

    Why it is in this group

    • The name "finale_list_shipments" says "list": a word for reading.
    Description, as the server wrote it
    List shipments (sales shipments, purchase receipts, transfers): shipmentId, type, status (for example SHIPMENT_INPUT, SHIPMENT_PACKED, SHIPMENT_SHIPPED), order, origin/destination, dates, tracking code. GET /{account}/api/shipment/.

    Annotations the server declares

    • title: List shipments
    • readOnlyHint: true
  • finale_list_stock_changesList stock changes (physical counts and adjustments already recorded in Finale): id, type, date, status, location, comments.No findings

    Why it is in this group

    • The name "finale_list_stock_changes" says "list": a word for reading.
    Description, as the server wrote it
    List stock changes (physical counts and adjustments already recorded in Finale): id, type, date, status, location, comments. Read-only history. GET /{account}/api/inventoryvariance/.

    Annotations the server declares

    • title: List stock changes (inventory variances)
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.3.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http finale-inventory https://finale-inventory.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__finale-inventory__finale_list_facilities",
      "mcp__finale-inventory__finale_list_products",
      "mcp__finale-inventory__finale_get_product",
      "mcp__finale-inventory__finale_list_orders",
      "mcp__finale-inventory__finale_get_order",
      "mcp__finale-inventory__finale_list_shipments",
      "mcp__finale-inventory__finale_get_shipment",
      "mcp__finale-inventory__finale_list_parties",
      "mcp__finale-inventory__finale_list_inventory_items",
      "mcp__finale-inventory__finale_get_product_stock",
      "mcp__finale-inventory__finale_list_inventory_transfers",
      "mcp__finale-inventory__finale_list_stock_changes"
    ],
    "ask": [],
    "deny": [
      "mcp__finale-inventory__finale_create_draft_purchase_order"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as finale-inventory. Review it before you use it.