post_orgs_by_id_connect

Changes data · you confirm first

Calls POST /api/orgs/{id}/connect as the signed-in person · REST reference

Onboard the organization's Stripe Connect account

Platform staff only. Creates the connected account plus the deposit Account and StripeConnect link so a deferred-EFT payout has somewhere to send funds. There is no Stripe-hosted onboarding: the platform prefills all KYC itself. TEST MODE ONLY. StripeService.createConnectAccount submits Stripe's test-mode magic values unconditionally, so it refuses to run against an sk_live key or on a production tier and answers 501 CONNECT_ONBOARDING_DISABLED there. IDEMPOTENT ON EXISTING ACCOUNTS: an org that already has a non-DISABLED StripeConnect record gets that record back rather than a second acct_ id — still at 201, so a 201 here does not mean a new account was created. The request body is not read.

Arguments

ArgumentTypeDescription
idpathstring (uuid)required

Example call

A client sends this over the MCP session; Claude and other agents build it for you. The values are placeholders — the shape is real.

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "post_orgs_by_id_connect",
    "arguments": {
      "id": "11111111-1111-4111-8111-111111111111"
    }
  }
}
Confirmation
The client shows the person the exact request and waits. Nothing runs until they tick Make this change. See Reading and changing.

Result

On success (HTTP 201) the tool returns one text item holding the API's JSON, pretty-printed.

The connected account, whether freshly created or reused.

json
{
  "accountId": "string",
  "status": "ACTIVE",
  "stripeConnectId": "11111111-1111-4111-8111-111111111111"
}

Fields

FieldTypeDescription
accountIdstringStripe's connected-account id (acct_...).
status"ACTIVE" | "PENDING" | "RESTRICTED" | "REJECTED" | "DISABLED"
stripeConnectIdstring (uuid)Id of the platform's own StripeConnect record.

When it fails

A failed call returns isError: true with the API's message as text. A change the person declines, or lets time out, also comes back this way and nothing changes.

403

Authenticated, but the caller holds none of the required permissions.

404

No such resource — or none this caller may see.

501

Onboarding is disabled in live mode. Carries code: CONNECT_ONBOARDING_DISABLED.

502

Stripe refused to create the connected account. The body is a constant; Stripe's own message, naming the refused KYC field, is in the server log.

What the model is shown

This is the tool exactly as the server lists it in tools/list. The description starts with the REST call it makes.

json
{
  "name": "post_orgs_by_id_connect",
  "description": "POST /api/orgs/{id}/connect — Platform staff only. Creates the connected account plus the deposit `Account` and `StripeConnect` link so a deferred-EFT payout has somewhere to send funds. There is no Stripe-hosted onboarding: the platform prefills all KYC itself. TEST MODE ONLY. `StripeService.createConnectAccount` submits Stripe's test-mode magic values unconditionally, so it refuses to run against an `sk_live` key or on a production tier and answers 501 `CONNECT_ONBOARDING_DISABLED` there. IDEMPOTENT ON EXISTING ACCOUNTS: an org that already has a non-DISABLED `StripeConnect` record gets that record back rather than a second `acct_` id — still at 201, so a 201 here does not mean a new account was created. The request body is not read.\n\nThis changes data. The person is asked to confirm it before it runs, and nothing happens if they decline.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "id": {
        "type": "string"
      }
    },
    "required": [
      "id"
    ]
  },
  "annotations": {
    "readOnlyHint": false,
    "destructiveHint": true,
    "idempotentHint": false,
    "openWorldHint": false
  }
}