> ## Documentation Index
> Fetch the complete documentation index at: https://docs.redbark.com/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP Server

> Connect AI agents to your Redbark banking and brokerage data

The Redbark MCP server lets AI agents (Claude Desktop, Cursor, Windsurf, etc.) access your bank accounts, balances, transactions, and brokerage data through the [Model Context Protocol](https://modelcontextprotocol.io).

<Info>
  MCP access requires an active **Developer** or **Professional** plan. Trial subscriptions, legacy accounts in their 14-day grace period, and grandfathered accounts also retain MCP access. Brokerage tools (holdings, trades) additionally require a **Professional** plan (or an active trial).
</Info>

## Server URL

```
https://mcp.redbark.com/mcp
```

## Authentication

The MCP server supports OAuth 2.1 for remote MCP clients. Paste the server URL into Claude, ChatGPT, Cursor, or another MCP client and complete the Redbark consent screen. API-key auth is still accepted for legacy/manual setups, but OAuth is recommended.

Discovery endpoints:

| Endpoint                                                           | Purpose                                                            |
| ------------------------------------------------------------------ | ------------------------------------------------------------------ |
| `https://mcp.redbark.com/.well-known/oauth-protected-resource`     | MCP resource metadata                                              |
| `https://mcp.redbark.com/.well-known/oauth-protected-resource/mcp` | MCP resource metadata (alias probed by MCP-spec-following clients) |
| `https://app.redbark.com/.well-known/oauth-authorization-server`   | OAuth authorization server metadata                                |

## Setup

<Tabs>
  <Tab title="Claude (claude.ai, Desktop, Cowork, mobile)">
    Custom Connectors are added once and become available across every Claude client.

    **Pro / Max (personal):** Open **Customize > Connectors > `+` > Add custom connector**, paste `https://mcp.redbark.com/mcp`, click **Add**, then **Connect** to run OAuth.

    **Team / Enterprise:** An owner adds the connector at **Organization settings > Connectors > Add > Custom > Web** with the same URL. Members then connect from **Customize > Connectors**.

    Leave OAuth client ID/secret blank — Redbark supports [dynamic client registration](https://datatracker.ietf.org/doc/html/rfc7591). Reference: [Anthropic custom connectors guide](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp).
  </Tab>

  <Tab title="Claude Code">
    CLI:

    ```bash theme={null}
    claude mcp add --transport http redbark https://mcp.redbark.com/mcp
    ```

    Then run `/mcp` inside Claude Code to complete OAuth.

    Or add to `.mcp.json` (project scope) or `~/.claude.json` (user scope):

    ```json theme={null}
    {
      "mcpServers": {
        "redbark": {
          "type": "http",
          "url": "https://mcp.redbark.com/mcp"
        }
      }
    }
    ```

    `"type": "streamable-http"` is an accepted alias for `"http"`.
  </Tab>

  <Tab title="Cursor">
    Add to `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (project):

    ```json theme={null}
    {
      "mcpServers": {
        "redbark": {
          "url": "https://mcp.redbark.com/mcp"
        }
      }
    }
    ```

    Cursor will open the Redbark OAuth consent screen on first connection.
  </Tab>

  <Tab title="ChatGPT">
    Custom MCP connectors require **Developer Mode**, available on Plus, Pro, Business, Enterprise, and Edu plans.

    1. **Settings > Apps & Connectors > Advanced settings** → toggle **Developer Mode** on.
    2. **Settings > Connectors > Create**.
    3. Set:
       * **Connector name:** `Redbark`
       * **Description:** `Live bank and brokerage data from Redbark`
       * **Connector URL:** `https://mcp.redbark.com/mcp`
       * **Authentication:** OAuth
       * Tick **I trust this application**
    4. Click **Create**, then connect to run OAuth.

    Reference: [OpenAI ChatGPT connector guide](https://developers.openai.com/apps-sdk/deploy/connect-chatgpt).
  </Tab>
</Tabs>

## Available tools

### list\_connections

List all bank and brokerage connections, including institution names, providers, and connection status.

No parameters required.

### list\_accounts

List all bank and brokerage accounts, including names, types, institutions, and currencies.

| Parameter | Type      | Default | Description                     |
| --------- | --------- | ------- | ------------------------------- |
| `limit`   | `integer` | `50`    | Maximum items to return (1-200) |
| `offset`  | `integer` | `0`     | Items to skip for pagination    |

### list\_balances

Fetch live account balances. Returns current and available balances with currencies.

| Parameter    | Type       | Required | Description                                                                                                                                                                                                                                                                                                   |
| ------------ | ---------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `accountIds` | `string[]` | Yes      | Account UUIDs to fetch balances for (1-20; each element must be a UUID). The MCP layer caps batches at 20 because LLM tool calls fan out aggressively; the REST `/v1/balances` endpoint allows up to 100. Each account is fetched live from the provider — keep batches small to avoid rate-limit exhaustion. |

### list\_transactions

Fetch bank transactions for a connection, with optional date range and account filters.

| Parameter      | Type      | Required    | Description                                                                                                          |
| -------------- | --------- | ----------- | -------------------------------------------------------------------------------------------------------------------- |
| `connectionId` | `string`  | Yes         | Connection ID to fetch from                                                                                          |
| `accountId`    | `string`  | Recommended | Account to fetch. Scopes the upstream call to one account. Omitting it (all-accounts) is **deprecated** — see below. |
| `from`         | `string`  | No          | Start date — accepts `YYYY-MM-DD` or full ISO 8601 (`YYYY-MM-DDTHH:mm:ssZ`). Defaults to 30 days ago.                |
| `to`           | `string`  | No          | End date — same formats accepted. Defaults to now.                                                                   |
| `limit`        | `integer` | No          | Max items to return (1-500, default 200)                                                                             |
| `offset`       | `integer` | No          | Items to skip for pagination                                                                                         |

<Warning>
  **Pass `accountId`.** The all-accounts form (omitting `accountId`) is deprecated. It still works over MCP, but the equivalent REST endpoint (`/v1/transactions`) returns **`410 Gone` after 2026-06-30** for calls that omit `accountId`, so any code that mirrors these calls against the REST API will break. List a connection's accounts via [list\_accounts](#list_accounts) and make one `list_transactions` call per account.
</Warning>

### list\_holdings

<Info>
  Requires a **Professional** plan.
</Info>

List holdings for a brokerage connection, including symbols, quantities, prices, and unrealized P\&L.

| Parameter      | Type     | Required | Description                                   |
| -------------- | -------- | -------- | --------------------------------------------- |
| `connectionId` | `string` | Yes      | Brokerage connection ID (must be a UUID)      |
| `accountId`    | `string` | No       | Filter to a specific account (must be a UUID) |

<Info>
  `connectionId` and `accountId` are validated as UUIDs. A non-UUID value fails input validation (a JSON-RPC invalid-params error) rather than returning a `404`.
</Info>

### list\_trades

<Info>
  Requires a **Professional** plan.
</Info>

List trades for a brokerage connection, with optional date range and account filters. The `from`/`to` window is capped at 366 days — split larger ranges into multiple calls.

| Parameter      | Type      | Required | Description                                                                                                                                                                                  |
| -------------- | --------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `connectionId` | `string`  | Yes      | Brokerage connection ID (must be a UUID)                                                                                                                                                     |
| `accountId`    | `string`  | No       | Filter to a specific account (must be a UUID)                                                                                                                                                |
| `from`         | `string`  | No       | Start date — accepts `YYYY-MM-DD` or full ISO 8601. No default; when omitted it is passed through to the brokerage provider as-is, so the effective window depends on the underlying broker. |
| `to`           | `string`  | No       | End date — same formats accepted. No default; passed through to the provider when omitted.                                                                                                   |
| `limit`        | `integer` | No       | Max items to return (1-500, default 200)                                                                                                                                                     |
| `offset`       | `integer` | No       | Items to skip for pagination                                                                                                                                                                 |

<Info>
  `connectionId` and `accountId` are validated as UUIDs. A non-UUID value fails input validation (a JSON-RPC invalid-params error) rather than returning a `404`.
</Info>

## Example prompts

Once connected, you can ask your AI agent things like:

* "What bank accounts do I have connected?"
* "Show me my current balances across all accounts"
* "What were my transactions last week?"
* "How much did I spend on groceries this month?"
* "Show me my brokerage holdings and P\&L"

## Troubleshooting

| Error                                | Cause                                                                                                                                                                                                      | Fix                                                                                         |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| 401 Unauthorized                     | Missing, invalid, or expired OAuth token                                                                                                                                                                   | Reconnect Redbark from your MCP client                                                      |
| 403 Plan required                    | Not on a Developer or Professional plan                                                                                                                                                                    | Upgrade at [app.redbark.com/settings/billing](https://app.redbark.com/settings/billing)     |
| 403 Professional required            | Brokerage tool on a Developer plan                                                                                                                                                                         | Upgrade to Professional for holdings and trades                                             |
| 403 Brokerage scope missing          | OAuth-authenticated client whose access token does not include the `brokerage:read` scope. API-key auth implicitly grants both `mcp:read` and `brokerage:read`, so this only applies to OAuth connections. | Disconnect and reconnect the app, granting brokerage access on the consent screen           |
| 405 Method Not Allowed on GET `/mcp` | Client is using the SSE transport                                                                                                                                                                          | The server is Streamable HTTP only — make sure the client sends `POST /mcp`, not `GET /mcp` |
| 413 / 400 from `/mcp`                | Request body too large or malformed JSON                                                                                                                                                                   | Bodies are capped at 16KB and JSON-RPC batches at 10 entries — split your requests          |
| 429 Too Many Requests                | Per-IP or per-credential rate limit hit                                                                                                                                                                    | Honour the `Retry-After` header before retrying                                             |
| Connection timeout                   | Server cold start                                                                                                                                                                                          | Retry after a few seconds; the server scales from zero                                      |
