Skip to main content
Glama
mcp-loyverse

mcp-loyverse

by Novigante

mcp-loyverse

npm License: Apache-2.0 Node.js MCP

A local-first, read-only MCP server for the Loyverse POS API that lets AI assistants query receipts, items, employees, customers, stores, and sales analytics — built for secure local use with Personal Access Tokens.

What & Why

mcp-loyverse bridges the Model Context Protocol (MCP) and the Loyverse POS API so that AI assistants like Claude can answer business questions about your point-of-sale data directly:

  • "What were today's total sales?" — answered in a single tool call

  • "Which was the best-selling item this week?" — aggregated automatically

  • "Show me the top employees by sales this month" — with name resolution

Instead of the AI making dozens of paginated API calls, high-level analytics tools handle pagination, filtering, and aggregation internally, returning concise summaries that are token-efficient.

Related MCP server: mcploy

Features

  • 15 MCP tools (1 system + 11 resource + 3 analytics)

  • Automatic pagination for analytics — no manual cursor handling

  • Date presets — today, yesterday, this_week, this_month, last_7_days, last_30_days

  • Timezone-aware date resolution (configurable, defaults to UTC)

  • Read-only — only GET requests, no data modification

  • Secure — token never appears in logs or error messages

  • Structured logging to stderr with configurable log level

  • Retry logic — exponential backoff on 429 (rate limit), single retry on 5xx

  • Safety limits — max 10,000 receipts per analytics query, 90-day max date range

Requirements

Quick Start

No cloning or building required — just add the server to your MCP client:

Claude Code (CLI)

claude mcp add loyverse \
  -e LOYVERSE_API_TOKEN=your_personal_access_token_here \
  -e DEFAULT_TIMEZONE=America/Mexico_City \
  -- npx mcp-loyverse

Claude Desktop

Add to your config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "loyverse": {
      "command": "npx",
      "args": ["mcp-loyverse"],
      "env": {
        "LOYVERSE_API_TOKEN": "your_personal_access_token_here",
        "DEFAULT_TIMEZONE": "America/Mexico_City"
      }
    }
  }
}

Other MCP clients

Any MCP-compatible client that supports stdio transport can connect. Use the command npx mcp-loyverse with the environment variables listed in Configuration.

Install from source

If you prefer to run from a local clone:

git clone https://github.com/novigante/mcp-loyverse.git
cd mcp-loyverse
npm install
npm run build

Then use node /path/to/mcp-loyverse/dist/index.js instead of npx mcp-loyverse in the examples above.

Verify

Ask your AI assistant: "Run the healthcheck tool" — it should return server status and configuration info.

Configuration

Variable

Required

Default

Description

LOYVERSE_API_TOKEN

Yes

—

Loyverse Personal Access Token

LOYVERSE_BASE_URL

No

https://api.loyverse.com/v1.0

API base URL

DEFAULT_TIMEZONE

No

UTC

Timezone for date presets (e.g. America/Mexico_City)

LOG_LEVEL

No

info

Log verbosity: debug, info, warn, error

MCP_READ_ONLY

No

true

Read-only mode (always true in v0.1)

Available Tools

System

Tool

Description

healthcheck

Server status, version, and configuration check

Resource (CRUD read-only)

Tool

Description

Key Inputs

list_receipts

Search receipts by date, store, or receipt numbers

period, from/to, store_id, receipt_numbers

get_receipt

Get full receipt details

receipt_number

list_items

List catalog items

items_ids, limit, cursor

get_item

Get item details by ID

item_id

list_employees

List employees (staff, waiters, cashiers)

employee_ids, limit, cursor

get_employee

Get employee details by ID

employee_id

list_customers

List customers, optionally filter by email

customer_ids, email, limit, cursor

get_customer

Get customer details by ID

customer_id

list_stores

List all stores

store_ids, show_deleted

get_store

Get store details by ID

store_id

get_merchant

Get merchant profile and currency settings

(none)

