Skip to main content
skill CX Codex

mcp-stripe — Claude Code skill for Stripe operations

This skill lets an agent handle Stripe records through MCP, from customers and invoices to payment links. Refunds and selected account changes require user approval.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add Heyvhuang/ship-faster --skill mcp-stripe -a claude-code
Open on GitHub

What mcp-stripe does

The skill connects an agent to Stripe MCP to look up customers and payments, create products, prices, invoices and payment links, and inspect balances, subscriptions and disputes. Refunds and changes to subscriptions or disputes require explicit approval. Test mode is the default; switching to live mode requires the user to say “live” and confirm twice.

Before creating a customer, product or price, the agent checks whether a matching object already exists. If an ID or parameter is unclear, it searches Stripe resources or documentation instead of guessing. After an operation, it returns the object type, ID, key fields and next steps. For multi-step workflows, it recommends keeping inputs, plans, receipts and logs in project files, without copying sensitive details verbatim into logs.

Claude Code must connect to https://mcp.stripe.com/ and authenticate with OAuth; if an API key is needed, the skill recommends a restricted key. It cannot create PaymentIntents or subscriptions directly, issue promotion codes, or delete objects.

What it helps with

  • check for an existing customer before creating one
  • create a Stripe product and price
  • prepare an invoice and a shareable payment link
  • inspect balances, payments or disputes
  • issue a refund after user approval

Example prompts for the agent

  • Find the customer with this email address and create a record if none exists.
  • Create a product and a GBP price, checking Stripe for an existing match first.
  • Find the payment I want refunded, show its amount and wait for my confirmation.

How to install mcp-stripe

1Skills CLI (Vercel)

npx skills add Heyvhuang/ship-faster --skill mcp-stripe -a claude-code

2Manually: put the files in place

~/.claude/skills/mcp-stripe/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/mcp-stripe/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about mcp-stripe

How do I install mcp-stripe in Claude Code?

Run npx skills add Heyvhuang/ship-faster --skill mcp-stripe -a claude-code. The skill file is located at ~/.claude/skills/mcp-stripe/SKILL.md.

What does mcp-stripe do?

It gives an agent access to Stripe MCP operations, including customer and invoice workflows, payment links, balance checks and payment searches. Refunds and certain account changes require explicit approval.

Can mcp-stripe create subscriptions or charge a payment directly?

No. It cannot create subscriptions or directly create PaymentIntents or charges. It can inspect and update existing subscriptions.

Source text

SKILL.md · MIT
---
name: mcp-stripe
description: "Stripe MCP transaction operations skill. Execute transaction operations via Stripe MCP server (https://mcp.stripe.com): customer management, products/prices, invoices, payment links, subscriptions, refunds, dispute handling, balance queries. Triggers: user requests Stripe operations including create customer, create product, create invoice, generate payment link, query transactions, process refunds, manage subscriptions, view disputes, check balance, etc."
disable-model-invocation: true
---

# Stripe MCP Transaction Skill

Execute transaction operations via Stripe MCP server.

## File-based Pipeline (Pass Paths Only)

When integrating billing operations into multi-step workflows, persist all context and artifacts to disk, passing only paths between agents/sub-agents.

Recommended directory structure (within project): `runs/<workflow>/active/<run_id>/`

- Input: `01-input/goal.md` (requirements), `01-input/context.json` (known customer/invoice/subscription/payment_intent IDs, etc.)
- Plan: `03-plans/stripe-actions.md` (list of operations to execute; money/contracts must be written here and await confirmation first)
- Output: `05-final/receipt.md` + `05-final/receipt.json` (object type + ID + key fields + next steps)
- Logs: `logs/events.jsonl` (summary of each tool call; do not log sensitive information verbatim)

## Connection Configuration

MCP Server: `https://mcp.stripe.com`

**Claude Code Connection**:
```bash
claude mcp add --transport http stripe https://mcp.stripe.com/
claude /mcp  # authenticate
```

**Authentication**: OAuth preferred; if API key needed, use restricted key as Bearer token.

**Mode**: Test mode by default. Switching to live requires user to explicitly say "live" and double confirmation.

## Three Hard Rules

1. **Read before write** - Before creating customer/product/price, first use `list_*` or `search_stripe_resources` to check if it already exists, avoid duplicate objects
2. **Money and contracts require confirmation** - `create_refund`, `cancel_subscription`, `update_subscription`, `update_dispute` must display content and get explicit user confirmation before execution
3. **When in doubt, search** - If unsure about object ID, fields, or approach, first call `search_stripe_documentation` or `search_stripe_resources`, don't guess parameters

