Read Finale Inventory products, stock, orders and shipments; create draft purchase orders.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh 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/.
Order lines.
Supplier partyId (from finale_list_parties).
Order id (max 20 ASCII characters; must be unique). Omit to let Finale number it.
Notes to the supplier.
Internal notes.
Supplier reference number (max 60 characters).
Receiving location's facilityUrl (from finale_list_facilities; not a sublocation). Omit for 'Multiple / unspecified'.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
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/.
| Argument | Type | Description |
|---|---|---|
| items* | array | Order lines. |
| order_id | string | Order id (max 20 ASCII characters; must be unique). Omit to let Finale number it. |
| public_notes | string | Notes to the supplier. |
| private_notes | string | Internal notes. |
| reference_number | string | Supplier reference number (max 60 characters). |
| supplier_party_id* | string | Supplier partyId (from finale_list_parties). |
| destination_facility_url | string | Receiving location's facilityUrl (from finale_list_facilities; not a sublocation). Omit for 'Multiple / unspecified'. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"supplier_party_id",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"product_id",
"quantity"
],
"properties": {
"quantity": {
"type": "number",
"maximum": 1000000000,
"description": "Quantity in open-stock units.",
"exclusiveMinimum": 0
},
"product_id": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Product id (SKU); it is looked up in Finale first, an unknown id stops the whole request."
},
"unit_price": {
"type": "number",
"maximum": 1000000000,
"minimum": 0,
"description": "Unit cost for this purchase (omit to leave it to Finale)."
}
}
},
"maxItems": 20,
"minItems": 1,
"description": "Order lines."
},
"order_id": {
"type": "string",
"pattern": "^[A-Za-z0-9._-]{1,20}$",
"description": "Order id (max 20 ASCII characters; must be unique). Omit to let Finale number it."
},
"public_notes": {
"type": "string",
"maxLength": 2000,
"description": "Notes to the supplier."
},
"private_notes": {
"type": "string",
"maxLength": 2000,
"description": "Internal notes."
},
"reference_number": {
"type": "string",
"maxLength": 60,
"description": "Supplier reference number (max 60 characters)."
},
"supplier_party_id": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Supplier partyId (from finale_list_parties)."
},
"destination_facility_url": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "Receiving location's facilityUrl (from finale_list_facilities; not a sublocation). Omit for 'Multiple / unspecified'."
}
}
}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}.
| Argument | Type | Description |
|---|---|---|
| order_id* | string | The order id as shown by finale_list_orders (orderId). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "The order id as shown by finale_list_orders (orderId)."
}
}
}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).
| Argument | Type | Description |
|---|---|---|
| product_id* | string | The product id (SKU) as shown by finale_list_products. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id"
],
"properties": {
"product_id": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "The product id (SKU) as shown by finale_list_products."
}
}
}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/.
| Argument | Type | Description |
|---|---|---|
| product_id* | string | The product id (SKU). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id"
],
"properties": {
"product_id": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "The product id (SKU)."
}
}
}One shipment in full, including its shipment items (product, facility, quantity), packages and transfers. GET /{account}/api/shipment/{shipmentId}.
| Argument | Type | Description |
|---|---|---|
| shipment_id* | string | The shipmentId as shown by finale_list_shipments. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"shipment_id"
],
"properties": {
"shipment_id": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "The shipmentId as shown by finale_list_shipments."
}
}
}List Finale locations and sublocations: facilityName, facilityUrl (use it in other tools), parentFacilityUrl (set for sublocations), status. GET /{account}/api/facility/.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum rows to return, 1-1000 (default 100). |
| fields | array | Fields to return per row (default: a compact useful set). |
| updated_since | string | Only records last updated on or after this UTC time. Finale allows a range of at most 30 days (updated_until defaults to now). |
| updated_until | string | Only records last updated on or before this UTC time (needs updated_since). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum rows to return, 1-1000 (default 100)."
},
"fields": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9]{0,63}$"
},
"maxItems": 40,
"description": "Fields to return per row (default: a compact useful set)."
},
"updated_since": {
"type": "string",
"description": "Only records last updated on or after this UTC time. Finale allows a range of at most 30 days (updated_until defaults to now)."
},
"updated_until": {
"type": "string",
"description": "Only records last updated on or before this UTC time (needs updated_since)."
}
}
}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/.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum rows to return, 1-1000 (default 100). |
| fields | array | Fields to return per row (default: a compact useful set). |
| product_id | string | Only entries of this product id (SKU). |
| facility_url | string | Only entries at this facilityUrl (from finale_list_facilities). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum rows to return, 1-1000 (default 100)."
},
"fields": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9]{0,63}$"
},
"maxItems": 40,
"description": "Fields to return per row (default: a compact useful set)."
},
"product_id": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Only entries of this product id (SKU)."
},
"facility_url": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Only entries at this facilityUrl (from finale_list_facilities)."
}
}
}List stock transfers between locations: product, from/to facility, quantity, lot, send and receive dates. GET /{account}/api/inventorytransfer/.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum rows to return, 1-1000 (default 100). |
| fields | array | Fields to return per row (default: a compact useful set). |
| updated_since | string | Only records last updated on or after this UTC time. Finale allows a range of at most 30 days (updated_until defaults to now). |
| updated_until | string | Only records last updated on or before this UTC time (needs updated_since). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum rows to return, 1-1000 (default 100)."
},
"fields": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9]{0,63}$"
},
"maxItems": 40,
"description": "Fields to return per row (default: a compact useful set)."
},
"updated_since": {
"type": "string",
"description": "Only records last updated on or after this UTC time. Finale allows a range of at most 30 days (updated_until defaults to now)."
},
"updated_until": {
"type": "string",
"description": "Only records last updated on or before this UTC time (needs updated_since)."
}
}
}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/.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum rows to return, 1-1000 (default 100). |
| fields | array | Fields to return per row (default: a compact useful set). |
| status | string | Only orders in this status. |
| order_type | string | Only sales or only purchase orders. |
| updated_since | string | Only records last updated on or after this UTC time. Finale allows a range of at most 30 days (updated_until defaults to now). |
| updated_until | string | Only records last updated on or before this UTC time (needs updated_since). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum rows to return, 1-1000 (default 100)."
},
"fields": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9]{0,63}$"
},
"maxItems": 40,
"description": "Fields to return per row (default: a compact useful set)."
},
"status": {
"enum": [
"ORDER_CREATED",
"ORDER_LOCKED",
"ORDER_COMPLETED",
"ORDER_CANCELLED"
],
"type": "string",
"description": "Only orders in this status."
},
"order_type": {
"enum": [
"SALES_ORDER",
"PURCHASE_ORDER"
],
"type": "string",
"description": "Only sales or only purchase orders."
},
"updated_since": {
"type": "string",
"description": "Only records last updated on or after this UTC time. Finale allows a range of at most 30 days (updated_until defaults to now)."
},
"updated_until": {
"type": "string",
"description": "Only records last updated on or before this UTC time (needs updated_since)."
}
}
}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/.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum rows to return, 1-1000 (default 100). |
| fields | array | Fields to return per row (default: a compact useful set). |
| updated_since | string | Only records last updated on or after this UTC time. Finale allows a range of at most 30 days (updated_until defaults to now). |
| updated_until | string | Only records last updated on or before this UTC time (needs updated_since). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum rows to return, 1-1000 (default 100)."
},
"fields": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9]{0,63}$"
},
"maxItems": 40,
"description": "Fields to return per row (default: a compact useful set)."
},
"updated_since": {
"type": "string",
"description": "Only records last updated on or after this UTC time. Finale allows a range of at most 30 days (updated_until defaults to now)."
},
"updated_until": {
"type": "string",
"description": "Only records last updated on or before this UTC time (needs updated_since)."
}
}
}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/.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum rows to return, 1-1000 (default 100). |
| fields | array | Fields to return per row (default: a compact useful set). |
| status | string | Only active or only inactive products. |
| product_id | string | Exact product id (SKU). |
| updated_since | string | Only records last updated on or after this UTC time. Finale allows a range of at most 30 days (updated_until defaults to now). |
| updated_until | string | Only records last updated on or before this UTC time (needs updated_since). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum rows to return, 1-1000 (default 100)."
},
"fields": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9]{0,63}$"
},
"maxItems": 40,
"description": "Fields to return per row (default: a compact useful set)."
},
"status": {
"enum": [
"PRODUCT_ACTIVE",
"PRODUCT_INACTIVE"
],
"type": "string",
"description": "Only active or only inactive products."
},
"product_id": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Exact product id (SKU)."
},
"updated_since": {
"type": "string",
"description": "Only records last updated on or after this UTC time. Finale allows a range of at most 30 days (updated_until defaults to now)."
},
"updated_until": {
"type": "string",
"description": "Only records last updated on or before this UTC time (needs updated_since)."
}
}
}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/.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum rows to return, 1-1000 (default 100). |
| fields | array | Fields to return per row (default: a compact useful set). |
| status | string | Exact shipment status, e.g. SHIPMENT_SHIPPED. |
| updated_since | string | Only records last updated on or after this UTC time. Finale allows a range of at most 30 days (updated_until defaults to now). |
| updated_until | string | Only records last updated on or before this UTC time (needs updated_since). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum rows to return, 1-1000 (default 100)."
},
"fields": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9]{0,63}$"
},
"maxItems": 40,
"description": "Fields to return per row (default: a compact useful set)."
},
"status": {
"type": "string",
"pattern": "^SHIPMENT_[A-Z_]{1,40}$",
"description": "Exact shipment status, e.g. SHIPMENT_SHIPPED."
},
"updated_since": {
"type": "string",
"description": "Only records last updated on or after this UTC time. Finale allows a range of at most 30 days (updated_until defaults to now)."
},
"updated_until": {
"type": "string",
"description": "Only records last updated on or before this UTC time (needs updated_since)."
}
}
}List stock changes (physical counts and adjustments already recorded in Finale): id, type, date, status, location, comments. Read-only history. GET /{account}/api/inventoryvariance/.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum rows to return, 1-1000 (default 100). |
| fields | array | Fields to return per row (default: a compact useful set). |
| updated_since | string | Only records last updated on or after this UTC time. Finale allows a range of at most 30 days (updated_until defaults to now). |
| updated_until | string | Only records last updated on or before this UTC time (needs updated_since). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Maximum rows to return, 1-1000 (default 100)."
},
"fields": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9]{0,63}$"
},
"maxItems": 40,
"description": "Fields to return per row (default: a compact useful set)."
},
"updated_since": {
"type": "string",
"description": "Only records last updated on or after this UTC time. Finale allows a range of at most 30 days (updated_until defaults to now)."
},
"updated_until": {
"type": "string",
"description": "Only records last updated on or before this UTC time (needs updated_since)."
}
}
}