Pink Agentic AI Payments (by PinkWallet): lets Claude, ChatGPT, Cursor pay vendor invoices within company spending rules (budgets, caps, allow-lists, human approval). Sandbox preview, test money.
SparkPay is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Stripe billing for indie apps: plans, coupons, subscriptions, customers and revenue reporting.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http sparkpay-mcp https://sparkpay.dev/api/mcp/mcp
# 2 — ask your agent for something these tools do
# list_apps, list_subscriptions, get_customer and 22 more
SparkPay costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http sparkpay-mcp https://sparkpay.dev/api/mcp/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
25 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
List the registered apps (app_id + name). Use this first to discover valid app_id values, then pass one to the other tools to scope results to a single product.
No parameter schema on file.
List subscriptions/registrations, newest first. Optionally filter by app_id, status, or payment_type. Returns metadata (email, status, plan, amounts). Use get_customer for a single user, or revenue_summary for totals.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | no | — |
| status | string | no | — |
| payment_type | string | no | — |
| limit | number | no | — |
| include_samples | boolean | no | — |
Look up a customer by email. Returns every subscription/registration for that email across apps (or within one app if app_id is given), with full detail: verification, plan, billing period, usage, refunds. Empty when the email is unknown.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| string | yes | — | |
| app_id | string | no | — |
List recent paid transactions (excludes free-tier rows), newest first, ordered by payment date. Optionally scope by app_id. Use to review recent sales activity. Amounts are in the transaction currency (cents).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | no | — |
| limit | number | no | — |
| include_samples | boolean | no | — |
Revenue and subscriber summary in USD cents (normalized from each transaction currency). Returns latest_payments (the MOST RECENT payment summed per customer: a run-rate, NOT lifetime turnover, because amount_paid is overwritten on renewal), refunds, approximate MRR, active/trialing/paid counts, and lifetime_net (the only cumulative total held, accrued per OWNER across all their apps and net of re
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | no | — |
| include_samples | boolean | no | — |
Per-app rollup in USD cents (latest_payments/refunded/MRR + paid customer count), largest refund-adjusted latest payments first. latest_payments sums the most recent payment per customer, so it is a run-rate and NOT lifetime turnover. No lifetime figure is available per app (accrual is recorded per owner). Use to compare products at a glance; use revenue_summary for one app in depth.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| include_samples | boolean | no | — |
List referral records (who referred whom, reward coupon code, pending/rewarded status), newest first. Optionally scope by app_id and/or status.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | no | — |
| status | string | no | — |
| limit | number | no | — |
| include_samples | boolean | no | — |
Recently canceled paid subscriptions (excludes free rows), most recent cancellation first, with what each customer was paying. Use for churn review; list_subscriptions orders by signup date instead.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | no | — |
| limit | number | no | — |
| include_samples | boolean | no | — |
List discount coupons (code, percent off, expiry, max uses, use count, which paid tiers they apply to). Optionally scope by app_id and/or restrict to currently-active ones (not expired, not maxed out). Read-only: cannot create, edit, or delete coupons.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | no | — |
| active_only | boolean | no | — |
| limit | number | no | — |
Create a percentage discount coupon for an app. WRITE, human-gated: a real create requires an elicitation-capable client (e.g. Claude Desktop). The human enters the final code, percent, expiry, visibility, and tier scope in a form; those values OVERRIDE the arguments here, which only pre-fill the form message as a proposal. Clients without elicitation are refused (dry_run still works anywhere). In
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | — |
| code | string | yes | — |
| discount_percent | number | yes | — |
| description | string | no | — |
| expires_at | string | no | — |
| max_uses | number | no | — |
| applies_to_tiers | array | no | — |
| listed | boolean | no | — |
| confirm_high_discount | boolean | no | — |
| dry_run | boolean | no | — |
Create the SAME discount code across many apps in one call: the portfolio-promo shortcut (e.g. a summer sale on every owned app). WRITE, human-gated: a real create requires an elicitation-capable client; the human enters the coupon terms ONCE in a form (overriding the arguments here) and that one approval covers the whole batch. Clients without elicitation are refused (dry_run still works anywhere
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_ids | array | yes | — |
| code | string | yes | — |
| discount_percent | number | yes | — |
| description | string | no | — |
| expires_at | string | no | — |
| max_uses | number | no | — |
| applies_to_tiers | array | no | — |
| listed | boolean | no | — |
| confirm_high_discount | boolean | no | — |
| dry_run | boolean | no | — |
Delete one coupon from an app. WRITE, human-gated: a real delete requires an elicitation-capable client; the human sees the exact coupon (code, percent, redemption count) and must click approve. The model cannot confirm on its own, and confirm_used is only consulted for dry_run previews. Clients without elicitation are refused (dry_run still works anywhere). Removes the Stripe coupon object and th
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | — |
| code | string | yes | — |
| confirm_used | boolean | no | — |
| dry_run | boolean | no | — |
Delete the SAME coupon code across many apps in one call: the inverse of bulk_create_coupon, for retiring a portfolio-wide promo. WRITE, human-gated: a real delete requires an elicitation-capable client; the human sees every app the code would be removed from (with per-app redemption counts) and must click approve, and confirm_used is only consulted for dry_run previews. Clients without elicitatio
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_ids | array | yes | — |
| code | string | yes | — |
| confirm_used | boolean | no | — |
| dry_run | boolean | no | — |
Show, hide or SCHEDULE an EXISTING coupon on the public pricing pages by setting its listed flag and optional listed_from start date. WRITE, human-gated: a real write requires an elicitation-capable client and the human sees the code, the discount, which way it is moving and any start date; clients without elicitation are refused (dry_run works anywhere). These are deliberately the ONLY fields
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | — |
| code | string | yes | — |
| listed | boolean | yes | — |
| listed_from | string | no | — |
| dry_run | boolean | no | — |
List who a coupon was offered to and what they did with it: per-address status (invited / redeemed / revoked), where the invite came from, and the timestamps. Also returns the coupon's own invite_only flag -- read that FIRST: when it is false the invite rows are recorded but NOT enforced, and anyone holding the code can still redeem it. Read-only. Use list_coupons for the coupon's terms, invite_
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | — |
| code | string | yes | — |
Add email addresses to a coupon's invite list and, by default, switch the coupon to invite-only so the list is actually enforced. WRITE, human-gated: a real write requires an elicitation-capable client and the human sees every address plus whether the coupon is about to be closed to everyone else; clients without elicitation are refused (dry_run works anywhere). Addresses are lowercased and de-dup
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | — |
| code | string | yes | — |
| emails | array | yes | — |
| source | string | no | — |
| enforce_invite_only | boolean | no | — |
| dry_run | boolean | no | — |
Withdraw one address's right to spend a coupon: the targeted block. WRITE, human-gated: a real write requires an elicitation-capable client and the human sees the address and its current status; clients without elicitation are refused (dry_run works anywhere). Works on an address that was never invited too, writing a revoked tombstone, so blocking someone does not depend on whether they were on th
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | — |
| code | string | yes | — |
| string | yes | — | |
| reason | string | no | — |
| dry_run | boolean | no | — |
Step 1 of onboarding a new app onto SparkPay. Recons app_name against existing apps and the rest of the portfolio's plan catalogs, then returns automated findings plus the minimum set of questions that genuinely need a human answer (plan prices, billing model, redirect URLs, trial length, push-webhook opt-in). Pass the answers to create_app_kit next.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_name | string | yes | — |
Step 2 of onboarding a new app onto SparkPay. Applies answers.plan_catalog by minting real Stripe prices (same helper /api/apps/sync-plans uses) and registers/updates the app, then returns a downloadable integration kit (lib/spark-pay client + plans.json + sync script + INTEGRATION.md, modeled on still-applying's golden pattern) plus exact post_steps for env vars and secrets. Refuses to overwrite
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_name | string | yes | — |
| answers | object | yes | — |
Download an app's live plan catalog: tiers, names, prices, trial, and the machine-readable limits that gate features inside the app. This is the source of truth each app repo's bun run plans:sync regenerates lib/spark-pay/plans.json from, so diff against this rather than trusting the committed file. Stripe price/product IDs are omitted unless include_stripe_ids is set.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | — |
| include_stripe_ids | boolean | no | — |
Change the usage limits on an app's existing tiers (e.g. set ai_generations_daily to 200 on pro). WRITE, human-gated: a real write requires an elicitation-capable client; the human sees the per-tier before -> after diff and must click approve. Clients without elicitation are refused (dry_run still works anywhere). Tier-keyed, so one call can set a new limit key across every tier in a single atomic
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | — |
| updates | object | yes | — |
| mode | string | no | — |
| dry_run | boolean | no | — |
Set an existing tier's display metadata: its name and the two badge flags the public pricing page styles cards from: is_elite (gold/carbon BEST VALUE card with the rainbow title and app icon) and recommended (MOST POPULAR). A tier called "Elite" is NOT styled as elite unless is_elite is actually true on the stored plan; the page reads the flag, never the tier slug, so a catalog whose top tier lack
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | — |
| tier | string | yes | — |
| name | string | no | — |
| is_elite | boolean | no | — |
| recommended | boolean | no | — |
| dry_run | boolean | no | — |
Change what an app's EXISTING tiers charge: the amount, the billing model (one_time vs subscription), or both. WRITE, human-gated at the highest tier: a real write requires an elicitation-capable client, and the human types the tier, billing model and price into a form. Those typed values OVERRIDE the arguments here, which only pre-fill the proposal, so the model cannot move a price on its own. Cl
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | — |
| updates | array | yes | — |
| dry_run | boolean | no | — |
Remove a tier from an app's plan catalog. WRITE, human-gated: a real write needs an elicitation-capable client and the human must approve; dry_run previews anywhere. Every other plan tool edits tiers that already exist, so a catalog could grow but never shrink, and collapsing a multi-tier page down to a single offer was a dashboard-only job. Stripe products and prices are deliberately left intact,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | — |
| tier | string | yes | — |
| dry_run | boolean | no | — |
Guided, stage-chained wizard that configures an app's hosted pricing page end to end: plan billing model + price (with clickable recommendations), plan name and badge (elite/recommended), optional free tier, a seasonal coupon (SUMMER26-style code suggested from the current season), favicon-derived theme color + card style, and FAQ content. WRITE, human-gated per stage: each call runs AT MOST ONE e
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | — |
| stage | string | no | — |
| dry_run | boolean | no | — |
| tier | string | no | — |
| domain | string | no | — |
| price_suggestions | array | no | — |
| discount_percent | number | no | — |
| coupon_code | string | no | — |
| faq_drafts | array | no | — |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install SparkPay or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
This listing is an address its publisher runs, and you connect to it directly — this marketplace is not in the path. The scanner reads packages and public source, and an address is neither. So there is no grade — not a withheld one, an unmeasured one.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.0.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish SparkPay can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.