> **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 GoCardless MCP server

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

**Authentication:** OAuth 2.1/DCR
**Categories:** Accounting & Finance, AI, Developer Tools
**Tools:** 24: 17 read, 2 write, 5 destructive
**Users sign in with:** OAuth
**OAuth app:** Scalekit's or your own
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=GOCARDLESSMCP)

## 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 GoCardless MCP connection

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

   Scalekit credentials are available for GoCardless MCP server, so you don't need to register an OAuth app.

4. ### 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 = 'gocardlessmcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize GoCardless 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: 'gocardlessmcp_get_environment',
     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 = "gocardlessmcp"
   identifier = "user_123"

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

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="gocardlessmcp_get_environment",
       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: 'gocardlessmcp_get_customer',
  toolInput: {
    id: '<id>',
  },
  connector: 'gocardlessmcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="gocardlessmcp_get_customer",
    tool_input={
        "id": "<id>",
    },
    connection_name="gocardlessmcp",
    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.

### `gocardlessmcp_get_customer`

Get Customer · Read-only

Retrieve a single customer by ID, with PII fields partially masked.

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

Inputs:

- `id` (`string`, required): Customer ID (e.g. CU000123)

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

### `gocardlessmcp_get_environment`

Get Environment · Read-only

Return the current GoCardless environment (sandbox or live) and setup instructions.

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

Inputs: none.

Example input: `{}`

### `gocardlessmcp_get_mandate`

Get Mandate · Read-only

Retrieve a single mandate (Direct Debit authorisation) by its mandate ID.

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

Inputs:

- `id` (`string`, required): Mandate ID (e.g. MD000123)

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

### `gocardlessmcp_get_payment`

Get Payment · Read-only

Retrieve a single payment by its payment ID.

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

Inputs:

- `id` (`string`, required): Payment ID (e.g. PM000123)

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

### `gocardlessmcp_get_payout`

Get Payout · Read-only

Retrieve a single payout (bank settlement) by its payout ID.

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

Inputs:

- `id` (`string`, required): Payout ID (e.g. PO000123)

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

### `gocardlessmcp_get_refund`

Get Refund · Read-only

Retrieve a single refund by its refund ID.

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

Inputs:

- `id` (`string`, required): Refund ID (e.g. RF000123)

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

### `gocardlessmcp_get_subscription`

Get Subscription · Read-only

Retrieve a single subscription (recurring payment schedule) by its subscription ID.

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

Inputs:

- `id` (`string`, required): Subscription ID (e.g. SB000123)

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

### `gocardlessmcp_integrate_with_gocardless`

Integrate With Gocardless · Read-only

Return an overview of GoCardless integration options for collecting one-off and recurring payments.

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

Inputs: none.

Example input: `{}`

### `gocardlessmcp_list_customers`

List Customers · Read-only

List customers, optionally filtered by creation date range.

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

Inputs:

- `after` (`string`, optional): Cursor for next page
- `created_at_gte` (`string`, optional): Filter: created at or after this ISO 8601 datetime
- `created_at_lte` (`string`, optional): Filter: created at or before this ISO 8601 datetime
- `limit` (`number`, optional): Number of results per page (default 50, max 500)
- `sort_direction` (`string`, optional): Sort direction: asc or desc

Example input: `{}`

### `gocardlessmcp_list_events`

List Events · Read-only

List audit log events for state changes across all resources, optionally filtered by resource type, action, or date range.

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

Inputs:

- `action` (`string`, optional): Filter by action (e.g. created, confirmed, failed, paid_out, cancelled)
- `after` (`string`, optional): Cursor for next page
- `created_at_gte` (`string`, optional): Filter: created at or after this ISO 8601 datetime
- `created_at_lte` (`string`, optional): Filter: created at or before this ISO 8601 datetime
- `limit` (`number`, optional): Number of results per page (default 50, max 500)
- `mandate` (`string`, optional): Filter by mandate ID
- `payment` (`string`, optional): Filter by payment ID
- `payout` (`string`, optional): Filter by payout ID
- `refund` (`string`, optional): Filter by refund ID
- `resource_type` (`string`, optional): Filter by resource type: payments, mandates, payouts, refunds, subscriptions, instalment_schedules
- `subscription` (`string`, optional): Filter by subscription ID

Example input: `{}`

### `gocardlessmcp_list_mandates`

List Mandates · Read-only

List mandates (Direct Debit authorisations), optionally filtered by status, customer, or scheme.

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

Inputs:

