Lightspeed Retail (X-Series) MCP by usefulapi

Read Lightspeed X-Series products, stock, sales, customers, stock orders; one-call sales reports.

我該用這個嗎

品質與安全性

A
說明品質
95%
結構描述完整度
88%
命名品質
68%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

發現項目(18)

  • LOWTool 'lightspeedxseries_list_registers' name length outside 3-30 range在 lightspeedxseries_list_registers 中
  • LOWTool 'lightspeedxseries_get_register_payments_summary' name length outside 3-30 range在 lightspeedxseries_get_register_payments_summary 中
  • LOWTool 'lightspeedxseries_get_user_sale_totals' name length outside 3-30 range在 lightspeedxseries_get_user_sale_totals 中
  • LOWTool 'lightspeedxseries_list_products' name length outside 3-30 range在 lightspeedxseries_list_products 中
  • LOWTool 'lightspeedxseries_search_products' name length outside 3-30 range在 lightspeedxseries_search_products 中
  • LOWTool 'lightspeedxseries_get_inventory_levels' name length outside 3-30 range在 lightspeedxseries_get_inventory_levels 中
  • LOWTool 'lightspeedxseries_list_suppliers' name length outside 3-30 range在 lightspeedxseries_list_suppliers 中
  • LOWTool 'lightspeedxseries_list_consignments' name length outside 3-30 range在 lightspeedxseries_list_consignments 中
  • LOWTool 'lightspeedxseries_get_consignment' name length outside 3-30 range在 lightspeedxseries_get_consignment 中
  • LOWTool 'lightspeedxseries_list_consignment_products' name length outside 3-30 range在 lightspeedxseries_list_consignment_products 中

根據工具定義與協定合規性的自動化分析。

上下文成本

~8,601Token(工具定義)
~2.3 KB典型回應大小
顯著的注意力影響(128k 上下文的 6.72%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "lightspeed-x-series": {
      "url": "https://lightspeed-x-series.usefulapi.io/mcp"
    }
  }
}

遠端端點

https://lightspeed-x-series.usefulapi.io/mcpstreamable-http

它能做什麼

工具清單

工具(30)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟢lightspeedxseries_get_retailer

The connected store: id, name, domain prefix, store URL, country, currency, time zone, tax-exclusive setting, loyalty and gift-card settings. Good first call (use the time zone to turn a local day into UTC for sales searches). GET /retailer.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_list_outlets(after, before, page_size, deleted)

List the store's outlets (locations): id, name, address, currency, time zone, default tax. Use the outlet id to filter sales, stock and stock orders. Paginate with next_after. GET /outlets.

輸入結構描述

{
  "type": "object",
  "properties": {
    "after": {
      "description": "Cursor: only records with a version number greater than this. Omit for the first page; then pass next_after from the previous call. Stop when data is empty.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "before": {
      "description": "Only records with a version number up to this (rarely needed).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Records per page (the vendor default applies when omitted; 50-100 keeps replies short).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "deleted": {
      "description": "true = include deleted records (default: active only).",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_get_outlet(outlet_id)

One outlet by id. GET /outlets/{outlet_id}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "outlet_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Outlet id (from list_outlets)."
    }
  },
  "required": [
    "outlet_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_list_registers(after, before, page_size, deleted)

List registers (tills): id, name, outlet_id, is_open, open/close times and invoice numbering. Paginate with next_after. GET /registers.

輸入結構描述

{
  "type": "object",
  "properties": {
    "after": {
      "description": "Cursor: only records with a version number greater than this. Omit for the first page; then pass next_after from the previous call. Stop when data is empty.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "before": {
      "description": "Only records with a version number up to this (rarely needed).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Records per page (the vendor default applies when omitted; 50-100 keeps replies short).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "deleted": {
      "description": "true = include deleted records (default: active only).",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_get_register_payments_summary(register_id)

Payment totals by payment type for one register since it was opened (the end-of-day / cash-up view). GET /registers/{register_id}/payments_summary.

輸入結構描述

{
  "type": "object",
  "properties": {
    "register_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Register id (from list_registers)."
    }
  },
  "required": [
    "register_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_list_taxes

List tax groups and their rates (id, name, is_default, rates). The vendor returns the whole list in one reply (no cursor). GET /taxes.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_list_users(after, before, page_size)

List the store's users (staff): id, username, display name, email, account type (cashier, manager, admin), enabled flag, restricted outlets. Paginate with next_after. GET /users.

輸入結構描述

{
  "type": "object",
  "properties": {
    "after": {
      "description": "Cursor: only records with a version number greater than this. Omit for the first page; then pass next_after from the previous call. Stop when data is empty.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "before": {
      "description": "Only records with a version number up to this (rarely needed).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Records per page (the vendor default applies when omitted; 50-100 keeps replies short).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_get_user_sale_totals(user_id)

Sales totals for one staff user, as the vendor computes them (no date filter; use sales_summary for a period). GET /users/{user_id}/sale_totals.

輸入結構描述

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "User id (from list_users)."
    }
  },
  "required": [
    "user_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_list_products(after, page_size, sku, includes)

List products (variants) in the catalog: id, family_id, sku, variant_name, prices (price_excluding_tax / price_including_tax), active flags, codes, suppliers, version. The product NAME lives on the product family: add includes=["families"] to get it. Paginate with next_after (stop when data is empty). With sku set, only that SKU is looked up and the other filters are ignored. For text/brand/supplier filters use search_products; for stock use get_inventory_levels. GET /products.

輸入結構描述

{
  "type": "object",
  "properties": {
    "after": {
      "description": "Cursor: only records with a version number greater than this. Omit for the first page; then pass next_after from the previous call. Stop when data is empty.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Records per page (the vendor default applies when omitted; 50-100 keeps replies short).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "sku": {
      "description": "Exact SKU (other filters are ignored when set).",
      "type": "string",
      "maxLength": 100
    },
    "includes": {
      "description": "Related records to include. 'families' is required together with brands, categories, suppliers, tags, variant_attributes or customizations.",
      "maxItems": 8,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "families",
          "brands",
          "categories",
          "suppliers",
          "tags",
          "variant_attributes",
          "customizations",
          "composite_components"
        ]
      }
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_get_product(product_id, includes)

One product (variant) by id, with its prices, codes, suppliers and outlet taxes. GET /products/{product_id}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Product id (from list_products)."
    },
    "includes": {
      "description": "Related records to include. 'families' is required together with brands, categories, suppliers, tags, variant_attributes or customizations.",
      "maxItems": 8,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "families",
          "brands",
          "categories",
          "suppliers",
          "tags",
          "variant_attributes",
          "customizations",
          "composite_components"
        ]
      }
    }
  },
  "required": [
    "product_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_search_products(sku, brand_id, supplier_id, tag_id, product_type_id, ...)

Filter products by SKU, brand, supplier, tag, product type or variant parent. Uses offset paging: pass next_offset to continue (null = last page). GET /search?type=products.

輸入結構描述

{
  "type": "object",
  "properties": {
    "sku": {
      "description": "SKU filter (sent in lowercase, as the vendor search requires).",
      "type": "string",
      "maxLength": 100
    },
    "brand_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Brand id."
    },
    "supplier_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Supplier id."
    },
    "tag_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Tag id."
    },
    "product_type_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Product type id."
    },
    "variant_parent_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Only the variants of this parent product."
    },
    "deleted": {
      "description": "true = include deleted records (default: active only).",
      "type": "boolean"
    },
    "page_size": {
      "description": "Records per page (max 1000).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "offset": {
      "description": "Offset for the next page: pass next_offset from the previous call (default 0).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_get_inventory_levels(outlet_ids, product_ids, root_product_ids, supplier_ids, to_be_procured_only, ...)

Stock on hand per product per outlet: product_id, location_id (= outlet id), current_inventory_level, reorder threshold/amount, quantity_to_procure, average cost, total cost, supplier. Filter by outlet_ids, product_ids (or root_product_ids for variant families), supplier_ids; to_be_procured_only keeps products with a positive quantity_to_procure (the vendor's re-order suggestion, which accounts for open orders); for a plain below-reorder-point list, compare current_inventory_level with reorder_threshold yourself. Offset paging: pass next_offset to continue (null = last page). Read-only even though the vendor takes the filter as a POST body. POST /inventory_levels.

輸入結構描述

{
  "type": "object",
  "properties": {
    "outlet_ids": {
      "description": "Only these outlets (the vendor calls them location_ids).",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[A-Za-z0-9_-]{1,64}$",
        "description": "Outlet id."
      }
    },
    "product_ids": {
      "description": "Only these products. Not together with root_product_ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[A-Za-z0-9_-]{1,64}$",
        "description": "Product id."
      }
    },
    "root_product_ids": {
      "description": "Only these variant families (use with group_variants). Not together with product_ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[A-Za-z0-9_-]{1,64}$",
        "description": "Root product id."
      }
    },
    "supplier_ids": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[A-Za-z0-9_-]{1,64}$",
        "description": "Supplier id."
      }
    },
    "to_be_procured_only": {
      "description": "true = only products with a positive quantity_to_procure (not the same as below the reorder point).",
      "type": "boolean"
    },
    "include_inactive": {
      "description": "true = include inactive products.",
      "type": "boolean"
    },
    "include_composites": {
      "type": "boolean"
    },
    "group_variants": {
      "description": "Aggregate variant families when filtering by root_product_ids.",
      "type": "boolean"
    },
    "sort_type": {
      "type": "string",
      "enum": [
        "total_count",
        "total_cost",
        "average_cost",
        "reorder_point",
        "reorder_amount",
        "product_name",
        "created_at"
      ]
    },
    "sort_direction": {
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    },
    "size": {
      "description": "Records per page (default 100, max 500 here).",
      "type": "integer",
      "minimum": 1,
      "maximum": 500
    },
    "offset": {
      "description": "Offset for the next page: pass next_offset from the previous call (default 0).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_list_brands(after, before, page_size, deleted)

List product brands (id, name). Paginate with next_after. GET /brands.

輸入結構描述

{
  "type": "object",
  "properties": {
    "after": {
      "description": "Cursor: only records with a version number greater than this. Omit for the first page; then pass next_after from the previous call. Stop when data is empty.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "before": {
      "description": "Only records with a version number up to this (rarely needed).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Records per page (the vendor default applies when omitted; 50-100 keeps replies short).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "deleted": {
      "description": "true = include deleted records (default: active only).",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_list_tags(after, before, page_size, deleted)

List product tags (id, name). Paginate with next_after. GET /tags.

輸入結構描述

{
  "type": "object",
  "properties": {
    "after": {
      "description": "Cursor: only records with a version number greater than this. Omit for the first page; then pass next_after from the previous call. Stop when data is empty.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "before": {
      "description": "Only records with a version number up to this (rarely needed).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Records per page (the vendor default applies when omitted; 50-100 keeps replies short).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "deleted": {
      "description": "true = include deleted records (default: active only).",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_list_suppliers(after, before, page_size, deleted)

List suppliers: id, name, default markup and contact details. Paginate with next_after. GET /suppliers.

輸入結構描述

{
  "type": "object",
  "properties": {
    "after": {
      "description": "Cursor: only records with a version number greater than this. Omit for the first page; then pass next_after from the previous call. Stop when data is empty.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "before": {
      "description": "Only records with a version number up to this (rarely needed).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Records per page (the vendor default applies when omitted; 50-100 keeps replies short).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "deleted": {
      "description": "true = include deleted records (default: active only).",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_list_consignments(type, status, outlet_id, after, before, ...)

List consignments: supplier stock orders (type SUPPLIER), transfers between outlets (OUTLET), stocktakes (STOCKTAKE) and returns (RETURN), with status (OPEN, SENT, DISPATCHED, RECEIVED, STOCKTAKE_*, CLOSED, CANCELLED), outlet, supplier, due and received dates, totals. Paginate with next_after. GET /consignments.

輸入結構描述

{
  "type": "object",
  "properties": {
    "type": {
      "description": "SUPPLIER = purchase / stock orders.",
      "type": "string",
      "enum": [
        "SUPPLIER",
        "OUTLET",
        "STOCKTAKE",
        "RETURN"
      ]
    },
    "status": {
      "type": "string",
      "enum": [
        "OPEN",
        "SENT",
        "DISPATCHED",
        "RECEIVED",
        "STOCKTAKE_IN_PROGRESS",
        "STOCKTAKE_SCHEDULED",
        "STOCKTAKE_IN_PROGRESS_PROCESSED",
        "STOCKTAKE_COMPLETE",
        "CLOSED",
        "CANCELLED"
      ]
    },
    "outlet_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Only consignments of this outlet."
    },
    "after": {
      "description": "Cursor: only records with a version number greater than this. Omit for the first page; then pass next_after from the previous call. Stop when data is empty.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "before": {
      "description": "Only records with a version number up to this (rarely needed).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Records per page (the vendor default applies when omitted; 50-100 keeps replies short).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_get_consignment(consignment_id)

One consignment (stock order, transfer, stocktake or return) by id. GET /consignments/{consignment_id}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "consignment_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Consignment id (from list_consignments)."
    }
  },
  "required": [
    "consignment_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_list_consignment_products(consignment_id, after, before, page_size)

The product lines of one consignment: product_id, SKU, ordered count, received quantity, cost. Paginate with next_after (stop when data is empty). GET /consignments/{consignment_id}/products.

輸入結構描述

{
  "type": "object",
  "properties": {
    "consignment_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Consignment id."
    },
    "after": {
      "description": "Cursor: only records with a version number greater than this. Omit for the first page; then pass next_after from the previous call. Stop when data is empty.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "before": {
      "description": "Only records with a version number up to this (rarely needed).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Records per page (the vendor default applies when omitted; 50-100 keeps replies short).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    }
  },
  "required": [
    "consignment_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_list_sales(after, before, page_size)

Sales in version order, oldest changes first: the way to sync everything that changed. It has NO date filter: for a period use search_sales or sales_summary. Each sale: id, date, invoice_number, state, customer_id, source (outlet, register, user), payments, line_items, totals. Paginate with next_after (stop when data is empty). GET /sales.

輸入結構描述

{
  "type": "object",
  "properties": {
    "after": {
      "description": "Cursor: only records with a version number greater than this. Omit for the first page; then pass next_after from the previous call. Stop when data is empty.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "before": {
      "description": "Only records with a version number up to this (rarely needed).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Records per page (the vendor default applies when omitted; 50-100 keeps replies short).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_get_sale(sale_id)

One sale by id with its line items, payments, taxes and totals. GET /sales/{sale_id}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "sale_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Sale id (from list_sales or search_sales)."
    }
  },
  "required": [
    "sale_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_search_sales(date_from, date_to, state, outlet_id, register_id, ...)

Find sales by date range (UTC), state, outlet, register, user, customer, payment type, product or invoice number. Uses offset paging: pass next_offset to continue (null = last page). Replies can be large: for totals over a period use sales_summary instead of paging through this. GET /search?type=sales.

輸入結構描述

{
  "type": "object",
  "properties": {
    "date_from": {
      "description": "Sales from this UTC time. YYYY-MM-DD means the start of that UTC day; or 2026-10-01T00:00:00Z. Convert local days to UTC with the retailer's time zone.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}Z)?$"
    },
    "date_to": {
      "description": "Sales up to this UTC time. YYYY-MM-DD means the END of that UTC day (23:59:59Z).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}Z)?$"
    },
    "state": {
      "description": "Sale state. On-account and layby sales are state closed (they differ by attributes).",
      "type": "string",
      "enum": [
        "parked",
        "pending",
        "voided",
        "closed"
      ]
    },
    "outlet_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Only sales at this outlet."
    },
    "register_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Only sales on this register."
    },
    "user_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Only sales by this staff user."
    },
    "customer_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Only sales to this customer."
    },
    "payment_type_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Only sales with this payment type (the payment type's config_id, shown as payments[].type.config_id in a sale)."
    },
    "product_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Only sales containing this product."
    },
    "invoice_number": {
      "type": "string",
      "maxLength": 60
    },
    "page_size": {
      "description": "Records per page (max 1000).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "offset": {
      "description": "Offset for the next page: pass next_offset from the previous call (default 0).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_sales_summary(date_from, date_to, state, outlet_id, register_id, ...)

Totals for a period computed here from up to max_pages x page_size sales, so a report needs ONE tool call instead of dozens: sale count and net / tax / gross (tax-inclusive) totals, plus breakdowns by state, UTC day, outlet and payment type name, and the top products by quantity. By default only closed sales are counted (states containing 'closed'); set counted_states to change that. Dates are UTC (convert local days with the retailer's time zone). If the reply says truncated, call again with offset = next_offset and add the figures up. Uses GET /search?type=sales.

輸入結構描述

{
  "type": "object",
  "properties": {
    "date_from": {
      "description": "Sales from this UTC time. YYYY-MM-DD means the start of that UTC day; or 2026-10-01T00:00:00Z. Convert local days to UTC with the retailer's time zone.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}Z)?$"
    },
    "date_to": {
      "description": "Sales up to this UTC time. YYYY-MM-DD means the END of that UTC day (23:59:59Z).",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}Z)?$"
    },
    "state": {
      "description": "Sale state. On-account and layby sales are state closed (they differ by attributes).",
      "type": "string",
      "enum": [
        "parked",
        "pending",
        "voided",
        "closed"
      ]
    },
    "outlet_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Only sales at this outlet."
    },
    "register_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Only sales on this register."
    },
    "user_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Only sales by this staff user."
    },
    "customer_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Only sales to this customer."
    },
    "payment_type_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Only sales with this payment type (the payment type's config_id, shown as payments[].type.config_id in a sale)."
    },
    "product_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Only sales containing this product."
    },
    "invoice_number": {
      "type": "string",
      "maxLength": 60
    },
    "counted_states": {
      "description": "Sale states that count towards the totals (exact, case-insensitive). Default: every state containing 'closed'.",
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 40
      }
    },
    "max_pages": {
      "description": "Pages of page_size sales to read (default 5, max 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 20
    },
    "page_size": {
      "description": "Sales per page (default 1000).",
      "type": "integer",
      "minimum": 100,
      "maximum": 1000
    },
    "offset": {
      "description": "Offset for the next page: pass next_offset from the previous call (default 0).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_list_customers(after, before, page_size, deleted)

List customers in version order: id, customer_code, name, email, phone, balance, loyalty_balance, year_to_date, customer group. To find one by name or email use search_customers. Paginate with next_after (stop when data is empty). GET /customers.

輸入結構描述

{
  "type": "object",
  "properties": {
    "after": {
      "description": "Cursor: only records with a version number greater than this. Omit for the first page; then pass next_after from the previous call. Stop when data is empty.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "before": {
      "description": "Only records with a version number up to this (rarely needed).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Records per page (the vendor default applies when omitted; 50-100 keeps replies short).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "deleted": {
      "description": "true = include deleted records (default: active only).",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_search_customers(email, first_name, last_name, company_name, phone, ...)

Find customers by email, first name, last name, company name, phone, mobile or customer code. Uses offset paging: pass next_offset to continue (null = last page). GET /search?type=customers.

輸入結構描述

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "maxLength": 255
    },
    "first_name": {
      "type": "string",
      "maxLength": 255
    },
    "last_name": {
      "type": "string",
      "maxLength": 255
    },
    "company_name": {
      "type": "string",
      "maxLength": 255
    },
    "phone": {
      "type": "string",
      "maxLength": 60
    },
    "mobile": {
      "type": "string",
      "maxLength": 60
    },
    "customer_code": {
      "type": "string",
      "maxLength": 100
    },
    "deleted": {
      "description": "true = include deleted records (default: active only).",
      "type": "boolean"
    },
    "page_size": {
      "description": "Records per page (max 1000).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "offset": {
      "description": "Offset for the next page: pass next_offset from the previous call (default 0).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_get_customer(customer_id)

One customer by id: contact details, addresses, customer group, balance, loyalty balance, year-to-date spend. GET /customers/{customer_id}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Customer id (from search_customers or list_customers)."
    }
  },
  "required": [
    "customer_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lightspeedxseries_list_customer_groups(after, before, page_size, deleted)

List customer groups (id, name). Use the id as customer_group_id when creating or updating a customer. Paginate with next_after. GET /customer_groups.

輸入結構描述

{
  "type": "object",
  "properties": {
    "after": {
      "description": "Cursor: only records with a version number greater than this. Omit for the first page; then pass next_after from the previous call. Stop when data is empty.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "before": {
      "description": "Only records with a version number up to this (rarely needed).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Records per page (the vendor default applies when omitted; 50-100 keeps replies short).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "deleted": {
      "description": "true = include deleted records (default: active only).",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡lightspeedxseries_create_customer(first_name, last_name, company_name, customer_code, customer_group_id, ...)

WRITE: create a new customer. Give at least a first name, last name or company name. Check search_customers first so you do not create a duplicate. POST /customers.

輸入結構描述

{
  "type": "object",
  "properties": {
    "first_name": {
      "description": "First name.",
      "type": "string",
      "maxLength": 255
    },
    "last_name": {
      "description": "Last name.",
      "type": "string",
      "maxLength": 255
    },
    "company_name": {
      "type": "string",
      "maxLength": 255
    },
    "customer_code": {
      "description": "Unique customer code (generated when omitted on create).",
      "type": "string",
      "maxLength": 100
    },
    "customer_group_id": {
      "description": "Customer group id (see list_customer_groups).",
      "type": "string",
      "maxLength": 64
    },
    "email": {
      "type": "string",
      "maxLength": 255,
      "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": {
      "type": "string",
      "maxLength": 60
    },
    "mobile": {
      "type": "string",
      "maxLength": 60
    },
    "note": {
      "type": "string",
      "maxLength": 2000
    },
    "date_of_birth": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}"
    },
    "do_not_email": {
      "type": "boolean"
    },
    "enable_promotional_sms": {
      "type": "boolean"
    },
    "enable_loyalty": {
      "type": "boolean"
    },
    "physical_address_1": {
      "type": "string",
      "maxLength": 255
    },
    "physical_address_2": {
      "type": "string",
      "maxLength": 255
    },
    "physical_suburb": {
      "type": "string",
      "maxLength": 255
    },
    "physical_city": {
      "type": "string",
      "maxLength": 255
    },
    "physical_state": {
      "type": "string",
      "maxLength": 255
    },
    "physical_postcode": {
      "type": "string",
      "maxLength": 30
    },
    "physical_country_id": {
      "description": "Country code such as US, CA, AU.",
      "type": "string",
      "maxLength": 10
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴lightspeedxseries_update_customer(customer_id, first_name, last_name, company_name, customer_code, ...)

WRITE: change fields of an existing customer. Only the fields you pass change: the tool first reads the customer and sends the vendor its full record with your changes applied (the vendor's update is a full PUT). Cannot delete a customer or change balances. Lightspeed offers no partial update for customers, so a change made by someone else in the moments between the tool's read and its write can be overwritten. PUT /customers/{customer_id}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Customer id."
    },
    "first_name": {
      "description": "First name.",
      "type": "string",
      "maxLength": 255
    },
    "last_name": {
      "description": "Last name.",
      "type": "string",
      "maxLength": 255
    },
    "company_name": {
      "type": "string",
      "maxLength": 255
    },
    "customer_code": {
      "description": "Unique customer code (generated when omitted on create).",
      "type": "string",
      "maxLength": 100
    },
    "customer_group_id": {
      "description": "Customer group id (see list_customer_groups).",
      "type": "string",
      "maxLength": 64
    },
    "email": {
      "type": "string",
      "maxLength": 255,
      "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": {
      "type": "string",
      "maxLength": 60
    },
    "mobile": {
      "type": "string",
      "maxLength": 60
    },
    "note": {
      "type": "string",
      "maxLength": 2000
    },
    "date_of_birth": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}"
    },
    "do_not_email": {
      "type": "boolean"
    },
    "enable_promotional_sms": {
      "type": "boolean"
    },
    "enable_loyalty": {
      "type": "boolean"
    },
    "physical_address_1": {
      "type": "string",
      "maxLength": 255
    },
    "physical_address_2": {
      "type": "string",
      "maxLength": 255
    },
    "physical_suburb": {
      "type": "string",
      "maxLength": 255
    },
    "physical_city": {
      "type": "string",
      "maxLength": 255
    },
    "physical_state": {
      "type": "string",
      "maxLength": 255
    },
    "physical_postcode": {
      "type": "string",
      "maxLength": 30
    },
    "physical_country_id": {
      "description": "Country code such as US, CA, AU.",
      "type": "string",
      "maxLength": 10
    }
  },
  "required": [
    "customer_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴lightspeedxseries_update_product_prices(product_id, price_excluding_tax, price_including_tax, loyalty_amount)

WRITE: set the selling price of one product (variant). Pass price_excluding_tax or price_including_tax as a decimal string such as "24.99" (set one; the store's tax setting decides which the till uses). Nothing else on the product changes. Read the product first and confirm the new price with the user. PATCH /products/{product_id}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Product id (from list_products)."
    },
    "price_excluding_tax": {
      "description": "New price before tax, e.g. \"24.99\".",
      "type": "string",
      "pattern": "^\\d{1,12}(\\.\\d{1,4})?$"
    },
    "price_including_tax": {
      "description": "New price including tax, e.g. \"29.99\".",
      "type": "string",
      "pattern": "^\\d{1,12}(\\.\\d{1,4})?$"
    },
    "loyalty_amount": {
      "description": "New loyalty amount.",
      "type": "string",
      "pattern": "^\\d{1,12}(\\.\\d{1,4})?$"
    }
  },
  "required": [
    "product_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴lightspeedxseries_set_product_stock(product_id, outlet_id, current_amount, reorder_point, reorder_amount)

WRITE: set the stock on hand (current_amount) and/or the reorder point and reorder amount of ONE product at ONE outlet. current_amount is the NEW TOTAL on hand, not a change: it overwrites the count, so sales made since you last read it are lost from the count. Read get_inventory_levels first and confirm the number with the user. Other outlets and all other product fields stay as they are. PATCH /products/{product_id} (outlet_inventories).

輸入結構描述

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Product id (from list_products)."
    },
    "outlet_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Outlet id (from list_outlets)."
    },
    "current_amount": {
      "description": "New stock on hand at this outlet (the total, not a delta).",
      "type": "number",
      "minimum": 0,
      "maximum": 1000000
    },
    "reorder_point": {
      "description": "Re-order when stock falls to this level.",
      "type": "number",
      "minimum": 0,
      "maximum": 1000000
    },
    "reorder_amount": {
      "description": "How many to re-order.",
      "type": "number",
      "minimum": 0,
      "maximum": 1000000
    }
  },
  "required": [
    "product_id",
    "outlet_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本30 個工具