# io.github.YawLabs/lemonsqueezy-mcp (npm · @yawlabs/lemonsqueezy-mcp)

LemonSqueezy MCP server for managing your store from AI assistants

- Trust score: 70/100 (medium)
- Change this week: −6
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-04

## Components

- npm · `@yawlabs/lemonsqueezy-mcp`: 70/100 (this document), [markdown](https://verifymcp.io/servers/yawlabs-lemonsqueezy-mcp/yawlabs-lemonsqueezy-mcp.md), [page](https://verifymcp.io/servers/yawlabs-lemonsqueezy-mcp/yawlabs-lemonsqueezy-mcp)

## Channel facts

- Registry: `npm`
- Package: `@yawlabs/lemonsqueezy-mcp`
- Version: `0.10.13`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-04.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - No production dependencies, so there is no dependency health to assess.
- **Provenance & Transparency**: 19/100
  - Repository check failed: no source repository is declared.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 13 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 83/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 6623 tokens (~101/item across 65 items; 64 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 30/100
  - Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add yawlabs-lemonsqueezy-mcp -- npx -y @yawlabs/lemonsqueezy-mcp
```

### Codex

```bash
codex mcp add yawlabs-lemonsqueezy-mcp -- npx -y @yawlabs/lemonsqueezy-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "yawlabs-lemonsqueezy-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@yawlabs/lemonsqueezy-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add yawlabs-lemonsqueezy-mcp --command npx --arg -y --arg @yawlabs/lemonsqueezy-mcp
```

### Hermes

```yaml
mcp_servers:
  yawlabs-lemonsqueezy-mcp:
    command: "npx"
    args: ["-y", "@yawlabs/lemonsqueezy-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "yawlabs-lemonsqueezy-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@yawlabs/lemonsqueezy-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-04 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 69, +19)

- [security improvement] Malware scan: unverified → pass
- [functional improvement] Stability: unverified → 0.23

### 2026-08-01 (score 50, −8)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 58, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 76, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 76)

First indexed and scored.

## MCP tools (64)

### `ls_get_user` (~22 tokens)

Get the authenticated user's information including name, email, and avatar.

### `ls_get_store` (~70 tokens)

Get a specific store by ID, including name, slug, currency, and sales statistics.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'products,discounts,license-keys,subscriptions,webhooks')
- `storeId` (string, required): The store ID

### `ls_list_stores` (~100 tokens)

List all stores for the authenticated user. Results are paginated — check meta.page in the response for currentPage, lastPage, and total.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'products,discounts,license-keys,subscriptions,webhooks')
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)

### `ls_get_customer` (~75 tokens)

Get a specific customer by ID, including name, email, city, country, MRR, total revenue, and customer portal URL.

Input parameters:

- `customerId` (string, required): The customer ID
- `include` (string): Comma-separated related resources to include (e.g. 'store,orders,subscriptions,license-keys')

### `ls_list_customers` (~122 tokens)

List all customers, optionally filtered by store or email. Results are paginated — check meta.page in the response for currentPage, lastPage, and total.

Input parameters:

- `email` (string): Filter by customer email
- `include` (string): Comma-separated related resources to include (e.g. 'store,orders,subscriptions,license-keys')
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)
- `storeId` (string): Filter by store ID

### `ls_create_customer` (~103 tokens)

Create a new customer in a store.

Input parameters:

- `city` (string): Customer's city
- `country` (string): Customer's country (ISO 3166-1 alpha-2 code, e.g. 'US')
- `email` (string, required): Customer's email address
- `name` (string, required): Customer's full name
- `region` (string): Customer's region/state
- `storeId` (string, required): The store ID to create the customer in

### `ls_update_customer` (~144 tokens)

Update an existing customer's name, email, city, region, country, or status. The only supported status value is 'archived' — use ls_archive_customer for the dedicated, audit-tagged path.

Input parameters:

- `city` (string): New city
- `country` (string): New country (ISO 3166-1 alpha-2 code)
- `customerId` (string, required): The customer ID to update
- `email` (string): New email
- `name` (string): New name
- `region` (string): New region/state
- `status` (string): Set to 'archived' to archive the customer. Equivalent to calling ls_archive_customer.

### `ls_archive_customer` (~43 tokens)

Archive a customer. Sets their status to 'archived'. This is reversible by updating their status back.

