Lightspeed Retail MCP server for AI agents

Live

BEARER TOKEN

RETAIL POS

CRM & Sales

Lightspeed Retail gives your agent retail operations across your outlets: look up products and inventory levels, read and create sales, manage customers, gift cards, and store credit, and track consignments and purchase orders.

  • Per-user credentials: each call uses the actual user's access token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Lightspeed Retail
agent · Acme Q3
Run
How many Classic Tee units do we have at each outlet?
S
lightspeedretail_list_product_inventory_records
121ms
Retail agent
Classic Tee has 46 units across 3 outlets: 22 downtown, 15 at the mall, and 9 at the airport store.
Sources: Lightspeed Retail, 3 outlets
lightspeedretail
3 outlets
18:29
Message Claude...

Tools your retail agent reaches for on Lightspeed Retail, scoped per user.

CALL ANY TOOL
113 tools for retail in Lightspeed Retail: manage products, brands, and price books, check inventory levels, read and create sales and returns, and manage customers, gift cards, store credit, consignments, and suppliers.
lightspeedretail_add_consignment_product
Add consignment product
Add a product to the given consignment. Returns a data object with cost, count, created_at, deleted_at, is_included, product_id, product_sku, received. Use list_consignment_products to browse or filter, update_consignment_product to change an existing one, delete_consignment_product to remove one instead when that fits better.
Parameters
Name
Type
Required
Description
consignment_id
string
Required
The consignment id. Example: 0af7b240-ab83-11e7-eddc-4023c64c85e5.
data
object
Required
The data. Fields include cost, count, created_at, deleted_at, is_included, product_id, product_sku, received, status, updated_at. Example: {"cost": "Example cost", "count": "Example count", "created_at": "2026-10-01T00:00:00Z", "deleted_at": "2026-10-01T00:00:00Z", "is_included": true, "product_id": "0af7b240-ab83-11e7-eddc-4023c64c85e5"}.
lightspeedretail_create_brand
Create brand
lightspeedretail_create_customer_address
Create customer address
lightspeedretail_create_gift_card_transaction
Create gift card transaction
lightspeedretail_create_sale
Create sale
lightspeedretail_create_supplier
Create supplier
lightspeedretail_delete_brand
Delete brand
lightspeedretail_delete_customer_address
Delete customer address
lightspeedretail_get_brand
Get brand
lightspeedretail_get_custom_field_values
Get custom field values
lightspeedretail_get_customer_store_credit_balance
Get customer store credit balance
lightspeedretail_get_price_book
Get price book
lightspeedretail_get_quote
Get quote
lightspeedretail_get_sale
Get sale
lightspeedretail_get_tax
Get tax
lightspeedretail_list_all_price_book_products
List all price book products
lightspeedretail_list_custom_fields
List custom fields
lightspeedretail_list_customer_groups
List customer groups
lightspeedretail_list_payment_types
List payment types
lightspeedretail_list_product_inventory_levels
List product inventory levels
lightspeedretail_list_promotion_products
List promotion products
lightspeedretail_list_purchase_orders
List purchase orders
lightspeedretail_list_serial_numbers
List serial numbers
lightspeedretail_list_suppliers
List suppliers
lightspeedretail_return_sale
Return sale
lightspeedretail_search_inventory_levels
Search inventory levels
lightspeedretail_set_custom_field_values
Set custom field values
lightspeedretail_update_brand
Update brand
lightspeedretail_update_customer_address
Update customer address
lightspeedretail_update_sale
Update sale

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Lightspeed Retail tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["lightspeedretail"], toolNames: [
    "lightspeedretail_list_products",
    "lightspeedretail_list_product_inventory_records",
    "lightspeedretail_create_stock_adjustments"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Check Classic Tee stock at every outlet" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["lightspeedretail"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Check Classic Tee stock at every outlet" }],
  tools,
});

// Execute the tool call with the user's vaulted Lightspeed Retail access token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["lightspeedretail"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Check Classic Tee stock at every outlet" }],
  tools,
});

// Tool call runs with the user's vaulted Lightspeed Retail access token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["lightspeedretail"] }, pageSize: 100,
});

const agent = new Agent({
  name: "retail_agent",
  model: "gemini-2.5-pro",
  instruction: "Lightspeed Retail tools scoped to this user",
  tools,
});

await agent.run("Check Classic Tee stock at every outlet");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Lightspeed Retail tool. Click to copy, paste into your agent, done.
Products and stock
Copy the prompt
Copied
How many Classic Tee units do we have at each outlet?
Copy the prompt
Copied
Create a product called Linen Shirt under the Harbor brand.
Copy the prompt
Copied
List the stock adjustments made this week.
Sales
Copy the prompt
Copied
List today's sales.
Copy the prompt
Copied
Start a return for sale 10458.
Copy the prompt
Copied
Show payment totals for the downtown register.
Customers and loyalty
Copy the prompt
Copied
Find the customer with email jordan@example.com.
Copy the prompt
Copied
What is Jordan's store credit balance?
Copy the prompt
Copied
Create a $50 gift card for Jordan.
SEE HOW AUTH WORKS
Each user connects their own Lightspeed Retail access token once, and Scalekit sends it with every call. Tokens stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Lightspeed Retail
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Lightspeed Retail
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Lightspeed Retail
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Lightspeed Retail
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other sales and commerce connectors.
GTM and RevOps Teams
CRM AI agent
Reads the Granola transcript after every call, extracts next steps and updates the HubSpot record, drafts the follow-up in Gmail, and confirms in Slack, all on the rep's own delegated OAuth.
GTM and RevOps Teams
Revenue forecast commentary
Pulls open pipeline from Salesforce and HubSpot, calculates coverage against quota, flags at-risk stages, posts commentary to Slack, and logs every snapshot to Google Sheets.
Test other agents
See the same per-user auth pattern across other sales and commerce connectors.
GTM
CRM AI agent
Turn each Granola call transcript into a HubSpot record update, a drafted Gmail follow-up, and a Slack recap.
GTM
Revenue forecast agent
Score pipeline coverage against quota across Salesforce and HubSpot, post forecast commentary to Slack, log snapshots to Sheets.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Lightspeed Retail access token looks fine in a demo. In production every sale and stock change looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Lightspeed Retail today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Lightspeed Retail as the user or through a shared access token?
As the user. Each user connects their own Lightspeed Retail access token once, and Scalekit sends it with every call. Audit logs attribute every sale, stock change, and customer update to that user, not a shared service account.
Where is the Lightspeed Retail access token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. To rotate it, the user reconnects with a new access token. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Lightspeed Retail?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example product and sales lookups without lightspeedretail_delete_product or lightspeedretail_delete_customer. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Lightspeed Retail access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Can the agent take sales and returns in Lightspeed Retail?
Only if you expose those tools. lightspeedretail_create_sale creates a sale, lightspeedretail_return_sale starts a return for a closed sale, and lightspeedretail_update_sale changes an existing one. Leave them out to keep the agent to reporting on products, sales, and inventory.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""lightspeedretail"": {
""url"": ""https://mcp.scalekit.com/lightspeedretail"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.lightspeedretail]
url = ""https://mcp.scalekit.com/lightspeedretail""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""lightspeedretail"": {
""url"": ""https://mcp.scalekit.com/lightspeedretail"",
""type"": ""http""
}
}
}