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.
| Signal | Argument |
|---|---|
| Entity type from onboarding | entity_types_accepted, e.g. ["sole_prop"] or ["llc"] |
| Business address state | available_states |
| Monthly transaction count from the bank feed | free_transactions_min |
| Bank fees categorized in the ledger | monthly_fee_max |
| Ledger software the client uses | accounting_integration_available: true |
| Receipt and expense tooling in use | expense_integration_available: true |
| Business type and stage | target_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
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)
@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
@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()
}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"
]
}
}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
| Field | How to use it |
|---|---|
target_industries / target_business_profiles | Listings 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_month | Compare against the client's actual monthly count, with headroom for busy months. |
per_transaction_fee_after_limit | What each transaction over the free allowance costs. |
accounting_integration_available | Category-level: the account connects to some accounting software, not necessarily the client's. Check the listing detail before naming a specific product. |
minimum_opening_deposit | Matters 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)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."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.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.