Read FinerWorks orders, inventory, catalog, prices and shipping quotes; never submits an order.
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.
The FinerWorks account these API keys belong to: username, email, billing and business addresses, account credits, shipping preferences and app details. The API keys, payment profile and third-party connection secrets are never returned. GET /v3/test_my_credentials.
This tool takes no arguments.
The FinerWorks account these API keys belong to: username, email, billing and business addresses, account credits, shipping preferences and app details. The API keys, payment profile and third-party connection secrets are never returned. GET /v3/test_my_credentials.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Details of one frame by id (from finerworks_list_frame_collections). POST /v3/frame_details.
| Argument | Type | Description |
|---|---|---|
| id* | integer | Frame id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Frame id.",
"exclusiveMinimum": 0
}
}
}One order in full: items, recipient, shipping method, status and totals. Needs the order GUID and the email address on the order. GET /v3/get_order.
| Argument | Type | Description |
|---|---|---|
| order_guid* | string | The order's GUID (order_guid in finerworks_list_orders). |
| order_email* | string | The email address on the order (billing or recipient email). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"order_guid",
"order_email"
],
"properties": {
"order_guid": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
"description": "The order's GUID (order_guid in finerworks_list_orders)."
},
"order_email": {
"type": "string",
"maxLength": 254,
"minLength": 3,
"description": "The email address on the order (billing or recipient email)."
}
}
}The current production status of orders (in production, shipped, ...), looked up by your order PO numbers or FinerWorks order ids. An order that is not found returns nothing. POST /v3/fetch_order_status.
| Argument | Type | Description |
|---|---|---|
| order_ids | array | FinerWorks order ids. Not needed when order_pos is given. |
| order_pos | array | Your own order PO numbers. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"order_ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"maxItems": 50,
"minItems": 1,
"description": "FinerWorks order ids. Not needed when order_pos is given."
},
"order_pos": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"maxItems": 50,
"minItems": 1,
"description": "Your own order PO numbers."
}
}
}Price and price breakdown for up to 50 product codes or virtual inventory SKUs at given quantities. Nothing is ordered or billed. POST /v3/get_prices.
| Argument | Type | Description |
|---|---|---|
| products* | array | Product codes or SKUs with quantities (up to 50). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"products"
],
"properties": {
"products": {
"type": "array",
"items": {
"type": "object",
"required": [
"sku"
],
"properties": {
"sku": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "A virtual inventory SKU or a product code."
},
"quantity": {
"type": "integer",
"maximum": 999,
"description": "Quantity, 1-999 (default 1).",
"exclusiveMinimum": 0
}
}
},
"maxItems": 50,
"minItems": 1,
"description": "Product codes or SKUs with quantities (up to 50)."
}
}
}Details and pricing for up to 25 virtual inventory SKUs at given quantities. POST /v3/get_product_details.
| Argument | Type | Description |
|---|---|---|
| products* | array | SKUs with quantities (up to 25). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"products"
],
"properties": {
"products": {
"type": "array",
"items": {
"type": "object",
"required": [
"sku"
],
"properties": {
"sku": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "A virtual inventory SKU or a product code."
},
"quantity": {
"type": "integer",
"maximum": 999,
"description": "Quantity, 1-999 (default 1).",
"exclusiveMinimum": 0
}
}
},
"maxItems": 25,
"minItems": 1,
"description": "SKUs with quantities (up to 25)."
}
}
}Shipping options and rates for one prospective order: a recipient address plus the SKUs and quantities. Returns the shipping_code values an order would need. Nothing is ordered or billed. POST /v3/list_shipping_options_multiple.
| Argument | Type | Description |
|---|---|---|
| items* | array | SKUs (virtual inventory) with quantities. |
| recipient* | object | Where the order would ship. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipient",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"sku"
],
"properties": {
"sku": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "A virtual inventory SKU or a product code."
},
"quantity": {
"type": "integer",
"maximum": 999,
"description": "Quantity, 1-999 (default 1).",
"exclusiveMinimum": 0
}
}
},
"maxItems": 50,
"minItems": 1,
"description": "SKUs (virtual inventory) with quantities."
},
"recipient": {
"type": "object",
"required": [
"first_name",
"last_name",
"address_1",
"city",
"zip_postal_code",
"country_code"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"email": {
"type": "string",
"maxLength": 200
},
"phone": {
"type": "string",
"maxLength": 40
},
"province": {
"type": "string",
"maxLength": 100,
"description": "Province or region for countries without state codes."
},
"address_1": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"address_2": {
"type": "string",
"maxLength": 200
},
"last_name": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"first_name": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"state_code": {
"type": "string",
"maxLength": 10,
"description": "US/Canada state or province code, e.g. AK."
},
"company_name": {
"type": "string",
"maxLength": 150
},
"country_code": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Two-letter country code, e.g. us."
},
"zip_postal_code": {
"type": "string",
"maxLength": 20,
"minLength": 1
}
},
"description": "Where the order would ship."
}
}
}Frame collections (categories). Pass a collection id to list the frames in it; pass a product code to show only collections and frames compatible with that print product. POST /v3/list_collections.
| Argument | Type | Description |
|---|---|---|
| id | integer | Collection id. Required to list the frames inside a collection. |
| product_code | string | Only collections and frames compatible with this product code. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Collection id. Required to list the frames inside a collection.",
"exclusiveMinimum": 0
},
"product_code": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Only collections and frames compatible with this product code."
}
}
}The available glazing (glass and acrylic) options. POST /v3/list_glazing.
| Argument | Type | Description |
|---|---|---|
| id | integer | Only this glazing id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only this glazing id.",
"exclusiveMinimum": 0
}
}
}The available mats (matting). POST /v3/list_mats.
| Argument | Type | Description |
|---|---|---|
| id | integer | Only this mat id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only this mat id.",
"exclusiveMinimum": 0
}
}
}The papers and media FinerWorks prints on. POST /v3/list_media_types.
| Argument | Type | Description |
|---|---|---|
| ids | array | Optional list of media ids to filter by. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"maxItems": 100,
"minItems": 1,
"description": "Optional list of media ids to filter by."
}
}
}All production statuses an order can have, with their ids. Use the id as the stable reference. GET /v3/list_order_status_definitions.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List submitted print orders, newest first, with status, totals and dates. Filter by free text, production status, FinerWorks order ids, your own order POs (the order numbers from Shopify, Squarespace, etc.) or an order-date range. POST /v3/list_orders.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| search | string | Text to search for in the order title or description. |
| status | string | Order status to filter by (see finerworks_list_order_status_definitions). |
| date_to | string | Orders placed on or before this date, yyyy-mm-dd. |
| per_page | integer | Results per page, 1-25 (default 10). |
| date_from | string | Orders placed on or after this date, yyyy-mm-dd. |
| order_ids | array | Optional list of FinerWorks order ids to filter by. |
| order_pos | array | Your own order PO numbers. |
Orders saved but held in a pending status, not yet submitted for production (nothing is billed until submitted). POST /v3/list_pending_orders.
| Argument | Type | Description |
|---|---|---|
| ids | array | Optional list of pending order ids to filter by. |
| skus | array | Only pending orders containing these SKUs. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"maxItems": 100,
"minItems": 1,
"description": "Optional list of pending order ids to filter by."
},
"skus": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"maxItems": 50,
"minItems": 1,
"description": "Only pending orders containing these SKUs."
}
}
}The product types FinerWorks prints (fine art paper, canvas, wood, metal, cards, ...). POST /v3/list_product_types.
| Argument | Type | Description |
|---|---|---|
| ids | array | Optional list of product type ids to filter by. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"maxItems": 100,
"minItems": 1,
"description": "Optional list of product type ids to filter by."
}
}
}Non-dynamic products, mostly accessories, that can be added to an order. POST /v3/list_static_products.
| Argument | Type | Description |
|---|---|---|
| ids | array | Optional list of static product ids to filter by. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"maxItems": 100,
"minItems": 1,
"description": "Optional list of static product ids to filter by."
}
}
}The print styles FinerWorks offers (for example gallery wrap or float mount). POST /v3/list_style_types.
| Argument | Type | Description |
|---|---|---|
| ids | array | Optional list of style ids to filter by. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"maxItems": 100,
"minItems": 1,
"description": "Optional list of style ids to filter by."
}
}
}The reusable print products (SKUs) saved in the account's virtual inventory: title, SKU, product code, image and price details. Filter by text, SKU, product code or product type. POST /v3/list_virtual_inventory.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| skus | array | Only these SKUs (up to 50). |
| search | string | Text to search for in the title or description. |
| per_page | integer | Results per page, 1-50 (default 10). |
| sort_field | string | Sort field (default id). |
| product_codes | array | Only these product codes (up to 50). |
| sort_direction | string | Sort direction (default DESC). |
| product_type_ids | array | Optional list of product type ids to filter by. |
Check a recipient address and return FinerWorks' corrected version. Nothing is saved or ordered. POST /v3/validate_recipient_address.
| Argument | Type | Description |
|---|---|---|
| recipient* | object | The address to check. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"recipient"
],
"properties": {
"recipient": {
"type": "object",
"required": [
"first_name",
"last_name",
"address_1",
"city",
"zip_postal_code",
"country_code"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"email": {
"type": "string",
"maxLength": 200
},
"phone": {
"type": "string",
"maxLength": 40
},
"province": {
"type": "string",
"maxLength": 100,
"description": "Province or region for countries without state codes."
},
"address_1": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"address_2": {
"type": "string",
"maxLength": 200
},
"last_name": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"first_name": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"state_code": {
"type": "string",
"maxLength": 10,
"description": "US/Canada state or province code, e.g. AK."
},
"company_name": {
"type": "string",
"maxLength": 150
},
"country_code": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Two-letter country code, e.g. us."
},
"zip_postal_code": {
"type": "string",
"maxLength": 20,
"minLength": 1
}
},
"description": "The address to check."
}
}
}| show_cancelled |
| boolean |
| Include cancelled orders (default true). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"search": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Text to search for in the order title or description."
},
"status": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Order status to filter by (see finerworks_list_order_status_definitions)."
},
"date_to": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Orders placed on or before this date, yyyy-mm-dd."
},
"per_page": {
"type": "integer",
"maximum": 25,
"description": "Results per page, 1-25 (default 10).",
"exclusiveMinimum": 0
},
"date_from": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Orders placed on or after this date, yyyy-mm-dd."
},
"order_ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"maxItems": 100,
"minItems": 1,
"description": "Optional list of FinerWorks order ids to filter by."
},
"order_pos": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"maxItems": 100,
"minItems": 1,
"description": "Your own order PO numbers."
},
"show_cancelled": {
"type": "boolean",
"description": "Include cancelled orders (default true)."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"skus": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"maxItems": 50,
"minItems": 1,
"description": "Only these SKUs (up to 50)."
},
"search": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Text to search for in the title or description."
},
"per_page": {
"type": "integer",
"maximum": 50,
"description": "Results per page, 1-50 (default 10).",
"exclusiveMinimum": 0
},
"sort_field": {
"enum": [
"id",
"title",
"file_name",
"file_size",
"updated",
"date_added"
],
"type": "string",
"description": "Sort field (default id)."
},
"product_codes": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"maxItems": 50,
"minItems": 1,
"description": "Only these product codes (up to 50)."
},
"sort_direction": {
"enum": [
"ASC",
"DESC"
],
"type": "string",
"description": "Sort direction (default DESC)."
},
"product_type_ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"maxItems": 100,
"minItems": 1,
"description": "Optional list of product type ids to filter by."
}
}
}