MewCP Razorpay MCP Server
Hosted, Stateless & Multitenant Razorpay MCP server enables AI assistants to manage payments, customers, subscriptions, invoices, and financial operations through Razorpay.
Documentation
Automate Razorpay payments, refunds, and settlements through AI.
A Model Context Protocol (MCP) server that exposes Razorpay's API for managing orders, payments, refunds, and settlements.
Overview
The Razorpay MCP Server provides full lifecycle payment management through AI:
- Create and track orders, capture and update payments
- Issue full or partial refunds with speed control
- Query settlements and reconcile transaction history
Perfect for:
- Automating refund workflows and customer support payment queries
- Building AI-powered dashboards that pull live payment and settlement data
- Triggering order creation and payment capture from conversational interfaces
Tools
health_check — Check server readiness
Returns a status object confirming the server is running and reachable.
Inputs: (none)
Output:
{
"status": "ok",
"server": "CL Razorpay MCP Server"
}
create_order — Create a new Razorpay order
Creates a new order object. The returned order ID is passed to the Razorpay checkout SDK on the frontend to initiate payment.
Inputs:
- `amount` (integer, required) — Amount in smallest currency unit (e.g. paise for INR)
- `currency` (string, required) — ISO 4217 currency code, e.g. 'INR'
- `receipt` (string, optional) — Merchant receipt number (max 40 chars)
- `notes` (object, optional) — Key-value notes to attach to the order
- `partial_payment` (boolean, optional) — Whether partial payments are allowed (default: false)
Output:
{
"id": "order_XXXXXXXXXX",
"entity": "order",
"amount": 50000,
"currency": "INR",
"status": "created"
}
fetch_order — Fetch a specific order
Retrieves full details of a single Razorpay order by its order ID.
Inputs:
- `order_id` (string, required) — Razorpay order ID (e.g. 'order_XXXXXXXXXX')
Output:
{
"id": "order_XXXXXXXXXX",
"entity": "order",
"amount": 50000,
"amount_paid": 0,
"status": "created"
}
fetch_all_orders — Fetch paginated list of orders
Returns a filtered, paginated list of all Razorpay orders. Supports Unix timestamp range filtering.
Inputs:
- `count` (integer, optional) — Number of orders to fetch, max 100 (default: 10)
- `skip` (integer, optional) — Number of orders to skip for pagination (default: 0)
- `from_timestamp` (integer, optional) — Unix timestamp — fetch orders created after this time
- `to_timestamp` (integer, optional) — Unix timestamp — fetch orders created before this time
Output:
{
"entity": "collection",
"count": 10,
"items": [...]
}
fetch_payments_for_order — Fetch payments for a specific order
Returns all payments made against a given order ID.
Inputs:
- `order_id` (string, required) — Razorpay order ID (e.g. 'order_XXXXXXXXXX')
Output:
{
"entity": "collection",
"count": 1,
"items": [...]
}
update_order — Update notes on an order
Patches the notes field on an existing order. Only the notes field can be updated after creation.
Inputs:
- `order_id` (string, required) — Razorpay order ID (e.g. 'order_XXXXXXXXXX')
- `notes` (object, required) — Key-value notes to update on the order
Output:
{
"id": "order_XXXXXXXXXX",
"notes": { "key": "value" }
}
fetch_payment — Fetch a specific payment
Retrieves full details of a single Razorpay payment by its payment ID.
Inputs:
- `payment_id` (string, required) — Razorpay payment ID (e.g. 'pay_XXXXXXXXXX')
Output:
{
"id": "pay_XXXXXXXXXX",
"entity": "payment",
"amount": 50000,
"currency": "INR",
"status": "captured"
}
fetch_all_payments — Fetch paginated list of payments
Returns a filtered, paginated list of all Razorpay payments. Supports Unix timestamp range filtering.
Inputs:
- `count` (integer, optional) — Number of payments to fetch, max 100 (default: 10)
- `skip` (integer, optional) — Number of payments to skip for pagination (default: 0)
- `from_timestamp` (integer, optional) — Unix timestamp — fetch payments created after this time
- `to_timestamp` (integer, optional) — Unix timestamp — fetch payments created before this time
Output:
{
"entity": "collection",
"count": 10,
"items": [...]
}
capture_payment — Capture an authorized payment
Captures a payment that is in authorized state. The amount must exactly match the authorized amount.
Inputs:
- `payment_id` (string, required) — Razorpay payment ID (e.g. 'pay_XXXXXXXXXX')
- `amount` (integer, required) — Amount to capture in smallest currency unit (must match authorized amount)
- `currency` (string, required) — ISO 4217 currency code, e.g. 'INR'
Output:
{
"id": "pay_XXXXXXXXXX",
"status": "captured",
"amount": 50000
}
update_payment — Update notes on a payment
Patches the notes field on an existing payment.
Inputs:
- `payment_id` (string, required) — Razorpay payment ID (e.g. 'pay_XXXXXXXXXX')
- `notes` (object, required) — Key-value notes to update on the payment
Output:
{
"id": "pay_XXXXXXXXXX",
"notes": { "key": "value" }
}
create_refund — Create a refund for a payment
Issues a full or partial refund for a captured payment. Omit amount for a full refund. Speed optimum uses instant refund where available.
Inputs:
- `payment_id` (string, required) — Razorpay payment ID to refund (e.g. 'pay_XXXXXXXXXX')
- `amount` (integer, optional) — Refund amount in smallest currency unit; omit for full refund
- `speed` (string, optional) — Refund speed: 'normal' (default) or 'optimum'
- `notes` (object, optional) — Key-value notes to attach to the refund
- `receipt` (string, optional) — Unique merchant receipt number for the refund
Output:
{
"id": "rfnd_XXXXXXXXXX",
"entity": "refund",
"amount": 50000,
"speed_processed": "normal",
"status": "processed"
}
fetch_refund — Fetch a specific refund
Retrieves full details of a single Razorpay refund by its refund ID.
Inputs:
- `refund_id` (string, required) — Razorpay refund ID (e.g. 'rfnd_XXXXXXXXXX')
Output:
{
"id": "rfnd_XXXXXXXXXX",
"entity": "refund",
"amount": 50000,
"status": "processed"
}
fetch_all_refunds — Fetch paginated list of refunds
Returns a filtered, paginated list of all Razorpay refunds. Supports Unix timestamp range filtering.
Inputs:
- `count` (integer, optional) — Number of refunds to fetch, max 100 (default: 10)
- `skip` (integer, optional) — Number of refunds to skip for pagination (default: 0)
- `from_timestamp` (integer, optional) — Unix timestamp — fetch refunds created after this time
- `to_timestamp` (integer, optional) — Unix timestamp — fetch refunds created before this time
Output:
{
"entity": "collection",
"count": 10,
"items": [...]
}
fetch_refunds_for_payment — Fetch all refunds for a payment
Returns all refunds issued against a specific payment ID, with pagination support.
Inputs:
- `payment_id` (string, required) — Razorpay payment ID (e.g. 'pay_XXXXXXXXXX')
- `count` (integer, optional) — Number of refunds to fetch, max 100 (default: 10)
- `skip` (integer, optional) — Number of refunds to skip for pagination (default: 0)
Output:
{
"entity": "collection",
"count": 2,
"items": [...]
}
update_refund — Update notes on a refund
Patches the notes field on an existing refund.
Inputs:
- `refund_id` (string, required) — Razorpay refund ID (e.g. 'rfnd_XXXXXXXXXX')
- `notes` (object, required) — Key-value notes to update on the refund
Output:
{
"id": "rfnd_XXXXXXXXXX",
"notes": { "key": "value" }
}
fetch_all_settlements — Fetch paginated list of settlements
Returns a filtered, paginated list of all Razorpay settlements. Supports Unix timestamp range filtering.
Inputs:
- `count` (integer, optional) — Number of settlements to fetch, max 100 (default: 10)
- `skip` (integer, optional) — Number of settlements to skip for pagination (default: 0)
- `from_timestamp` (integer, optional) — Unix timestamp — fetch settlements created after this time
- `to_timestamp` (integer, optional) — Unix timestamp — fetch settlements created before this time
Output:
{
"entity": "collection",
"count": 10,
"items": [...]
}
fetch_settlement — Fetch a specific settlement
Retrieves full details of a single Razorpay settlement by its settlement ID.
Inputs:
- `settlement_id` (string, required) — Razorpay settlement ID (e.g. 'setl_XXXXXXXXXX')
Output:
{
"id": "setl_XXXXXXXXXX",
"entity": "settlement",
"amount": 1000000,
"status": "processed"
}
API Parameters Reference
Common Parameters
count— Number of records to return per request (max 100, default 10)skip— Number of records to skip; use withcountfor paginationfrom_timestamp— Unix epoch timestamp (seconds); filters records created at or after this timeto_timestamp— Unix epoch timestamp (seconds); filters records created at or before this time
Resource ID Formats
Orders:
order_{alphanumeric}
Example: order_OGN1lSF2fk1JNW
Payments:
pay_{alphanumeric}
Example: pay_OGN1lSF2fk1JNW
Refunds:
rfnd_{alphanumeric}
Example: rfnd_OGN1lSF2fk1JNW
Settlements:
setl_{alphanumeric}
Example: setl_OGN1lSF2fk1JNW
Amount Formatting
All amounts are in the smallest currency unit:
- INR → paise (₹500.00 =
50000) - USD → cents ($10.00 =
1000) - EUR → cents (€10.00 =
1000)
Getting Your Razorpay API Keys
Steps
- Go to the Razorpay Dashboard
- Navigate to Settings → API Keys
- Click Generate Test Key (for test mode) or Generate Live Key (for production)
- Copy the Key ID and Key Secret — the secret is only shown once; store it securely
Use test mode keys (prefixed
rzp_test_) during development and live keys (rzp_live_) in production.
Troubleshooting
Missing or Invalid Headers
- Cause: API key not provided in request headers or incorrect format
- Solution:
- Verify
Authorization: Bearer YOUR_API_KEYandX-Mewcp-Credential-Id: CREDENTIAL-IDheaders are present - Check API key is active in your MewCP account
- Verify
Insufficient Credits
- Cause: API calls have exceeded your request limits
- Solution:
- Check credit usage in your Curious Layer dashboard
- Upgrade to a paid plan or add credits for higher limits
- Contact support for credit adjustments
Credential Not Connected
- Cause: No Razorpay credential linked to your account
- Solution:
- Go to Credentials in your MewCP dashboard
- Add your Razorpay Key ID and Key Secret
- Retry the request with the correct
X-Mewcp-Credential-Idheader
Malformed Request Payload
- Cause: JSON payload is invalid or missing required fields
- Solution:
- Validate JSON syntax before sending
- Ensure all required tool parameters are included
- Check that
amountis an integer in the smallest currency unit, not a decimal
Server Not Found
- Cause: Incorrect server name in the API endpoint
- Solution:
- Verify endpoint format:
{server-name}/mcp/{tool-name} - Use correct server name from documentation
- Check available servers in your Curious Layer account
- Verify endpoint format:
Razorpay API Error
- Cause: Upstream Razorpay API returned an error
- Solution:
- Check Razorpay service status at Razorpay Status Page
- Verify your API keys have the required permissions for the operation
- Review the error message for specific details (e.g. payment not in
authorizedstate for capture)
Resources
- Razorpay API Documentation — Official API reference
- Razorpay Dashboard — Manage keys, orders, and settlements
- FastMCP Docs — FastMCP specification
- FastMCP Credentials — FastMCP Credentials package for credential handling