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.
13 tools: 1 can delete or cancel things and 12 only read.
Scanned Oct 21, 2026
- Deletes or cancels1Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things0Claude Code: ask
- Only reads12Claude Code: allow: see these tools
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/mcpTools
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/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .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.