Skip to content

Lightspeed Retail (R-Series) MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.11.3 · published by io.usefulapi

Read Lightspeed R-Series items, stock, sales, customers and POs; create customers and set stock.

Deletes · 2Final · 1Changes · 1

17 tools: 2 can delete or cancel things, 1 do something that can't be undone, 1 change things and 13 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http lightspeed-r-series https://lightspeed-r-series.usefulapi.io/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "list_purchase_orders" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The name "list_purchase_orders" says "list": a word for reading.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

17 tools

Deletes or cancels 2Claude Code: deny
  • update_itemChange fields of an existing item: description, default cost, SKUs, category.No findings

    Why it is in this group

    • The name "update_item" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Change fields of an existing item: description, default cost, SKUs, category. Only the fields you pass are changed. Prices and stock are not changed here (use update_stock for quantities). PUT /Account/{accountID}/Item/{itemID}.json.

    Annotations the server declares

    • title: Update an item
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
  • update_stockCHANGES STOCK COUNTS: sets (does not add to) the quantity on hand of one item in one shop to `qoh`, by updating the item's ItemShop record.No findings

    Why it is in this group

    • The name "update_stock" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    CHANGES STOCK COUNTS: sets (does not add to) the quantity on hand of one item in one shop to `qoh`, by updating the item's ItemShop record. Use for correcting a few items; for many items use an inventory count in Lightspeed. Identify the shop by shop_id, or by item_shop_id from get_item's ItemShops. Not for shopID 0 (the all-shops summary). PUT /Account/{accountID}/Item/{itemID}.json with ItemShops.

    Annotations the server declares

    • title: Set stock level
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
Can't be undone 1Claude Code: ask
  • list_purchase_ordersPurchase orders to vendors: orderID, vendorID, shopID, orderedDate, arrivalDate, receivedDate, complete, totalQuantity, shipCost.1 finding

    Why it is in this group

    • The name "list_purchase_orders" says "list": a word for reading.
    • The description's first verb is "purchase": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "list_purchase_orders" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The name "list_purchase_orders" says "list": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Purchase orders to vendors: orderID, vendorID, shopID, orderedDate, arrivalDate, receivedDate, complete, totalQuantity, shipCost. GET /Account/{accountID}/Order.json.

    Annotations the server declares

    • title: List purchase orders
    • readOnlyHint: true
