Skip to content
SparkPay logo

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

← Back to SparkPay

Whose server it is
  • 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.

When we asked itchecked 2026-10-21
  • 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.

Should an agent connect itSkip it
  • 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.

Measured dailydaily checks: 6, the first on 2026-10-21
  • 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 →

Tools it offers25 tools · read 2026-10-21
  • list_apps

    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.

  • list_subscriptions

    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.

  • get_customer

    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.

  • list_recent_payments

    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).

  • revenue_summary

    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…

  • revenue_by_app

    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…

  • list_referrals

    List referral records (who referred whom, reward coupon code, pending/rewarded status), newest first. Optionally scope by app_id and/or status.

  • list_recent_cancellations

    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.

  • list_coupons

    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…

  • create_coupon

    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…

  • bulk_create_coupon

    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…

  • delete_coupon

    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…

  • bulk_delete_coupon

    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…

  • set_coupon_listed

    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…

  • list_coupon_invites

    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…

  • invite_to_coupon

    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…

  • revoke_coupon_invite

    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…

  • plan_app_kit

    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…

  • create_app_kit

    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…

  • list_plans

    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…

  • update_plan_limits

    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…

  • update_plan_meta

    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…

  • update_plan_pricing

    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…

  • archive_plan

    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…

  • setup_pricing_page

    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…

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/mcp

Add to CursorAdd to VS Code

claude.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.