Bancadia

Add business checking recommendations to your AI bookkeeping agent

A bookkeeping agent sees the problem before anyone else: personal groceries and business software on the same account, or a sole proprietor paying monthly fees on a personal account used for business. A separate business account makes the books cleaner and tax time simpler, and the agent can name one that connects to the ledger it already keeps.

When to call Bancadia

  • During onboarding, the only connected accounts are personal accounts, or there is no dedicated business account at all.
  • Categorization keeps flagging commingled transactions: personal spending in the business account, or business income landing in a personal one.
  • Bank fees show up as a recurring expense category, such as maintenance, excess-transaction or paper-statement fees.
  • The client adds a new revenue stream or entity and needs a separate account to keep it clean.

Signals you likely already have

Each maps to an argument on query_business_checking. All arguments are optional and combine with AND semantics, except target_industries and target_business_profiles, which reorder results without excluding any.

SignalArgument
Entity type from onboardingentity_types_accepted, e.g. ["sole_prop"] or ["llc"]
Business address stateavailable_states
Monthly transaction count from the bank feedfree_transactions_min
Bank fees categorized in the ledgermonthly_fee_max
Ledger software the client usesaccounting_integration_available: true
Receipt and expense tooling in useexpense_integration_available: true
Business type and stagetarget_industries, target_business_profiles, e.g. ["side_hustle"]

Quickstart: connect the MCP server

Bancadia is delivered as a remote MCP server over Streamable HTTP at https://mcp.bancadia.com/. initialize and tools/list need no credentials; tools/call needs a bearer token, which you can create for free at bancadia.com/developer/signup. The server exposes two tools: query_business_checking to search listings, and get_business_checking_listing for full fees and features on one listing.

Claude Desktop

Add to claude_desktop_config.json. Claude Desktop runs local servers from this file, so the remote server is bridged with mcp-remote.
{
  "mcpServers": {
    "bancadia": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.bancadia.com/",
        "--header",
        "Authorization:${BANCADIA_AUTH}"
      ],
      "env": {
        "BANCADIA_AUTH": "Bearer sk_bancadia_YOUR_TOKEN"
      }
    }
  }
}

Claude Code

claude mcp add --transport http bancadia https://mcp.bancadia.com/ \
  --header "Authorization: Bearer sk_bancadia_YOUR_TOKEN"

Any MCP client (TypeScript SDK)

Uses @modelcontextprotocol/sdk. The arguments match the example in the next section.
import { Client } from '@modelcontextprotocol/sdk/client/index.js'
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'

const transport = new StreamableHTTPClientTransport(new URL('https://mcp.bancadia.com/'), {
  requestInit: {
    headers: { Authorization: `Bearer ${process.env.BANCADIA_MCP_API_TOKEN}` },
  },
})
const client = new Client({ name: 'your-agent', version: '1.0.0' })
await client.connect(transport) // runs initialize + session negotiation

const result = await client.callTool({
  name: 'query_business_checking',
  arguments: {
    "entity_types_accepted": [
      "llc"
    ],
    "available_states": [
      "NY"
    ],
    "monthly_fee_max": 0,
    "free_transactions_min": 60,
    "accounting_integration_available": true,
    "target_industries": [
      "content_creator_solopreneur"
    ],
    "target_business_profiles": [
      "bootstrapped_solopreneur"
    ]
  },
})

// content[0].text is a JSON-encoded array of listings
const listings = JSON.parse(result.content[0].text)
await client.close()

Inside an agent framework

Vercel AI SDK: @ai-sdk/mcp turns the live tools/list manifest into model tools, so there is no hand-copied schema to drift.
import { createMCPClient } from '@ai-sdk/mcp'
import { generateText, stepCountIs } from 'ai'

const bancadia = await createMCPClient({
  transport: {
    type: 'http',
    url: 'https://mcp.bancadia.com/',
    headers: { Authorization: `Bearer ${process.env.BANCADIA_MCP_API_TOKEN}` },
  },
})

try {
  const { text } = await generateText({
    model: yourModel,
    system: SYSTEM_PROMPT, // see the system-prompt snippet below
    messages,
    tools: await bancadia.tools(), // query_business_checking, get_business_checking_listing
    stopWhen: stepCountIs(4),
  })
} finally {
  await bancadia.close()
}
Python: the official mcp SDK. The same session can be handed to any framework that accepts an MCP ClientSession.
import json, os
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

headers = {"Authorization": f"Bearer {os.environ['BANCADIA_MCP_API_TOKEN']}"}

async with streamablehttp_client("https://mcp.bancadia.com/", headers=headers) as (read, write, _):
    async with ClientSession(read, write) as session:
        await session.initialize()
        result = await session.call_tool(
            "query_business_checking",
            {
                "entity_types_accepted": [
                    "llc"
                ],
                "available_states": [
                    "NY"
                ],
                "monthly_fee_max": 0,
                "free_transactions_min": 60,
                "accounting_integration_available": True,
                "target_industries": [
                    "content_creator_solopreneur"
                ],
                "target_business_profiles": [
                    "bootstrapped_solopreneur"
                ]
            },
        )
        listings = json.loads(result.content[0].text)

The full session lifecycle, response shape, rate limits and error codes are in the MCP reference.

Example tool call and response

A freelance video editor in New York runs a single-member LLC through a personal checking account. The bookkeeping agent sees about 60 business transactions a month mixed in with personal spending. It looks for a no-fee account that accepts LLCs, covers that volume and connects to accounting software.

tools/call params
{
  "name": "query_business_checking",
  "arguments": {
    "entity_types_accepted": [
      "llc"
    ],
    "available_states": [
      "NY"
    ],
    "monthly_fee_max": 0,
    "free_transactions_min": 60,
    "accounting_integration_available": true,
    "target_industries": [
      "content_creator_solopreneur"
    ],
    "target_business_profiles": [
      "bootstrapped_solopreneur"
    ]
  }
}
Parsed result.content[0].text, trimmed to the fields this agent uses. Real listings carry about 50 fields each. Values and institution names here are placeholders, not live listings.
[
  {
    "listing_slug": "example-digital-bank-freelancer-business-checking",
    "institution_name": "Example Digital Bank",
    "product_name": "Freelancer Business Checking",
    "monthly_fee": 0,
    "monthly_fee_waiver_condition": null,
    "minimum_opening_deposit": 0,
    "entity_types_accepted": [
      "llc",
      "sole_prop"
    ],
    "available_states": [
      "ALL"
    ],
    "target_industries": [
      "content_creator_solopreneur"
    ],
    "target_business_profiles": [
      "bootstrapped_solopreneur",
      "side_hustle"
    ],
    "insurance_type": "fdic",
    "free_transactions_per_month": 200,
    "per_transaction_fee_after_limit": 0.25,
    "accounting_integration_available": true,
    "expense_integration_available": true,
    "application_url": "https://bancadia.com/go/example-digital-bank/freelancer-business-checking",
    "last_modified": "2026-09-15T00:00:00Z",
    "is_verified": true
  },
  {
    "listing_slug": "example-bank-simple-business-checking",
    "institution_name": "Example Bank",
    "product_name": "Simple Business Checking",
    "monthly_fee": 0,
    "monthly_fee_waiver_condition": null,
    "minimum_opening_deposit": 25,
    "entity_types_accepted": [
      "llc",
      "s_corp",
      "sole_prop",
      "partnership"
    ],
    "available_states": [
      "NY",
      "NJ",
      "CT"
    ],
    "target_industries": [],
    "target_business_profiles": [
      "established_smb"
    ],
    "insurance_type": "fdic",
    "free_transactions_per_month": 100,
    "per_transaction_fee_after_limit": 0.5,
    "accounting_integration_available": true,
    "expense_integration_available": false,
    "application_url": "https://bancadia.com/go/example-bank/simple-business-checking",
    "last_modified": "2026-09-15T00:00:00Z",
    "is_verified": true
  }
]

What the fields mean for this agent

FieldHow to use it
target_industries / target_business_profilesListings tagged for the segments you sent rank first. The second result isn't tagged for freelancers but passed every filter, so it's still returned.
free_transactions_per_monthCompare against the client's actual monthly count, with headroom for busy months.
per_transaction_fee_after_limitWhat each transaction over the free allowance costs.
accounting_integration_availableCategory-level: the account connects to some accounting software, not necessarily the client's. Check the listing detail before naming a specific product.
minimum_opening_depositMatters for new solo businesses that don't have much cash on hand.

Going deeper on one listing

Call get_business_checking_listing on the top result. Check general_features in the platform_integrations category for named integrations, and general_fees for paper-statement or excess-transaction fees, before recommending it.

A null field means Bancadia doesn't have that data point for the listing yet. It doesn't mean "no". An empty array means nothing matched; loosen a filter rather than inventing a result.

Present the recommendation

Your agent owns the conversation, so it decides when a recommendation is useful and how to phrase it. The snippet below is a starting point for your system prompt. Keep the disclosure line in whatever version you ship.

System-prompt snippet (SYSTEM_PROMPT)
You are a bookkeeping agent. If onboarding or categorization shows a client
mixing personal and business money, or paying avoidable bank fees, you may
suggest opening a dedicated business checking account.

- Explain the bookkeeping reason first (cleaner books, simpler tax prep),
  then suggest an account. Keep it short, and don't repeat the suggestion
  every session if the client declines.
- Use query_business_checking with the client's entity type, state and
  monthly transaction count. Only recommend accounts the tool returned.
- Say whether the account connects to accounting software, but don't name
  a specific integration (like QuickBooks) unless the listing detail does.
- Link only to the application_url returned by the tool.
- Always include: "We may earn a commission if you open this account; it
  doesn't affect which accounts are shown."
What the end user sees
About 40% of the transactions in your personal checking account this month
were for your business. A separate business account would make
categorizing faster and tax time simpler.

One option: Freelancer Business Checking from Example Digital Bank. It
accepts single-member LLCs in New York, has no monthly fee, includes 200
free transactions a month (you average about 60) and connects to
accounting software.

Apply: https://bancadia.com/go/example-digital-bank/freelancer-business-checking

We may earn a commission if you open this account; it doesn't affect which
accounts are shown.
Disclosure is required in every recommendation. Bancadia responses contain no commission or payout fields, so nothing in the data can push the model toward a higher-paying account. Your disclosure tells the user that, too.

Commission share

Bancadia runs a commission-share model. When a bank or affiliate program pays a commission on an account opened through an agent's recommendation, Bancadia is designed to pass a share of it to the agent that made the recommendation. Bancadia is paid only on conversion. It never charges for impressions, placement or position.

  • No commissions are live yet. Bancadia has no live bank partnerships today and pays nothing to anyone. Access to the registry is free.
  • Terms aren't set. We don't publish rates or payout promises. Terms will be agreed per integration as commissions become available.
  • Coverage grows as partners come online. Product data and commission eligibility will expand together, starting with business checking.
  • Commission never affects ranking. See the methodology for how results are ordered.

How attribution works

Every application_url Bancadia returns is a bancadia.com/go/… redirect that logs the click, and every tools/call is logged against the token that made it. Pass application_url to your user unmodified. Tying a specific application back to the integration that surfaced it, which commission sharing depends on, isn't live yet. We'll document the mechanism here when it ships.

FAQ

Is ranking affected by commission?

No. Commission isn't an input to ordering and isn't in the response. Results are filtered by your arguments, ordered by monthly fee, then moved toward listings tagged for the industry and business profile you send. The full rules are on the methodology page.

Can I filter by a specific accounting package, like QuickBooks or Xero?

Not today. accounting_integration_available is category-level. Where Bancadia has named integrations for a listing, they appear as feature text in get_business_checking_listing, which your agent can read before naming one.

What client data leaves my system?

Only the arguments you pass: entity type, state, and numeric or yes/no requirements. Don't send names, transactions or account numbers; the schema has no fields for them. Bancadia logs the arguments with your token so it can report which listings were returned.

Can a sole proprietor open a business checking account?

Many accounts accept sole proprietors. Pass entity_types_accepted: ["sole_prop"] and only accounts that list sole proprietors are returned. Document requirements, such as an EIN or a DBA filing, vary by institution and aren't fields in the registry today, so point users to the institution's application for specifics.

Which products are covered today?

US business checking only, and coverage is early. If a query returns nothing, relax the fee or transaction filters before concluding there's no fit.

Get started

Create a free developer token, then follow the quickstart. Questions about a specific integration? Email Scott at [email protected].

Also available as Markdown. See all agent integration guides.