post_finance_eft_onboard

Changes data · you confirm first

Calls POST /api/finance/eft/onboard as the signed-in person · REST reference

Make an organization payout-ready

Creates or attaches the org's Stripe Connect record so a later payout SETTLES instead of being skipped and retained. Internal/test onboarding — this is not Stripe's hosted onboarding flow, and there is no org-owner path: only platform staff can call it. A failure is answered by what it is, with no upstream text: the DAL refusing the request by its code (no such organization 404, with the DAL's sentence), 503 when the DAL cannot be reached, 500 otherwise.

Arguments

ArgumentTypeDescription
bodyJSONobjectrequiredThe request body, as a JSON object. Its fields are listed below.

Fields of body

FieldTypeDescription
accountIdstringAn existing Stripe account id to attach instead of creating one.
countrystringISO country for the Connect account.
currencystring
orgIdstring (uuid)requiredThe only validated field. Everything else is passed through unchecked.

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_finance_eft_onboard",
    "arguments": {
      "body": {
        "orgId": "11111111-1111-4111-8111-111111111111",
        "accountId": "string",
        "country": "string",
        "currency": "string"
      }
    }
  }
}
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 200) the tool returns one text item holding the API's JSON, pretty-printed.

The org's Connect state after onboarding.

json
{
  "accountId": "string",
  "chargesEnabled": true,
  "orgId": "11111111-1111-4111-8111-111111111111",
  "payoutsEnabled": true,
  "status": "string",
  "stripeConnectId": "11111111-1111-4111-8111-111111111111"
}

Fields

FieldTypeDescription
accountIdstringThe Stripe account id.
chargesEnabledboolean
orgIdstring (uuid)
payoutsEnabledbooleanFalse here means a payout run will SKIP and retain the funds.
statusstring
stripeConnectIdstring (uuid)The :StripeConnect node id, not the Stripe account id.

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.

400

The request was malformed or failed a guard.

403

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

404

The DAL found no such organization. Carries the DAL's sentence.

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_finance_eft_onboard",
  "description": "POST /api/finance/eft/onboard — Creates or attaches the org's Stripe Connect record so a later payout SETTLES instead of being skipped and retained. Internal/test onboarding — this is not Stripe's hosted onboarding flow, and there is no org-owner path: only platform staff can call it. A failure is answered by what it is, with no upstream text: the DAL refusing the request by its code (no such organization 404, with the DAL's sentence), 503 when the DAL cannot be reached, 500 otherwise.\n\nThis changes data. The person is asked to confirm it before it runs, and nothing happens if they decline.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "body": {
        "type": "string",
        "description": "The JSON request body: { accountId: string (An existing Stripe account id to attach instead of creating one.); country: string (ISO country for the Connect account.); currency: string; orgId*: string (The only validated field.) }"
      }
    },
    "required": [
      "body"
    ]
  },
  "annotations": {
    "readOnlyHint": false,
    "destructiveHint": true,
    "idempotentHint": false,
    "openWorldHint": false
  }
}