README.md•12 kB
# MCP Server for Paddle Billing
[Paddle Billing](https://www.paddle.com/billing?utm_source=dx&utm_medium=paddle-mcp-server) is the developer-first merchant of record. We take care of payments, tax, subscriptions, and metrics with one unified API that does it all.
This is a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) server that provides LLMs and AI agents with tools for interacting with the Paddle API.
> **Important:** This MCP server works with Paddle Billing. It does not support Paddle Classic. To work with Paddle Classic, see: [Paddle Classic API reference](https://developer.paddle.com/classic/api-reference/1384a288aca7a-api-reference?utm_source=dx&utm_medium=paddle-mcp-server)
[](https://cursor.com/install-mcp?name=paddle&config=eyJjb21tYW5kIjoibnB4IC15IEBwYWRkbGUvcGFkZGxlLW1jcCIsImVudiI6eyJQQURETEVfQVBJX0tFWSI6InBkbF9zZGJ4X2FwaWtleV8iLCJQQURETEVfRU5WSVJPTk1FTlQiOiJzYW5kYm94In19)
## Features
The MCP server has near parity with the Paddle API, allowing AI assistants and agents to:
* Manage your full Paddle catalog
* View customer, purchase, and provisioning information
* Handle subscription, payment, and refund workflows
* Debug billing and order management issues
* Create and adjust transactions directly in conversation
* Generate financial reports for financial and operational insights
* Implement and test Paddle integrations faster
<details>
<summary>Available tools</summary>
### Products
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List products | `list_products` | ✅ | ✅ |
| Create a product | `create_product` | ✅ | ❌ |
| Get a product | `get_product` | ✅ | ✅ |
| Update a product | `update_product` | ❌ | ❌ |
### Prices
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List prices | `list_prices` | ✅ | ✅ |
| Create a price | `create_price` | ✅ | ❌ |
| Get a price | `get_price` | ✅ | ✅ |
| Update a price | `update_price` | ❌ | ❌ |
| Preview prices | `preview_prices` | ✅ | ❌ |
### Discounts
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List discounts | `list_discounts` | ✅ | ✅ |
| Create a discount | `create_discount` | ✅ | ❌ |
| Get a discount | `get_discount` | ✅ | ✅ |
| Update a discount | `update_discount` | ❌ | ❌ |
### Discount Groups
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List discount groups | `list_discount_groups` | ✅ | ✅ |
| Create a discount group | `create_discount_group` | ✅ | ❌ |
| Get a discount group | `get_discount_group` | ✅ | ✅ |
| Update a discount group | `update_discount_group` | ❌ | ❌ |
| Archive a discount group | `archive_discount_group` | ❌ | ❌ |
### Customers
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List customers | `list_customers` | ✅ | ✅ |
| Create a customer | `create_customer` | ✅ | ❌ |
| Get a customer | `get_customer` | ✅ | ✅ |
| Update a customer | `update_customer` | ❌ | ❌ |
| List credit balances for a customer | `list_credit_balances` | ✅ | ✅ |
### Addresses
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List addresses for a customer | `list_addresses` | ✅ | ✅ |
| Create an address for a customer | `create_address` | ✅ | ❌ |
| Get an address for a customer | `get_address` | ✅ | ✅ |
| Update an address for a customer | `update_address` | ❌ | ❌ |
### Businesses
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List businesses for a customer | `list_businesses` | ✅ | ✅ |
| Create a business for a customer | `create_business` | ✅ | ❌ |
| Get a business for a customer | `get_business` | ✅ | ✅ |
| Update a business for a customer | `update_business` | ❌ | ❌ |
### Transactions
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List transactions | `list_transactions` | ✅ | ✅ |
| Create a transaction | `create_transaction` | ✅ | ❌ |
| Get a transaction | `get_transaction` | ✅ | ✅ |
| Update a transaction | `update_transaction` | ❌ | ❌ |
| Preview a transaction | `preview_transaction_create` | ✅ | ❌ |
| Revise customer information on a billed or completed transaction | `revise_transaction` | ❌ | ❌ |
| Get a PDF invoice for a transaction | `get_transaction_invoice` | ✅ | ✅ |
### Adjustments
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List adjustments | `list_adjustments` | ✅ | ✅ |
| Create an adjustment | `create_adjustment` | ✅ | ❌ |
| Get a PDF credit note for an adjustment | `get_adjustment_credit_note` | ✅ | ✅ |
### Subscriptions
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List subscriptions | `list_subscriptions` | ✅ | ✅ |
| Get a subscription | `get_subscription` | ✅ | ✅ |
| Update a subscription | `update_subscription` | ❌ | ❌ |
| Cancel a subscription | `cancel_subscription` | ❌ | ❌ |
| Pause a subscription | `pause_subscription` | ❌ | ❌ |
| Resume a paused subscription | `resume_subscription` | ❌ | ❌ |
| Activate a trialing subscription | `activate_subscription` | ❌ | ❌ |
| Preview an update to a subscription | `preview_subscription_update` | ✅ | ❌ |
| Create a one-time charge for a subscription | `create_subscription_charge` | ✅ | ❌ |
| Preview a one-time charge for a subscription | `preview_subscription_charge` | ✅ | ❌ |
### Saved Payment Methods
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List payment methods saved for a customer | `list_saved_payment_methods` | ✅ | ✅ |
| Get a payment method saved for a customer | `get_saved_payment_method` | ✅ | ✅ |
| Delete a payment method saved for a customer | `delete_saved_payment_method` | ❌ | ❌ |
### Customer Portal Sessions
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| Create a customer portal session | `create_customer_portal_session` | ✅ | ❌ |
### Notification Settings
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List notification settings | `list_notification_settings` | ✅ | ✅ |
| Create a notification setting | `create_notification_setting` | ✅ | ❌ |
| Get a notification setting | `get_notification_setting` | ✅ | ✅ |
| Update a notification setting | `update_notification_setting` | ❌ | ❌ |
| Delete a notification setting | `delete_notification_setting` | ❌ | ❌ |
### Events
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List events | `list_events` | ✅ | ✅ |
### Notifications
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List notifications | `list_notifications` | ✅ | ✅ |
| Get a notification | `get_notification` | ✅ | ✅ |
| Replay a notification | `replay_notification` | ✅ | ❌ |
### Notification Logs
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List logs for a notification | `list_notification_logs` | ✅ | ✅ |
### Simulations
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List simulations | `list_simulations` | ✅ | ✅ |
| Create a simulation | `create_simulation` | ✅ | ❌ |
| Get a simulation | `get_simulation` | ✅ | ✅ |
| Update a simulation | `update_simulation` | ❌ | ❌ |
### Simulation Runs
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List runs for a simulation | `list_simulation_runs` | ✅ | ✅ |
| Create a run for a simulation | `create_simulation_run` | ✅ | ❌ |
| Get a run for a simulation | `get_simulation_run` | ✅ | ✅ |
### Simulation Run Events
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List events for a simulation run | `list_simulation_run_events` | ✅ | ✅ |
| Get an event for a simulation run | `get_simulation_run_event` | ✅ | ✅ |
| Replay an event for a simulation run | `replay_simulation_run_event` | ✅ | ❌ |
### Reports
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List reports | `list_reports` | ✅ | ✅ |
| Create a report | `create_report` | ✅ | ❌ |
| Get a report | `get_report` | ✅ | ✅ |
| Get a CSV file for a report | `get_report_csv` | ✅ | ✅ |
### Client-Side Tokens
| Operation | Tool | Non-destructive | Read only |
|-----------|------|-----------------|-----------|
| List client-side tokens | `list_client_side_tokens` | ✅ | ✅ |
| Create a client-side token | `create_client_side_token` | ✅ | ❌ |
| Get a client-side token | `get_client_side_token` | ✅ | ✅ |
| Revoke a client-side token | `revoke_client_side_token` | ❌ | ❌ |
</details>
## Installation
To use the MCP server, you'll need an API key. You can create and manage API keys in **Paddle > Developer tools > Authentication**:
- Sandbox: https://sandbox-vendors.paddle.com/authentication-v2
- Live: https://vendors.paddle.com/authentication-v2
To run the server in a client like Claude Desktop, Cursor or Windsurf, add the following to your MCP config:
```json
{
"mcpServers": {
"paddle": {
"command": "npx",
"args": ["-y", "@paddle/paddle-mcp", "--api-key=PADDLE_API_KEY", "--environment=(sandbox|production)", "--tools=(all|read-only|non-destructive|tool_name1,tool_name2,...)"]
}
}
}
```
Replace `PADDLE_API_KEY` with your API key, and pass the correct value as `environment`.
You can also filter the tools available to the MCP server by passing the `--tools` argument. Accepted values are `all`, `read-only`, `non-destructive`, or a comma-separated list of tool names. The default is `non-destructive`.
For detailed setup guides, see:
- [Claude Desktop](https://modelcontextprotocol.io/quickstart/user)
- [Cursor](https://docs.cursor.com/context/model-context-protocol)
- [Windsurf](https://docs.codeium.com/windsurf/mcp)
## Development
1. Install dependencies:
```bash
pnpm install
```
2. Build the server:
```bash
pnpm build
```
3. Update client to use the local build:
```json
{
"mcpServers": {
"paddle": {
"command": "node",
"args": ["path/to/paddle-mcp-server/build/index.js"],
"env": {
"PADDLE_API_KEY": "your_api_key",
"PADDLE_ENVIRONMENT": "sandbox",
"PADDLE_MCP_TOOLS": "all"
}
}
}
}
```
The `PADDLE_MCP_TOOLS` environment variable accepts the same values as the `--tools` argument: `all`, `read-only`, `non-destructive`, or a comma-separated list of tool names. If not set, defaults to `non-destructive`.
## Debugging
To debug the MCP server, you can use the MCP Inspector tool:
1. Run the server with the inspector:
```bash
pnpm inspector
```
2. Open the provided URL in your browser to view and debug the MCP requests and responses.
3. Include the `--api-key` and `--environment` arguments.
## Learn more
- [Paddle developer docs](https://developer.paddle.com?utm_source=dx&utm_medium=paddle-mcp-server)
- [Paddle API reference](https://developer.paddle.com/api-reference/overview?utm_source=dx&utm_medium=paddle-mcp-server)
- [Sign up for Paddle Billing](https://login.paddle.com/signup?utm_source=dx&utm_medium=paddle-mcp-server)