Recurpay MCP by usefulapi
Read subscriptions, subscribers and orders; manage renewals, billing skips and payment links.
Should I use this
Quality & Safety
Findings (3)
- LOWin recurpay_list_order_subscriptions
- LOWin recurpay_cancel_customer_subscription
- LOWin recurpay_update_subscription_coupon
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"recurpay": {
"url": "https://recurpay.usefulapi.io/mcp"
}
}
}Remote endpoints
https://recurpay.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (18)
🟢recurpay_get_access_scopes
Show the API scopes of the custom app whose token is connected (read-/write- subscriptions, customers, orders, plans, payments, webhooks). Use it when a tool answers 403.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢recurpay_list_subscriptions(status, plan_id, email, created_at_min, created_at_max, ...)
List the store's subscriptions (status active/paused/halted/cancelled/draft, subscriber, plan policies, line items, next_billing_at). Filter by status, plan, subscriber email and dates. Use status=halted to find subscriptions whose renewal payment failed. Page with next_page.
Input Schema
{
"type": "object",
"properties": {
"status": {
"description": "Only subscriptions with this status.",
"type": "string",
"enum": [
"active",
"cancelled",
"paused",
"halted",
"draft"
]
},
"plan_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^[1-9]\\d{0,17}$"
}
],
"description": "Only subscriptions of this plan (id from recurpay_list_plans)."
},
"email": {
"description": "Only subscriptions of the subscriber with this email.",
"type": "string",
"maxLength": 200
},
"created_at_min": {
"description": "Only subscriptions created on or after this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"created_at_max": {
"description": "Only subscriptions created on or before this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"updated_at_min": {
"description": "Only subscriptions updated on or after this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"updated_at_max": {
"description": "Only subscriptions updated on or before this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"sort_key": {
"description": "Field to sort by (default id).",
"type": "string",
"enum": [
"id",
"created_at"
]
},
"sort_by": {
"description": "Sort direction (default asc).",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply.",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢recurpay_get_subscription(subscription_id)
Get one subscription with its subscriber, addresses, line items, discount codes, billing/delivery policy, payment method and billing dates.
Input Schema
{
"type": "object",
"properties": {
"subscription_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^[1-9]\\d{0,17}$"
}
],
"description": "Recurpay subscription id (from recurpay_list_subscriptions)."
}
},
"required": [
"subscription_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢recurpay_list_subscribers(first_name, last_name, email, created_at_min, created_at_max, ...)
List the store's subscribers (customers with at least one subscription): name, email, phone, addresses, total spent. Filter by name, email and dates. Page with next_page.
Input Schema
{
"type": "object",
"properties": {
"first_name": {
"description": "Only subscribers with this first name.",
"type": "string",
"maxLength": 200
},
"last_name": {
"description": "Only subscribers with this last name.",
"type": "string",
"maxLength": 200
},
"email": {
"description": "Only the subscriber with this email.",
"type": "string",
"maxLength": 200
},
"created_at_min": {
"description": "Only subscribers created on or after this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"created_at_max": {
"description": "Only subscribers created on or before this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"updated_at_min": {
"description": "Only subscribers updated on or after this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"updated_at_max": {
"description": "Only subscribers updated on or before this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"sort_key": {
"description": "Field to sort by (default id).",
"type": "string",
"enum": [
"id",
"created_at"
]
},
"sort_by": {
"description": "Sort direction (default asc).",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply.",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢recurpay_get_subscriber(subscriber_id)
Get one subscriber (customer) with contact data, addresses and total spent.
Input Schema
{
"type": "object",
"properties": {
"subscriber_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^[1-9]\\d{0,17}$"
}
],
"description": "Recurpay subscriber id (from recurpay_list_subscribers)."
}
},
"required": [
"subscriber_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢recurpay_list_orders(name, email, subscription_id, created_at_min, created_at_max, ...)
List the orders generated by subscriptions (name, subscriber, status, totals). Filter by order name, subscriber email, subscription and dates. Page with next_page.
Input Schema
{
"type": "object",
"properties": {
"name": {
"description": "Only orders with this name (the store's order number).",
"type": "string",
"maxLength": 200
},
"email": {
"description": "Only orders of the subscriber with this email.",
"type": "string",
"maxLength": 200
},
"subscription_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^[1-9]\\d{0,17}$"
}
],
"description": "Only orders of this subscription."
},
"created_at_min": {
"description": "Only orders created on or after this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"created_at_max": {
"description": "Only orders created on or before this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"updated_at_min": {
"description": "Only orders updated on or after this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"updated_at_max": {
"description": "Only orders updated on or before this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"sort_key": {
"description": "Field to sort by (default id).",
"type": "string",
"enum": [
"id",
"created_at"
]
},
"sort_by": {
"description": "Sort direction (default asc).",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply.",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢recurpay_get_order(order_id)
Get one order with its subscriber and line items.
Input Schema
{
"type": "object",
"properties": {
"order_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^[1-9]\\d{0,17}$"
}
],
"description": "Recurpay order id (from recurpay_list_orders)."
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢recurpay_list_order_subscriptions(order_id, created_at_min, created_at_max, updated_at_min, updated_at_max, ...)
List the subscriptions that belong to one order.
Input Schema
{
"type": "object",
"properties": {
"order_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^[1-9]\\d{0,17}$"
}
],
"description": "Recurpay order id (from recurpay_list_orders)."
},
"created_at_min": {
"description": "Only subscriptions created on or after this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"created_at_max": {
"description": "Only subscriptions created on or before this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"updated_at_min": {
"description": "Only subscriptions updated on or after this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"updated_at_max": {
"description": "Only subscriptions updated on or before this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"sort_key": {
"description": "Field to sort by (default id).",
"type": "string",
"enum": [
"id",
"created_at"
]
},
"sort_by": {
"description": "Sort direction (default asc).",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply.",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢recurpay_list_plans(plan_title, product_title, product_handle, created_at_min, created_at_max, ...)
List the subscription plans (selling plan groups) with their delivery/billing policies and discounts. Filter by plan title, product title/handle and dates. Page with next_page.
Input Schema
{
"type": "object",
"properties": {
"plan_title": {
"description": "Only plans with this title.",
"type": "string",
"maxLength": 200
},
"product_title": {
"description": "Only plans attached to a product with this title.",
"type": "string",
"maxLength": 200
},
"product_handle": {
"description": "Only plans attached to a product with this handle.",
"type": "string",
"maxLength": 200
},
"created_at_min": {
"description": "Only plans created on or after this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"created_at_max": {
"description": "Only plans created on or before this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"updated_at_min": {
"description": "Only plans updated on or after this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"updated_at_max": {
"description": "Only plans updated on or before this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"sort_key": {
"description": "Field to sort by (default id).",
"type": "string",
"enum": [
"id",
"created_at"
]
},
"sort_by": {
"description": "Sort direction (default asc).",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply.",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢recurpay_get_plan(plan_id)
Get one plan with its selling plans (delivery policy, billing policy, anchors, discounts).
Input Schema
{
"type": "object",
"properties": {
"plan_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^[1-9]\\d{0,17}$"
}
],
"description": "Recurpay plan id (from recurpay_list_plans)."
}
},
"required": [
"plan_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢recurpay_list_plan_products(plan_id, page, limit)
List the products attached to one plan, with the variants excluded from it.
Input Schema
{
"type": "object",
"properties": {
"plan_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^[1-9]\\d{0,17}$"
}
],
"description": "Recurpay plan id (from recurpay_list_plans)."
},
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply.",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": [
"plan_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢recurpay_list_webhooks(created_at_min, created_at_max, page, limit)
List the webhook subscriptions of the store (topic, address, status). Needs the read-webhooks scope.
Input Schema
{
"type": "object",
"properties": {
"created_at_min": {
"description": "Only webhooks created at or after this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"created_at_max": {
"description": "Only webhooks created at or before this date.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}(?::\\d{2})?(?:Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply.",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"limit": {
"description": "Results per page, 1-100 (default 100).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴recurpay_cancel_customer_subscription(subscription_id, cancelled_reason)
WRITE: cancel one subscriber's subscription in Recurpay (status becomes cancelled; billing and deliveries stop). This is the merchant's action on a customer's subscription, not the cancellation of this MCP server's own plan. Only the merchant can re-activate it. Ask the user to confirm the subscription first.
Input Schema
{
"type": "object",
"properties": {
"subscription_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^[1-9]\\d{0,17}$"
}
],
"description": "Recurpay subscription id (from recurpay_list_subscriptions)."
},
"cancelled_reason": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Reason shown on the subscription, e.g. 'Customer asked to cancel'."
}
},
"required": [
"subscription_id",
"cancelled_reason"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴recurpay_skip_next_billing(subscription_id)
WRITE: skip the subscription's next billing/delivery cycle (the next order is not generated). Ask the user to confirm the subscription first.
Input Schema
{
"type": "object",
"properties": {
"subscription_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^[1-9]\\d{0,17}$"
}
],
"description": "Recurpay subscription id (from recurpay_list_subscriptions)."
}
},
"required": [
"subscription_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴recurpay_renew_subscription(subscription_id, confirm)
WRITE, MAY CHARGE THE CUSTOMER: renew the subscription now. Recurpay runs the billing cycle immediately, which can charge the subscriber's saved payment method and create an order. Use it e.g. to retry a halted subscription. Only call it when the user explicitly asks for it and set confirm=true. Repeated calls may repeat the charge or notification.
Input Schema
{
"type": "object",
"properties": {
"subscription_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^[1-9]\\d{0,17}$"
}
],
"description": "Recurpay subscription id (from recurpay_list_subscriptions)."
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Set true only after the user explicitly approved this action and its customer/charge effects."
}
},
"required": [
"subscription_id",
"confirm"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴recurpay_send_payment_link(subscription_id, confirm)
WRITE, CONTACTS THE CUSTOMER: generate a payment link for the subscription (renewal payment or payment-method update); Recurpay notifies the subscriber with it. Use it for halted subscriptions. Only call it when the user explicitly asks for it and set confirm=true. Repeated calls may repeat the charge or notification.
Input Schema
{
"type": "object",
"properties": {
"subscription_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^[1-9]\\d{0,17}$"
}
],
"description": "Recurpay subscription id (from recurpay_list_subscriptions)."
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Set true only after the user explicitly approved this action and its customer/charge effects."
}
},
"required": [
"subscription_id",
"confirm"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴recurpay_update_subscriber(subscriber_id, email, first_name, last_name, phone)
WRITE: change a subscriber's contact data (email, first name, last name, phone). Only the fields you pass are sent. Ask the user to confirm the new values.
Input Schema
{
"type": "object",
"properties": {
"subscriber_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^[1-9]\\d{0,17}$"
}
],
"description": "Recurpay subscriber id (from recurpay_list_subscribers)."
},
"email": {
"description": "New email address.",
"type": "string",
"maxLength": 200,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"first_name": {
"description": "New first name.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"last_name": {
"description": "New last name.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"phone": {
"description": "New phone number in international format, e.g. +12025550151.",
"type": "string",
"minLength": 3,
"maxLength": 40
}
},
"required": [
"subscriber_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴recurpay_update_subscription_coupon(subscription_id, action, code)
WRITE: add or remove a discount code (coupon) on one subscription; it changes what the subscriber pays on the next billings. Ask the user to confirm.
Input Schema
{
"type": "object",
"properties": {
"subscription_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^[1-9]\\d{0,17}$"
}
],
"description": "Recurpay subscription id (from recurpay_list_subscriptions)."
},
"action": {
"type": "string",
"enum": [
"add",
"remove"
],
"description": "add = apply the code, remove = take it off."
},
"code": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "The discount code title, e.g. TEST20."
}
},
"required": [
"subscription_id",
"action",
"code"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence