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.
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
- Deletes or cancels2Claude Code: deny: see these tools
- Can't be undone1Claude Code: ask: see these tools
- Changes things1Claude Code: ask: see these tools
- Only reads13Claude Code: allow: see these tools
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/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "list_purchase_orders" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "list_purchase_orders" says "list": a word for reading.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "list_purchase_orders" says "list": a word for reading.
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/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .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.