Prerequisites
- SolvaPay provider account
- Origin MCP server URL available over HTTPS
- Pricing plan decisions ready for product setup (you will configure plans during product creation)
Step 1: Create Product and Select Plans
Start in Products, complete product details, then select at least one plan in the Plans step. If you are in onboarding, this can be your guided first product flow.Step 2: Enable Hosted MCP Pay Configuration
In the Integration step, enable and configure Hosted MCP Pay:- MCP URL slug (public endpoint slug)
- Origin MCP server URL (your upstream MCP endpoint)
- Optional auth settings, if required
Step 3: Create Product and Verify MCP Server URL
After creating the product, open the product details page and confirm:- Product is active
- Hosted MCP integration is enabled
- Generated MCP server URL is present and copyable
Step 4: Use Connect for quick client testing
From the product overview, click Connect to test your configured MCP Server product without manual setup. Use the menu option that matches your workflow:- Copy MCP URL to paste into any MCP client manually
- Connect to Claude to open the Claude connection flow
- Connect to Cursor to open the Cursor connection flow
User Onboarding Behavior
When users connect to the hosted MCP server URL:- They authenticate via SolvaPay-hosted OAuth
- SolvaPay evaluates plan access for requested tools
- Usage and billing are handled through your configured plans
What to Do Next
- Follow Test MCP server auth and paywall for live client testing prompts and expected outcomes
- Use Connect in product overview to start the live connection flow in Claude or Cursor
- Review Authentication for OAuth behavior
- Configure Hosted Pages for branded customer flows
API quickstart (SDK bootstrap endpoint)
If you want the same setup flow through API, use the SDK bootstrap route:POST /v1/sdk/products/mcp/bootstrap
This creates in one call:
- MCP-enabled product
- free plan settings
- paid plans (for example
pro) - origin URL configuration
- tool-to-plan mapping
originUrlfreePlanpaidPlanstools[].noPlantools[].planIds(orplanRefs/planKeysduring bootstrap)
freeUnits: 0 on the free tier means unlimited free access for authenticated users.
Use this for the fastest onboarding. If you need fine-grained lifecycle control, use the granular
product, plan, and MCP server endpoints.
Configure plans after bootstrap
After the product exists, use:PUT /v1/sdk/products/:productRef/mcp/plans
This endpoint lets you update free-plan settings, replace paid plans, and remap tool access.
Request fields:
freePlan(required) — updates the existing default free planpaidPlans(optional) — replace paid plans, remove all paid plans ([]), or leave unchanged (omit)toolMapping(optional) — explicit tool-to-plan mapping by plan keys
productmcpServerplanMap
Mode 1: add or replace paid plans
Mode 2: revert to free-only
SetpaidPlans to [] to remove all paid plans and remap protected tools to free:
Mode 3: remap tools without changing plans
OmitpaidPlans and pass only toolMapping:
Tool and default-plan precedence
When SolvaPay evaluates access for a tool:- If
tools[].noPlanistrue, the tool is public. - Otherwise, SolvaPay checks if the user’s purchase plan is in:
tools[].planIds, or- the MCP server
defaultPlanId.
Troubleshooting bootstrap errors
Common validation failures forPOST /v1/sdk/products/mcp/bootstrap:
UNKNOWN_PLAN_KEY
A tool references aplanKeysvalue not declared inpaidPlans[].key(orfree).UNKNOWN_PLAN_REFERENCE
tools[].planRefspoints to a plan not created by the same bootstrap request.PLAN_PRODUCT_MISMATCH
tools[].planIdsincludes a plan ID outside the plans created in this bootstrap call.DUPLICATE_TOOL_NAME
The same tool name appears more than once intools.- origin URL validation error (
originUrl)
originUrlmust be a validhttps://URL.
PUT /v1/sdk/products/:productRef/mcp/plans:
MISSING_REQUIRED_FIELD
freePlanis required.NOT_MCP_PRODUCT
The product is not MCP-enabled.NO_MCP_SERVER
No MCP server is linked to the product.DEFAULT_FREE_PLAN_NOT_FOUND
The product is missing a default free plan.UNKNOWN_PLAN_KEY
AtoolMapping[].planKeysentry does not matchfreeor a paid plan key in the same request.