
MewCP Stripe MCP
from AStheTECH
Hosted, Stateless & Multitenant Stripe MCP server enables AI assistants to manage payments, customers, subscriptions, invoices, and financial operations through Stripe.
Accept payments, manage subscriptions, and automate billing workflows all through natural language.
A Model Context Protocol (MCP) server that exposes Stripe's API for payment processing, customer management, subscriptions, and financial operations.
Overview
The Stripe MCP Server provides a complete interface to Stripe's payment infrastructure:
- Full customer lifecycle management β create, search, update, and delete customers
- Payment processing via charges and payment intents
- Product & pricing catalog management
- Subscription billing with trial support
- Real-time account balance visibility
Perfect for:
- Automating billing workflows and subscription management without writing code
- Looking up customer payment history and account status through AI assistants
- Setting up products and pricing plans for new features or services
Tools
<details> <summary><code>stripe_create_customer</code> β Create a new Stripe customer</summary>Creates a customer record in Stripe that can hold payment methods, subscriptions, and invoices.
Inputs:
- `api_key` (string, required) β Stripe API key (starts with sk_)
- `email` (string, optional) β Customer's email address
- `name` (string, optional) β Customer's full name
- `description` (string, optional) β Internal description for the customer
- `metadata` (string, optional) β JSON string of metadata key-value pairs (e.g. '{"plan": "enterprise"}')Output:
{
"success": true,
"customer_id": "cus_xxx",
"email": "user@example.com",
"name": "Jane Doe",
"description": "Enterprise customer",
"created": 1716720000,
"metadata": {}
}Returns full customer details including balance, delinquency status, and metadata.
Inputs:
- `api_key` (string, required) β Stripe API key
- `customer_id` (string, required) β Customer ID (e.g. cus_xxx)Output:
{
"success": true,
"customer_id": "cus_xxx",
"email": "user@example.com",
"name": "Jane Doe",
"balance": 0,
"delinquent": false,
"created": 1716720000,
"metadata": {}
}Returns up to 100 customers per page with cursor-based pagination.
Inputs:
- `api_key` (string, required) β Stripe API key
- `limit` (integer, optional) β Number of customers to return, 1β100 (default: 10)
- `starting_after` (string, optional) β Customer ID to paginate fromOutput:
{
"success": true,
"has_more": true,
"count": 10,
"customers": [{ "id": "cus_xxx", "email": "...", "name": "...", "created": 1716720000 }]
}Uses Stripe's search query language to find customers matching specific criteria.
Inputs:
- `api_key` (string, required) β Stripe API key
- `query` (string, required) β Search query (e.g. 'email:"user@example.com"' or 'name:"Jane"')
- `limit` (integer, optional) β Number of results, 1β100 (default: 10)Output:
{
"success": true,
"has_more": false,
"count": 1,
"customers": [{ "id": "cus_xxx", "email": "user@example.com", "name": "Jane Doe" }]
}Creates a direct charge on a customer. Amount is in the smallest currency unit (cents for USD).
Inputs:
- `api_key` (string, required) β Stripe API key
- `amount` (integer, required) β Amount in cents (e.g. 1000 = $10.00)
- `currency` (string, optional) β Currency code: usd, eur, gbp, etc. (default: usd)
- `customer_id` (string, optional) β Customer ID to charge
- `description` (string, optional) β Description of the charge
- `metadata` (string, optional) β JSON string of metadataOutput:
{
"success": true,
"charge_id": "ch_xxx",
"amount": 1000,
"currency": "usd",
"status": "succeeded",
"paid": true
}Creates a payment intent and returns a client_secret for frontend confirmation via Stripe.js.
Inputs:
- `api_key` (string, required) β Stripe API key
- `amount` (integer, required) β Amount in cents
- `currency` (string, optional) β Currency code (default: usd)
- `customer_id` (string, optional) β Customer ID
- `description` (string, optional) β Description
- `metadata` (string, optional) β JSON string of metadata
- `confirm` (boolean, optional) β Confirm immediately (default: false)Output:
{
"success": true,
"payment_intent_id": "pi_xxx",
"client_secret": "pi_xxx_secret_xxx",
"amount": 2000,
"currency": "usd",
"status": "requires_payment_method"
}Creates a product in your Stripe catalog. Products require a price before they can be sold.
Inputs:
- `api_key` (string, required) β Stripe API key
- `name` (string, required) β Product name
- `description` (string, optional) β Product description
- `metadata` (string, optional) β JSON string of metadataOutput:
{
"success": true,
"product_id": "prod_xxx",
"name": "Pro Plan",
"description": "Access to all pro features",
"active": true
}Defines the billing amount and interval for a product. Supports one-time and recurring (subscription) pricing.
Inputs:
- `api_key` (string, required) β Stripe API key
- `product_id` (string, required) β Product ID to attach the price to
- `unit_amount` (integer, required) β Amount in cents
- `currency` (string, optional) β Currency code (default: usd)
- `recurring_interval` (string, optional) β 'month' or 'year' for subscription pricingOutput:
{
"success": true,
"price_id": "price_xxx",
"product": "prod_xxx",
"unit_amount": 999,
"currency": "usd",
"recurring": { "interval": "month" }
}Creates a recurring subscription for a customer using a price ID. Supports trial periods.
Inputs:
- `api_key` (string, required) β Stripe API key
- `customer_id` (string, required) β Customer ID
- `price_id` (string, required) β Price ID for the subscription plan
- `trial_period_days` (integer, optional) β Number of free trial days
- `metadata` (string, optional) β JSON string of metadataOutput:
{
"success": true,
"subscription_id": "sub_xxx",
"customer": "cus_xxx",
"status": "active",
"current_period_start": 1716720000,
"current_period_end": 1719312000
}Cancels a subscription either at the end of the current billing period or immediately.
Inputs:
- `api_key` (string, required) β Stripe API key
- `subscription_id` (string, required) β Subscription ID to cancel
- `cancel_at_period_end` (boolean, optional) β true = cancel at period end, false = cancel immediately (default: true)Output:
{
"success": true,
"subscription_id": "sub_xxx",
"status": "active",
"cancel_at_period_end": true
}Returns available and pending balances across all currencies for the Stripe account.
Inputs:
- `api_key` (string, required) β Stripe API keyOutput:
{
"success": true,
"available": [{ "amount": 50000, "currency": "usd" }],
"pending": [{ "amount": 12000, "currency": "usd" }],
"livemode": true
}Getting Your Stripe API Key
<details> <summary><strong>Steps</strong></summary>- Go to Stripe Dashboard
- Click Developers in the top navigation
- Select API keys from the left sidebar
- Copy your Secret key (starts with
sk_live_for production orsk_test_for testing)
</details>Use
sk_test_keys during development β they work with test card numbers and won't charge real cards.
This tool doesn't publish a standard install command β the repository README on GitHub covers its setup.
Troubleshooting
<details> <summary><strong>Missing or Invalid Headers</strong></summary>- 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
- 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
- Cause: No Stripe credential linked to your account
- Solution:
- Go to Credentials in your MewCP dashboard
- Add your Stripe API key (static auth)
- Retry the request with the correct
X-Mewcp-Credential-Idheader
- Cause: JSON payload is invalid or missing required fields
- Solution:
- Validate JSON syntax before sending
- Ensure all required tool parameters are included
- Check parameter types match expected values
- 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:
- Cause: Upstream Stripe API returned an error
- Solution:
- Check Stripe service status at Stripe Status Page
- Verify your API key has the required permissions (live vs. test mode)
- Review the error message for specific details β Stripe errors are descriptive
<details> <summary><strong>Resources</strong></summary>
- Stripe API Documentation β Official API reference
- Stripe API Reference β Complete endpoint reference
- FastMCP Docs β FastMCP specification
- FastMCP Credentials β FastMCP Credentials package for credential handling