> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the Stripe MCP server

The Stripe MCP connector routes your AI agent's tool calls to Stripe's own MCP server through Scalekit. Each user signs in to Stripe once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 10 tools.

**Authentication:** OAuth 2.1/DCR
**Categories:** Accounting & Finance, Automation
**Tools:** 10: 6 read, 3 write, 1 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own Stripe app
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=STRIPEMCP)

## What you can do

- **Read Stripe data**: look up customers, subscriptions, payments, and other objects in a Stripe account available to the session
- **Create and refund**: create or delete Stripe objects such as customers and refunds, with confirmation for sensitive actions
- **Analyze revenue**: run SQL reporting queries on revenue, products, payments, and subscription billing data
- **Search documentation**: find answers in Stripe docs and the API reference, including parameters and error codes
- **Plan integrations**: get use cases, decision guides, and doc links before building payments or billing

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Stripe MCP connection

   In **AgentKit > Connections**, create a Stripe MCP connection and copy its redirect URI. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Register an OAuth app

   Stripe connections use your own OAuth app. Register one with Stripe and add the redirect URI you copied.

   Then enter the app's Client ID and Client Secret on the Stripe MCP connection.

5. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'stripemcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Stripe MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'stripemcp_list_available_accounts_or_orgs',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "stripemcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Stripe MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="stripemcp_list_available_accounts_or_orgs",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'stripemcp_list_available_accounts_or_orgs',
  toolInput: {},
  connector: 'stripemcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="stripemcp_list_available_accounts_or_orgs",
    tool_input={},
    connection_name="stripemcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `stripemcp_list_available_accounts_or_orgs`

List available accounts or orgs · Read-only

Lists all Stripe accounts available in this session with their stripe_context and livemode values. Call this first to get stripe_context and livemode before any account-specific operation. Ask the user which account to use unless already specified, and warn before switching between test mode and live mode.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `stripemcp_manage_stripe_accounts`

Manage Stripe accounts · Read-only

Returns a URL to the Stripe Dashboard where the user can add accounts, remove accounts, or change permissions for this session. Use when the user wants to add, remove, or modify permissions for an account — no need to call list_available_accounts_or_orgs first. After the user confirms they completed their changes, call list_available_accounts_or_orgs to sync the updated account list.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `stripemcp_search_stripe_documentation`

Search Stripe Documentation · Read-only

Search Stripe official documentation and API reference for answers. Use this to look up Stripe concepts, API parameters, error codes, or integration guidance.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `question` (`string`, required): The question or topic to search Stripe documentation for.
- `language` (`string`, optional): Programming language for code examples in results. Defaults to no specific language. One of: `dotnet`, `go`, `java`, `node`, `php`, `ruby`, `python`, `curl`.
- `search_only_api_ref` (`boolean`, optional): Set to true to search only the API reference. Set to false (default) to search all documentation including guides and tutorials.

Example input: `{"question":"<question>"}`

### `stripemcp_stripe_api_details`

Stripe Api Details · Read-only

Get the full parameter schema for a specific Stripe API operation. Use stripe_api_search to find the operation ID first (e.g. GetCustomers, PostRefunds), then call this to see all available parameters.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `livemode` (`boolean`, required): Whether to operate in livemode (true) or test mode/ sandbox (false). Must match the livemode of the stripe_context account.
- `stripe_api_operation_id` (`string`, required): The Stripe API operation ID to get details for. Get valid IDs from stripe_api_search (e.g. GetCustomers, PostRefunds, PostSubscriptions).
- `stripe_context` (`string`, required): The account to target for this request. Use the `stripe_context` value returned by list_available_accounts_or_orgs.

Example input: `{"livemode":true,"stripe_api_operation_id":"<stripe_api_operation_id>","stripe_context":"<stripe_context>"}`

### `stripemcp_stripe_api_read`

Stripe API Read · Read-only

Execute a read-only (GET) Stripe API operation by its operation ID and parameters. Use stripe_api_search to discover available operations and stripe_api_details to see their parameters before executing.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `livemode` (`boolean`, required): Whether to operate in livemode (true) or test mode/ sandbox (false). Must match the livemode of the stripe_context account.
- `parameters` (`object`, required): Parameters for the API call. Include path parameters (e.g. 'customer' for /v1/customers/{customer}), query parameters, and body parameters. Array fields (e.g. line_items) must be passed as a JSON array value, not as a plain string.
- `stripe_api_operation_id` (`string`, required): The operation ID to execute (e.g. PostCustomers, GetPaymentIntents).
- `stripe_context` (`string`, required): The account to target for this request. Use the `stripe_context` value returned by list_available_accounts_or_orgs.

Example input: `{"livemode":true,"parameters":{},"stripe_api_operation_id":"<stripe_api_operation_id>","stripe_context":"<stripe_context>"}`

### `stripemcp_stripe_api_search`

Stripe Api Search · Read-only

Search available Stripe API operations by intent and resource. Returns operation IDs (e.g. PostCustomers, GetSubscriptions) with their HTTP method and parameters — use these with stripe_api_details or stripe_api_read/stripe_api_write.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `intent` (`string`, required): The intent of the operation. Examples: create, list, refund.
- `livemode` (`boolean`, required): Whether to operate in livemode (true) or test mode/ sandbox (false). Must match the livemode of the stripe_context account.
- `resource` (`string`, required): Target resource the operation is looking to manipulate. Examples: customer, payout methods, issuing card transactions.
- `stripe_context` (`string`, required): The account to target for this request. Use the `stripe_context` value returned by list_available_accounts_or_orgs.
- `limit` (`integer`, optional): Maximum number of results to return. Default: `5`.

Example input: `{"intent":"<intent>","livemode":true,"resource":"<resource>","stripe_context":"<stripe_context>"}`

### `stripemcp_send_stripe_mcp_feedback`

Send Stripe Mcp Feedback · Write

Submit feedback about a Stripe MCP tool experience. Use source=user for feedback from a human, source=agent for feedback generated by an AI agent.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `context` (`string`, required): Additional context about what you were trying to do when you used the tool.
- `quote` (`string`, required): A direct quote or specific observation about the tool experience.
- `sentiment` (`string`, required): Sentiment of the feedback. Valid values: positive, negative, neutral. One of: `positive`, `negative`, `neutral`.
- `source` (`string`, required): Who generated this feedback. Valid values: user (human feedback), agent (AI-generated feedback). One of: `user`, `agent`.
- `tool_name` (`string`, optional): Name of the specific Stripe MCP tool this feedback is about.

Example input: `{"context":"<context>","quote":"<quote>","sentiment":"positive","source":"user"}`

### `stripemcp_stripe_analytics`

Stripe Analytics · Write

Analyze Stripe data (e.g. revenue, products, or payments) and run SQL-based reporting queries. Supports ad-hoc SQL (execute_query_run/retrieve_query_run against searchable tables via search_query_tables/retrieve_query_table) and pre-built subscription/billing metric templates (execute_query_template/retrieve_query_template). Monetary values are returned in the smallest currency unit.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `intent` (`string`, required): The intent of the tool call. One of: `execute_query_run`, `retrieve_query_run`, `search_query_tables`, `retrieve_query_table`, `execute_query_template`, `retrieve_query_template`.
- `livemode` (`boolean`, required): Whether to operate in livemode (true) or test mode/ sandbox (false). Must match the livemode of the stripe_context account.
- `stripe_context` (`string`, required): The account to target for this request. Use the `stripe_context` value returned by list_available_accounts_or_orgs.
- `params` (`object`, optional): The parameters for the tool call. Required parameters depend on the intent.

Example input: `{"intent":"execute_query_run","livemode":true,"stripe_context":"<stripe_context>"}`

### `stripemcp_stripe_implementation_planner`

Stripe Implementation Planner · Write

Stripe payment integration planner. Use this BEFORE writing code when the user wants to accept payments, sell products online, set up billing, or build any Stripe integration — it returns use cases, decision trees, documentation links, and a guide_id for follow-up calls. Successor to stripe_integration_recommender.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `livemode` (`boolean`, required): Whether to operate in livemode (true) or test mode/ sandbox (false). Must match the livemode of the stripe_context account.
- `message` (`string`, required): For new guides: describe the use case or business requirements. For existing guides: provide the latest user response or the full accepted transcript.
- `stripe_context` (`string`, required): The account to target for this request. Use the `stripe_context` value returned by list_available_accounts_or_orgs.
- `accept` (`boolean`, optional): Set to true when returning the completed decision tree with your chosen options to receive the finalized integration guide.
- `guide_id` (`string`, optional): ONLY pass a guide_id that was returned by a previous call to this tool in this conversation. Never fabricate, guess, or reuse guide_ids from other sessions. If you do not have a guide_id from a prior response, omit this field entirely. Invalid guide_ids will be rejected.

Example input: `{"livemode":true,"message":"<message>","stripe_context":"<stripe_context>"}`

### `stripemcp_stripe_api_write`

Stripe API Write · Destructive

Execute a write (POST/DELETE) Stripe API operation by its operation ID and parameters. Use stripe_api_search to discover available operations and stripe_api_details to see their parameters before executing. May require human confirmation for sensitive operations.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `livemode` (`boolean`, required): Whether to operate in livemode (true) or test mode/ sandbox (false). Must match the livemode of the stripe_context account.
- `parameters` (`object`, required): Parameters for the API call. Include path parameters (e.g. 'customer' for /v1/customers/{customer}), query parameters, and body parameters. Array fields (e.g. line_items) must be passed as a JSON array value, not as a plain string.
- `stripe_api_operation_id` (`string`, required): The operation ID to execute (e.g. PostCustomers, GetPaymentIntents).
- `stripe_context` (`string`, required): The account to target for this request. Use the `stripe_context` value returned by list_available_accounts_or_orgs.
- `human_confirmation` (`object`, optional): This tool might require human confirmation. To run it, first invoke it with the desired parameters, ignoring the `approval_token` parameter. If it requires human confirmation, the response will include an approval request ID and a URL to an approval page for the human to approve the tool call. Present this URL to the human as a clickable markdown link, and after they confirm approval, call the tool again with the same parameters plus `approval_token`.

Example input: `{"livemode":true,"parameters":{},"stripe_api_operation_id":"<stripe_api_operation_id>","stripe_context":"<stripe_context>"}`

## Related

Other ways to connect Stripe:

- [Access token](/agentkit/connectors/stripe/): Scalekit connector, Access token, 178 tools

Other Accounting & Finance connectors ([all 20](/agentkit/connectors/?category=accounting-finance)):

- [QuickBooks](/agentkit/connectors/quickbooks/): Scalekit connector, OAuth, 117 tools
- [Xero](/agentkit/connectors/xero/): Scalekit connector, OAuth, 94 tools
- [Dynamo Software](/agentkit/connectors/dynamo/): Scalekit connector, Access token, 36 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
