Lemon Squeezy MCP by usefulapi
MCP server for Lemon Squeezy — stores, products, orders, subscriptions, license keys.
Should I use this
Quality & Safety
Findings (4)
- LOWin lemonsqueezy_list_subscriptions
- LOWin lemonsqueezy_list_subscription_invoices
- LOWin lemonsqueezy_update_subscription
- LOWin lemonsqueezy_cancel_customer_subscription
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"lemonsqueezy": {
"url": "https://lemonsqueezy.usefulapi.io/mcp"
}
}
}Remote endpoints
https://lemonsqueezy.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (18)
🟢lemonsqueezy_get_user
Get the currently authenticated user/account behind the API key. Good first call to confirm auth. API: GET /users/me.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢lemonsqueezy_list_stores(page_number, page_size, include)
List all stores in the account. API: GET /stores.
Input Schema
{
"type": "object",
"properties": {
"page_number": {
"description": "Page number (JSON:API page[number]). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (JSON:API page[size], max 100). Default 10.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"include": {
"description": "Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢lemonsqueezy_get_store(store_id, include)
Get a single store by id. API: GET /stores/{id}.
Input Schema
{
"type": "object",
"properties": {
"store_id": {
"type": "string",
"description": "Store id (required)."
},
"include": {
"description": "Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.",
"type": "string"
}
},
"required": [
"store_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢lemonsqueezy_list_products(store_id, page_number, page_size, include)
List products, optionally filtered to one store. API: GET /products (filter[store_id]).
Input Schema
{
"type": "object",
"properties": {
"store_id": {
"description": "Filter to a single store id.",
"type": "string"
},
"page_number": {
"description": "Page number (JSON:API page[number]). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (JSON:API page[size], max 100). Default 10.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"include": {
"description": "Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢lemonsqueezy_list_variants(product_id, page_number, page_size, include)
List variants (price/plan tiers), optionally filtered to one product. API: GET /variants (filter[product_id]).
Input Schema
{
"type": "object",
"properties": {
"product_id": {
"description": "Filter to a single product id.",
"type": "string"
},
"page_number": {
"description": "Page number (JSON:API page[number]). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (JSON:API page[size], max 100). Default 10.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"include": {
"description": "Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢lemonsqueezy_list_prices(variant_id, page_number, page_size, include)
List price models, optionally filtered to one variant. API: GET /prices (filter[variant_id]).
Input Schema
{
"type": "object",
"properties": {
"variant_id": {
"description": "Filter to a single variant id.",
"type": "string"
},
"page_number": {
"description": "Page number (JSON:API page[number]). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (JSON:API page[size], max 100). Default 10.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"include": {
"description": "Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢lemonsqueezy_list_customers(store_id, email, page_number, page_size, include)
List customers, optionally filtered by store and/or email. API: GET /customers (filter[store_id], filter[email]).
Input Schema
{
"type": "object",
"properties": {
"store_id": {
"description": "Filter to a single store id.",
"type": "string"
},
"email": {
"description": "Filter to a customer email.",
"type": "string"
},
"page_number": {
"description": "Page number (JSON:API page[number]). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (JSON:API page[size], max 100). Default 10.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"include": {
"description": "Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢lemonsqueezy_get_customer(customer_id, include)
Get a single customer by id. API: GET /customers/{id}.
Input Schema
{
"type": "object",
"properties": {
"customer_id": {
"type": "string",
"description": "Customer id (required)."
},
"include": {
"description": "Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.",
"type": "string"
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢lemonsqueezy_list_orders(store_id, user_email, page_number, page_size, include)
List orders, optionally filtered by store and/or buyer email. API: GET /orders (filter[store_id], filter[user_email]).
Input Schema
{
"type": "object",
"properties": {
"store_id": {
"description": "Filter to a single store id.",
"type": "string"
},
"user_email": {
"description": "Filter to a buyer email.",
"type": "string"
},
"page_number": {
"description": "Page number (JSON:API page[number]). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (JSON:API page[size], max 100). Default 10.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"include": {
"description": "Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢lemonsqueezy_get_order(order_id, include)
Get a single order by id. API: GET /orders/{id}.
Input Schema
{
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "Order id (required)."
},
"include": {
"description": "Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.",
"type": "string"
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢lemonsqueezy_list_subscriptions(store_id, status, product_id, variant_id, customer_id, ...)
List subscriptions with rich filtering by store, status, product, variant, customer, or buyer email. API: GET /subscriptions (filter[store_id], filter[status], filter[product_id], filter[variant_id], filter[customer_id], filter[user_email]).
Input Schema
{
"type": "object",
"properties": {
"store_id": {
"description": "Filter to a single store id.",
"type": "string"
},
"status": {
"description": "Filter by subscription status.",
"type": "string",
"enum": [
"on_trial",
"active",
"paused",
"past_due",
"unpaid",
"cancelled",
"expired"
]
},
"product_id": {
"description": "Filter to a single product id.",
"type": "string"
},
"variant_id": {
"description": "Filter to a single variant id.",
"type": "string"
},
"customer_id": {
"description": "Filter to a single customer id.",
"type": "string"
},
"user_email": {
"description": "Filter to a buyer email.",
"type": "string"
},
"page_number": {
"description": "Page number (JSON:API page[number]). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (JSON:API page[size], max 100). Default 10.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"include": {
"description": "Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢lemonsqueezy_get_subscription(subscription_id, include)
Get a single subscription by id. API: GET /subscriptions/{id}.
Input Schema
{
"type": "object",
"properties": {
"subscription_id": {
"type": "string",
"description": "Subscription id (required)."
},
"include": {
"description": "Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.",
"type": "string"
}
},
"required": [
"subscription_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢lemonsqueezy_list_subscription_invoices(store_id, status, refunded, page_number, page_size, ...)
List subscription invoices, optionally filtered by store, status, or refunded flag. API: GET /subscription-invoices (filter[store_id], filter[status], filter[refunded]).
Input Schema
{
"type": "object",
"properties": {
"store_id": {
"description": "Filter to a single store id.",
"type": "string"
},
"status": {
"description": "Filter by invoice status (e.g. paid, void, refunded).",
"type": "string"
},
"refunded": {
"description": "Filter by refunded flag.",
"type": "boolean"
},
"page_number": {
"description": "Page number (JSON:API page[number]). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (JSON:API page[size], max 100). Default 10.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"include": {
"description": "Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢lemonsqueezy_list_license_keys(store_id, order_id, product_id, page_number, page_size, ...)
List license keys, optionally filtered by store, order, or product. API: GET /license-keys (filter[store_id], filter[order_id], filter[product_id]).
Input Schema
{
"type": "object",
"properties": {
"store_id": {
"description": "Filter to a single store id.",
"type": "string"
},
"order_id": {
"description": "Filter to a single order id.",
"type": "string"
},
"product_id": {
"description": "Filter to a single product id.",
"type": "string"
},
"page_number": {
"description": "Page number (JSON:API page[number]). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (JSON:API page[size], max 100). Default 10.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"include": {
"description": "Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢lemonsqueezy_list_discounts(store_id, page_number, page_size, include)
List discounts, optionally filtered to one store. API: GET /discounts (filter[store_id]).
Input Schema
{
"type": "object",
"properties": {
"store_id": {
"description": "Filter to a single store id.",
"type": "string"
},
"page_number": {
"description": "Page number (JSON:API page[number]). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page_size": {
"description": "Results per page (JSON:API page[size], max 100). Default 10.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"include": {
"description": "Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴lemonsqueezy_create_checkout(store_id, variant_id, custom_price, product_options, checkout_options, ...)
WRITE: Create a hosted checkout / payment link for a store + variant. Returns the created checkout including its `url` (the shareable payment link). API: POST /checkouts.
Input Schema
{
"type": "object",
"properties": {
"store_id": {
"type": "string",
"description": "Store id (required)."
},
"variant_id": {
"type": "string",
"description": "Variant id to sell (required)."
},
"custom_price": {
"description": "Override price in cents (integer).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"product_options": {
"description": "JSON:API product_options object (name, description, redirect_url, etc.).",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"checkout_options": {
"description": "JSON:API checkout_options object (embed, media, button_color, etc.).",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"checkout_data": {
"description": "JSON:API checkout_data object (email, name, custom, discount_code, etc.).",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"expires_at": {
"description": "ISO 8601 date-time when the checkout link expires.",
"type": "string"
}
},
"required": [
"store_id",
"variant_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴lemonsqueezy_update_subscription(subscription_id, variant_id, cancelled, pause, billing_anchor)
WRITE: Modify a LIVE subscription — change plan/tier (variant_id), cancel, pause/unpause, or set the billing anchor. This affects a real customer's billing. API: PATCH /subscriptions/{id}.
Input Schema
{
"type": "object",
"properties": {
"subscription_id": {
"type": "string",
"description": "Subscription id to update (required)."
},
"variant_id": {
"description": "New variant id to switch the plan/tier to.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"cancelled": {
"description": "Set true to cancel, false to un-cancel.",
"type": "boolean"
},
"pause": {
"description": "Pause object (mode, resumes_at), or null to unpause.",
"anyOf": [
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"billing_anchor": {
"description": "Day of month (1-31) to anchor billing to.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"subscription_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴lemonsqueezy_cancel_customer_subscription(subscription_id)
WRITE: Cancel a LIVE subscription. It remains active until the end of the current billing period, then moves to `cancelled`. This affects a real customer. API: DELETE /subscriptions/{id}.
Input Schema
{
"type": "object",
"properties": {
"subscription_id": {
"type": "string",
"description": "Subscription id to cancel (required)."
}
},
"required": [
"subscription_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence