EasyStore MCP by usefulapi

Read EasyStore orders, products and customers; manage stock, fulfillments and customer records.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
91%
Naming quality
76%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (6)

  • LOWTool 'easystore_list_product_variants' name length outside 3-30 rangein easystore_list_product_variants
  • LOWTool 'easystore_list_inventory_levels' name length outside 3-30 rangein easystore_list_inventory_levels
  • LOWTool 'easystore_list_order_fulfillments' name length outside 3-30 rangein easystore_list_order_fulfillments
  • LOWTool 'easystore_list_order_transactions' name length outside 3-30 rangein easystore_list_order_transactions
  • LOWTool 'easystore_list_customer_addresses' name length outside 3-30 rangein easystore_list_customer_addresses
  • LOWTool 'easystore_adjust_inventory_level' name length outside 3-30 rangein easystore_adjust_inventory_level

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~7,855Tokens (tool definitions)
~2.0 KBTypical response size
Significant attention impact (6.14% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "easystore": {
      "url": "https://easystore.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://easystore.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (29)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢easystore_get_store

The store behind this access token: name, contact emails, easystore domain, plan, locale, country, time zone, currencies and locations. Needs no API access scope. GET /api/3.0/store.json.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_list_locations(page, limit)

The store's stock and pickup locations (warehouses, outlets) with address, phone, is_primary and pickup settings. Use the ids for inventory levels. Needs read_locations. GET /api/3.0/locations.json.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_list_products(collection_ids, skus, visibility, is_bundle, created_at_min, ...)

List products with variants, prices, SKUs, stock, images and collections. Filter by collection, SKU, published status or dates. Needs read_products. GET /api/3.0/products.json.

Input Schema

{
  "type": "object",
  "properties": {
    "collection_ids": {
      "description": "Only products in these collection ids, comma-separated, e.g. 2311217,2311218.",
      "type": "string",
      "pattern": "^\\d+(\\s*,\\s*\\d+)*$"
    },
    "skus": {
      "description": "Only products with these SKUs, comma-separated.",
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    },
    "visibility": {
      "description": "Only published or only unpublished products.",
      "type": "string",
      "enum": [
        "published",
        "unpublished"
      ]
    },
    "is_bundle": {
      "description": "true = only bundle products, false = no bundle products.",
      "type": "boolean"
    },
    "created_at_min": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
      "description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
    },
    "created_at_max": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
      "description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
    },
    "updated_at_min": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
      "description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
    },
    "updated_at_max": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
      "description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
    },
    "since_id": {
      "description": "Start at this product id (inclusive: id >= since_id).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "sort": {
      "description": "Sort as field.asc or field.desc, e.g. id.asc (a stable order for paging through everything).",
      "type": "string",
      "pattern": "^[a-z_]{1,40}\\.(asc|desc)$"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_get_product(product_id)

One product by id with its variants, options, images and collections. Needs read_products. GET /api/3.0/products/{id}.json.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "EasyStore product id."
    }
  },
  "required": [
    "product_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_list_product_variants(product_id)

The variants of one product (price, SKU, barcode, stock, weight, enabled flag). Needs read_products. GET /api/3.0/products/{id}/variants.json.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "EasyStore product id."
    }
  },
  "required": [
    "product_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_list_collections(ids, visibility, since_id, sort, page, ...)

List product collections. Needs read_products. GET /api/3.0/collections.json.

Input Schema

{
  "type": "object",
  "properties": {
    "ids": {
      "description": "Only these collection ids, comma-separated.",
      "type": "string",
      "pattern": "^\\d+(\\s*,\\s*\\d+)*$"
    },
    "visibility": {
      "description": "true = only published collections.",
      "type": "boolean"
    },
    "since_id": {
      "description": "Start at this collection id (inclusive).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "sort": {
      "description": "Sort as field.asc or field.desc, e.g. id.asc (a stable order for paging through everything).",
      "type": "string",
      "pattern": "^[a-z_]{1,40}\\.(asc|desc)$"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_get_collection(collection_id)

One collection by id. Needs read_products. GET /api/3.0/collections/{id}.json.

Input Schema

{
  "type": "object",
  "properties": {
    "collection_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "EasyStore collection id."
    }
  },
  "required": [
    "collection_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_list_inventory_levels(variant_ids, location_ids, page, limit)

Stock per variant per location: available (inventory_quantity), committed, incoming and reserved. Pass variant_ids or location_ids (at least one is required). Needs read_products. GET /api/4.0/inventory_levels.json.

Input Schema

{
  "type": "object",
  "properties": {
    "variant_ids": {
      "description": "Variant ids, comma-separated (see easystore_list_product_variants).",
      "type": "string",
      "pattern": "^\\d+(\\s*,\\s*\\d+)*$"
    },
    "location_ids": {
      "description": "Location ids, comma-separated (see easystore_list_locations).",
      "type": "string",
      "pattern": "^\\d+(\\s*,\\s*\\d+)*$"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_list_orders(financial_status, fulfillment_status, customer_id, ids, processed_at_min, ...)

List orders from every sales channel with customer, items, totals, payment and fulfillment status. Filter by payment or fulfillment status, customer, or dates (store time zone). Needs read_orders. GET /api/3.0/orders.json.

Input Schema

{
  "type": "object",
  "properties": {
    "financial_status": {
      "description": "Payment status.",
      "type": "string",
      "enum": [
        "paid",
        "partially_paid",
        "unpaid",
        "cod"
      ]
    },
    "fulfillment_status": {
      "description": "Shipping status.",
      "type": "string",
      "enum": [
        "fulfilled",
        "partially_fulfilled",
        "unfulfilled"
      ]
    },
    "customer_id": {
      "description": "Only this customer's orders.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "ids": {
      "description": "Only these order ids, comma-separated.",
      "type": "string",
      "pattern": "^\\d+(\\s*,\\s*\\d+)*$"
    },
    "processed_at_min": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
      "description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
    },
    "processed_at_max": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
      "description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
    },
    "created_at_min": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
      "description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
    },
    "created_at_max": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
      "description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
    },
    "updated_at_min": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
      "description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
    },
    "updated_at_max": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}(:\\d{2})?)?$",
      "description": "yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, read in the store's own time zone."
    },
    "since_id": {
      "description": "Start at this order id (inclusive: id >= since_id). Use with sort=id.asc.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "sort": {
      "description": "Sort as field.asc or field.desc, e.g. id.asc (a stable order for paging through everything).",
      "type": "string",
      "pattern": "^[a-z_]{1,40}\\.(asc|desc)$"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_get_order(order_id, fields)

One order by id. Ask for extra sections with fields: items, addresses, transactions, fulfillments, refunds, taxes, customer, shipping_fees, discounts, points, cancellation, note_attributes. Needs read_orders. GET /api/3.0/orders/{id}.json.

Input Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "EasyStore order id (not the order number)."
    },
    "fields": {
      "description": "Comma-separated extra sections, e.g. items,addresses,fulfillments.",
      "type": "string",
      "pattern": "^[a-z_]+(\\s*,\\s*[a-z_]+)*$"
    }
  },
  "required": [
    "order_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_list_order_fulfillments(order_id)

The fulfillments (shipments with tracking details and status) of one order. Needs read_fulfillments. GET /api/3.0/orders/{id}/fulfillments.json.

Input Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "EasyStore order id."
    }
  },
  "required": [
    "order_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_list_order_transactions(order_id)

The payment transactions of one order (gateway, amount, status). Needs read_orders. GET /api/3.0/orders/{id}/transactions.json.

Input Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "EasyStore order id."
    }
  },
  "required": [
    "order_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_list_checkouts(since_id, page, limit)

List checkouts (carts in progress or abandoned). Cart tokens are not returned. Needs read_orders. GET /api/3.0/checkouts.json.

Input Schema

{
  "type": "object",
  "properties": {
    "since_id": {
      "description": "Start at this checkout id (inclusive).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-50 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_list_customers(query, ids, created_at_min, created_at_max, updated_at_min, ...)

List customers with contact details, order count, total spent, groups and store credit. Search by name or email with query. Needs read_customers. GET /api/3.0/customers.json.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "description": "Match on first name, last name or email.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "ids": {
      "description": "Only these customer ids, comma-separated.",
      "type": "string",
      "pattern": "^\\d+(\\s*,\\s*\\d+)*$"
    },
    "created_at_min": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$",
      "description": "ISO 8601 date or date-time, e.g. 2026-10-01 or 2026-10-01T00:00:00+08:00."
    },
    "created_at_max": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$",
      "description": "ISO 8601 date or date-time, e.g. 2026-10-01 or 2026-10-01T00:00:00+08:00."
    },
    "updated_at_min": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$",
      "description": "ISO 8601 date or date-time, e.g. 2026-10-01 or 2026-10-01T00:00:00+08:00."
    },
    "updated_at_max": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$",
      "description": "ISO 8601 date or date-time, e.g. 2026-10-01 or 2026-10-01T00:00:00+08:00."
    },
    "since_id": {
      "description": "Start at this customer id (inclusive).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "sort": {
      "description": "Sort as field.asc or field.desc, e.g. id.asc (a stable order for paging through everything).",
      "type": "string",
      "pattern": "^[a-z_]{1,40}\\.(asc|desc)$"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_search_customers(email, phone, code, page, limit)

Find customers by exact email, phone number or customer code. Pass at least one. Needs read_customers. GET /api/3.0/customers/search.json.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "description": "Exact email address.",
      "type": "string",
      "minLength": 3,
      "maxLength": 254
    },
    "phone": {
      "description": "Phone number as stored, e.g. 601110768827.",
      "type": "string",
      "minLength": 3,
      "maxLength": 40
    },
    "code": {
      "description": "Customer code.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_get_customer(customer_id, fields)

One customer by id. Add fields=points,membership for loyalty data. Needs read_customers. GET /api/3.0/customers/{id}.json.

Input Schema

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "EasyStore customer id."
    },
    "fields": {
      "description": "Extra sections, e.g. points,membership.",
      "type": "string",
      "pattern": "^[a-z_]+(\\s*,\\s*[a-z_]+)*$"
    }
  },
  "required": [
    "customer_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_list_customer_addresses(customer_id, page, limit)

The saved addresses of one customer. Needs read_customers. GET /api/3.0/customers/{id}/addresses.json.

Input Schema

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "EasyStore customer id."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "customer_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_get_customer_points(customer_id)

The loyalty points balance of one customer. Needs read_customers. GET /api/3.0/customers/{id}/points.json.

Input Schema

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "EasyStore customer id."
    }
  },
  "required": [
    "customer_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_list_customer_groups

List customer groups (for example VIP). Needs read_customers. GET /api/3.0/groups.json.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_list_pages(page, limit)

List the store's content pages. Needs read_content. GET /api/3.0/pages.json.

Input Schema

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_list_blogs(visibility, page, limit)

List the store's blogs. Needs read_content. GET /api/3.0/blogs.json.

Input Schema

{
  "type": "object",
  "properties": {
    "visibility": {
      "description": "Only published or unpublished blogs.",
      "type": "string",
      "enum": [
        "published",
        "unpublished"
      ]
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢easystore_list_articles(visibility, page, limit)

List blog articles. Needs read_content. GET /api/3.0/articles.json.

Input Schema

{
  "type": "object",
  "properties": {
    "visibility": {
      "description": "Only published or unpublished articles.",
      "type": "string",
      "enum": [
        "published",
        "unpublished"
      ]
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴easystore_set_inventory_level(variant_id, location_id, quantity)

WRITE. Set the stock of one variant at one location to an exact number (quantity 0 or more). Omit location_id for the primary location. Overwrites the current quantity; use easystore_adjust_inventory_level for a relative change. Needs write_products. PUT /api/4.0/inventory_levels/set.json.

Input Schema

{
  "type": "object",
  "properties": {
    "variant_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Variant id (see easystore_list_product_variants)."
    },
    "location_id": {
      "description": "Location id (see easystore_list_locations). Default: the primary location.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "quantity": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000000,
      "description": "The exact available quantity to set."
    }
  },
  "required": [
    "variant_id",
    "quantity"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴easystore_adjust_inventory_level(variant_id, location_id, adjustment_quantity)

WRITE. Add to or remove from the stock of one variant at one location by a relative amount (positive adds, negative removes; 0 is rejected). Not idempotent: repeating it changes the stock again. Omit location_id for the primary location. Needs write_products. PUT /api/4.0/inventory_levels/adjust.json.

Input Schema

{
  "type": "object",
  "properties": {
    "variant_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Variant id (see easystore_list_product_variants)."
    },
    "location_id": {
      "description": "Location id (see easystore_list_locations). Default: the primary location.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "adjustment_quantity": {
      "type": "integer",
      "minimum": -1000000000,
      "maximum": 1000000000,
      "description": "Relative change: 5 adds 5, -5 removes 5."
    }
  },
  "required": [
    "variant_id",
    "adjustment_quantity"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴easystore_update_variant(product_id, variant_id, price, compare_at_price, cost_price, ...)

WRITE. Change one variant's price, compare-at price, cost price, SKU, barcode or enabled flag. Only the fields you pass change. To change stock use the inventory tools. Needs write_products. PUT /api/3.0/products/{product_id}/variants.json.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The product the variant belongs to."
    },
    "variant_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Variant id."
    },
    "price": {
      "description": "Selling price in the store's primary currency.",
      "type": "number",
      "minimum": 0,
      "maximum": 1000000000
    },
    "compare_at_price": {
      "description": "Original price shown struck through.",
      "type": "number",
      "minimum": 0,
      "maximum": 1000000000
    },
    "cost_price": {
      "description": "Cost price.",
      "type": "number",
      "minimum": 0,
      "maximum": 1000000000
    },
    "sku": {
      "description": "SKU.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "barcode": {
      "description": "Barcode.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "is_enabled": {
      "description": "Whether the variant can be sold.",
      "type": "boolean"
    }
  },
  "required": [
    "product_id",
    "variant_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴easystore_cancel_order(order_id, reason)

WRITE, hard to undo. Cancel an order, with an optional reason. Confirm the order id and number with the user first. Needs write_orders. POST /api/3.0/orders/{id}/cancel.json.

Input Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "EasyStore order id (not the order number)."
    },
    "reason": {
      "description": "Why the order is cancelled, e.g. Damaged item.",
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    }
  },
  "required": [
    "order_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴easystore_create_fulfillment(order_id, tracking_company, tracking_number, tracking_url, status, ...)

WRITE. Mark an order (or some of its line items) as shipped, with tracking details. Not idempotent: calling it twice creates two fulfillments. With notify_customer true the customer is emailed. Needs write_fulfillments. POST /api/3.0/orders/{id}/fulfillments.json.

Input Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "EasyStore order id."
    },
    "tracking_company": {
      "description": "Courier name, e.g. DHL.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "tracking_number": {
      "description": "Tracking number.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "tracking_url": {
      "description": "Tracking page URL.",
      "type": "string",
      "maxLength": 2000,
      "format": "uri"
    },
    "status": {
      "description": "Shipment status.",
      "type": "string",
      "enum": [
        "label_printed",
        "label_purchased",
        "attempted_delivery",
        "available_for_pickup",
        "successful_pickup",
        "pending_pickup",
        "arrived_sorting_hub",
        "pending",
        "open",
        "in_transit",
        "out_for_delivery",
        "delivered",
        "failure",
        "cancelled",
        "fulfilled"
      ]
    },
    "message": {
      "description": "Note about this fulfillment.",
      "type": "string",
      "minLength": 1,
      "maxLength": 1000
    },
    "notify_customer": {
      "description": "Email the customer (default false).",
      "type": "boolean"
    },
    "line_items": {
      "description": "Only these line items and quantities; omit to fulfill the whole order.",
      "minItems": 1,
      "maxItems": 200,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "description": "Order line item id."
          },
          "quantity": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 1000000
          }
        },
        "required": [
          "id",
          "quantity"
        ]
      }
    }
  },
  "required": [
    "order_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡easystore_create_customer(first_name, last_name, email, phone, birthdate, ...)

WRITE. Create a customer. Pass at least one of first_name, last_name, email or phone. Not idempotent. Needs write_customers. POST /api/3.0/customers.json.

Input Schema

{
  "type": "object",
  "properties": {
    "first_name": {
      "description": "First name.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "last_name": {
      "description": "Last name.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "email": {
      "description": "Email (unique per store).",
      "type": "string",
      "maxLength": 254,
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "phone": {
      "description": "Phone number, e.g. +60192233445.",
      "type": "string",
      "minLength": 3,
      "maxLength": 40
    },
    "birthdate": {
      "description": "yyyy-mm-dd.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "gender": {
      "description": "Gender.",
      "type": "string",
      "enum": [
        "male",
        "female"
      ]
    },
    "country_code": {
      "description": "Two-letter country code, e.g. MY.",
      "type": "string",
      "pattern": "^[A-Za-z]{2}$"
    },
    "code": {
      "description": "Your own customer code.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "groups": {
      "description": "Group names to assign, e.g. [\"VIP\"].",
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      }
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴easystore_update_customer(customer_id, first_name, last_name, email, phone, ...)

WRITE. Change fields of an existing customer; only the fields you pass change. Needs write_customers. PUT /api/3.0/customers/{id}.json.

Input Schema

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "EasyStore customer id."
    },
    "first_name": {
      "description": "First name.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "last_name": {
      "description": "Last name.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "email": {
      "description": "Email (unique per store).",
      "type": "string",
      "maxLength": 254,
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "phone": {
      "description": "Phone number, e.g. +60192233445.",
      "type": "string",
      "minLength": 3,
      "maxLength": 40
    },
    "birthdate": {
      "description": "yyyy-mm-dd.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "gender": {
      "description": "Gender.",
      "type": "string",
      "enum": [
        "male",
        "female"
      ]
    },
    "country_code": {
      "description": "Two-letter country code, e.g. MY.",
      "type": "string",
      "pattern": "^[A-Za-z]{2}$"
    },
    "code": {
      "description": "Your own customer code.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "groups": {
      "description": "Group names to assign, e.g. [\"VIP\"].",
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      }
    }
  },
  "required": [
    "customer_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded29 tools