Connect GoCardless to ChatGPT: Automate Mandates and Subscriptions
Generate a secure, managed MCP server for GoCardless in seconds. Connect it to ChatGPT to automate Direct Debit mandates, subscriptions, and payouts using natural language.
If you want to connect GoCardless to ChatGPT so your AI agents can create customers, orchestrate Direct Debit mandates, manage subscriptions, and process refunds, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between ChatGPT's tool calling capabilities and the GoCardless REST API.
If your team uses Claude, check out our guide on connecting GoCardless to Claude or explore our broader architectural overview on connecting GoCardless to AI Agents.
Giving a Large Language Model (LLM) read and write access to a payment orchestration platform is a high-stakes engineering challenge. You either spend weeks building, hosting, securing, and maintaining a custom MCP server to translate LLM JSON arguments into GoCardless's strict payload structures, or you use a managed infrastructure layer.
This guide breaks down exactly how to use Truto to generate a secure, authenticated MCP server for GoCardless, connect it natively to ChatGPT, and execute complex recurring payment workflows using natural language.
Stop writing boilerplate API integration code. Let Truto generate secure, managed MCP servers for your AI agents in seconds. :::
The Engineering Reality of the GoCardless API
A custom MCP server is essentially a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools, implementing it against GoCardless's specific architecture is uniquely challenging.
If you decide to build a custom MCP server for GoCardless, you own the entire API lifecycle. Here are the specific integration challenges that break standard CRUD assumptions when working with GoCardless:
The "Links" Object and Relational Chains
GoCardless does not allow you to simply pass a customer_id at the top level of a payment payload. Almost all relationships in the GoCardless API are managed through a strict links object. To create a payment, your LLM must successfully chain multiple API calls in exact sequence: create a customer, extract the customer_id, create a bank account linked to that customer, extract the bank_account_id, create a mandate linking the bank account and creditor, wait for the mandate to be active, and finally create a payment linking the mandate. Your MCP tool schemas must perfectly guide the LLM to construct this nested links object, or the API will reject the request.
Asynchronous State Machines
In standard SaaS APIs, a 201 Created response means the resource is ready to use. In GoCardless, resources are driven by asynchronous state machines. A mandate starts as pending_submission, moves to submitted, and eventually becomes active or failed. If an LLM creates a mandate and immediately tries to create a payment against it before it is active, the request will fail. Your MCP implementation needs to expose the events resource so the AI agent can poll for state changes, or you must build webhooks into your agent orchestration layer.
Strict Rate Limiting (No Forgiveness)
GoCardless enforces strict rate limits on their API. It is critical to understand how this is handled at the infrastructure layer: Truto does not retry, throttle, or apply backoff on rate limit errors. When the GoCardless API returns an HTTP 429, Truto passes that error directly back to the caller. Truto normalizes the upstream rate limit information into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF spec. Do not expect the integration platform to absorb these spikes - the caller (your LangChain/agent framework or ChatGPT) is entirely responsible for implementing retry and backoff logic when these headers are received.
How to Create the GoCardless MCP Server
Truto dynamically generates MCP tools based on the GoCardless API documentation and resources. You can spin up an MCP server scoped to a specific GoCardless account in seconds.
Method 1: Via the Truto UI
- Log into your Truto dashboard and navigate to Integrated Accounts.
- Select your connected GoCardless account (or connect a new one using the OAuth flow).
- Click the MCP Servers tab.
- Click Create MCP Server.
- Select your desired configuration (e.g., allow
readandwritemethods, filter by specific tags likepaymentsormandates). - Copy the generated MCP server URL (it will look like
https://api.truto.one/mcp/<token>). Treat this URL as a secret.
Method 2: Via the Truto API
You can programmatically generate MCP servers for your end-users. This is ideal if you are deploying AI agents dynamically across hundreds of tenants.
curl -X POST https://api.truto.one/integrated-account/<INTEGRATED_ACCOUNT_ID>/mcp \
-H "Authorization: Bearer $TRUTO_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "ChatGPT GoCardless Payments Agent",
"config": {
"methods": ["read", "write", "custom"],
"tags": ["customers", "mandates", "payments", "subscriptions"]
}
}'The API will return a JSON response containing the secure url. The cryptographic token in the URL handles routing and authentication automatically.
Connecting the MCP Server to ChatGPT
Once you have your Truto MCP server URL, connecting it to your AI environment is straightforward.
Method A: Via the ChatGPT UI
If you are using ChatGPT Pro, Plus, Business, Enterprise, or Education, you can connect the MCP server directly in the browser:
- Open ChatGPT and navigate to Settings -> Apps -> Advanced settings.
- Toggle Developer mode to ON.
- Under the MCP servers / Custom connectors section, click Add new.
- Enter a name (e.g., "GoCardless Automation").
- Paste the Truto MCP URL into the Server URL field.
- Click Save. ChatGPT will immediately ping the
/initializeendpoint, discover the GoCardless tools, and make them available in your chat context.
Method B: Via Manual Config File (SSE Transport)
If you are running a local agent, Claude Desktop, or a custom LangChain implementation, you can configure the server using a standard JSON config file. Because Truto MCP servers operate over standard HTTP JSON-RPC, you use the official SSE server wrapper to handle the transport.
{
"mcpServers": {
"gocardless": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"https://api.truto.one/mcp/<YOUR_TRUTO_TOKEN>"
]
}
}
}GoCardless Hero Tools for AI Agents
Truto automatically exposes the entire GoCardless API surface as structured tools. Here are the highest-leverage operations your AI agent will use to orchestrate billing.
create_a_go_cardless_customer
This is the foundational tool for all GoCardless operations. It creates a customer record with the contact details required for Direct Debit mandates. The LLM must collect given_name, family_name, and email.
"I have a new client, Sarah Connor (sarah@example.com). Please create a customer profile for her in GoCardless so we can set up her billing."
create_a_go_cardless_mandate
Creates a mandate against a customer bank account. The LLM uses the links object to tie the mandate to a specific customer_bank_account ID.
"Create a new Bacs Direct Debit mandate for the bank account ID BA123456. Ensure the reference is set to 'Q3-RETAINER'."
create_a_go_cardless_subscription
Automates recurring payments by creating a subscription against an active mandate. The LLM handles the complex logic of setting the interval_unit (e.g., monthly, yearly) and the day_of_month.
"Set up a monthly subscription for mandate MD98765. Charge them £500 (GBP) on the 1st of every month starting next month."
create_a_go_cardless_payment
Executes a one-off charge against a Direct Debit mandate. The LLM must supply the amount in the lowest currency denomination (e.g., pence or cents).
"We need to charge John Doe £150 for the ad-hoc consulting hours last week. Please create a one-off payment against his active mandate."
go_cardless_subscriptions_pause
Pauses an active subscription so no further payments are created until it is explicitly resumed. This is crucial for automated account management when a client requests a temporary hold.
"Pause the monthly retainer subscription for Acme Corp (Subscription ID SB12345) immediately. They are pausing services for 60 days."
create_a_go_cardless_refund
Initiates a full or partial refund for a specific payment back to the customer. The LLM must reference the original payment ID.
"The client was accidentally double-charged on payment PM12345. Please issue a full refund for that transaction."
list_all_go_cardless_events
Exposes the GoCardless event log. This allows the LLM to poll for state changes (e.g., checking if a payment failed or a mandate was successfully activated) without requiring an inbound webhook receiver.
"Check the recent events for payment PM99999. Has it been confirmed by the bank yet, or is it still pending submission?"
To view the complete inventory of available GoCardless tools, JSON schemas, and parameter requirements, visit the GoCardless integration page.
Workflows in Action
When you connect GoCardless to ChatGPT via Truto, the LLM can chain these tools together to execute complex, multi-step financial operations autonomously.
Scenario 1: Onboarding a New Retainer Client
When a sales representative closes a deal, they can ask the AI agent to orchestrate the entire billing setup.
"We just closed a deal with Wayne Enterprises. The contact is Bruce Wayne (bruce@wayne.com). Set him up in GoCardless, create a bank account profile using the sort code 20-00-00 and account 12345678, generate a mandate, and create a £5000 monthly subscription starting immediately."
How the agent executes this:
- Calls
create_a_go_cardless_customerwith Bruce's details. ReturnsCU123. - Calls
create_a_go_cardless_customer_bank_accountusinglinks.customer: "CU123"and the provided local bank details. ReturnsBA123. - Calls
create_a_go_cardless_mandateusinglinks.customer_bank_account: "BA123". ReturnsMD123. - Calls
create_a_go_cardless_subscriptionfor £5000 GBP,interval_unit: "monthly", passinglinks.mandate: "MD123".
sequenceDiagram
participant User as User Prompt
participant ChatGPT as ChatGPT
participant Truto as Truto MCP Server
participant GC as GoCardless API
User->>ChatGPT: "Set up Bruce Wayne..."
ChatGPT->>Truto: Call create_a_go_cardless_customer
Truto->>GC: POST /customers
GC-->>Truto: Customer ID (CU123)
Truto-->>ChatGPT: Result: CU123
ChatGPT->>Truto: Call create_a_go_cardless_customer_bank_account
Truto->>GC: POST /customer_bank_accounts (linked to CU123)
GC-->>Truto: Bank Account ID (BA123)
Truto-->>ChatGPT: Result: BA123
ChatGPT->>Truto: Call create_a_go_cardless_mandate
Truto->>GC: POST /mandates (linked to BA123)
GC-->>Truto: Mandate ID (MD123)
Truto-->>ChatGPT: Result: MD123
ChatGPT->>Truto: Call create_a_go_cardless_subscription
Truto->>GC: POST /subscriptions (linked to MD123)
GC-->>Truto: Subscription ID (SB123)
Truto-->>ChatGPT: Success response
ChatGPT-->>User: "Bruce Wayne is set up and the £5000 monthly subscription is active."Scenario 2: Handling a Failed Payment Alert
An account manager notices a customer complained about a service interruption due to a failed payment and asks the AI to investigate and resolve it.
"Check the status of the last payment for customer CU987. If it failed, check the mandate status. If the mandate is still active, retry the payment."
How the agent executes this:
- Calls
list_all_go_cardless_paymentsfiltered bycustomer: "CU987". Identifies paymentPM777has astatusoffailed. - Calls
get_single_go_cardless_payment_by_idto inspect the failure reason and extract the mandate IDMD777. - Calls
get_single_go_cardless_mandate_by_idforMD777and verifies the status isactive. - Calls
go_cardless_payments_retrypassingpayment_id: "PM777"to resubmit the charge to the bank.
The LLM then reports back to the user that the payment failed due to insufficient funds, but because the mandate is still active, the retry process has been successfully initiated.
Security and Access Control
Exposing financial infrastructure to an LLM requires strict boundaries. Truto provides several mechanisms to lock down your GoCardless MCP servers:
- Method Filtering: Restrict the server to only
readoperations if you want an AI agent that can audit payments and events but cannot initiate charges or refunds. - Tag Filtering: Limit the server to specific resource tags. For example, you can expose
customersandsubscriptionswhile explicitly hidingrefundsandpayouts. - Require API Token Auth: By setting
require_api_token_auth: true, the MCP URL alone is not enough to execute tools. The calling client must also pass a valid Truto API token in the Authorization header. - Expiration (TTL): Set an
expires_attimestamp when creating the MCP server. This is perfect for granting a temporary AI contractor access to run a specific audit workflow. Once expired, the server and its underlying storage are completely destroyed.
Strategic Wrap-Up
Building a custom MCP server for GoCardless means taking on the burden of translating LLM intent into a highly relational, state-driven API. Every time GoCardless updates a schema, or every time your LLM hallucinates an endpoint path, your integration breaks.
By using Truto, you eliminate the integration build phase entirely. Truto derives tool definitions directly from GoCardless's documentation and API schemas, ensuring your AI agents always have accurate, up-to-date tools. You maintain complete control over access and security, while offloading the infrastructure maintenance.
Stop writing custom integration code. Generate your GoCardless MCP server today and focus on building intelligent billing workflows.
FAQ
- How does Truto handle GoCardless API rate limits?
- Truto does not retry, throttle, or apply backoff on rate limit errors. When GoCardless returns an HTTP 429, Truto passes the error back to the caller with standard IETF rate limit headers. The caller must handle retry logic.
- Can I prevent ChatGPT from creating payments or refunds?
- Yes. When generating the MCP server in Truto, you can use method filtering to restrict access to 'read' operations only, ensuring the LLM can only query data, not mutate financial state.
- How does the MCP server handle GoCardless's 'links' object?
- Truto automatically generates JSON Schema representations of GoCardless payloads based on their documentation. The LLM reads these schemas natively via the MCP tools/list protocol, guiding it to correctly supply the required linked IDs.