SolvaPay — Router
Disambiguate vague SolvaPay intent and route to the surface skill that owns the work.
This skill's only job is routing. Once you've identified the correct surface and emitted the handoff template or the Managed MCP exit, your turn is over — stop there. Do not read the target skill's SKILL.md. Do not implement any code, steps, or instructions. The user or the target skill will handle implementation. Outputting implementation details after the handoff (even as "helpful context") defeats the purpose of this router and duplicates work the surface skill is designed to do better.
What SolvaPay does
SolvaPay adds usage-based billing, paywalls, and hosted checkout to apps and AI tools. Answer a "what can SolvaPay do / which one do I need" question with this comparison, then route to the owning surface skill or Managed MCP exit:
| Surface |
What you build |
Pick when |
Route to |
| Paid MCP |
Per-call or subscription billing on a Cloudflare Workers MCP server |
The product is MCP tools for AI agents and you want to write code (greenfield, OpenAPI→MCP, or paywalling an existing MCP server) |
solvapay/create-mcp-app |
| Managed MCP |
SolvaPay-managed auth, paywall, and proxying for an MCP server you host |
You want to monetize an MCP server without code — paste your server URL, configure plans in the console |
Managed MCP exit |
| SDK paywall |
Gate endpoints, meter usage, handle webhooks in your own code |
You own an app/API backend and want billing in code (REST, Next.js, Express, any stack) |
solvapay/sdk-integration |
| Hosted checkout |
Drop-in payment page + customer portal |
You want a production website to sell access with no custom billing code |
solvapay/website-checkout |
| Lovable checkout |
Paste-in Vite + Supabase edge checkout |
You're prototyping in a Lovable / Vite preview and want checkout pasted in |
solvapay/lovable-checkout |
Decision tree
Walk these in order; the first "yes" wins:
- Is the thing being monetized an MCP server / MCP tools for AI agents?
- No code / console / paste server URL → Managed MCP exit.
- Write code (greenfield worker, OpenAPI→MCP, SDK paywall on existing MCP) →
solvapay/create-mcp-app.
- Otherwise, is there an existing app or API backend to bill from code (paywall, metering, webhooks)? →
solvapay/sdk-integration.
- Otherwise, do they just want a hosted payment page for a production website (no billing code)? →
solvapay/website-checkout.
- Is it specifically a Lovable / Vite preview app? →
solvapay/lovable-checkout.
- None clearly fits → ask the disambiguation question.
Guardrails
- Never expose
SOLVAPAY_SECRET_KEY to client code or public env vars.
- Never build custom card collection if hosted checkout satisfies requirements.
- Always prefer official SolvaPay SDK helpers over ad-hoc raw HTTP calls.
- Always prefer topic-based docs discovery (MCP or
llms.txt), not hard-coded doc paths.
Gotchas
- Valid as a standalone install — routes by skill id (
solvapay/<surface>), not filesystem paths.
- "Paywall my API" or "paywall web app" without MCP context →
solvapay/sdk-integration, not solvapay/create-mcp-app.
- "Scaffold mcp" / greenfield MCP worker →
solvapay/create-mcp-app, not solvapay/sdk-integration.
- Managed MCP is console-driven — no skill owns it; use the Managed MCP exit, not a fake skill id.
- "Monetize mcp server no-code" / "paste my server url" / "gate tools without code" → Managed MCP exit, not
solvapay/create-mcp-app.
- Surface skill descriptions own specific keywords; this router owns ambiguous top-of-funnel prompts only.
- "Customer portal" or billing UI inside an MCP host app →
solvapay/sdk-integration, not solvapay/website-checkout.
Routing procedure
- Walk the decision tree to get a routing id or Managed MCP exit (or hit step 5 → disambiguation).
- Cross-check against the intent matrix phrase-lookup; if the user's wording matches a different row, prefer the matrix and reconcile.
- If still ambiguous → ask one disambiguation question.
- Run the verification loop.
- Emit the handoff template or Managed MCP exit and stop.
Docs discovery (shared by all surface skills): SolvaPay Docs MCP → https://docs.solvapay.com/llms.txt → direct page fetch.
Intent matrix
Ambiguous / top-of-funnel triggers only. Stack-specific keywords belong on surface skill descriptions.
| User intent |
Trigger examples |
Route to |
| Vague onboarding |
"add solvapay", "where do I start", "what can solvapay do", "monetize something" |
Ask disambiguation, then route |
| Greenfield paid MCP |
"create mcp app", "scaffold mcp", "new mcp server", "openapi to mcp", "npm create solvapay", "paid mcp", "monetize mcp" |
solvapay/create-mcp-app |
| Existing MCP + audit |
"add solvapay to my mcp", "paywall my mcp tools" (needs worker template) |
solvapay/create-mcp-app |
| Managed MCP (no code) |
"no code", "managed mcp", "paste my mcp server url", "gate tools without code", "hosted no-code proxy" |
Managed MCP exit |
| Existing app / API paywall |
"integrate sdk", "protect api", "paywall", "usage events", "webhooks", "npx solvapay init" |
solvapay/sdk-integration |
| Web hosted checkout |
"add checkout to website", "hosted checkout", "sell access on my site" |
solvapay/website-checkout |
| Lovable preview checkout |
"lovable", "paste into lovable", "vite checkout", "supabase edge checkout", "@preview" |
solvapay/lovable-checkout |
Negative routing examples
- "Migrate old billing data", "general Stripe setup only" → ask clarification; do not auto-route.
- Greenfield MCP from OpenAPI/scratch →
solvapay/create-mcp-app, NOT solvapay/sdk-integration.
- Paywall web/API without MCP →
solvapay/sdk-integration, NOT solvapay/create-mcp-app.
- No-code MCP / paste server URL → Managed MCP exit, NOT
solvapay/create-mcp-app.
Disambiguation prompt
"Do you want to (1) build a paid MCP server in code (OpenAPI or hand-written tools), (2) set up Managed MCP in the console (no code — paste your server URL), (3) integrate the TypeScript SDK into an existing app, (4) set up hosted checkout for a production web app, or (5) paste checkout into a Lovable preview app?"
Default if still ambiguous: greenfield MCP in code → solvapay/create-mcp-app; no-code MCP → Managed MCP exit; otherwise → solvapay/sdk-integration.
Surface skills
| Skill id |
Owns |
solvapay/create-mcp-app |
Greenfield paid MCP on Cloudflare Workers |
solvapay/sdk-integration |
SDK paywall, checkout, usage, webhooks in existing apps |
solvapay/website-checkout |
Hosted checkout + portal for production web apps |
solvapay/lovable-checkout |
Paste-in preview checkout for Lovable |
Install if missing: npx skills add solvapay/skills --skill <flat-name> -y (e.g. create-mcp-app for solvapay/create-mcp-app).
Managed MCP has no skill — use the Managed MCP exit instead.
Verification loop
- Confirm routing id matches one intent-matrix row, or the prompt is Managed MCP (console exit).
- Confirm the prompt is not a near-miss negative (see evals/README.md boundary table).
- If mismatch → re-route or ask one clarifying question; do not hand off until pass.
Handoff template
## Routing handoff
- **Routing id:** solvapay/<surface>
- **Why:** [one sentence tied to user intent]
- **Install if missing:** `npx skills add solvapay/skills --skill <flat-name> -y`
- **Next:** Load solvapay/<surface> SKILL.md and follow its instructions.
After emitting this template, stop. Do not add implementation steps, code snippets, or instructions from the target skill. The handoff is the complete output of this skill.
Managed MCP exit
Use when the user wants no-code MCP monetization — paste a server URL, gate tools via the console, configure plans without writing paywall code. Managed MCP has no owning skill; this exit replaces the handoff template.
## Managed MCP routing
- **Surface:** Managed MCP (console — no code)
- **Why:** [one sentence tied to user intent — e.g. paste server URL, gate tools without code]
- **Next steps:**
1. Open the SolvaPay provider console and create a Managed MCP product.
2. Follow docs: `/no-code-mcp/overview` and `/no-code-mcp/quick-start`.
3. For API bootstrap on an existing Managed MCP product, see `solvapay/sdk-integration` → `references/mcp-product-console.md`.
After emitting this exit, stop. Do not scaffold a worker, write paywall code, or hand off to solvapay/create-mcp-app.
Task progress
Dev mode (skill author / internal testing only)
If the user explicitly tests against the SolvaPay dev backend, append --dev to CLI invocations (npm create solvapay@latest, npx solvapay@latest init). Never enable for end users.
1---2name: solvapay-23description: Use this skill when a user is choosing between SolvaPay surfaces rather than implementing one. Load for: any query that pits two options against each other ("checkout or SDK?", "MCP vs checkout?", "which one for my app?"), capability questions about SolvaPay, vague billing or monetization intent with no specific surface chosen, or assigned SolvaPay work without clear direction. Skip when the user has settled on exactly one surface and is asking to build it — single-surface intent plus implementation context (tech stack, command, or action verb) routes to that surface's dedicated skill instead.4---56# SolvaPay — Router78Disambiguate vague SolvaPay intent and route to the surface skill that owns the work.910**This skill's only job is routing.** Once you've identified the correct surface and emitted the [handoff template](#handoff-template) or the [Managed MCP exit](#managed-mcp-exit), your turn is over — stop there. Do not read the target skill's SKILL.md. Do not implement any code, steps, or instructions. The user or the target skill will handle implementation. Outputting implementation details after the handoff (even as "helpful context") defeats the purpose of this router and duplicates work the surface skill is designed to do better.1112## What SolvaPay does1314SolvaPay adds usage-based billing, paywalls, and hosted checkout to apps and AI tools. Answer a "what can SolvaPay do / which one do I need" question with this comparison, then route to the owning surface skill or Managed MCP exit:1516| Surface | What you build | Pick when | Route to |17| --- | --- | --- | --- |18| Paid MCP | Per-call or subscription billing on a Cloudflare Workers MCP server | The product **is** MCP tools for AI agents and you want to **write code** (greenfield, OpenAPI→MCP, or paywalling an existing MCP server) | `solvapay/create-mcp-app` |19| Managed MCP | SolvaPay-managed auth, paywall, and proxying for an MCP server you host | You want to monetize an MCP server **without code** — paste your server URL, configure plans in the console | [Managed MCP exit](#managed-mcp-exit) |20| SDK paywall | Gate endpoints, meter usage, handle webhooks in your own code | You own an app/API backend and want billing **in code** (REST, Next.js, Express, any stack) | `solvapay/sdk-integration` |21| Hosted checkout | Drop-in payment page + customer portal | You want a production website to sell access with **no custom billing code** | `solvapay/website-checkout` |22| Lovable checkout | Paste-in Vite + Supabase edge checkout | You're prototyping in a **Lovable / Vite preview** and want checkout pasted in | `solvapay/lovable-checkout` |2324## Decision tree2526Walk these in order; the first "yes" wins:27281. Is the thing being monetized an **MCP server / MCP tools for AI agents**?29 - **No code / console / paste server URL** → [Managed MCP exit](#managed-mcp-exit).30 - **Write code** (greenfield worker, OpenAPI→MCP, SDK paywall on existing MCP) → `solvapay/create-mcp-app`.312. Otherwise, is there an **existing app or API backend** to bill from code (paywall, metering, webhooks)? → `solvapay/sdk-integration`.323. Otherwise, do they just want a **hosted payment page** for a production website (no billing code)? → `solvapay/website-checkout`.334. Is it specifically a **Lovable / Vite preview** app? → `solvapay/lovable-checkout`.345. None clearly fits → ask the [disambiguation question](#disambiguation-prompt).3536## Guardrails3738- Never expose `SOLVAPAY_SECRET_KEY` to client code or public env vars.39- Never build custom card collection if hosted checkout satisfies requirements.40- Always prefer official SolvaPay SDK helpers over ad-hoc raw HTTP calls.41- Always prefer topic-based docs discovery (MCP or `llms.txt`), not hard-coded doc paths.4243## Gotchas4445- Valid as a standalone install — routes by **skill id** (`solvapay/<surface>`), not filesystem paths.46- "Paywall my API" or "paywall web app" without MCP context → `solvapay/sdk-integration`, not `solvapay/create-mcp-app`.47- "Scaffold mcp" / greenfield MCP worker → `solvapay/create-mcp-app`, not `solvapay/sdk-integration`.48- **Managed MCP** is console-driven — no skill owns it; use the [Managed MCP exit](#managed-mcp-exit), not a fake skill id.49- "Monetize mcp server no-code" / "paste my server url" / "gate tools without code" → Managed MCP exit, not `solvapay/create-mcp-app`.50- Surface skill descriptions own specific keywords; this router owns ambiguous top-of-funnel prompts only.51- "Customer portal" or billing UI inside an MCP host app → `solvapay/sdk-integration`, not `solvapay/website-checkout`.5253## Routing procedure54551. Walk the [decision tree](#decision-tree) to get a routing id or Managed MCP exit (or hit step 5 → disambiguation).562. Cross-check against the [intent matrix](#intent-matrix) phrase-lookup; if the user's wording matches a different row, prefer the matrix and reconcile.573. If still ambiguous → ask one [disambiguation question](#disambiguation-prompt).584. Run the [verification loop](#verification-loop).595. Emit the [handoff template](#handoff-template) or [Managed MCP exit](#managed-mcp-exit) and stop.6061Docs discovery (shared by all surface skills): SolvaPay Docs MCP → https://docs.solvapay.com/llms.txt → direct page fetch.6263## Intent matrix6465Ambiguous / top-of-funnel triggers only. Stack-specific keywords belong on surface skill descriptions.6667| User intent | Trigger examples | Route to |68| --- | --- | --- |69| Vague onboarding | "add solvapay", "where do I start", "what can solvapay do", "monetize something" | Ask disambiguation, then route |70| Greenfield paid MCP | "create mcp app", "scaffold mcp", "new mcp server", "openapi to mcp", "npm create solvapay", "paid mcp", "monetize mcp" | `solvapay/create-mcp-app` |71| Existing MCP + audit | "add solvapay to my mcp", "paywall my mcp tools" (needs worker template) | `solvapay/create-mcp-app` |72| Managed MCP (no code) | "no code", "managed mcp", "paste my mcp server url", "gate tools without code", "hosted no-code proxy" | [Managed MCP exit](#managed-mcp-exit) |73| Existing app / API paywall | "integrate sdk", "protect api", "paywall", "usage events", "webhooks", "npx solvapay init" | `solvapay/sdk-integration` |74| Web hosted checkout | "add checkout to website", "hosted checkout", "sell access on my site" | `solvapay/website-checkout` |75| Lovable preview checkout | "lovable", "paste into lovable", "vite checkout", "supabase edge checkout", "@preview" | `solvapay/lovable-checkout` |7677## Negative routing examples7879- "Migrate old billing data", "general Stripe setup only" → ask clarification; do not auto-route.80- Greenfield MCP from OpenAPI/scratch → `solvapay/create-mcp-app`, NOT `solvapay/sdk-integration`.81- Paywall web/API without MCP → `solvapay/sdk-integration`, NOT `solvapay/create-mcp-app`.82- No-code MCP / paste server URL → Managed MCP exit, NOT `solvapay/create-mcp-app`.8384## Disambiguation prompt8586"Do you want to (1) build a paid MCP server in code (OpenAPI or hand-written tools), (2) set up Managed MCP in the console (no code — paste your server URL), (3) integrate the TypeScript SDK into an existing app, (4) set up hosted checkout for a production web app, or (5) paste checkout into a Lovable preview app?"8788Default if still ambiguous: greenfield MCP in code → `solvapay/create-mcp-app`; no-code MCP → Managed MCP exit; otherwise → `solvapay/sdk-integration`.8990## Surface skills9192| Skill id | Owns |93| --- | --- |94| `solvapay/create-mcp-app` | Greenfield paid MCP on Cloudflare Workers |95| `solvapay/sdk-integration` | SDK paywall, checkout, usage, webhooks in existing apps |96| `solvapay/website-checkout` | Hosted checkout + portal for production web apps |97| `solvapay/lovable-checkout` | Paste-in preview checkout for Lovable |9899Install if missing: `npx skills add solvapay/skills --skill <flat-name> -y` (e.g. `create-mcp-app` for `solvapay/create-mcp-app`).100101Managed MCP has no skill — use the [Managed MCP exit](#managed-mcp-exit) instead.102103## Verification loop1041051. Confirm routing id matches one intent-matrix row, or the prompt is Managed MCP (console exit).1062. Confirm the prompt is not a near-miss negative (see [evals/README.md](../../evals/README.md) boundary table).1073. If mismatch → re-route or ask one clarifying question; do not hand off until pass.108109## Handoff template110111```markdown112## Routing handoff113- **Routing id:** solvapay/<surface>114- **Why:** [one sentence tied to user intent]115- **Install if missing:** `npx skills add solvapay/skills --skill <flat-name> -y`116- **Next:** Load solvapay/<surface> SKILL.md and follow its instructions.117```118119**After emitting this template, stop. Do not add implementation steps, code snippets, or instructions from the target skill. The handoff is the complete output of this skill.**120121## Managed MCP exit122123Use when the user wants no-code MCP monetization — paste a server URL, gate tools via the console, configure plans without writing paywall code. Managed MCP has no owning skill; this exit replaces the handoff template.124125```markdown126## Managed MCP routing127- **Surface:** Managed MCP (console — no code)128- **Why:** [one sentence tied to user intent — e.g. paste server URL, gate tools without code]129- **Next steps:**130 1. Open the SolvaPay provider console and create a Managed MCP product.131 2. Follow docs: `/no-code-mcp/overview` and `/no-code-mcp/quick-start`.132 3. For API bootstrap on an existing Managed MCP product, see `solvapay/sdk-integration` → `references/mcp-product-console.md`.133```134135**After emitting this exit, stop. Do not scaffold a worker, write paywall code, or hand off to `solvapay/create-mcp-app`.**136137## Task progress138139- [ ] Extract primary intent (MCP code / Managed MCP / SDK / web checkout / Lovable / ambiguous)140- [ ] If ambiguous → ask disambiguation question (include Managed MCP and Lovable options)141- [ ] Match routing id from intent matrix, or Managed MCP exit142- [ ] Run verification loop (confirm not a near-miss negative)143- [ ] Install target skill if missing (skill surfaces only)144- [ ] Emit handoff template or Managed MCP exit and stop — do not add code or implementation steps after145146## Dev mode (skill author / internal testing only)147148If the user explicitly tests against the SolvaPay dev backend, append `--dev` to CLI invocations (`npm create solvapay@latest`, `npx solvapay@latest init`). Never enable for end users.