## Available Tools

| Category | Tool | Description |
|----------|------|-------------|
| Account | `get_stripe_account_info` | Get account info |
| Balance | `retrieve_balance` | Query available/pending balance |
| Customer | `create_customer`, `list_customers` | Create/list customers |
| Product | `create_product`, `list_products` | Create/list products |
| Price | `create_price`, `list_prices` | Create/list prices |
| Invoice | `create_invoice`, `create_invoice_item`, `finalize_invoice`, `list_invoices` | Full invoice workflow |
| Payment Link | `create_payment_link` | Create shareable payment link |
| Payment Intent | `list_payment_intents` | List payment intents (query only) |
| Refund | `create_refund` | ⚠️ Dangerous - requires confirmation |
| Dispute | `list_disputes`, `update_dispute` | ⚠️ update requires confirmation |
| Subscription | `list_subscriptions`, `update_subscription`, `cancel_subscription` | ⚠️ update/cancel require confirmation |
| Coupon | `create_coupon`, `list_coupons` | Create/list coupons |
| Search | `search_stripe_resources`, `fetch_stripe_resources`, `search_stripe_documentation` | Search objects/documentation |

**Cannot do** (not in tool list):
- ❌ Create PaymentIntent / charge directly
- ❌ Create subscription (create_subscription)
- ❌ Create Promotion Code (only coupon)
- ❌ Delete objects

## Dangerous Action Handling Flow

Before executing `create_refund`, `cancel_subscription`, `update_subscription`, `update_dispute`:

1. **Display first** - List the object ID and key fields to be operated on
2. **Explain impact** - Refund amount/cancellation time/change content
3. **Request confirmation** - Wait for user to explicitly reply "confirm"/"yes"/"proceed"
4. **Execute and receipt** - Return operation result + object ID + status

Example confirmation prompt:
```
About to execute refund:
- PaymentIntent: pi_xxx
- Amount: £50.00 (full amount)
- Reason: requested_by_customer

Reply "confirm" to proceed, or "cancel" to abort.
```

## Default Configuration

- **Currency**: Prioritize user-specified currency; if not specified, use existing object currency (Price/Invoice/PaymentIntent); if still unclear, ask
- **Amount**: Accept decimal input, auto-convert to smallest unit integer (e.g., £19.99 → 1999)
- **Output receipt**: Object type + ID + key fields + next steps

## Common Workflows

### Create Customer
```
1. search_stripe_resources or list_customers to check if already exists
2. If not exists, create_customer(name, email, metadata)
3. Return cus_xxx + key info
```

### Create Product and Price
```
1. list_products to check if product already exists
2. create_product(name, description)
3. create_price(product=prod_xxx, unit_amount=amount in smallest unit, currency="gbp", recurring if needed)
4. Return prod_xxx + price_xxx
```

### Create and Send Invoice
```
1. Confirm customer ID (if unknown, query with list_customers)
2. create_invoice(customer=cus_xxx, collection_method, days_until_due)
3. create_invoice_item(invoice=inv_xxx, price=price_xxx, quantity)
4. finalize_invoice(invoice=inv_xxx)
5. Return inv_xxx + hosted_invoice_url
```

### Create Payment Link
```
1. Confirm price ID (if unknown, query with list_prices)
2. create_payment_link(line_items=[{price, quantity}], after_completion if needed)
3. Return payment link URL
```

### Refund (Dangerous)
```
1. list_payment_intents to find target payment
2. Display pi_xxx + amount + customer info
3. Request user confirmation
4. After confirmation, create_refund(payment_intent=pi_xxx, amount for partial refund, reason)
5. Return re_xxx + status
```

### Cancel Subscription (Dangerous)
```
1. list_subscriptions(customer=cus_xxx) to find target
2. Display sub_xxx + current status + next billing date
3. Ask: cancel immediately or at period end (cancel_at_period_end)
4. After confirmation, cancel_subscription(subscription=sub_xxx)
5. Return cancellation result
```

## Tool Parameter Details

See [tools.md](tools.md)

## Error Handling

- **Object doesn't exist**: Use search_stripe_resources or fetch_stripe_resources to find correct ID
- **Parameter error**: Use search_stripe_documentation to query correct parameter format
- **Insufficient permissions**: Prompt user to check API key permission scope
- **Network error**: Suggest retry or check MCP connection status

© Heyvhuang · MIT · Heyvhuang/ship-faster

Similar skills

Everything for Finance and business →

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor