Add business checking recommendations to your advisor or RIA copilot
Advisors who serve business owners usually see the personal half of the balance sheet in detail and the business half only in passing. When a planning review shows business cash sitting in the wrong kind of account, a copilot can draft a recommendation for a business checking account that fits, with the conflict-of-interest disclosure the advisory relationship requires.
When to call Bancadia
- An annual review or financial plan shows business operating cash held in a personal account, or no separation between the two.
- Cash-flow planning shows a large idle balance in a business account that pays no interest.
- A client starts, buys or restructures a business and asks where it should bank.
- Exit or succession planning calls for cleaner business financials.
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 |
|---|---|
| Business entity type | entity_types_accepted |
| Business state | available_states |
| Business balance in the plan | interest_bearing: true, apy_min |
| Business bank fees in the review | monthly_fee_max |
| Deposit insurance preference | insurance_type |
| Business industry and stage | target_industries, target_business_profiles, e.g. ["real_estate"] |
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": [
"FL"
],
"insurance_type": "fdic",
"interest_bearing": true,
"monthly_fee_max": 10,
"target_industries": [
"real_estate"
],
"target_business_profiles": [
"established_smb"
]
},
})
// 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": [
"FL"
],
"insurance_type": "fdic",
"interest_bearing": True,
"monthly_fee_max": 10,
"target_industries": [
"real_estate"
],
"target_business_profiles": [
"established_smb"
]
},
)
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 client owns a real estate brokerage in Florida, organized as an LLC, and keeps $120,000 of operating cash in a business account that earns nothing. The advisor's copilot looks for an FDIC-insured, interest-bearing business account with a monthly fee of $10 or less.
tools/call params{
"name": "query_business_checking",
"arguments": {
"entity_types_accepted": [
"llc"
],
"available_states": [
"FL"
],
"insurance_type": "fdic",
"interest_bearing": true,
"monthly_fee_max": 10,
"target_industries": [
"real_estate"
],
"target_business_profiles": [
"established_smb"
]
}
}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-bank-business-interest-checking",
"institution_name": "Example Bank",
"product_name": "Business Interest Checking",
"monthly_fee": 10,
"monthly_fee_waiver_condition": "Waived with a $15,000 average daily balance",
"minimum_opening_deposit": 100,
"entity_types_accepted": [
"llc",
"s_corp",
"c_corp",
"partnership"
],
"available_states": [
"FL",
"GA"
],
"target_industries": [
"real_estate",
"professional_services"
],
"target_business_profiles": [
"established_smb"
],
"insurance_type": "fdic",
"institution": {
"display_name": "Example Bank",
"institution_type": "community_bank"
},
"interest_bearing": true,
"apy_max": 0.0225,
"apy_default": 0.0225,
"application_url": "https://bancadia.com/go/example-bank/business-interest-checking",
"last_modified": "2026-09-15T00:00:00Z",
"is_verified": true
},
{
"listing_slug": "example-digital-bank-business-checking",
"institution_name": "Example Digital Bank",
"product_name": "Business Checking",
"monthly_fee": 0,
"monthly_fee_waiver_condition": null,
"minimum_opening_deposit": 0,
"entity_types_accepted": [
"llc",
"s_corp",
"c_corp",
"sole_prop"
],
"available_states": [
"ALL"
],
"target_industries": [],
"target_business_profiles": [],
"insurance_type": "fdic",
"institution": {
"display_name": "Example Digital Bank",
"institution_type": "neobank"
},
"interest_bearing": true,
"apy_max": 0.03,
"apy_default": 0.015,
"application_url": "https://bancadia.com/go/example-digital-bank/business-checking",
"last_modified": "2026-09-15T00:00:00Z",
"is_verified": true
}
]What the fields mean for this agent
| Field | How to use it |
|---|---|
apy_default | What the client earns without upgrading. Use it for planning projections, not apy_max. |
institution.institution_type | Community bank, national bank, credit union, neobank and so on. Some clients have a preference. |
insurance_type | FDIC or NCUA coverage is $250,000 per depositor, per insured institution, per ownership category. Frame it that way in client materials. |
monthly_fee_waiver_condition | Check the waiver against the balance the client will keep there. |
Going deeper on one listing
Call get_business_checking_listing to confirm fees, and any plan tier the stated rate depends on, before a recommendation appears in a client-facing plan.
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 copilot for [Firm]'s advisors. When a client's plan shows
business cash in a personal account, idle business balances earning
nothing, or a new or restructured business that needs an account, you may
draft a business checking recommendation for the advisor to review.
- Draft for the advisor, not directly for the client. The advisor approves
what the client sees.
- Query with the business's entity type, state and requirements. Use
apy_default for projections. Only use accounts the tool returned.
- State deposit insurance limits accurately.
- Link only to the application_url returned by the tool.
- Include: "[Firm] may earn a commission if you open this account; it
doesn't affect which accounts are shown. See our Form ADV for details on
conflicts of interest."Draft for advisor review
Your brokerage keeps about $120,000 in operating cash that currently earns
nothing. Business Interest Checking from Example Bank is FDIC-insured, pays
2.25% APY, and waives its $10 monthly fee above a $15,000 average balance.
At your current balance, that's about $2,700 a year in interest.
Apply: https://bancadia.com/go/example-bank/business-interest-checking
[Firm] may earn a commission if you open this account; it doesn't affect
which accounts are shown. See our Form ADV for details on conflicts of
interest.Fiduciary and disclosure considerations
Registered investment advisers owe clients a fiduciary duty, and compensation tied to a recommendation is a conflict of interest that has to be disclosed (for example, in Form ADV) and managed. Broker-dealer and insurance-licensed advisors have their own conduct rules. Bancadia's data is designed to support that: ranking doesn't use commission, and responses carry no payout information.
- Put the recommendation in the context of the client's plan, not as a standalone product pitch.
- Disclose the commission relationship in the recommendation itself, and wherever else your compliance program requires.
- Have your compliance team review how the copilot presents recommendations before launch.
FAQ
Is ranking affected by commission?
No. Commission isn't a ranking input and isn't in the response. Eligibility comes from your filters, and ordering is by monthly fee, with listings tagged for the client's industry and stage moved up.
Can the copilot recommend directly to clients?
Bancadia doesn't restrict that, but most advisory firms will want the advisor to approve a recommendation first. The system prompt above drafts for advisor review.
What client data do we send?
Only the business attributes used as filters. No client names, account numbers, net worth or holdings; the tool has no fields for them.
Does Bancadia cover personal accounts or investment products?
No. The MCP server covers US business checking only. There is no tool for personal deposit accounts today, and Bancadia doesn't cover securities.
How is attribution tracked?
Every application_url is a bancadia.com/go/… redirect that logs the click, and every tool call is logged against your token. Tying an application back to your integration, which commission sharing depends on, isn't live yet. See commission share.
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.