- `after` (`string`, optional): Cursor for next page
- `customer` (`string`, optional): Filter by customer ID
- `limit` (`number`, optional): Number of results per page (default 50, max 500)
- `scheme` (`string`, optional): Filter by scheme: bacs, sepa_core, ach, autogiro, becs, becs_nz, betalingsservice, faster_payments, pad, pay_to
- `status` (`string`, optional): Filter by status: pending_customer_approval, pending_submission, submitted, active, suspended_by_payer, failed, cancelled, expired, consumed, blocked

Example input: `{}`

### `gocardlessmcp_list_payments`

List Payments · Read-only

List payments, optionally filtered by status, customer, mandate, subscription, currency, or date range.

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

Inputs:

- `after` (`string`, optional): Cursor for next page (from previous response's next_cursor)
- `created_at_gte` (`string`, optional): Filter: created at or after this ISO 8601 datetime
- `created_at_lte` (`string`, optional): Filter: created at or before this ISO 8601 datetime
- `currency` (`string`, optional): Filter by currency code (e.g. GBP, EUR, USD)
- `customer` (`string`, optional): Filter by customer ID (e.g. CU000123)
- `limit` (`number`, optional): Number of results per page (default 50, max 500)
- `mandate` (`string`, optional): Filter by mandate ID (e.g. MD000123)
- `sort_direction` (`string`, optional): Sort direction: asc or desc
- `status` (`string`, optional): Filter by status: pending_submission, submitted, confirmed, paid_out, cancelled, customer_approval_denied, failed, charged_back
- `subscription` (`string`, optional): Filter by subscription ID (e.g. SB000123)

Example input: `{}`

### `gocardlessmcp_list_payouts`

List Payouts · Read-only

List payouts (bank settlements), optionally filtered by status, currency, or date range.

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

Inputs:

- `after` (`string`, optional): Cursor for next page
- `created_at_gte` (`string`, optional): Filter: created at or after this ISO 8601 datetime
- `created_at_lte` (`string`, optional): Filter: created at or before this ISO 8601 datetime
- `currency` (`string`, optional): Filter by currency code (e.g. GBP, EUR, USD)
- `limit` (`number`, optional): Number of results per page (default 50, max 500)
- `status` (`string`, optional): Filter by status: pending, paid, bounced

Example input: `{}`

### `gocardlessmcp_list_refunds`

List Refunds · Read-only

List refunds, optionally filtered by payment, mandate, or date range.

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

Inputs:

- `after` (`string`, optional): Cursor for next page
- `created_at_gte` (`string`, optional): Filter: created at or after this ISO 8601 datetime
- `created_at_lte` (`string`, optional): Filter: created at or before this ISO 8601 datetime
- `limit` (`number`, optional): Number of results per page (default 50, max 500)
- `mandate` (`string`, optional): Filter by mandate ID
- `payment` (`string`, optional): Filter by payment ID

Example input: `{}`

### `gocardlessmcp_list_subscriptions`

List Subscriptions · Read-only

List subscriptions (recurring payment schedules), optionally filtered by status, customer, or mandate.

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

Inputs:

- `after` (`string`, optional): Cursor for next page
- `customer` (`string`, optional): Filter by customer ID
- `limit` (`number`, optional): Number of results per page (default 50, max 500)
- `mandate` (`string`, optional): Filter by mandate ID
- `status` (`string`, optional): Filter by status: pending_customer_approval, active, cancelled, finished, paused

Example input: `{}`

### `gocardlessmcp_read_gocardless_resource`

Read Gocardless Resource · Read-only

Read the contents of a GoCardless resource by URI to fetch API endpoint details or documentation.

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

Inputs:

- `uri` (`string`, required): The gocardless:// resource URI to read

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

### `gocardlessmcp_submit_feedback`

Submit Feedback · Read-only

Submit a helpfulness rating (1–5) for the current MCP session, with an optional comment.

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

Inputs:

- `rating` (`number`, required): How helpful was this session? 1 = not helpful at all, 5 = extremely helpful
- `comment` (`string`, optional): Optional additional feedback

Example input: `{"rating":1}`

### `gocardlessmcp_create_payment_link`

Create a payment link · Write

Create a Billing Request — a single-use GoCardless-hosted authorisation link for a specific payer, supporting mandate setup, one-off IBP payments, or VRP consent.

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

Inputs:

- `scheme` (`string`, required): Payment scheme for the mandate (or for IBP when payment_only=true). Examples: faster_payments, bacs, sepa_core, ach, pad, becs, pay_to.
- `amount` (`number`, optional): Amount in minor units (e.g. pence for GBP). Required when payment_only=true.
- `constraints_end_date` (`string`, optional): Latest date by which payments can be taken (YYYY-MM-DD). Leave unset for an open-ended agreement.
- `constraints_max_amount_per_payment` (`number`, optional): Maximum amount in minor units that can be charged per payment. Required for PayTo and VRP mandates.
- `constraints_start_date` (`string`, optional): Earliest date from which payments can be taken (YYYY-MM-DD). Defaults to the day the payer authorises.
- `currency` (`string`, optional): ISO 4217 currency code. Required when amount is set.
- `customer_bank_account_id` (`string`, optional): Existing GoCardless customer bank account ID to pre-fill, skipping the bank account collection step.
- `customer_id` (`string`, optional): Existing GoCardless customer ID to link, optional.
- `description` (`string`, optional): Description shown to the payer during authorisation.
- `fallback_enabled` (`boolean`, optional): If true, the billing request can fall back to Direct Debit if the payer's bank does not support the requested scheme (IBP or VRP). Applies to both IBP payment requests and VRP mandate requests. Do not set if GoCardless payment intelligence is enabled.
- `mandate_verify` (`string`, optional): Verification preference for the mandate: minimum, recommended (default), when_available, or always.
- `payment_context_code` (`string`, optional): Payment context for cVRP mandates. One of: billing_goods_and_services_in_advance, billing_goods_and_services_in_arrears, pisp_payee, ecommerce_merchant_initiated_payment, face_to_face_point_of_sale, transfer_to_self, transfer_to_third_party, bill_payment, ecommerce_goods, ecommerce_services, other, party_to_party. Required for cVRP.
- `payment_only` (`boolean`, optional): Set true for a payment-only (IBP) flow — no mandate will be created. Requires amount and currency.
- `payment_purpose_code` (`string`, optional): Underlying payment purpose for cVRP mandates (e.g. loan_repayment, bank_loan_delayed_draw_funding, salary_payment). See VRP Commercial Payment Purpose Codes for the full list. Required for cVRP.
- `payment_request_scheme` (`string`, optional): Override the IBP scheme used for the payment_request in a combined flow. Omit to let the API infer from currency. Only valid when amount is set and payment_only=false.
- `periodic_limit_alignment` (`string`, optional): How the period resets: calendar (end of current period, e.g. end of month) or creation_date (same date next period). Defaults to creation_date.
- `periodic_limit_max_total_amount` (`number`, optional): Maximum total amount in minor units that can be charged within the periodic_limit_period. Required for VRP mandates.
- `periodic_limit_period` (`string`, optional): Period for the VRP periodic limit. One of: intraday, day, week, fortnight, month, quarter, half_year, year, flexible. Required when setting a periodic limit.
- `purpose_code` (`string`, optional): High-level purpose category for the mandate and/or payment. Common values: loan, salary_payment, supplier_payment, tax_payment, commercial, consumer, dividend, pension_payment. See Billing Request Purpose Codes for the full list.
- `redirect_uri` (`string`, optional): URL to redirect the payer to after they complete the GoCardless-hosted flow. This is the post-flow landing page — not the bank authorisation redirect used in CPP flows. Omit to use the GoCardless default success screen.
- `sweeping` (`boolean`, optional): Set true for sVRP (Sweeping VRP) — money moved between accounts owned by the same payer. Only valid for faster_payments mandate-only flows; do not combine with payment_only=true.

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

### `gocardlessmcp_create_payment_template_link`

Create a payment template link · Write

Create a reusable Billing Request Template — a permanent shareable link that can be sent to multiple customers, each visit creating a new authorisation session.

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

Inputs:

- `name` (`string`, required): Name for this template shown in the dashboard (max 255 chars).
- `mandate_request_currency` (`string`, optional): ISO 4217 currency code for the mandate (e.g. GBP, EUR). Usually inferred from scheme.
- `mandate_request_description` (`string`, optional): Description shown to the customer during mandate setup.
- `mandate_request_scheme` (`string`, optional): Scheme for the mandate. Supported: bacs, sepa_core, ach, pad, becs, becs_nz, autogiro, betalingsservice, pay_to, sepa_credit_transfer. Note: faster_payments is blocked (use create_payment_link for VRP).
- `mandate_request_verify` (`string`, optional): Verification preference for the mandate: minimum, recommended (default), when_available, or always.
- `metadata` (`object`, optional): Key-value store of custom data for the template. Up to 3 keys, key names up to 50 chars, values up to 500 chars.
- `payment_request_amount` (`string`, optional): Amount for the one-off payment in full decimal form (e.g. "25.00"), NOT minor units. Required when payment_request_scheme is set.
- `payment_request_currency` (`string`, optional): ISO 4217 currency code for the one-off payment. Required when payment_request_amount is set.
- `payment_request_description` (`string`, optional): Description shown to the customer during payment authorisation.
- `payment_request_scheme` (`string`, optional): Scheme for the one-off payment. Limited to: faster_payments, sepa_credit_transfer, sepa_instant_credit_transfer. pay_to is not supported.
- `redirect_uri` (`string`, optional): URL to redirect the customer to after they complete the flow. Omit to use the GoCardless default success screen.

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

### `gocardlessmcp_cancel_mandate`

Cancel a mandate · Destructive

Cancel a mandate (Direct Debit authorisation). This also auto-cancels any active subscriptions and pending payments attached to the mandate. Irreversible once cancelled.

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

Inputs:

- `confirmed` (`boolean`, optional): Set true only after the user has explicitly confirmed the preview in their most recent message. Default false (returns a preview).
- `mandate_id` (`string`, optional): ID of the mandate to cancel (e.g. MD000123). Must be in a cancellable state — see description.
- `mandate_ids` (`array`, optional): For bulk cancellations: list of mandate IDs to cancel (max 10). Use instead of mandate_id.
- `preview_token` (`string`, optional): Required when confirmed=true: the preview_token field from this tool's own preceding preview response (the confirmed=false call for these exact same parameters). Rejected if missing, mismatched, already used, or if confirmed=true arrives too soon after the preview — a preview_token is only valid a few seconds after being issued, since it exists to prove a genuine user reply happened in between, not just that a preview call was made. If confirmed=true is rejected for being too soon, wait for the user's actual next message before trying again; do not immediately retry.

Example input: `{}`

### `gocardlessmcp_cancel_payment`

Cancel a payment · Destructive

Cancel a payment before it is submitted to the bank. Only payments in pending_customer_approval or pending_submission state can be cancelled. Irreversible once cancelled.

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

Inputs:

- `confirmed` (`boolean`, optional): Set true only after the user has explicitly confirmed the preview in their most recent message. Default false (returns a preview).
- `payment_id` (`string`, optional): ID of the payment to cancel (e.g. PM000123). Must be in pending_customer_approval or pending_submission state.
- `payment_ids` (`array`, optional): For bulk cancellations: list of payment IDs to cancel (max 10). Use instead of payment_id.
- `preview_token` (`string`, optional): Required when confirmed=true: the preview_token field from this tool's own preceding preview response (the confirmed=false call for these exact same parameters). Rejected if missing, mismatched, already used, or if confirmed=true arrives too soon after the preview — a preview_token is only valid a few seconds after being issued, since it exists to prove a genuine user reply happened in between, not just that a preview call was made. If confirmed=true is rejected for being too soon, wait for the user's actual next message before trying again; do not immediately retry.

Example input: `{}`

### `gocardlessmcp_create_payment`

Create a payment against a mandate · Destructive

Create a one-off payment against an existing mandate. The mandate must be active or pending submission, and the payment currency must match the mandate's currency.

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

Inputs:

- `amount` (`number`, required): Amount in minor units (e.g. pence for GBP, cents for USD).
- `currency` (`string`, required): ISO 4217 currency code. Must match the mandate's currency.
- `mandate_id` (`string`, required): ID of the mandate to charge (e.g. MD000123). Must be in pending_submission, submitted, or active state.
- `charge_date` (`string`, optional): Optional charge date (YYYY-MM-DD). Omit to use the next possible charge date for the mandate.
- `confirmed` (`boolean`, optional): Set true only after the user has explicitly confirmed the preview in their most recent message. Default false (returns a preview).
- `count` (`number`, optional): Number of identical payments to create against the same mandate (max 25, default 1). When >1, returns a bulk preview before executing.
- `description` (`string`, optional): Optional name for the payment shown in the GoCardless dashboard and on payer confirmation emails. Helps merchants and payers identify the payment (e.g. "Admin fee", "Invoice 123").
- `faster_ach` (`boolean`, optional): ACH only. Set true to explicitly use Faster ACH, false for standard ACH. Omit to let the presence or absence of charge_date determine the processing speed.
- `preview_token` (`string`, optional): Required when confirmed=true: the preview_token field from this tool's own preceding preview response (the confirmed=false call for these exact same parameters). Rejected if missing, mismatched, already used, or if confirmed=true arrives too soon after the preview — a preview_token is only valid a few seconds after being issued, since it exists to prove a genuine user reply happened in between, not just that a preview call was made. If confirmed=true is rejected for being too soon, wait for the user's actual next message before trying again; do not immediately retry.
- `reference` (`string`, optional): Custom bank statement reference. Scheme-specific length limits apply (e.g. 10 chars for Bacs, 140 for SEPA). Not supported for Faster Payments. Bacs custom references require GoCardless Plus/Pro/Enterprise.
- `retry_if_possible` (`boolean`, optional): Automatically retry the payment on failure using intelligent retries. Requires Success+ to be enabled in the GoCardless dashboard. Default false.

Example input: `{"amount":1,"currency":"<currency>","mandate_id":"<mandate_id>"}`

### `gocardlessmcp_create_refund`

Refund a payment · Destructive

Refund all or part of a previously-collected payment back to the payer's bank account. The payment must be in a refundable state (confirmed or paid_out).

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

Inputs:

- `amount` (`number`, required): Refund amount in minor units (e.g. pence for GBP). Must be <= the payment's remaining refundable amount.
- `confirmed` (`boolean`, optional): Set true only after the user has explicitly confirmed the preview in their most recent message. Default false (returns a preview).
- `metadata` (`object`, optional): Key-value store of custom data attached to the refund. Up to 3 keys, key names up to 50 chars, values up to 500 chars.
- `payment_id` (`string`, optional): ID of the payment to refund (e.g. PM000123). Must be in confirmed or paid_out status.
- `payment_ids` (`array`, optional): For bulk refunds: list of payment IDs to refund (max 10). Each gets the same amount. Use instead of payment_id.
- `preview_token` (`string`, optional): Required when confirmed=true: the preview_token field from this tool's own preceding preview response (the confirmed=false call for these exact same parameters). Rejected if missing, mismatched, already used, or if confirmed=true arrives too soon after the preview — a preview_token is only valid a few seconds after being issued, since it exists to prove a genuine user reply happened in between, not just that a preview call was made. If confirmed=true is rejected for being too soon, wait for the user's actual next message before trying again; do not immediately retry.
- `reference` (`string`, optional): Optional reference shown on the payer's bank statement where supported (max 18 chars for most schemes).

Example input: `{"amount":1}`

### `gocardlessmcp_create_subscription`

Create a subscription · Destructive

Create a recurring subscription against a mandate, scheduling regular payments on a weekly, monthly, or yearly interval.

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

Inputs:

- `amount` (`number`, required): Amount per payment in minor units (e.g. pence for GBP, cents for EUR).
- `currency` (`string`, required): ISO 4217 currency code (e.g. GBP, EUR, USD). Must match the mandate's scheme.
- `interval_unit` (`string`, required): Time unit between charges: weekly, monthly, or yearly.
- `confirmed` (`boolean`, optional): Set true only after the user has explicitly confirmed the preview in their most recent message. Default false (returns a preview).
- `count` (`number`, optional): Total number of payments to take. Omit (or set 0) for an indefinite subscription.
- `day_of_month` (`number`, optional): Day of month to charge (1–28, or -1 for last day). Required for monthly and yearly subscriptions.
- `interval` (`number`, optional): Number of interval_units between charges. Must be ≥ 1. Defaults to 1.
- `mandate_id` (`string`, optional): ID of the mandate to create the subscription against (e.g. MD000123).
- `mandate_ids` (`array`, optional): For bulk creation: list of mandate IDs to create the subscription against (max 25). Use instead of mandate_id.
- `metadata` (`object`, optional): Key-value store of custom data. Up to 3 keys, key names up to 50 chars, values up to 500 chars.
- `month` (`string`, optional): Month to charge, lowercase (e.g. january). Required for yearly subscriptions.
- `name` (`string`, optional): Name for the subscription (max 255 chars). Used as the description on each payment created.
- `payment_reference` (`string`, optional): Reference shown on the customer's bank statement. For Bacs: requires own Service User Number.
- `preview_token` (`string`, optional): Required when confirmed=true: the preview_token field from this tool's own preceding preview response (the confirmed=false call for these exact same parameters). Rejected if missing, mismatched, already used, or if confirmed=true arrives too soon after the preview — a preview_token is only valid a few seconds after being issued, since it exists to prove a genuine user reply happened in between, not just that a preview call was made. If confirmed=true is rejected for being too soon, wait for the user's actual next message before trying again; do not immediately retry.
- `retry_if_possible` (`boolean`, optional): Retry failed payments using intelligent retries (Success+). Defaults to false. Requires Success+ enabled in the GoCardless dashboard.
- `start_date` (`string`, optional): Date of the first payment (YYYY-MM-DD). Must be on or after the mandate's next_possible_charge_date. Defaults to next_possible_charge_date if omitted.

Example input: `{"amount":1,"currency":"<currency>","interval_unit":"<interval_unit>"}`

## Related

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
- [Stripe](/agentkit/connectors/stripe/): Scalekit connector, Access token, 178 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 |
