# Lightspeed Retail (X-Series) MCP by usefulapi (remote · lightspeed-x-series.usefulapi.io)

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

- Trust score: 62/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-25

## Components

- remote · `lightspeed-x-series.usefulapi.io`: 62/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-lightspeed-x-series/lightspeed-x-series.md), [page](https://verifymcp.io/servers/io-usefulapi-lightspeed-x-series/lightspeed-x-series)

## Channel facts

- Endpoint: `https://lightspeed-x-series.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.4.3`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-25.

- **Endpoint Security**: 78/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly.
- **Schema Quality & AI Usability**: 78/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 5178 tokens (~172/item across 30 items; 30 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 7/100
  - Stability observed for 2 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 91/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 73% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 30 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 31 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the Lightspeed Retail (X-Series) MCP by usefulapi server?

Lightspeed Retail (X-Series) MCP by usefulapi is a hosted endpoint at https://lightspeed-x-series.usefulapi.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-usefulapi-lightspeed-x-series 'https://lightspeed-x-series.usefulapi.io/mcp'
```

### Cursor

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

### VS Code

```json
{
  "servers": {
    "io-usefulapi-lightspeed-x-series": {
      "type": "http",
      "url": "https://lightspeed-x-series.usefulapi.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-usefulapi-lightspeed-x-series]
url = "https://lightspeed-x-series.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-lightspeed-x-series": {
      "type": "remote",
      "url": "https://lightspeed-x-series.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-lightspeed-x-series --url 'https://lightspeed-x-series.usefulapi.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-lightspeed-x-series:
    url: "https://lightspeed-x-series.usefulapi.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-usefulapi-lightspeed-x-series": {
      "Transport": "http",
      "Url": "https://lightspeed-x-series.usefulapi.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-usefulapi-lightspeed-x-series -t streamable-http -u 'https://lightspeed-x-series.usefulapi.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-lightspeed-x-series": {
      "type": "http",
      "url": "https://lightspeed-x-series.usefulapi.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-25 (score 62, +1)

- [functional] Server version: 1.4.0 → 1.4.3

### 2026-10-24 (score 61, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [functional improvement] Stability: unverified → 0.03
- [functional] Server version: 1.3.0 → 1.4.0
- [functional] Server version: 1.2.0 → 1.3.0
- [functional] Server version: 1.0.0 → 1.2.0

### 2026-10-23 (score 61)

First indexed and scored.

## MCP tools (30)

### `lightspeedxseries_get_retailer` (~69 tokens)

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.

### `lightspeedxseries_list_outlets` (~162 tokens)

List outlets

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.

Input parameters:

- `after` (integer): 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.
- `before` (integer): Only records with a version number up to this (rarely needed).
- `deleted` (boolean): true = include deleted records (default: active only).
- `page_size` (integer): Records per page (the vendor default applies when omitted; 50-100 keeps replies short).

### `lightspeedxseries_get_outlet` (~42 tokens)

Get outlet

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

Input parameters:

- `outlet_id` (string, required): Outlet id (from list_outlets).

### `lightspeedxseries_list_registers` (~151 tokens)

List registers

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

Input parameters:

- `after` (integer): 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.
- `before` (integer): Only records with a version number up to this (rarely needed).
- `deleted` (boolean): true = include deleted records (default: active only).
- `page_size` (integer): Records per page (the vendor default applies when omitted; 50-100 keeps replies short).

### `lightspeedxseries_get_register_payments_summary` (~63 tokens)

Get register payments summary

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.

Input parameters:

- `register_id` (string, required): Register id (from list_registers).

### `lightspeedxseries_list_taxes` (~47 tokens)

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.

### `lightspeedxseries_list_users` (~141 tokens)

List users

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.

Input parameters:

- `after` (integer): 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.
- `before` (integer): Only records with a version number up to this (rarely needed).
- `page_size` (integer): Records per page (the vendor default applies when omitted; 50-100 keeps replies short).

### `lightspeedxseries_get_user_sale_totals` (~64 tokens)

Get user sale totals

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.

Input parameters:

- `user_id` (string, required): User id (from list_users).

### `lightspeedxseries_list_products` (~237 tokens)

List products

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.

Input parameters:

- `after` (integer): 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.
- `includes` (array): Related records to include. 'families' is required together with brands, categories, suppliers, tags, variant_attributes or customizations.
- `page_size` (integer): Records per page (the vendor default applies when omitted; 50-100 keeps replies short).
- `sku` (string): Exact SKU (other filters are ignored when set).

### `lightspeedxseries_get_product` (~85 tokens)

Get product

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

Input parameters:

- `includes` (array): Related records to include. 'families' is required together with brands, categories, suppliers, tags, variant_attributes or customizations.
- `product_id` (string, required): Product id (from list_products).

### `lightspeedxseries_search_products` (~186 tokens)

Search products

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.

Input parameters:

- `brand_id` (string): Brand id.
- `deleted` (boolean): true = include deleted records (default: active only).
- `offset` (integer): Offset for the next page: pass next_offset from the previous call (default 0).
- `page_size` (integer): Records per page (max 1000).
- `product_type_id` (string): Product type id.
- `sku` (string): SKU filter (sent in lowercase, as the vendor search requires).
- `supplier_id` (string): Supplier id.
- `tag_id` (string): Tag id.
- `variant_parent_id` (string): Only the variants of this parent product.

### `lightspeedxseries_get_inventory_levels` (~351 tokens)

Get inventory levels

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.

Input parameters:

- `group_variants` (boolean): Aggregate variant families when filtering by root_product_ids.
- `include_composites` (boolean)
- `include_inactive` (boolean): true = include inactive products.
- `offset` (integer): Offset for the next page: pass next_offset from the previous call (default 0).
- `outlet_ids` (array): Only these outlets (the vendor calls them location_ids).
- `product_ids` (array): Only these products. Not together with root_product_ids.
- `root_product_ids` (array): Only these variant families (use with group_variants). Not together with product_ids.
- `size` (integer): Records per page (default 100, max 500 here).
- `sort_direction` (string)
- `sort_type` (string)
- `supplier_ids` (array)
- `to_be_procured_only` (boolean): true = only products with a positive quantity_to_procure (not the same as below the reorder point).

### `lightspeedxseries_list_brands` (~134 tokens)

List brands

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

Input parameters:

- `after` (integer): 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.
- `before` (integer): Only records with a version number up to this (rarely needed).
- `deleted` (boolean): true = include deleted records (default: active only).
- `page_size` (integer): Records per page (the vendor default applies when omitted; 50-100 keeps replies short).

### `lightspeedxseries_list_tags` (~133 tokens)

List tags

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

Input parameters:

- `after` (integer): 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.
- `before` (integer): Only records with a version number up to this (rarely needed).
- `deleted` (boolean): true = include deleted records (default: active only).
- `page_size` (integer): Records per page (the vendor default applies when omitted; 50-100 keeps replies short).

### `lightspeedxseries_list_suppliers` (~140 tokens)

List suppliers

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

Input parameters:

- `after` (integer): 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.
- `before` (integer): Only records with a version number up to this (rarely needed).
- `deleted` (boolean): true = include deleted records (default: active only).
- `page_size` (integer): Records per page (the vendor default applies when omitted; 50-100 keeps replies short).

### `lightspeedxseries_list_consignments` (~216 tokens)

List stock orders (consignments)

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.

Input parameters:

- `after` (integer): 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.
- `before` (integer): Only records with a version number up to this (rarely needed).
- `outlet_id` (string): Only consignments of this outlet.
- `page_size` (integer): Records per page (the vendor default applies when omitted; 50-100 keeps replies short).
- `status` (string)
- `type` (string): SUPPLIER = purchase / stock orders.

### `lightspeedxseries_get_consignment` (~58 tokens)

Get consignment

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

Input parameters:

- `consignment_id` (string, required): Consignment id (from list_consignments).

### `lightspeedxseries_list_consignment_products` (~157 tokens)

List consignment products

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.

Input parameters:

- `after` (integer): 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.
- `before` (integer): Only records with a version number up to this (rarely needed).
- `consignment_id` (string, required): Consignment id.
- `page_size` (integer): Records per page (the vendor default applies when omitted; 50-100 keeps replies short).

### `lightspeedxseries_list_sales` (~178 tokens)

List sales (change feed)

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.

Input parameters:

- `after` (integer): 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.
- `before` (integer): Only records with a version number up to this (rarely needed).
- `page_size` (integer): Records per page (the vendor default applies when omitted; 50-100 keeps replies short).

### `lightspeedxseries_get_sale` (~51 tokens)

Get sale

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

Input parameters:

- `sale_id` (string, required): Sale id (from list_sales or search_sales).

### `lightspeedxseries_search_sales` (~335 tokens)

Search sales

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.

Input parameters:

- `customer_id` (string): Only sales to this customer.
- `date_from` (string): 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.
- `date_to` (string): Sales up to this UTC time. YYYY-MM-DD means the END of that UTC day (23:59:59Z).
- `invoice_number` (string)
- `offset` (integer): Offset for the next page: pass next_offset from the previous call (default 0).
- `outlet_id` (string): Only sales at this outlet.
- `page_size` (integer): Records per page (max 1000).
- `payment_type_id` (string): Only sales with this payment type (the payment type's config_id, shown as payments[].type.config_id in a sale).
- `product_id` (string): Only sales containing this product.
- `register_id` (string): Only sales on this register.
- `state` (string): Sale state. On-account and layby sales are state closed (they differ by attributes).
- `user_id` (string): Only sales by this staff user.

### `lightspeedxseries_sales_summary` (~445 tokens)

Sales summary (totals for a period)

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.

Input parameters:

- `counted_states` (array): Sale states that count towards the totals (exact, case-insensitive). Default: every state containing 'closed'.
- `customer_id` (string): Only sales to this customer.
- `date_from` (string): 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.
- `date_to` (string): Sales up to this UTC time. YYYY-MM-DD means the END of that UTC day (23:59:59Z).
- `invoice_number` (string)
- `max_pages` (integer): Pages of page_size sales to read (default 5, max 20).
- `offset` (integer): Offset for the next page: pass next_offset from the previous call (default 0).
- `outlet_id` (string): Only sales at this outlet.
- `page_size` (integer): Sales per page (default 1000).
- `payment_type_id` (string): Only sales with this payment type (the payment type's config_id, shown as payments[].type.config_id in a sale).
- `product_id` (string): Only sales containing this product.
- `register_id` (string): Only sales on this register.
- `state` (string): Sale state. On-account and layby sales are state closed (they differ by attributes).
- `user_id` (string): Only sales by this staff user.

### `lightspeedxseries_list_customers` (~173 tokens)

List customers

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.

Input parameters:

- `after` (integer): 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.
- `before` (integer): Only records with a version number up to this (rarely needed).
- `deleted` (boolean): true = include deleted records (default: active only).
- `page_size` (integer): Records per page (the vendor default applies when omitted; 50-100 keeps replies short).

### `lightspeedxseries_search_customers` (~167 tokens)

Search customers

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.

Input parameters:

- `company_name` (string)
- `customer_code` (string)
- `deleted` (boolean): true = include deleted records (default: active only).
- `email` (string)
- `first_name` (string)
- `last_name` (string)
- `mobile` (string)
- `offset` (integer): Offset for the next page: pass next_offset from the previous call (default 0).
- `page_size` (integer): Records per page (max 1000).
- `phone` (string)

### `lightspeedxseries_get_customer` (~61 tokens)

Get customer

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

Input parameters:

- `customer_id` (string, required): Customer id (from search_customers or list_customers).

### `lightspeedxseries_list_customer_groups` (~149 tokens)

List customer groups

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.

Input parameters:

- `after` (integer): 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.
- `before` (integer): Only records with a version number up to this (rarely needed).
- `deleted` (boolean): true = include deleted records (default: active only).
- `page_size` (integer): Records per page (the vendor default applies when omitted; 50-100 keeps replies short).

### `lightspeedxseries_create_customer` (~249 tokens)

Create customer

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.

Input parameters:

- `company_name` (string)
- `customer_code` (string): Unique customer code (generated when omitted on create).
- `customer_group_id` (string): Customer group id (see list_customer_groups).
- `date_of_birth` (string)
- `do_not_email` (boolean)
- `email` (string)
- `enable_loyalty` (boolean)
- `enable_promotional_sms` (boolean)
- `first_name` (string): First name.
- `last_name` (string): Last name.
- `mobile` (string)
- `note` (string)
- `phone` (string)
- `physical_address_1` (string)
- `physical_address_2` (string)
- `physical_city` (string)
- `physical_country_id` (string): Country code such as US, CA, AU.
- `physical_postcode` (string)
- `physical_state` (string)
- `physical_suburb` (string)

### `lightspeedxseries_update_customer` (~311 tokens)

Update customer

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}.

Input parameters:

- `company_name` (string)
- `customer_code` (string): Unique customer code (generated when omitted on create).
- `customer_group_id` (string): Customer group id (see list_customer_groups).
- `customer_id` (string, required): Customer id.
- `date_of_birth` (string)
- `do_not_email` (boolean)
- `email` (string)
- `enable_loyalty` (boolean)
- `enable_promotional_sms` (boolean)
- `first_name` (string): First name.
- `last_name` (string): Last name.
- `mobile` (string)
- `note` (string)
- `phone` (string)
- `physical_address_1` (string)
- `physical_address_2` (string)
- `physical_city` (string)
- `physical_country_id` (string): Country code such as US, CA, AU.
- `physical_postcode` (string)
- `physical_state` (string)
- `physical_suburb` (string)

### `lightspeedxseries_update_product_prices` (~157 tokens)

Update product prices

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}.

Input parameters:

- `loyalty_amount` (string): New loyalty amount.
- `price_excluding_tax` (string): New price before tax, e.g. "24.99".
- `price_including_tax` (string): New price including tax, e.g. "29.99".
- `product_id` (string, required): Product id (from list_products).

### `lightspeedxseries_set_product_stock` (~191 tokens)

Set product stock and reorder levels

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).

Input parameters:

- `current_amount` (number): New stock on hand at this outlet (the total, not a delta).
- `outlet_id` (string, required): Outlet id (from list_outlets).
- `product_id` (string, required): Product id (from list_products).
- `reorder_amount` (number): How many to re-order.
- `reorder_point` (number): Re-order when stock falls to this level.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-lightspeed-x-series/lightspeed-x-series#diagnostics

## Score history

- 2026-10-25: 62
- 2026-10-24: 61
- 2026-10-23: 61

## Common questions

### What is the Lightspeed Retail (X-Series) MCP by usefulapi server?

Lightspeed Retail (X-Series) MCP by usefulapi is listed in the public MCP registry as io.usefulapi/lightspeed-x-series. Read Lightspeed X-Series products, stock, sales, customers, stock orders; one-call sales reports. This page covers its hosted endpoint (https://lightspeed-x-series.usefulapi.io/mcp).

### Is the Lightspeed Retail (X-Series) MCP by usefulapi server safe to use?

Lightspeed Retail (X-Series) MCP by usefulapi scores 62 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Lightspeed Retail (X-Series) MCP by usefulapi server expose?

Lightspeed Retail (X-Series) MCP by usefulapi exposes 30 tools: lightspeedxseries_get_retailer, lightspeedxseries_list_outlets, lightspeedxseries_get_outlet, lightspeedxseries_list_registers, lightspeedxseries_get_register_payments_summary, and 25 more. Their descriptions and schemas cost roughly 4,903 tokens of context every time the server is loaded.

### Does the Lightspeed Retail (X-Series) MCP by usefulapi server require authentication?

Yes. Lightspeed Retail (X-Series) MCP by usefulapi asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the Lightspeed Retail (X-Series) MCP by usefulapi server still maintained?

Lightspeed Retail (X-Series) MCP by usefulapi is still listed as active in the MCP registry. We last reached this channel on 25 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://lightspeed-x-series.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/lightspeed-x-series/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-lightspeed-x-series/lightspeed-x-series.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-lightspeed-x-series/lightspeed-x-series.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-lightspeed-x-series/lightspeed-x-series