Input parameters:

- `customerId` (string, required): The customer ID to archive

### `ls_get_product` (~59 tokens)

Get a specific product by ID, including name, description, price, and status.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'store,variants')
- `productId` (string, required): The product ID

### `ls_list_products` (~102 tokens)

List all products, optionally filtered by store. Results are paginated — check meta.page in the response for currentPage, lastPage, and total.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'store,variants')
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)
- `storeId` (string): Filter by store ID

### `ls_get_variant` (~60 tokens)

Get a specific product variant by ID, including price, billing interval, and trial settings.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'product,files')
- `variantId` (string, required): The variant ID

### `ls_list_variants` (~162 tokens)

List all variants, optionally filtered by product. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. Cross-store note: when LEMONSQUEEZY_ALLOWED_STORE_IDS is set, this tool requires at least one of: productId. Even with that set, pair with a scoped LemonSqueezy API key for true cross-store enforcement -- the API key's visibility is the true boundary.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'product,files')
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)
- `productId` (string): Filter by product ID

### `ls_get_price` (~56 tokens)

Get a specific price by ID, including amount, currency, and billing interval.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'variant')
- `priceId` (string, required): The price ID

### `ls_list_prices` (~159 tokens)

List all prices, optionally filtered by variant. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. Cross-store note: when LEMONSQUEEZY_ALLOWED_STORE_IDS is set, this tool requires at least one of: variantId. Even with that set, pair with a scoped LemonSqueezy API key for true cross-store enforcement -- the API key's visibility is the true boundary.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'variant')
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)
- `variantId` (string): Filter by variant ID

### `ls_get_file` (~59 tokens)

Get a specific file by ID, including name, size, download URL, and associated variant.

Input parameters:

- `fileId` (string, required): The file ID
- `include` (string): Comma-separated related resources to include (e.g. 'variant')

### `ls_list_files` (~159 tokens)

List all files, optionally filtered by variant. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. Cross-store note: when LEMONSQUEEZY_ALLOWED_STORE_IDS is set, this tool requires at least one of: variantId. Even with that set, pair with a scoped LemonSqueezy API key for true cross-store enforcement -- the API key's visibility is the true boundary.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'variant')
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)
- `variantId` (string): Filter by variant ID

### `ls_get_order` (~77 tokens)

Get a specific order by ID, including status, total, currency, customer info, and payment details.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'store,customer,order-items,subscriptions,license-keys,discount-redemptions')
- `orderId` (string, required): The order ID

### `ls_list_orders` (~131 tokens)

List all orders, optionally filtered by store or user email. Results are paginated — check meta.page in the response for currentPage, lastPage, and total.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'store,customer,order-items,subscriptions,license-keys,discount-redemptions')
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)
- `storeId` (string): Filter by store ID
- `userEmail` (string): Filter by user email

### `ls_generate_order_invoice` (~139 tokens)

Generate a PDF invoice for an order. Returns a download URL for the invoice.

Input parameters:

- `address` (string): Customer address on the invoice
- `city` (string): Customer city
- `country` (string): Customer country
- `locale` (string): Invoice language locale (e.g. 'en', 'fr', 'de')
- `name` (string): Customer name on the invoice
- `notes` (string): Additional notes to include on the invoice
- `orderId` (string, required): The order ID
- `state` (string): Customer state/region
- `zipCode` (string): Customer ZIP/postal code

### `ls_refund_order` (~76 tokens)

Issue a refund for an order. This is irreversible — the refund amount is in cents (e.g. 1000 = $10.00).

Input parameters:

- `amount` (integer, required): Refund amount in cents (e.g. 1000 = $10.00)
- `orderId` (string, required): The order ID to refund

### `ls_get_order_item` (~66 tokens)

Get a specific order item by ID, including product name, variant, price, and quantity.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'order,product,variant')
- `orderItemId` (string, required): The order item ID

### `ls_list_order_items` (~193 tokens)

List all order items, optionally filtered by order or product. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. Cross-store note: when LEMONSQUEEZY_ALLOWED_STORE_IDS is set, this tool requires at least one of: orderId, productId, variantId. Even with that set, pair with a scoped LemonSqueezy API key for true cross-store enforcement -- the API key's visibility is the true boundary.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'order,product,variant')
- `orderId` (string): Filter by order ID
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)
- `productId`: Filter by product ID
- `variantId`: Filter by variant ID