Analytics (high-level, auto-paginated)

Tool

Description

Key Inputs

sales_summary

Revenue, receipt count, average ticket, taxes, tips

period, from/to, store_id

top_selling_items

Top items ranked by quantity or sales amount

period, metric, limit

top_employees_by_sales

Top employees by sales or receipt count (resolves names)

period, metric, limit

Example Prompts

  • "What were today's total sales?"

  • "Show me the top 5 best-selling items this week"

  • "Which employee had the highest sales this month?"

  • "List all receipts from yesterday"

  • "Get the details of receipt number R-1234"

  • "What was the average ticket amount this week?"

  • "What currency does the merchant use?"

Architecture

src/
  config/         Configuration (env validation, secrets, logger)
  loyverse/       HTTP client, API error handling, resource clients
  domain/         Analytics: pure aggregation functions, receipt collector
  tools/          MCP tool definitions and handlers
    _shared/      Date range helpers, pagination, result builders
  mcp/            MCP server setup and tool registry
  index.ts        Entry point (stdio transport)

Each tool exports { definition, handler }. The toolRegistry.ts wires definitions into the MCP server. Analytics tools compose the receipt collector (auto-pagination) with pure aggregation functions.

Security

  • Read-only — only HTTP GET requests to the Loyverse API

  • Token protection — the API token never appears in logs, error messages, or tool responses

  • Secret redaction — structured log data is automatically sanitized

  • Local-first — runs on your machine via stdio transport; no external server or network exposure

Limitations (v0.1)

  • Read-only — no creating, updating, or deleting resources

  • PAT only — no OAuth flow; requires a Personal Access Token

  • stdio only — no HTTP/SSE transport (designed for local MCP clients)

  • No caching — every tool call fetches fresh data from the API

  • Analytics limit — max 10,000 receipts per query; max 90-day date range

Roadmap

  • Publish to npm (npx mcp-loyverse)

  • Write tools (create/update items, customers)

  • OAuth 2.0 authentication flow

  • HTTP/SSE transport for remote deployment

  • Response caching with TTL

  • Webhook support for real-time updates

  • Inventory and stock level tools

Testing

Unit tests

npm test                   # 194 tests (Vitest)
npm run test:watch         # Watch mode
npx vitest run tests/tools/salesSummary.test.ts  # Single file

Integration tests

End-to-end tests that exercise all 15 tools against the live Loyverse API via the MCP protocol (stdio transport). Validates connectivity, resource reads, analytics, cross-data consistency, error handling, and pagination.

Prerequisites: a .env file with a valid LOYVERSE_API_TOKEN.

cp .env.example .env
# Edit .env — set your real LOYVERSE_API_TOKEN
npm run build
node tests/integration/run-integration.mjs

The script connects as an MCP client, runs 40 tests across 6 phases, and writes raw results to tests/integration/results.json.

Phase

Tests

What it validates

1. Connectivity

2

Healthcheck, merchant auth

2. Resources

13

List/get for all 6 entities, filters

3. Analytics

7

Sales summary, top items, top employees

4. Cross-validation

5

Data consistency between tools

5. Error handling

9

Invalid IDs, missing params, server stability

6. Pagination

4

Cursor-based pagination per resource

See docs/integration-test-plan.md for detailed validation criteria.

Contributing

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/my-feature)

  3. Write tests first (TDD) — npm test

  4. Implement your changes

  5. Run integration tests locally (requires your own LOYVERSE_API_TOKEN)

  6. Verify: npm run build && npm test && npm run lint

  7. Submit a pull request — CI must pass before merge

Releasing

Releases are published to npm automatically via GitHub Actions. Only repository maintainers can create releases.

  1. Merge all desired changes to main via PR

  2. Update the version in package.json (npm version patch|minor|major) and merge via PR

  3. Create a GitHub Release with tag vX.Y.Z matching package.json

  4. The workflow builds, tests, and publishes to npm with provenance

License

Apache-2.0

Available Tools

15 tools
get_customerB
Read-only

Get full details of a specific customer by their ID

Inputs: customer_id (required).

get_employeeC
Read-only

Get full details of a specific employee by their ID

Inputs: employee_id (required).

get_itemB
Read-only

Get full details of a specific item by its ID

Inputs: item_id (required).

get_merchantA
Read-only

Get merchant profile including business name and currency settings (code and decimal places)

Inputs: no named parameters.

get_receiptB
Read-only

Get full details of a specific receipt by its receipt number

Inputs: receipt_number (required).

get_storeB
Read-only

Get full details of a specific store by its ID

Inputs: store_id (required).

healthcheckB
Read-only

Check server status and configuration

Inputs: no named parameters.

list_customersA
Read-only

List customers. Filter by IDs or email. Returns customer profiles with visit history and spending totals.

Inputs: email, limit, cursor, customer_ids.

list_employeesA
Read-only

List employees (waiters, cashiers, staff). Use to resolve employee names from IDs found in receipts.

Inputs: limit, cursor, employee_ids.

list_itemsA
Read-only

List items from the catalog. Useful to look up item names, prices, SKUs, and categories.

Inputs: limit, cursor, items_ids, show_deleted.

list_receiptsA
Read-only

Search receipts (tickets) by date range, store, or receipt numbers. Returns receipt summaries with totals, line items, and payment info. Use date presets (today, yesterday, this_week, this_month) or explicit from/to range.

Inputs: to, from, limit, cursor, +3 more.

list_storesB
Read-only

List all stores. The stores endpoint does not support pagination — all stores are returned at once.

Inputs: store_ids, show_deleted.

sales_summaryA
Read-only

Get a sales summary for a given period: total revenue, receipt count, average ticket, discounts, taxes, and tips. Use presets (today, yesterday, this_week, this_month) or explicit date range.

Inputs: to, from, period, store_id.

top_employees_by_salesA
Read-only

Get the top employees (waiters/cashiers) by sales amount or receipt count. Answers: Which waiter sold the most this month?

Inputs: to, from, limit, metric, +2 more.

top_selling_itemsA
Read-only

Get the top-selling items for a period, ranked by quantity sold or by sales amount. Answers: What was the best-selling dish today?

Inputs: to, from, limit, metric, +2 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 15 tools

    Disambiguation5/5

    Each core entity (employees, receipts, items, customers, stores) has a clearly distinct list vs. get pair. Analytics tools such as sales_summary, top_selling_items, and top_employees_by_sales target different questions and do not overlap with the catalog or receipt lookup tools.

    Naming Consistency4/5

    The set predominantly follows a consistent snake_case verb_noun convention, e.g. list_employees, get_receipt, top_selling_items. The main deviation is healthcheck, which would be more consistent as health_check, but it is a minor and readable exception.

    Tool Count5/5

    With 15 tools, the server is comfortably scoped for a POS data and reporting integration. Each major entity gets list/get coverage, while analytics and healthcheck add clear value without bloating the surface.

    Completeness4/5

    The tool set covers list/get access for employees, receipts, items, customers, stores, and merchant profile, plus useful sales and ranking analytics. It lacks create/update/delete operations, but for a read-only reporting MCP server the surface is nearly complete.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      C
      maintenance
      Local MCP server for TOCOnline accounting/invoicing API that enables AI assistants to manage customers, products, sales documents, and call arbitrary endpoints via natural language after OAuth login.
      67
      1
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Exposes the Loyverse API as MCP tools to manage stores, products, inventory, customers, receipts, and more from AI assistants.
      54
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      MCP server for the Clover POS REST API that gives AI assistants read and safe-write access to a merchant's sales, inventory, orders, and customers.
      56
      1
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Read-only MCP server that lets local AI agents query bank transactions stored in a local SQLite database, with tools for accounts, transaction search, spending summaries, recurring charges, trends, themes, subscriptions, and store health.
      2
      MIT