
SparkPay MCP server
Which servers in the official MCP registry are SparkPay's own, whether they answer, and what they offer. A program checked each of these, nobody copied them from a product page.
read 2026-10-21
- Registry namedev.sparkpay/sparkpayverified in the MCP registry
The registry name sits under sparkpay.dev. The registry only lets a publisher use that namespace after proving control of the domain through DNS or HTTP.
- Stateanswerschecked 2026-10-21
- Tools25
- Server calls itselfspark-pay
- Server version1.0.0
- Protocol version2025-06-18
On 2026-10-21 the server answered initialize and tools/list without a sign-in. First answer in 233 ms.
- Its tools do none of the product's use cases we checked: Restrict app features to paid subscription tiers; Export payment records to Excel for tax reporting.
- Checked on 6 of the 7 days it takes to judge reliability.
Once connected
- create_coupon, bulk_create_coupon, delete_coupon, bulk_delete_coupon, set_coupon_listed change data without a sign-in: anyone with the address can call them.
- Parameters are untyped or undescribed in 24 of 25 tools: check arguments before calling.
Said by rules from the measurements above. The likely first call is a model's pick from the tool list; read its description before relying on it.
- INITE MCP scoreafter a weeka score needs 7 daily checks: 6 so far
- What an agent can do with it0 of 2 use cases
- Answeredmeasuring6 of the 7 daily checks it takes to print a share
- Median first answer324 ms
- Space in an agent's context≈ 6,476 tokensthe definitions of all its tools (25), which an agent carries on every turn
- Tool definitionsB · 84 of 100
- Typed results0 of 25 toolsdeclared outputSchema: results come typed, read once
- Parameters without a description: in 24 of 25
What an agent can do with it
- not sure · Put a hosted pricing page in front of an app
- cannot · Restrict app features to paid subscription tiers
- cannot · Export payment records to Excel for tax reporting
Each of the product's use cases, put to Jev against this server's tool list: can an agent do it with these tools?
Worth a look
- Tools that change data, on a server that answers without a sign-in: create_coupon, bulk_create_coupon, delete_coupon, bulk_delete_coupon, set_coupon_listed
A program checks the server once a day: initialize and tools/list, no model. Tokens are the definitions' length at about four characters a token. The grade averages six checks of every tool's name, description, schema and annotations; it says how well the tools are described, not whether they work. The score weighs what was measured and nothing else: answering (30%), doing the product's job (25%), definitions (20%), context (10%) and use (15%). A part that was not measured is left out, and a hidden instruction caps the score at 40. The state of vendors' MCP servers: method and numbers →
list_appsList 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.
list_subscriptionsList 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.
get_customerLook 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.
list_recent_paymentsList 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).
revenue_summaryRevenue 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…
revenue_by_appPer-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…
list_referralsList referral records (who referred whom, reward coupon code, pending/rewarded status), newest first. Optionally scope by app_id and/or status.
list_recent_cancellationsRecently 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.
list_couponsList 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…
create_couponCreate 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…
bulk_create_couponCreate 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…
delete_couponDelete 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…
bulk_delete_couponDelete 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…
set_coupon_listedShow, 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…
list_coupon_invitesList 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…
invite_to_couponAdd 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…
revoke_coupon_inviteWithdraw 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…
plan_app_kitStep 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…
create_app_kitStep 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…
list_plansDownload 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…
update_plan_limitsChange 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…
update_plan_metaSet 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…
update_plan_pricingChange 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…
archive_planRemove 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…
setup_pricing_pageGuided, 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…
How to connect
Add the server to your MCP client config. Claude Desktop, Cursor and most other clients read this shape:
{
"mcpServers": {
"sparkpay": {
"type": "http",
"url": "https://sparkpay.dev/api/mcp/mcp"
}
}
}Add it
Claude Code, in a terminal
claude mcp add --transport http sparkpay https://sparkpay.dev/api/mcp/mcpclaude.ai, ChatGPT and other clients: add https://sparkpay.dev/api/mcp/mcp as a custom connector in the settings.
Each line is something a program found when it went looking: the registry entry, the server's own answer, a spec that parses. A missing line means we did not find it, not that it does not exist.
Cookies
Before we count this visit
Analytics and ad measurement tell us which pages and which of our ads do their job: Google Analytics and Google Ads, the Meta pixel, Yandex Metrica, and one first-party id of our own. Nothing is stored until you answer, and declining changes nothing about the site.