### `ls_get_subscription` (~78 tokens)

Get a specific subscription by ID, including status, billing interval, renewal date, and customer info.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'store,customer,order,order-item,product,variant,subscription-items,subscription-invoices')
- `subscriptionId` (string, required): The subscription ID

### `ls_list_subscriptions` (~186 tokens)

List all subscriptions, optionally filtered by store, order, product, variant, or status. Results are paginated — check meta.page in the response for currentPage, lastPage, and total.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'store,customer,order,order-item,product,variant')
- `orderId`: Filter by order ID
- `orderItemId`: Filter by order item ID
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)
- `productId`: Filter by product ID
- `status` (string): Filter by subscription status
- `storeId` (string): Filter by store ID
- `userEmail` (string): Filter by user email
- `variantId`: Filter by variant ID

### `ls_update_subscription` (~218 tokens)

Update a subscription. Can change the variant (plan switch), pause/unpause, set billing anchor, or update invoice details. Use ls_cancel_subscription for cancellation.

Input parameters:

- `billingAnchor` (integer): Day of month (1-28) to anchor billing to
- `cancelled` (boolean): Set to false to un-cancel a subscription before it expires. To cancel, use ls_cancel_subscription instead.
- `disableProrations` (boolean): If true, disable prorations when changing plans
- `invoiceImmediately` (boolean): If true, invoice immediately when updating (default false for prorated changes)
- `pause` (string): Pause mode: 'void' (pause, skip billing), 'free' (pause, keep access free), or 'resume' to unpause
- `subscriptionId` (string, required): The subscription ID to update
- `trialEndsAt`: Set trial end date (ISO 8601 format). Set to null to end trial immediately.
- `variantId` (string): New variant ID for plan switching

### `ls_cancel_subscription` (~42 tokens)

Cancel a subscription. The subscription remains active until the end of the current billing period, then expires.

Input parameters:

- `subscriptionId` (string, required): The subscription ID to cancel

### `ls_get_subscription_invoice` (~65 tokens)

Get a specific subscription invoice by ID, including status, total, billing reason, and payment details.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'store,subscription')
- `subscriptionInvoiceId` (string, required): The subscription invoice ID

### `ls_list_subscription_invoices` (~142 tokens)

List all subscription invoices, optionally filtered by store, subscription, or status. Results are paginated — check meta.page in the response for currentPage, lastPage, and total.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'store,subscription')
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)
- `refunded` (boolean): Filter by refunded status
- `status` (string): Filter by invoice status
- `storeId` (string): Filter by store ID
- `subscriptionId`: Filter by subscription ID

### `ls_generate_subscription_invoice` (~139 tokens)

Generate a PDF invoice for a subscription invoice. Returns a download URL.

Input parameters:

- `address` (string): Customer address on the invoice
- `city` (string): Customer city
- `country` (string): Customer country
- `locale` (string): Invoice language locale (e.g. 'en', 'fr', 'de')
- `name` (string): Customer name on the invoice
- `notes` (string): Additional notes to include on the invoice
- `state` (string): Customer state/region
- `subscriptionInvoiceId` (string, required): The subscription invoice ID
- `zipCode` (string): Customer ZIP/postal code

### `ls_refund_subscription_invoice` (~80 tokens)

Issue a refund for a subscription invoice. This is irreversible — the refund amount is in cents (e.g. 1000 = $10.00).

Input parameters:

- `amount` (integer, required): Refund amount in cents (e.g. 1000 = $10.00)
- `subscriptionInvoiceId` (string, required): The subscription invoice ID to refund

### `ls_get_subscription_item` (~66 tokens)

Get a specific subscription item by ID, including quantity, pricing, and associated subscription.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'subscription,price,usage-records')
- `subscriptionItemId` (string, required): The subscription item ID

### `ls_list_subscription_items` (~182 tokens)

List all subscription items, optionally filtered by subscription or price. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. Cross-store note: when LEMONSQUEEZY_ALLOWED_STORE_IDS is set, this tool requires at least one of: subscriptionId, priceId. Even with that set, pair with a scoped LemonSqueezy API key for true cross-store enforcement -- the API key's visibility is the true boundary.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'subscription,price,usage-records')
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)
- `priceId`: Filter by price ID
- `subscriptionId` (string): Filter by subscription ID

