# io.usefulapi/lemonsqueezy (remote · lemonsqueezy.usefulapi.io)

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

- Trust score: 72/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `lemonsqueezy.usefulapi.io`: 72/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-lemonsqueezy/lemonsqueezy.md), [page](https://verifymcp.io/servers/io-usefulapi-lemonsqueezy/lemonsqueezy)

## Channel facts

- Endpoint: `https://lemonsqueezy.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.1`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, 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-03.

- **Endpoint Security**: 78/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS not yet verified: we couldn't determine whether a plaintext access path exists.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 74/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2102 tokens (~116/item across 18 items; 18 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 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**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http io-usefulapi-lemonsqueezy https://lemonsqueezy.usefulapi.io/mcp
```

### Codex

```toml
[mcp_servers.io-usefulapi-lemonsqueezy]
url = "https://lemonsqueezy.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-lemonsqueezy": {
      "type": "remote",
      "url": "https://lemonsqueezy.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-lemonsqueezy --url https://lemonsqueezy.usefulapi.io/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-lemonsqueezy:
    url: "https://lemonsqueezy.usefulapi.io/mcp"
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-lemonsqueezy": {
      "type": "http",
      "url": "https://lemonsqueezy.usefulapi.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## 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-01 (score 72, +1)

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

### 2026-07-31 (score 71, +3)

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

### 2026-07-30 (score 68, −2)

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

### 2026-07-29 (score 70, +1)

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

### 2026-07-28 (score 69, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-07-27 (score 69, +57)

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

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

First indexed and scored.

## MCP tools (18)

### `lemonsqueezy_get_user` (~36 tokens)

Get authenticated user

Get the currently authenticated user/account behind the API key. Good first call to confirm auth. API: GET /users/me.

### `lemonsqueezy_list_stores` (~99 tokens)

List stores

List all stores in the account. API: GET /stores.

Input parameters:

- `include` (string): Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.
- `page_number` (integer): Page number (JSON:API page[number]). Default 1.
- `page_size` (integer): Results per page (JSON:API page[size], max 100). Default 10.

### `lemonsqueezy_get_store` (~67 tokens)

Get a store

Get a single store by id. API: GET /stores/{id}.

Input parameters:

- `include` (string): Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.
- `store_id` (string, required): Store id (required).

### `lemonsqueezy_list_products` (~119 tokens)

List products

List products, optionally filtered to one store. API: GET /products (filter[store_id]).

Input parameters:

- `include` (string): Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.
- `page_number` (integer): Page number (JSON:API page[number]). Default 1.
- `page_size` (integer): Results per page (JSON:API page[size], max 100). Default 10.
- `store_id` (string): Filter to a single store id.

### `lemonsqueezy_list_variants` (~125 tokens)

List variants

List variants (price/plan tiers), optionally filtered to one product. API: GET /variants (filter[product_id]).

Input parameters:

- `include` (string): Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.
- `page_number` (integer): Page number (JSON:API page[number]). Default 1.
- `page_size` (integer): Results per page (JSON:API page[size], max 100). Default 10.
- `product_id` (string): Filter to a single product id.

### `lemonsqueezy_list_prices` (~120 tokens)

List prices

List price models, optionally filtered to one variant. API: GET /prices (filter[variant_id]).

Input parameters:

- `include` (string): Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.
- `page_number` (integer): Page number (JSON:API page[number]). Default 1.
- `page_size` (integer): Results per page (JSON:API page[size], max 100). Default 10.
- `variant_id` (string): Filter to a single variant id.

### `lemonsqueezy_list_customers` (~137 tokens)

List customers

List customers, optionally filtered by store and/or email. API: GET /customers (filter[store_id], filter[email]).

Input parameters:

- `email` (string): Filter to a customer email.
- `include` (string): Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.
- `page_number` (integer): Page number (JSON:API page[number]). Default 1.
- `page_size` (integer): Results per page (JSON:API page[size], max 100). Default 10.
- `store_id` (string): Filter to a single store id.

### `lemonsqueezy_get_customer` (~67 tokens)

Get a customer

Get a single customer by id. API: GET /customers/{id}.

Input parameters:

- `customer_id` (string, required): Customer id (required).
- `include` (string): Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.

### `lemonsqueezy_list_orders` (~139 tokens)

List orders

List orders, optionally filtered by store and/or buyer email. API: GET /orders (filter[store_id], filter[user_email]).

Input parameters:

- `include` (string): Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.
- `page_number` (integer): Page number (JSON:API page[number]). Default 1.
- `page_size` (integer): Results per page (JSON:API page[size], max 100). Default 10.
- `store_id` (string): Filter to a single store id.
- `user_email` (string): Filter to a buyer email.

### `lemonsqueezy_get_order` (~67 tokens)

Get an order

Get a single order by id. API: GET /orders/{id}.

Input parameters:

- `include` (string): Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.
- `order_id` (string, required): Order id (required).

### `lemonsqueezy_list_subscriptions` (~220 tokens)

List subscriptions

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 parameters:

- `customer_id` (string): Filter to a single customer id.
- `include` (string): Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.
- `page_number` (integer): Page number (JSON:API page[number]). Default 1.
- `page_size` (integer): Results per page (JSON:API page[size], max 100). Default 10.
- `product_id` (string): Filter to a single product id.
- `status` (string): Filter by subscription status.
- `store_id` (string): Filter to a single store id.
- `user_email` (string): Filter to a buyer email.
- `variant_id` (string): Filter to a single variant id.

### `lemonsqueezy_get_subscription` (~67 tokens)

Get a subscription

Get a single subscription by id. API: GET /subscriptions/{id}.

Input parameters:

- `include` (string): Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.
- `subscription_id` (string, required): Subscription id (required).

### `lemonsqueezy_list_subscription_invoices` (~169 tokens)

List subscription invoices

List subscription invoices, optionally filtered by store, status, or refunded flag. API: GET /subscription-invoices (filter[store_id], filter[status], filter[refunded]).

Input parameters:

- `include` (string): Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.
- `page_number` (integer): Page number (JSON:API page[number]). Default 1.
- `page_size` (integer): Results per page (JSON:API page[size], max 100). Default 10.
- `refunded` (boolean): Filter by refunded flag.
- `status` (string): Filter by invoice status (e.g. paid, void, refunded).
- `store_id` (string): Filter to a single store id.

### `lemonsqueezy_list_license_keys` (~165 tokens)

List license keys

List license keys, optionally filtered by store, order, or product. API: GET /license-keys (filter[store_id], filter[order_id], filter[product_id]).

Input parameters:

- `include` (string): Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.
- `order_id` (string): Filter to a single order id.
- `page_number` (integer): Page number (JSON:API page[number]). Default 1.
- `page_size` (integer): Results per page (JSON:API page[size], max 100). Default 10.
- `product_id` (string): Filter to a single product id.
- `store_id` (string): Filter to a single store id.

### `lemonsqueezy_list_discounts` (~121 tokens)

List discounts

List discounts, optionally filtered to one store. API: GET /discounts (filter[store_id]).

Input parameters:

- `include` (string): Comma-separated related resources to sideload (JSON:API include=), e.g. 'store,variant'.
- `page_number` (integer): Page number (JSON:API page[number]). Default 1.
- `page_size` (integer): Results per page (JSON:API page[size], max 100). Default 10.
- `store_id` (string): Filter to a single store id.

### `lemonsqueezy_create_checkout` (~179 tokens)

Create checkout

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 parameters:

- `checkout_data` (object): JSON:API checkout_data object (email, name, custom, discount_code, etc.).
- `checkout_options` (object): JSON:API checkout_options object (embed, media, button_color, etc.).
- `custom_price` (integer): Override price in cents (integer).
- `expires_at` (string): ISO 8601 date-time when the checkout link expires.
- `product_options` (object): JSON:API product_options object (name, description, redirect_url, etc.).
- `store_id` (string, required): Store id (required).
- `variant_id` (string, required): Variant id to sell (required).

### `lemonsqueezy_update_subscription` (~140 tokens)

Update subscription

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 parameters:

- `billing_anchor` (integer): Day of month (1-31) to anchor billing to.
- `cancelled` (boolean): Set true to cancel, false to un-cancel.
- `pause`: Pause object (mode, resumes_at), or null to unpause.
- `subscription_id` (string, required): Subscription id to update (required).
- `variant_id` (integer): New variant id to switch the plan/tier to.

### `lemonsqueezy_cancel_subscription` (~65 tokens)

Cancel subscription

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 parameters:

- `subscription_id` (string, required): Subscription id to cancel (required).

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-lemonsqueezy/lemonsqueezy#diagnostics

## Score history

- 2026-08-03: 72
- 2026-08-02: 72
- 2026-08-01: 72
- 2026-07-31: 71
- 2026-07-30: 68
- 2026-07-29: 70
- 2026-07-28: 69
- 2026-07-27: 69
- 2026-07-26: 12

## Links

- Remote endpoint: https://lemonsqueezy.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-lemonsqueezy/lemonsqueezy/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-lemonsqueezy/lemonsqueezy/changelog.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-lemonsqueezy/lemonsqueezy
