Skip to main content
Glama
YawLabs

@yawlabs/lemonsqueezy-mcp

by YawLabs

ls_list_prices

Read-onlyIdempotent

List LemonSqueezy prices, optionally filtered by variant, with pagination. Returns effective per-unit price, clarifying tiered and package pricing.

Instructions

List all prices, optionally filtered by variant. Results are paginated — check meta.page in the response for currentPage, lastPage, and total. Every record is annotated with effective_unit_price (cents actually charged per unit) and effective_unit_price_note. READ THAT, not unit_price: on a tiered scheme (volume/graduated) unit_price is vestigial and is NOT the charged amount -- the real per-unit price lives in tiers[], and such records also carry unit_price_is_not_charged: true. On package pricing unit_price IS charged, but it buys a block of package_size units, so effective_unit_price reports the per-unit figure and the record carries unit_price_is_per_package: true. NOTE that several price records can exist per variant; the CURRENT one is the newest by created_at (results are sorted newest-first). 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 Schema

TableJSON Schema
NameRequiredDescriptionDefault
includeNoComma-separated related resources to include (e.g. 'variant')
pageSizeNoResults per page (1-100)
variantIdNoFilter by variant ID
pageNumberNoPage number (1-indexed)

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.10.10

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though annotations declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, the description goes well beyond the structured metadata: it discloses pagination shape (meta.page), sorting order (newest-first by created_at), the trap of using unit_price instead of effective_unit_price, the tiered/package semantics, and cross-store enforcement conditions. This is exactly the kind of value the description should add beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is dense and front-loaded with the core function and filter, then the pagination note, then the pricing semantics, then the store note. It's long but every sentence earns its place given the complexity. A small deduction because the cross-store sentence is somewhat run-on and could be split for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must carry the burden of explaining the response. It covers pagination fields, the key price-semantics fields (effective_unit_price, effective_unit_price_note, unit_price_is_not_charged, unit_price_is_per_package), and the newest-record rule. For a read-only, 4-param list tool, this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter (include, pageSize, variantId, pageNumber) already has schema-level descriptions. The description adds value beyond those: it explains how variantId interacts with store scoping, and it explains pagination-related fields that the schema doesn't fully connect (pageNumber/pageSize feed into meta.page). The description also clarifies the meaning of the variant filter with the 'newest by created_at' note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('List all prices') and immediately states the only optional filter (by variant), which is enough to distinguish it from ls_get_price (single price) and other list tools. It does a lot more than name what it does, so the purpose dimension is fully satisfied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells the agent when the tool is appropriate (listing prices, optionally scoped by variant) and includes a cross-store note about constraints when LEMONSQUEEZY_ALLOWED_STORE_IDS is set. It does not explicitly name an alternative tool to prefer in a different situation, so it loses one point from a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.