@yawlabs/lemonsqueezy-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LEMONSQUEEZY_API_KEY | No | LemonSqueezy API token. | |
| LEMONSQUEEZY_API_KEY_COMMAND | No | Command whose stdout produces the API key. Overrides LEMONSQUEEZY_API_KEY. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ls_get_userA | Get the authenticated user's information including name, email, and avatar. |
| ls_get_storeA | Get a specific store by ID, including name, slug, currency, and sales statistics. |
| ls_list_storesA | List all stores for the authenticated user. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. |
| ls_get_customerA | Get a specific customer by ID, including name, email, city, country, MRR, total revenue, and customer portal URL. |
| ls_list_customersA | List all customers, optionally filtered by store or email. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. |
| ls_create_customerA | Create a new customer in a store. |
| ls_update_customerA | 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. |
| ls_archive_customerA | Archive a customer. Sets their status to 'archived'. This is reversible by updating their status back. |
| ls_get_productA | Get a specific product by ID, including name, description, price, and status. |
| ls_list_productsA | List all products, optionally filtered by store. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. |
| ls_get_variantA | Get a specific product variant by ID, including price, billing interval, and trial settings. |
| ls_list_variantsA | 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. |
| ls_get_priceA | Get a specific price by ID, including amount, currency, and billing interval. |
| ls_list_pricesA | 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. |
| ls_get_fileA | Get a specific file by ID, including name, size, download URL, and associated variant. |
| ls_list_filesA | 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. |
| ls_get_orderA | Get a specific order by ID, including status, total, currency, customer info, and payment details. |
| ls_list_ordersA | List all orders, optionally filtered by store or user email. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. |
| ls_generate_order_invoiceA | Generate a PDF invoice for an order. Returns a download URL for the invoice. |
| ls_refund_orderA | Issue a refund for an order. This is irreversible — the refund amount is in cents (e.g. 1000 = $10.00). |
| ls_get_order_itemA | Get a specific order item by ID, including product name, variant, price, and quantity. |
| ls_list_order_itemsA | 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. |
| ls_get_subscriptionA | Get a specific subscription by ID, including status, billing interval, renewal date, and customer info. |
| ls_list_subscriptionsA | 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. |
| ls_update_subscriptionA | Update a subscription. Can change the variant (plan switch), pause/unpause, set billing anchor, or update invoice details. Use ls_cancel_subscription for cancellation. |
| ls_cancel_subscriptionA | Cancel a subscription. The subscription remains active until the end of the current billing period, then expires. |
| ls_get_subscription_invoiceA | Get a specific subscription invoice by ID, including status, total, billing reason, and payment details. |
| ls_list_subscription_invoicesA | 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. |
| ls_generate_subscription_invoiceB | Generate a PDF invoice for a subscription invoice. Returns a download URL. |
| ls_refund_subscription_invoiceA | Issue a refund for a subscription invoice. This is irreversible — the refund amount is in cents (e.g. 1000 = $10.00). |
| ls_get_subscription_itemA | Get a specific subscription item by ID, including quantity, pricing, and associated subscription. |
| ls_list_subscription_itemsA | 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. |
| ls_update_subscription_itemA | Update a subscription item's quantity. Used for seat-based or quantity-based billing. |
| ls_get_subscription_item_usageA | Get the current usage for a metered subscription item within the current billing period. |
| ls_get_usage_recordA | Get a specific usage record by ID, including quantity and action type. |
| ls_list_usage_recordsA | 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. |
| ls_create_usage_recordA | Report usage for a metered subscription item. Use 'increment' action to add to the current usage, or 'set' to replace it. |
| ls_get_discountA | Get a specific discount by ID, including code, amount, type, and usage limits. |
| ls_list_discountsA | List all discounts, optionally filtered by store. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. |
| ls_create_discountB | Create a new discount code. Supports percentage or fixed amount discounts with optional duration and usage limits. |
| ls_delete_discountA | Permanently delete a discount. This is irreversible. |
| ls_get_discount_redemptionA | Get a specific discount redemption by ID, showing when and where a discount was used. |
| ls_list_discount_redemptionsA | 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. |
| ls_get_license_keyA | Get a specific license key by ID, including key value, status, activation limit, and expiry date. |
| ls_list_license_keysA | 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. |
| ls_update_license_keyB | Update a license key's activation limit, expiry date, or disabled status. Setting |
| ls_get_license_key_instanceA | Get a specific license key instance (activation) by ID, including instance name and creation date. |
| ls_list_license_key_instancesA | 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. |
| ls_get_checkoutA | Get a specific checkout by ID, including URL, expiry, and custom data. |
| ls_list_checkoutsA | List all checkouts, optionally filtered by store or variant. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. |
| ls_create_checkoutA | 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. |
| ls_get_webhookA | Get a specific webhook by ID, including URL, events, and last sent timestamp. |
| ls_list_webhooksA | List all webhooks, optionally filtered by store. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. |
| ls_create_webhookA | Create a new webhook to receive event notifications. The signing secret is returned only once — save it immediately. |
| ls_update_webhookA | Update an existing webhook's URL, events, or secret. Setting |
| ls_delete_webhookA | Permanently delete a webhook. This is irreversible. |
| ls_activate_licenseA | Activate a license key for an instance. Does not require an API key — uses the license key itself for auth. |
| ls_validate_licenseA | Validate a license key or specific instance. Does not require an API key — uses the license key itself for auth. |
| ls_deactivate_licenseA | Deactivate a license key instance. Does not require an API key — uses the license key itself for auth. |
| ls_get_affiliateA | Get a specific affiliate by ID, including commission rate, status, and earnings. |
| ls_list_affiliatesA | 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. |
| ls_sink_events_listA | List webhook events the sink has received, optionally filtered. Use |
| ls_sink_event_mark_processedA | Mark a sink event as processed by your consumer. Idempotent. |
| ls_sink_statsA | Get sink totals: total events, unprocessed count, last-received timestamp. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Recent destructive-call audit log | The most recent destructive tool calls and their outcomes (rate limit, refund cap, etc.). Bounded ring buffer; resets on server restart. |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/YawLabs/lemonsqueezy-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server