Changes things 1Claude Code: ask
  • create_customerCreate a new customer, optionally with a primary email and one phone number (stored in the customer's Contact).No findings

    Why it is in this group

    • The name "create_customer" says "create": a word for a change.
    Description, as the server wrote it
    Create a new customer, optionally with a primary email and one phone number (stored in the customer's Contact). Give at least a first name, last name or company. Returns the new customer with its customerID. POST /Account/{accountID}/Customer.json.

    Annotations the server declares

    • title: Create a customer
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
Only reads 13Claude Code: allow
  • get_accountThe connected Lightspeed Retail (R-Series) account: id, name, status, employee count/limit, default and purchasing currencies.No findings

    Why it is in this group

    • The name "get_account" says "get": a word for reading.
    Description, as the server wrote it
    The connected Lightspeed Retail (R-Series) account: id, name, status, employee count/limit, default and purchasing currencies. Good first call. GET /Account/{accountID}.json.

    Annotations the server declares

    • title: Get account
    • readOnlyHint: true
  • get_customerOne customer by customerID with Contact (emails, phones, addresses), customer type and notes.No findings

    Why it is in this group

    • The name "get_customer" says "get": a word for reading.
    Description, as the server wrote it
    One customer by customerID with Contact (emails, phones, addresses), customer type and notes. GET /Account/{accountID}/Customer/{customerID}.json.

    Annotations the server declares

    • title: Get a customer
    • readOnlyHint: true
  • get_itemOne item by itemID with its prices, per-shop stock (ItemShops), category and other related records.No findings

    Why it is in this group

    • The name "get_item" says "get": a word for reading.
    Description, as the server wrote it
    One item by itemID with its prices, per-shop stock (ItemShops), category and other related records. GET /Account/{accountID}/Item/{itemID}.json.

    Annotations the server declares

    • title: Get an item
    • readOnlyHint: true
  • get_purchase_orderOne purchase order by orderID with its lines (OrderLines: itemID, quantity, numReceived, price), vendor and shop.No findings

    Why it is in this group

    • The name "get_purchase_order" says "get": a word for reading.
    Description, as the server wrote it
    One purchase order by orderID with its lines (OrderLines: itemID, quantity, numReceived, price), vendor and shop. GET /Account/{accountID}/Order/{orderID}.json.

    Annotations the server declares

    • title: Get a purchase order
    • readOnlyHint: true
  • get_saleOne sale by saleID with its line items (SaleLines with Item), payments (SalePayments with PaymentType) and customer.No findings

    Why it is in this group

    • The name "get_sale" says "get": a word for reading.
    Description, as the server wrote it
    One sale by saleID with its line items (SaleLines with Item), payments (SalePayments with PaymentType) and customer. GET /Account/{accountID}/Sale/{saleID}.json.

    Annotations the server declares

    • title: Get a sale
    • readOnlyHint: true
  • list_categoriesItem categories (hierarchical): categoryID, name, fullPathName, parentID, nodeDepth.No findings

    Why it is in this group

    • The name "list_categories" says "list": a word for reading.
    Description, as the server wrote it
    Item categories (hierarchical): categoryID, name, fullPathName, parentID, nodeDepth. GET /Account/{accountID}/Category.json.

    Annotations the server declares

    • title: List categories
    • readOnlyHint: true
  • list_customersSearch customers by name, company or email: customerID, firstName, lastName, company, customerTypeID, createTime.No findings

    Why it is in this group

    • The name "list_customers" says "list": a word for reading.
    Description, as the server wrote it
    Search customers by name, company or email: customerID, firstName, lastName, company, customerTypeID, createTime. Email search loads the Contact relation (emails, phones, addresses). Paginate with next_url. GET /Account/{accountID}/Customer.json.

    Annotations the server declares

    • title: List customers
    • readOnlyHint: true
  • list_employeesEmployees: employeeID, firstName, lastName, lockOut, archived, employeeRoleID, limitToShopID.No findings

    Why it is in this group

    • The name "list_employees" says "list": a word for reading.
    Description, as the server wrote it
    Employees: employeeID, firstName, lastName, lockOut, archived, employeeRoleID, limitToShopID. Use employeeID to filter sales. GET /Account/{accountID}/Employee.json.

    Annotations the server declares

    • title: List employees
    • readOnlyHint: true
  • list_inventoryStock levels per item per shop (ItemShop records): qoh (quantity on hand), sellable, backorder, reorderPoint, reorderLevel, costs and values.No findings

    Why it is in this group

    • The name "list_inventory" says "list": a word for reading.
    Description, as the server wrote it
    Stock levels per item per shop (ItemShop records): qoh (quantity on hand), sellable, backorder, reorderPoint, reorderLevel, costs and values. shopID 0 is the all-shops summary. Paginate with next_url. GET /Account/{accountID}/ItemShop.json.

    Annotations the server declares

    • title: List inventory levels
    • readOnlyHint: true
  • list_itemsSearch the product catalog.No findings

    Why it is in this group

    • The name "list_items" says "list": a word for reading.
    Description, as the server wrote it
    Search the product catalog. Each item has itemID, description, SKUs (systemSku, customSku, upc, ean, manufacturerSku), defaultCost, categoryID and its Prices (price levels). Set include_stock to add per-shop quantities (ItemShops; shopID 0 = all shops). Paginate with next_url. GET /Account/{accountID}/Item.json.

    Annotations the server declares

    • title: List items
    • readOnlyHint: true
  • list_salesSales history: saleID, completed/voided flags, completeTime, totals (calcSubtotal, calcTax1/2, total, balance), customerID, employeeID, shopID, registerID.No findings

    Why it is in this group

    • The name "list_sales" says "list": a word for reading.
    Description, as the server wrote it
    Sales history: saleID, completed/voided flags, completeTime, totals (calcSubtotal, calcTax1/2, total, balance), customerID, employeeID, shopID, registerID. Filter by a date range on completeTime (default) or timeStamp, shop, customer, employee. Set include_lines for SaleLines (items sold). Paginate with next_url. GET /Account/{accountID}/Sale.json.

    Annotations the server declares

    • title: List sales
    • readOnlyHint: true
  • list_shopsList the account's shops (store locations): shopID, name, time zone, archived flag.No findings

    Why it is in this group

    • The name "list_shops" says "list": a word for reading.
    Description, as the server wrote it
    List the account's shops (store locations): shopID, name, time zone, archived flag. Use shopID to filter sales, inventory and purchase orders. GET /Account/{accountID}/Shop.json.

    Annotations the server declares

    • title: List shops
    • readOnlyHint: true
  • list_vendorsSuppliers: vendorID, name, accountNumber, archived.No findings

    Why it is in this group

    • The name "list_vendors" says "list": a word for reading.
    Description, as the server wrote it
    Suppliers: vendorID, name, accountNumber, archived. GET /Account/{accountID}/Vendor.json.

    Annotations the server declares

    • title: List vendors
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.11.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http lightspeed-r-series https://lightspeed-r-series.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__lightspeed-r-series__get_account",
      "mcp__lightspeed-r-series__list_shops",
      "mcp__lightspeed-r-series__list_items",
      "mcp__lightspeed-r-series__get_item",
      "mcp__lightspeed-r-series__list_inventory",
      "mcp__lightspeed-r-series__list_categories",
      "mcp__lightspeed-r-series__list_sales",
      "mcp__lightspeed-r-series__get_sale",
      "mcp__lightspeed-r-series__list_customers",
      "mcp__lightspeed-r-series__get_customer",
      "mcp__lightspeed-r-series__list_vendors",
      "mcp__lightspeed-r-series__get_purchase_order",
      "mcp__lightspeed-r-series__list_employees"
    ],
    "ask": [
      "mcp__lightspeed-r-series__list_purchase_orders",
      "mcp__lightspeed-r-series__create_customer"
    ],
    "deny": [
      "mcp__lightspeed-r-series__update_item",
      "mcp__lightspeed-r-series__update_stock"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as lightspeed-r-series. Review it before you use it.