Lemon Squeezy MCP by usefulapi

MCP server for Lemon Squeezy — stores, products, orders, subscriptions, license keys.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
90%
Naming quality
76%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (4)

  • LOWTool 'lemonsqueezy_list_subscriptions' name length outside 3-30 rangein lemonsqueezy_list_subscriptions
  • LOWTool 'lemonsqueezy_list_subscription_invoices' name length outside 3-30 rangein lemonsqueezy_list_subscription_invoices
  • LOWTool 'lemonsqueezy_update_subscription' name length outside 3-30 rangein lemonsqueezy_update_subscription
  • LOWTool 'lemonsqueezy_cancel_customer_subscription' name length outside 3-30 rangein lemonsqueezy_cancel_customer_subscription

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,507Tokens (tool definitions)
~1.6 KBTypical response size
Significant attention impact (2.74% of 128k context)

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-http

What it can do

Tool inventory

Tools (18)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded18 tools
verifiedversion not recorded18 tools
verifiedversion not recorded18 tools
verifiedversion not recorded18 tools
failed observationversion not recorded—