Pricing plans
Build and publish the Kelviq catalog: products contain plans, plans grant
entitlements to features, and nothing is live until published.
Setup
Needs the kelviq: MCP tools (@kelviq/mcp-server, KELVIQ_SERVER_API_KEY).
See the kelviq skill's Setup section for the .mcp.json snippet and
sandbox testing with KELVIQ_ENV=sandbox.
Golden path: build and publish a plan
kelviq:product_create — required: name, taxCode. If the tax code is
unknown, ask the user rather than guessing; don't invent one. Keep the
returned product UUID.
kelviq:feature_create for each feature this plan gates. Pick
featureType: BOOLEAN (flag), CUSTOMIZABLE (numeric quantity, e.g.
seats), or METER (usage-tracked, e.g. API calls). Keep each returned
feature UUID.
kelviq:plan_create — pass the product UUID from step 1 as product
(not the identifier). The plan lands in DRAFT: not visible, not
purchasable, until published. Don't tell the user it's live yet.
kelviq:plan_entitlements_add — attach entitlements using the feature
UUIDs from step 2, e.g. [{ feature: <uuid>, details: {...} }]. The
details shape depends on the feature's type — check
kelviq:docs_read on product-catalog/entitlements if unsure rather than
guessing the shape.
- Prices. There is no price-write tool in MCP — this is deliberate, not a
gap. Direct the user to set prices in the Kelviq dashboard, or use the
pricing-as-code skill's kelviq push flow if they manage pricing in
git. kelviq:plan_prices_list reads prices back once they exist, to
confirm.
kelviq:plan_publish — makes the plan (and its DRAFT-only entitlements
from step 4) live. Pass updateFeatures and/or updatePricing only if
you also want to migrate customers already on a previous version of this
plan to the new features/pricing — always confirm with the user before
setting either; unset, existing subscribers keep what they had.
- Verify:
kelviq:plan_retrieve (confirm published), kelviq:plan_prices_list
(confirm prices landed), kelviq:offering_get_product by product UUID
(see the public pricing view a customer would see).
For the fully guided version of this flow, use the setup_product MCP
prompt (new product from nothing) or launch_plan (new plan on an existing
product) — don't re-derive their step lists here, just invoke them.
Free plans
A free plan uses chargePeriod: ONE_TIME rather than a recurring period.
Free plans are a setup-payments concern once a customer needs to move off
one — see that skill for the checkout-based upgrade path.
Updating a published plan
kelviq:plan_update on an already-published (is_latest) plan does not
change it in place — it creates a new draft. The previous version stays live
until you kelviq:plan_publish the new draft. Don't tell the user a
plan_update call alone took effect.
Plan files
kelviq:plan_file_update (display fields: name, ordering, enabled),
kelviq:plan_file_delete, and kelviq:plan_file_download manage a plan's
existing file attachments. None of them upload a new file — that happens
outside these tools (media upload endpoint, or the dashboard). If the user
wants to attach a brand-new file, say so plainly instead of trying to force
it through plan_file_update.
Docs worth reading first
kelviq:docs_read on quickstart/core-concepts for the product/feature/plan
model, product-catalog/plans and product-catalog/products for field-level
detail, product-catalog/entitlements for entitlement shapes, and
product-catalog/free-and-trials for free-plan specifics. Read before you
answer a "what field does X take" question — don't enumerate the schema from
memory here.
1---2name: pricing-plans3description: Design and publish a Kelviq pricing catalog — products, features, plans, and entitlements — via the kelviq MCP tools. Use when the user wants to create or edit a pricing model, catalog, product, plan, feature, or entitlement, or asks to publish a plan.4---56# Pricing plans78Build and publish the Kelviq catalog: products contain plans, plans grant9entitlements to features, and nothing is live until published.1011## Setup1213Needs the `kelviq:` MCP tools (`@kelviq/mcp-server`, `KELVIQ_SERVER_API_KEY`).14See the `kelviq` skill's Setup section for the `.mcp.json` snippet and15sandbox testing with `KELVIQ_ENV=sandbox`.1617## Golden path: build and publish a plan18191. `kelviq:product_create` — required: `name`, `taxCode`. If the tax code is20 unknown, ask the user rather than guessing; don't invent one. Keep the21 returned product **UUID**.222. `kelviq:feature_create` for each feature this plan gates. Pick23 `featureType`: `BOOLEAN` (flag), `CUSTOMIZABLE` (numeric quantity, e.g.24 seats), or `METER` (usage-tracked, e.g. API calls). Keep each returned25 feature **UUID**.263. `kelviq:plan_create` — pass the product **UUID** from step 1 as `product`27 (not the identifier). The plan lands in DRAFT: not visible, not28 purchasable, until published. Don't tell the user it's live yet.294. `kelviq:plan_entitlements_add` — attach entitlements using the feature30 **UUIDs** from step 2, e.g. `[{ feature: <uuid>, details: {...} }]`. The31 `details` shape depends on the feature's type — check32 `kelviq:docs_read` on `product-catalog/entitlements` if unsure rather than33 guessing the shape.345. Prices. There is no price-write tool in MCP — this is deliberate, not a35 gap. Direct the user to set prices in the Kelviq dashboard, or use the36 `pricing-as-code` skill's `kelviq push` flow if they manage pricing in37 git. `kelviq:plan_prices_list` reads prices back once they exist, to38 confirm.396. `kelviq:plan_publish` — makes the plan (and its DRAFT-only entitlements40 from step 4) live. Pass `updateFeatures` and/or `updatePricing` only if41 you also want to migrate customers already on a previous version of this42 plan to the new features/pricing — always confirm with the user before43 setting either; unset, existing subscribers keep what they had.447. Verify: `kelviq:plan_retrieve` (confirm published), `kelviq:plan_prices_list`45 (confirm prices landed), `kelviq:offering_get_product` by product UUID46 (see the public pricing view a customer would see).4748For the fully guided version of this flow, use the `setup_product` MCP49prompt (new product from nothing) or `launch_plan` (new plan on an existing50product) — don't re-derive their step lists here, just invoke them.5152## Free plans5354A free plan uses `chargePeriod: ONE_TIME` rather than a recurring period.55Free plans are a `setup-payments` concern once a customer needs to move off56one — see that skill for the checkout-based upgrade path.5758## Updating a published plan5960`kelviq:plan_update` on an already-published (`is_latest`) plan does not61change it in place — it creates a new draft. The previous version stays live62until you `kelviq:plan_publish` the new draft. Don't tell the user a63`plan_update` call alone took effect.6465## Plan files6667`kelviq:plan_file_update` (display fields: name, ordering, enabled),68`kelviq:plan_file_delete`, and `kelviq:plan_file_download` manage a plan's69*existing* file attachments. None of them upload a new file — that happens70outside these tools (media upload endpoint, or the dashboard). If the user71wants to attach a brand-new file, say so plainly instead of trying to force72it through `plan_file_update`.7374## Docs worth reading first7576`kelviq:docs_read` on `quickstart/core-concepts` for the product/feature/plan77model, `product-catalog/plans` and `product-catalog/products` for field-level78detail, `product-catalog/entitlements` for entitlement shapes, and79`product-catalog/free-and-trials` for free-plan specifics. Read before you80answer a "what field does X take" question — don't enumerate the schema from81memory here.