MCP Server

loyverse

io.usefulapi/loyverse
Commerce & Retail Finance & Investing Public & reachable MCP 2026-07-28

What this MCP does

Reads Loyverse POS sales, receipts, shifts, products, customers, payments and inventory, and updates stock and customer records.

loyverse_get_customer
Get one customer
Fetch a single customer by id, with visits, total spent and points balance. Loyverse: GET /customers/{customer_id}.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['customer_id'], 'properties': {'customer_id': {'type': 'string', 'minLength': 1, 'description': 'The customer id (UUID).'}}}
loyverse_get_item
Get one item
Fetch a single catalog item by id, with its variants. Loyverse: GET /items/{item_id}.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['item_id'], 'properties': {'item_id': {'type': 'string', 'minLength': 1, 'description': 'The item id (UUID).'}}}
loyverse_get_merchant
Get the merchant
Fetch the merchant account this token belongs to — business name, email, country and currency. A cheap way to confirm the token works. Loyverse: GET /merchant/.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
loyverse_get_receipt
Get one receipt
Fetch a single receipt by its receipt number (e.g. 2-1008), with line items, modifiers, discounts, taxes and payments. Loyverse: GET /receipts/{receipt_number}.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['receipt_number'], 'properties': {'receipt_number': {'type': 'string', 'minLength': 1, 'description': 'The receipt number, e.g. 2-1008.'}}}
loyverse_list_categories
List categories
List item categories. Loyverse: GET /categories.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 250, 'minimum': 1, 'description': 'Page size, 1-250 (Loyverse default 50).'}, 'cursor': {'type': 'string', 'description': "The `cursor` from the previous page's response. Omit for the first page."}, 'show_deleted': {'type': 'boolean', 'description': 'Also return soft-deleted records (they carry deleted_at).'}, 'categories_ids': {'type': 'string', 'description': 'Comma-separated list of category ids to return.'}}}
loyverse_list_customers
List customers
List loyalty customers, newest first, with visits, total spent and points balance. Filter by email or ids. Loyverse: GET /customers.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'email': {'type': 'string', 'description': 'Only the customer with this email.'}, 'limit': {'type': 'integer', 'maximum': 250, 'minimum': 1, 'description': 'Page size, 1-250 (Loyverse default 50).'}, 'cursor': {'type': 'string', 'description': "The `cursor` from the previous page's response. Omit for the first page."}, 'customer_ids': {'type': 'string', 'description': 'Comma-separated list of customer ids to return.'}, 'created_at_max': {'type': 'string', 'description': 'Only records created at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'created_at_min': {'type': 'string', 'description': 'Only records created at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_max': {'type': 'string', 'description': 'Only records updated at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_min': {'type': 'string', 'description': 'Only records updated at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}}}
loyverse_list_discounts
List discounts
List configured discounts (fixed/variable percent or amount, discount-by-points) and where they apply. Loyverse: GET /discounts.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'discount_ids': {'type': 'string', 'description': 'Comma-separated list of discount ids to return.'}, 'show_deleted': {'type': 'boolean', 'description': 'Also return soft-deleted records (they carry deleted_at).'}, 'created_at_max': {'type': 'string', 'description': 'Only records created at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'created_at_min': {'type': 'string', 'description': 'Only records created at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_max': {'type': 'string', 'description': 'Only records updated at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_min': {'type': 'string', 'description': 'Only records updated at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}}}
loyverse_list_employees
List employees
List employees, with the stores each can access and whether they are the owner. Loyverse: GET /employees.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 250, 'minimum': 1, 'description': 'Page size, 1-250 (Loyverse default 50).'}, 'cursor': {'type': 'string', 'description': "The `cursor` from the previous page's response. Omit for the first page."}, 'employee_ids': {'type': 'string', 'description': 'Comma-separated list of employee ids to return.'}, 'show_deleted': {'type': 'boolean', 'description': 'Also return soft-deleted records (they carry deleted_at).'}, 'created_at_max': {'type': 'string', 'description': 'Only records created at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'created_at_min': {'type': 'string', 'description': 'Only records created at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_max': {'type': 'string', 'description': 'Only records updated at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_min': {'type': 'string', 'description': 'Only records updated at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}}}
loyverse_list_inventory
List inventory levels
List current stock (`in_stock`) per variant per store. Filter by stores and/or variants — the answer to 'what is running low?'. Loyverse: GET /inventory.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 250, 'minimum': 1, 'description': 'Page size, 1-250 (Loyverse default 50).'}, 'cursor': {'type': 'string', 'description': "The `cursor` from the previous page's response. Omit for the first page."}, 'store_ids': {'type': 'string', 'description': 'Comma-separated store ids.'}, 'variant_ids': {'type': 'string', 'description': 'Comma-separated variant ids.'}, 'updated_at_max': {'type': 'string', 'description': 'Only levels updated at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_min': {'type': 'string', 'description': 'Only levels updated at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}}}
loyverse_list_items
List items
List catalog items with their variants (SKU, barcode, price, cost, per-store pricing), category, taxes and modifiers. Loyverse: GET /items.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 250, 'minimum': 1, 'description': 'Page size, 1-250 (Loyverse default 50).'}, 'cursor': {'type': 'string', 'description': "The `cursor` from the previous page's response. Omit for the first page."}, 'items_ids': {'type': 'string', 'description': 'Comma-separated list of item ids to return.'}, 'show_deleted': {'type': 'boolean', 'description': 'Also return soft-deleted records (they carry deleted_at).'}, 'created_at_max': {'type': 'string', 'description': 'Only records created at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'created_at_min': {'type': 'string', 'description': 'Only records created at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_max': {'type': 'string', 'description': 'Only records updated at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_min': {'type': 'string', 'description': 'Only records updated at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}}}
loyverse_list_payment_types
List payment types
List the payment types (cash, card, integrated terminals…) and the stores where each is available. Receipt payments reference these ids. Loyverse: GET /payment_types.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'show_deleted': {'type': 'boolean', 'description': 'Also return soft-deleted records (they carry deleted_at).'}, 'created_at_max': {'type': 'string', 'description': 'Only records created at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'created_at_min': {'type': 'string', 'description': 'Only records created at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_max': {'type': 'string', 'description': 'Only records updated at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_min': {'type': 'string', 'description': 'Only records updated at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'payment_type_ids': {'type': 'string', 'description': 'Comma-separated list of payment type ids to return.'}}}
loyverse_list_receipts
List receipts
List sales and refund receipts, newest first, with line items, payments, discounts and taxes. Filter by store, time range or receipt numbers — the core of any sales question. Loyverse: GET /receipts.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 250, 'minimum': 1, 'description': 'Page size, 1-250 (Loyverse default 50).'}, 'order': {'type': 'string', 'description': 'Only receipts with this order name/number.'}, 'cursor': {'type': 'string', 'description': "The `cursor` from the previous page's response. Omit for the first page."}, 'source': {'type': 'string', 'description': 'Only receipts from this source (e.g. an app name).'}, 'store_id': {'type': 'string', 'description': 'Only receipts from this store.'}, 'created_at_max': {'type': 'string', 'description': 'Only records created at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'created_at_min': {'type': 'string', 'description': 'Only records created at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_max': {'type': 'string', 'description': 'Only records updated at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_min': {'type': 'string', 'description': 'Only records updated at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'receipt_numbers': {'type': 'string', 'description': 'Comma-separated receipt numbers to return, e.g. 2-1008,2-1009.'}, 'since_receipt_number': {'type': 'string', 'description': 'Only receipts created at or after the receipt with this number.'}, 'before_receipt_number': {'type': 'string', 'description': 'Only receipts created up to the receipt with this number.'}}}
loyverse_list_shifts
List shifts
List cash-register shifts with their cash, gross/net sales, refunds, discounts, taxes, per-payment-type totals and pay-in/pay-out movements — the end-of-day view. Loyverse: GET /shifts.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 250, 'minimum': 1, 'description': 'Page size, 1-250 (Loyverse default 50).'}, 'cursor': {'type': 'string', 'description': "The `cursor` from the previous page's response. Omit for the first page."}, 'store_ids': {'type': 'string', 'description': 'Comma-separated list of store ids to return.'}, 'created_at_max': {'type': 'string', 'description': 'Only shifts opened at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'created_at_min': {'type': 'string', 'description': 'Only shifts opened at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}}}
loyverse_list_stores
List stores
List the merchant's stores (locations) with their addresses. Store ids are what the receipt, shift and inventory filters take. Loyverse: GET /stores.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'store_ids': {'type': 'string', 'description': 'Comma-separated list of store ids to return.'}, 'show_deleted': {'type': 'boolean', 'description': 'Also return soft-deleted records (they carry deleted_at).'}, 'created_at_max': {'type': 'string', 'description': 'Only records created at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'created_at_min': {'type': 'string', 'description': 'Only records created at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_max': {'type': 'string', 'description': 'Only records updated at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_min': {'type': 'string', 'description': 'Only records updated at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}}}
loyverse_list_suppliers
List suppliers
List suppliers with their contact details. Loyverse: GET /suppliers/.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 250, 'minimum': 1, 'description': 'Page size, 1-250 (Loyverse default 50).'}, 'cursor': {'type': 'string', 'description': "The `cursor` from the previous page's response. Omit for the first page."}, 'show_deleted': {'type': 'boolean', 'description': 'Also return soft-deleted records (they carry deleted_at).'}, 'suppliers_ids': {'type': 'string', 'description': 'Comma-separated list of supplier ids to return.'}}}
loyverse_list_taxes
List taxes
List taxes with their rate, whether they are INCLUDED in or ADDED to the price, and the stores they apply in. Loyverse: GET /taxes.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'tax_ids': {'type': 'string', 'description': 'Comma-separated list of tax ids to return.'}, 'show_deleted': {'type': 'boolean', 'description': 'Also return soft-deleted records (they carry deleted_at).'}, 'created_at_max': {'type': 'string', 'description': 'Only records created at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'created_at_min': {'type': 'string', 'description': 'Only records created at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_max': {'type': 'string', 'description': 'Only records updated at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_min': {'type': 'string', 'description': 'Only records updated at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}}}
loyverse_list_variants
List item variants
List item variants — the sellable SKUs — optionally for given items or one SKU. Variant ids are what inventory levels are keyed on. Loyverse: GET /variants.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'sku': {'type': 'string', 'description': 'Only the variant with this SKU.'}, 'limit': {'type': 'integer', 'maximum': 250, 'minimum': 1, 'description': 'Page size, 1-250 (Loyverse default 50).'}, 'cursor': {'type': 'string', 'description': "The `cursor` from the previous page's response. Omit for the first page."}, 'items_ids': {'type': 'string', 'description': 'Comma-separated item ids whose variants to return.'}, 'show_deleted': {'type': 'boolean', 'description': 'Also return soft-deleted records (they carry deleted_at).'}, 'variants_ids': {'type': 'string', 'description': 'Comma-separated list of variant ids to return.'}, 'created_at_max': {'type': 'string', 'description': 'Only records created at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'created_at_min': {'type': 'string', 'description': 'Only records created at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_max': {'type': 'string', 'description': 'Only records updated at or before this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}, 'updated_at_min': {'type': 'string', 'description': 'Only records updated at or after this time (ISO 8601 UTC, e.g. 2026-03-30T18:30:00.000Z).'}}}
loyverse_set_inventory_levels
Set inventory levels
Set the ABSOLUTE stock (`stock_after`) of one or more variants at given stores — e.g. after a stock count. This overwrites the current level rather than adding to it; read the current levels with loyverse_list_inventory first so they can be restored. Loyverse: POST /inventory.
Destructive
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['inventory_levels'], 'properties': {'inventory_levels': {'type': 'array', 'items': {'type': 'object', 'required': ['variant_id', 'store_id', 'stock_after'], 'properties': {'store_id': {'type': 'string', 'minLength': 1, 'description': 'The store id.'}, 'variant_id': {'type': 'string', 'minLength': 1, 'description': 'The item variant id.'}, 'stock_after': {'type': 'number', 'description': 'The new stock level for that variant at that store.'}}}, 'maxItems': 250, 'minItems': 1, 'description': 'The stock levels to set.'}}}
loyverse_upsert_category
Create or update a category
Create an item category, or rename/recolor one by passing its `id`. Loyverse: POST /categories.
Destructive
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name'], 'properties': {'id': {'type': 'string', 'description': 'Existing category id to update. Omit to create.'}, 'name': {'type': 'string', 'maxLength': 64, 'minLength': 1, 'description': 'The category name (required).'}, 'color': {'enum': ['GREY', 'RED', 'PINK', 'ORANGE', 'GREEN', 'BLUE', 'PURPLE'], 'type': 'string', 'description': 'Display color on the POS.'}}}
loyverse_upsert_customer
Create or update a customer
Create a loyalty customer, or update one by passing its `id`. Loyverse does not document whether omitted fields survive an update, so on update fetch the customer first and send the full record. Loyverse: POST /customers.
Destructive
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name'], 'properties': {'id': {'type': 'string', 'description': 'Existing customer id to update. Omit to create.'}, 'city': {'type': 'string', 'maxLength': 64, 'description': 'City, town or village.'}, 'name': {'type': 'string', 'maxLength': 64, 'minLength': 1, 'description': "The customer's name (required)."}, 'note': {'type': 'string', 'maxLength': 255, 'description': 'A note about the customer.'}, 'email': {'type': 'string', 'maxLength': 100, 'description': 'Email address.'}, 'region': {'type': 'string', 'maxLength': 64, 'description': 'Province, state or prefecture.'}, 'address': {'type': 'string', 'maxLength': 192, 'description': 'Street address.'}, 'postal_code': {'type': 'string', 'maxLength': 20, 'description': 'Postal / ZIP code.'}, 'country_code': {'type': 'string', 'pattern': '^[A-Za-z]{2}$', 'description': 'Two-letter ISO 3166-1 alpha-2 country code, e.g. US.'}, 'phone_number': {'type': 'string', 'maxLength': 15, 'description': 'Phone number.'}, 'customer_code': {'type': 'string', 'maxLength': 40, 'description': 'Your own customer code (e.g. a loyalty card number).'}}}
loyverse_upsert_supplier
Create or update a supplier
Create a supplier, or update one by passing its `id`. Loyverse does not document whether omitted fields survive an update, so on update send the full record. Loyverse: POST /suppliers/.
Destructive
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name'], 'properties': {'id': {'type': 'string', 'description': 'Existing supplier id to update. Omit to create.'}, 'city': {'type': 'string', 'maxLength': 64, 'description': 'City, town or village.'}, 'name': {'type': 'string', 'maxLength': 64, 'minLength': 1, 'description': 'The supplier company name (required).'}, 'note': {'type': 'string', 'maxLength': 500, 'description': 'A note about the supplier.'}, 'email': {'type': 'string', 'maxLength': 100, 'description': 'Email address.'}, 'region': {'type': 'string', 'maxLength': 64, 'description': 'Province, state or prefecture.'}, 'contact': {'type': 'string', 'maxLength': 64, 'description': "Contact person's name."}, 'website': {'type': 'string', 'description': 'Website URL.'}, 'address_1': {'type': 'string', 'maxLength': 192, 'description': 'Address line 1.'}, 'address_2': {'type': 'string', 'maxLength': 192, 'description': 'Address line 2.'}, 'postal_code': {'type': 'string', 'maxLength': 20, 'description': 'Postal / ZIP code.'}, 'country_code': {'type': 'string', 'pattern': '^[A-Za-z]{2}$', 'description': 'Two-letter ISO 3166-1 alpha-2 country code, e.g. US.'}, 'phone_number': {'type': 'string', 'maxLength': 15, 'description': 'Phone number.'}}}
Added
loyverse_set_inventory_levels
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_upsert_supplier
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_upsert_category
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_upsert_customer
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_list_suppliers
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_list_taxes
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_list_discounts
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_list_payment_types
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_get_customer
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_list_customers
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_list_inventory
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_list_categories
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_list_variants
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_get_item
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_list_items
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_list_shifts
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_get_receipt
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_list_receipts
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_list_employees
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_list_stores
Oct. 2, 2026, 2:40 a.m.
Added
loyverse_get_merchant
Oct. 2, 2026, 2:40 a.m.