### `ls_update_subscription_item` (~53 tokens)

Update a subscription item's quantity. Used for seat-based or quantity-based billing.

Input parameters:

- `quantity` (integer, required): New quantity for the subscription item
- `subscriptionItemId` (string, required): The subscription item ID to update

### `ls_get_subscription_item_usage` (~40 tokens)

Get the current usage for a metered subscription item within the current billing period.

Input parameters:

- `subscriptionItemId` (string, required): The subscription item ID

### `ls_get_usage_record` (~58 tokens)

Get a specific usage record by ID, including quantity and action type.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'subscription-item')
- `usageRecordId` (string, required): The usage record ID

### `ls_list_usage_records` (~166 tokens)

List all usage records, optionally filtered by subscription item. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. Cross-store note: when LEMONSQUEEZY_ALLOWED_STORE_IDS is set, this tool requires at least one of: subscriptionItemId. Even with that set, pair with a scoped LemonSqueezy API key for true cross-store enforcement -- the API key's visibility is the true boundary.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'subscription-item')
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)
- `subscriptionItemId` (string): Filter by subscription item ID

### `ls_create_usage_record` (~98 tokens)

Report usage for a metered subscription item. Use 'increment' action to add to the current usage, or 'set' to replace it.

Input parameters:

- `action` (string): How to apply the quantity: 'increment' (add to current, default) or 'set' (replace current)
- `quantity` (integer, required): The usage quantity to report
- `subscriptionItemId` (string, required): The subscription item ID to report usage for

### `ls_get_discount` (~65 tokens)

Get a specific discount by ID, including code, amount, type, and usage limits.

Input parameters:

- `discountId` (string, required): The discount ID
- `include` (string): Comma-separated related resources to include (e.g. 'store,variants,discount-redemptions')

### `ls_list_discounts` (~108 tokens)

List all discounts, optionally filtered by store. Results are paginated — check meta.page in the response for currentPage, lastPage, and total.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'store,variants,discount-redemptions')
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)
- `storeId` (string): Filter by store ID

### `ls_create_discount` (~308 tokens)

Create a new discount code. Supports percentage or fixed amount discounts with optional duration and usage limits.

Input parameters:

- `amount` (integer, required): Discount amount — in cents for 'fixed' type (e.g. 1000 = $10.00), or percentage for 'percent' type (e.g. 20 = 20%)
- `amountType` (string, required): Discount type: 'percent' or 'fixed'
- `code` (string, required): The discount code customers will enter (e.g. 'SAVE20')
- `duration` (string): How long the discount applies: 'once' (first payment only), 'repeating' (for N months), or 'forever' (default)
- `durationInMonths` (integer): Number of months the discount applies (required when duration is 'repeating')
- `expiresAt` (string): When the discount expires (ISO 8601 format)
- `isLimitedToProducts` (boolean): If true, the discount only applies to specific variants (set via variantIds)
- `maxRedemptions` (integer): Maximum number of times this discount can be redeemed (0 = unlimited)
- `name` (string, required): Internal name for the discount
- `startsAt` (string): When the discount becomes active (ISO 8601 format)
- `storeId` (string, required): The store ID to create the discount in
- `variantIds` (array): Array of variant IDs this discount applies to (requires isLimitedToProducts: true)

### `ls_delete_discount` (~32 tokens)

Permanently delete a discount. This is irreversible.

Input parameters:

- `discountId` (string, required): The discount ID to delete

### `ls_get_discount_redemption` (~64 tokens)

Get a specific discount redemption by ID, showing when and where a discount was used.

Input parameters:

- `discountRedemptionId` (string, required): The discount redemption ID
- `include` (string): Comma-separated related resources to include (e.g. 'discount,order')

### `ls_list_discount_redemptions` (~182 tokens)

List all discount redemptions, optionally filtered by discount or order. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. Cross-store note: when LEMONSQUEEZY_ALLOWED_STORE_IDS is set, this tool requires at least one of: discountId, orderId. Even with that set, pair with a scoped LemonSqueezy API key for true cross-store enforcement -- the API key's visibility is the true boundary.

Input parameters:

- `discountId` (string): Filter by discount ID
- `include` (string): Comma-separated related resources to include (e.g. 'discount,order')
- `orderId`: Filter by order ID
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)

### `ls_get_license_key` (~78 tokens)

Get a specific license key by ID, including key value, status, activation limit, and expiry date.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'store,customer,order,order-item,product,license-key-instances')
- `licenseKeyId` (string, required): The license key ID

### `ls_list_license_keys` (~153 tokens)

List all license keys, optionally filtered by store, order, or product. Results are paginated — check meta.page in the response for currentPage, lastPage, and total.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'store,customer,order,order-item,product,license-key-instances')
- `orderId`: Filter by order ID
- `orderItemId`: Filter by order item ID
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)
- `productId`: Filter by product ID
- `storeId` (string): Filter by store ID

### `ls_update_license_key` (~117 tokens)

Update a license key's activation limit, expiry date, or disabled status. Setting `disabled: true` revokes customer access and is treated as destructive (rate-limited and audited).

Input parameters:

- `activationLimit` (integer): Maximum number of activations allowed (0 = unlimited)
- `disabled` (boolean): Set to true to disable this license key
- `expiresAt`: Expiry date (ISO 8601 format). Set to null to remove expiry.
- `licenseKeyId` (string, required): The license key ID to update

### `ls_get_license_key_instance` (~66 tokens)

Get a specific license key instance (activation) by ID, including instance name and creation date.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'license-key')
- `licenseKeyInstanceId` (string, required): The license key instance ID

### `ls_list_license_key_instances` (~171 tokens)

List all license key instances (activations), optionally filtered by license key. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. Cross-store note: when LEMONSQUEEZY_ALLOWED_STORE_IDS is set, this tool requires at least one of: licenseKeyId. Even with that set, pair with a scoped LemonSqueezy API key for true cross-store enforcement -- the API key's visibility is the true boundary.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'license-key')
- `licenseKeyId` (string): Filter by license key ID
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)

### `ls_get_checkout` (~58 tokens)

Get a specific checkout by ID, including URL, expiry, and custom data.

Input parameters:

- `checkoutId` (string, required): The checkout ID
- `include` (string): Comma-separated related resources to include (e.g. 'store,variant')

### `ls_list_checkouts` (~116 tokens)

List all checkouts, optionally filtered by store or variant. Results are paginated — check meta.page in the response for currentPage, lastPage, and total.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'store,variant')
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)
- `storeId` (string): Filter by store ID
- `variantId`: Filter by variant ID

### `ls_create_checkout` (~233 tokens)

Create a new checkout URL for a product variant. Returns a URL where the customer can complete their purchase. Supports custom pricing, prefilled customer data, and checkout customization.

Input parameters:

- `billingAddressCountry` (string): Prefill billing country (ISO 3166-1 alpha-2)
- `billingAddressZip` (string): Prefill billing ZIP/postal code
- `customData` (object): Custom data object to attach to the order
- `customPrice` (integer): Custom price in cents (overrides the variant price)
- `discountCode` (string): Pre-apply a discount code
- `email` (string): Prefill customer email
- `enabledVariants` (array): Array of variant IDs to show on the checkout (for products with multiple variants)
- `expiresAt` (string): Checkout expiry date (ISO 8601 format)
- `name` (string): Prefill customer name
- `storeId` (string, required): The store ID
- `taxNumber` (string): Prefill tax/VAT number
- `variantId` (string, required): The variant ID for the product being purchased

### `ls_get_webhook` (~58 tokens)

Get a specific webhook by ID, including URL, events, and last sent timestamp.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'store')
- `webhookId` (string, required): The webhook ID

### `ls_list_webhooks` (~102 tokens)

List all webhooks, optionally filtered by store. Results are paginated — check meta.page in the response for currentPage, lastPage, and total.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'store')
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)
- `storeId` (string): Filter by store ID

### `ls_create_webhook` (~127 tokens)

Create a new webhook to receive event notifications. The signing secret is returned only once — save it immediately.

Input parameters:

- `events` (array, required): Event types to subscribe to (e.g. ['order_created', 'subscription_created', 'subscription_updated', 'subscription_cancelled', 'subscription_payment_success', 'subscription_payment_failed', 'license_k…
- `secret` (string, required): A signing secret for verifying webhook payloads
- `storeId` (string, required): The store ID
- `url` (string, required): The URL to send webhook events to (must be a valid http/https URL)

### `ls_update_webhook` (~116 tokens)

Update an existing webhook's URL, events, or secret. Setting `secret` rotates the signing secret and breaks signature verification on the receiver until they update their copy -- this is treated as destructive (rate-limited and audited).

Input parameters:

- `events` (array): Updated list of event types to subscribe to
- `secret` (string): New signing secret
- `url` (string): New URL to send webhook events to (must be a valid http/https URL)
- `webhookId` (string, required): The webhook ID to update

### `ls_delete_webhook` (~33 tokens)

Permanently delete a webhook. This is irreversible.

Input parameters:

- `webhookId` (string, required): The webhook ID to delete

### `ls_activate_license` (~68 tokens)

Activate a license key for an instance. Does not require an API key — uses the license key itself for auth.

Input parameters:

- `instanceName` (string, required): A name for this activation instance (e.g. machine name, user identifier)
- `licenseKey` (string, required): The license key to activate

### `ls_validate_license` (~61 tokens)

Validate a license key or specific instance. Does not require an API key — uses the license key itself for auth.

Input parameters:

- `instanceId` (string): Optional instance ID to validate a specific activation
- `licenseKey` (string, required): The license key to validate

### `ls_deactivate_license` (~56 tokens)

Deactivate a license key instance. Does not require an API key — uses the license key itself for auth.

Input parameters:

- `instanceId` (string, required): The instance ID to deactivate
- `licenseKey` (string, required): The license key

### `ls_get_affiliate` (~58 tokens)

Get a specific affiliate by ID, including commission rate, status, and earnings.

Input parameters:

- `affiliateId` (string, required): The affiliate ID
- `include` (string): Comma-separated related resources to include (e.g. 'store,user')

### `ls_list_affiliates` (~178 tokens)

List all affiliates for the authenticated user's stores, optionally filtered by user email. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. Cross-store note: when LEMONSQUEEZY_ALLOWED_STORE_IDS is set, this tool can still return affiliates tied to non-allowed stores -- the endpoint has no parent ID filter to scope by. Pair with a scoped LemonSqueezy API key for true cross-store enforcement -- the API key's visibility is the true boundary.

Input parameters:

- `include` (string): Comma-separated related resources to include (e.g. 'store,user')
- `pageNumber` (integer): Page number (1-indexed)
- `pageSize` (integer): Results per page (1-100)
- `userEmail` (string): Filter by affiliate's user email

### `ls_sink_events_list` (~117 tokens)

List webhook events the sink has received, optionally filtered. Use `since` (received_at timestamp, exclusive) to checkpoint. Requires the sink at LEMONSQUEEZY_SINK_URL with LEMONSQUEEZY_SINK_ADMIN_TOKEN.

Input parameters:

- `limit` (integer): Maximum number of events to return.
- `since` (integer): Exclusive lower bound on received_at (Unix ms). Pass the highest received_at you have to checkpoint.
- `type` (string): Filter by event_name (e.g. 'order_created').

### `ls_sink_event_mark_processed` (~47 tokens)

Mark a sink event as processed by your consumer. Idempotent.

Input parameters:

- `id` (integer, required): The sink event ID (positive integer, as returned by ls_sink_events_list).

### `ls_sink_stats` (~25 tokens)

Get sink totals: total events, unprocessed count, last-received timestamp.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/yawlabs-lemonsqueezy-mcp/yawlabs-lemonsqueezy-mcp#diagnostics

## Score history

- 2026-08-04: 70
- 2026-08-03: 69
- 2026-08-02: 69
- 2026-08-01: 50
- 2026-07-31: 58
- 2026-07-29: 76
- 2026-07-28: 76
- 2026-07-27: 76
- 2026-07-26: 76

## Links

- npm package: https://www.npmjs.com/package/@yawlabs/lemonsqueezy-mcp
- Socket report: https://socket.dev/npm/package/@yawlabs/lemonsqueezy-mcp
- Changelog RSS feed: https://verifymcp.io/servers/yawlabs-lemonsqueezy-mcp/yawlabs-lemonsqueezy-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/yawlabs-lemonsqueezy-mcp/yawlabs-lemonsqueezy-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/yawlabs-lemonsqueezy-mcp/yawlabs-lemonsqueezy-mcp
