Agentic Bank Documentation

Everything you need to give your AI agents financial capabilities. Connect through MCP, set spending policies, and let your agents transact safely.

Choose your path

How it works

Agentic Bank provides isolated bank accounts and virtual cards for AI agents, controlled by enterprise spending policies. Agents connect via MCP (Model Context Protocol) and call tools to check balances, send payments, and manage transactions.

1

Create an agent in the portal

Each agent gets its own bank account, virtual card, and credentials. Configure spending limits, vendor rules, and approval thresholds.

2

Connect via MCP

Point your MCP client or SDK at mcp.agenticbank.io and authenticate. Works with Claude, ChatGPT, OpenAI Agents SDK, and any client that supports the remote MCP spec.

3

Agents transact safely

Your agents call tools like send_payment and get_balance. Every transaction is evaluated against policies and logged to the audit trail.

Individual users

Quick start

Connect Agentic Bank to your AI client and make your first payment in under 5 minutes.

Prerequisites

  • An Agentic Bank account (sign up here)
  • An AI client that supports MCP (Claude, ChatGPT, etc.)
  • At least one agent created in the portal with funds allocated

1. Add the MCP server to your client

For Claude Desktop, open your config file and add:

json
{
  "mcpServers": {
    "agenticbank": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.agenticbank.io/mcp"]
    }
  }
}

On first connection, a browser window will open for you to log in and select your agent. See setup by client for other clients.

2. Verify the connection

Ask your AI client to check your balance:

tool call
get_balance()
{
  "available": 5000.00,
  "pending": 0.00,
  "currency": "USD"
}

3. Make a test payment

tool call
send_payment({
  recipient_id: "rcp_test_sandbox",
  amount: 1.00,
  currency: "USD",
  reason: "Test payment"
})
{
  "transaction_id": "txn_abc123",
  "status": "executed",
  "amount": 1.00
}
You're connected. Your agent can now transact within its configured policies. The tools available depend on the permissions set in the portal.
Individual users

Setup by client

The Agentic Bank MCP server is hosted remotely. No packages to install. Just point your client at the server URL and authenticate.

Server endpoints

endpoints
# Streamable HTTP (recommended)
https://mcp.agenticbank.io/mcp

# Server-Sent Events
https://mcp.agenticbank.io/sse

Claude (Team, Enterprise on claude.ai)

  1. Navigate to Settings in the sidebar
  2. Scroll to Integrations and click Add more
  3. Enter: name Agentic Bank, URL https://mcp.agenticbank.io/mcp
  4. Enable the tools in any new chats

Claude (Free, Pro on desktop)

json
{
  "mcpServers": {
    "agenticbank": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.agenticbank.io/mcp"]
    }
  }
}

Claude Code

bash
claude mcp add --transport http agenticbank https://mcp.agenticbank.io/mcp

Cursor

json
// .cursor/mcp.json
{
  "mcpServers": {
    "agenticbank": {
      "url": "https://mcp.agenticbank.io/mcp"
    }
  }
}

Windsurf

json
// ~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "agenticbank": {
      "serverUrl": "https://mcp.agenticbank.io/sse"
    }
  }
}

Other clients

Any MCP client that supports the remote spec can connect directly. For clients that only support local servers, use the mcp-remote bridge:

bash
npx mcp-remote https://mcp.agenticbank.io/mcp
Individual users

Authentication

Authentication happens automatically when you connect. The server uses OAuth 2.1 with dynamic client registration.

  1. Your MCP client initiates a connection to mcp.agenticbank.io
  2. A browser window opens for you to log in with your Agentic Bank account
  3. You select which agent to connect
  4. The session is established and tools are loaded based on the agent's permissions

Sessions are scoped to a single agent. To use multiple agents, create separate MCP server entries in your client config, each pointing to the same URL. You'll select a different agent during each OAuth flow.

No tokens to manage. The OAuth flow handles everything. Your session refreshes automatically. If you need programmatic access instead, see the enterprise developer guide.
Enterprise developers

Quick start

Integrate Agentic Bank into your own AI agents programmatically. This guide walks through connecting a Python agent that can issue customer refunds.

Prerequisites

  • An Agentic Bank account with API access enabled
  • An agent API token (generated in the portal under Agent Settings)
  • Python 3.10+ or Node.js 18+

1. Install the SDK

bash
# Python
pip install agenticbank

# Node.js
npm install @agenticbank/sdk

2. Initialize the client

python
from agenticbank import AgenticBank

client = AgenticBank(
    api_token="ab_live_your_token_here",
    environment="sandbox"  # or "production"
)

# Check balance
balance = client.get_balance()
print(f"Available: ${balance.available}")

3. Send a payment

python
result = client.send_payment(
    recipient_id="rcp_customer_4821",
    amount=29.99,
    reason="Refund for order #4821 - defective item",
    idempotency_key="refund_4821_001"
)

if result.status == "executed":
    print(f"Refund sent: {result.transaction_id}")
elif result.status == "pending_approval":
    print(f"Needs approval: {result.transaction_id}")

4. Wire it into your agent

python
from agenticbank import AgenticBank
from openai import OpenAI

bank = AgenticBank(api_token="ab_live_...")
openai = OpenAI()

def handle_refund(customer_id, amount, reason):
    # Check if this payment would be allowed
    check = bank.check_policy(amount=amount)

    if not check.allowed:
        return f"Cannot process: {check.reason}"

    # Execute the refund
    result = bank.send_payment(
        recipient_id=customer_id,
        amount=amount,
        reason=reason,
        idempotency_key=f"refund_{customer_id}"
    )

    return f"Refund {result.status}: {result.transaction_id}"
Your agent is live. Every call is evaluated against the policies you set in the portal. Set up webhooks to get notified when transactions settle or need approval.
Enterprise developers

API tokens

For programmatic access, each agent gets a unique API token. Tokens are generated in the portal and carry the same permission scoping as OAuth sessions.

Token format

Tokens are prefixed by environment and are 64 characters long:

example
# Production
ab_live_k7x9m2p4q8r1s5t3u6v0w2y4z7a9b1c3d5e8f0g2h4j6

# Sandbox
ab_test_n3p5r7t9v1x3z5b7d9f1h3j5l7n9p1r3t5v7x9z1b3d5

Using tokens

Pass the token when initializing the SDK, or include it as a Bearer token in direct HTTP requests:

bash
curl https://mcp.agenticbank.io/mcp \
  -H "Authorization: Bearer ab_live_your_token_here"

Lifecycle

  • Generation: Created in the portal. Displayed once and never stored in plaintext.
  • Rotation: Regenerate at any time. The old token is revoked immediately.
  • Revocation: Deactivating an agent revokes its token and disconnects all sessions.
Keep tokens secure. Never commit tokens to version control or log them. Use environment variables or a secrets manager like AWS Secrets Manager or HashiCorp Vault.
Enterprise developers

SDK integration

Official SDKs wrap the MCP server and provide typed, idiomatic interfaces for Python and TypeScript.

Python

python
from agenticbank import AgenticBank

client = AgenticBank(
    api_token=os.environ["AGENTICBANK_API_TOKEN"],
    environment="production"
)

# All tools are available as methods
balance = client.get_balance()
txns = client.get_transactions(limit=10, status="settled")
check = client.check_policy(amount=500)
payment = client.send_payment(
    recipient_id="rcp_vendor_aws",
    amount=8420.00,
    reason="Monthly AWS invoice"
)

TypeScript / Node.js

typescript
import { AgenticBank } from '@agenticbank/sdk';

const client = new AgenticBank({
  apiToken: process.env.AGENTICBANK_API_TOKEN,
  environment: 'production'
});

const balance = await client.getBalance();
const payment = await client.sendPayment({
  recipientId: 'rcp_vendor_aws',
  amount: 8420.00,
  reason: 'Monthly AWS invoice',
  idempotencyKey: 'aws_feb_2026'
});

OpenAI Agents SDK

python
from agents import Agent
from agents.mcp import MCPServerHTTP

agenticbank = MCPServerHTTP(
    url="https://mcp.agenticbank.io/mcp",
    headers={"Authorization": f"Bearer {token}"}
)

agent = Agent(
    name="CS Refund Agent",
    mcp_servers=[agenticbank]
)
Enterprise developers

Webhooks

Receive real-time notifications when transactions settle, approvals are needed, or policies are triggered. Configure webhook URLs in the portal under Settings.

Webhook events

EventTrigger
transaction.executedPayment was successfully initiated
transaction.settledPayment has settled with the bank
transaction.failedPayment failed after initiation
transaction.rejectedPayment was denied by the policy engine
approval.requestedA transaction requires human approval
approval.decidedAn approval was approved or rejected
agent.budget_warningAgent approaching budget limit (80%, 90%, 100%)
agent.anomalyUnusual spending pattern detected

Webhook payload

json
{
  "event": "transaction.settled",
  "timestamp": "2026-02-18T14:30:00Z",
  "data": {
    "transaction_id": "txn_abc123",
    "agent_id": "agt_cs_refund",
    "amount": 29.99,
    "status": "settled",
    "recipient": "Customer #4821"
  }
}

Verifying signatures

Every webhook includes an X-AgenticBank-Signature header. Verify it using HMAC-SHA256 with your webhook secret:

python
import hmac, hashlib

def verify_webhook(payload, signature, secret):
    expected = hmac.new(
        secret.encode(), payload, hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, signature)
Enterprise developers

Managing agents programmatically

Use the Management API to create, configure, and monitor agents without the portal. This is useful for auto-provisioning agents in CI/CD pipelines or building custom dashboards.

Create an agent

python
from agenticbank.admin import AdminClient

admin = AdminClient(api_key=os.environ["AGENTICBANK_ADMIN_KEY"])

agent = admin.agents.create(
    name="CS Refund Agent",
    department="Customer Service",
    permissions=["read", "policy_check", "payments"],
    policy_id="pol_cs_standard"
)

print(f"Agent ID: {agent.id}")
print(f"API Token: {agent.api_token}")  # shown once

Fund an agent

python
admin.agents.fund(
    agent_id="agt_cs_refund",
    amount=10000.00  # from master account
)

Update policies

python
admin.policies.update("pol_cs_standard", rules={
    "max_per_transaction": 500,
    "max_daily": 5000,
    "auto_approve_under": 100,
    "vendor_blocklist": ["gambling.com"]
})

List agent activity

python
txns = admin.agents.transactions(
    agent_id="agt_cs_refund",
    status="settled",
    date_from="2026-02-01"
)

for txn in txns:
    print(f"{txn.created_at} | ${txn.amount} | {txn.recipient}")

Tools Reference

The full set of tools available through the Agentic Bank MCP server. After authentication, the server dynamically returns only the tools the connected agent is permitted to use based on its permission level. Every tool call is evaluated against the agent's spending policies and logged to the audit trail.

get_balance

read

Returns the agent's current account balance, including available funds and pending transactions.

Parameters

No parameters required.

Response

{
  "available": 5000.00,
  "pending": 120.00,
  "currency": "USD"
}
FieldTypeDescription
availablenumberFunds available for immediate use
pendingnumberFunds held for pending transactions
currencystringISO 4217 currency code

send_payment

payments

Initiates a payment to a registered recipient. Evaluated against policies before execution. Payments above the auto-approve threshold are held for human approval.

Parameters

ParameterTypeDescription
recipient_idrequiredstringID of the registered recipient
amountrequirednumberPayment amount in the account currency
currencyoptionalstringISO currency code (defaults to account currency)
reasonrequiredstringBusiness justification (logged to audit trail)
idempotency_keyoptionalstringUnique key to prevent duplicate payments on retry

Response

{
  "transaction_id": "txn_abc123",
  "status": "executed",
  "amount": 250.00
}

get_transactions

read

Lists the agent's recent transactions with optional filtering by status, date range, and pagination.

Parameters

ParameterTypeDescription
limitoptionalintegerNumber of transactions to return (default: 20, max: 100)
offsetoptionalintegerNumber to skip for pagination
statusoptionalstringFilter: executed, pending, settled, rejected
date_fromoptionalstringISO 8601 start date (inclusive)
date_tooptionalstringISO 8601 end date (inclusive)

Response

{
  "transactions": [
    {
      "id": "txn_abc123",
      "type": "ach_transfer",
      "amount": 250.00,
      "recipient": "AWS",
      "status": "settled",
      "created_at": "2026-02-18T14:30:00Z"
    }
  ],
  "total_count": 47
}

check_policy

policy_check

Pre-checks whether a proposed transaction would be allowed under the agent's current policies. Does not execute any payment. Use before send_payment to avoid unnecessary rejections.

Parameters

ParameterTypeDescription
amountrequirednumberProposed transaction amount
recipient_idoptionalstringRecipient to check against vendor whitelist/blocklist
categoryoptionalstringMerchant category to check against blocked categories

Response

{
  "allowed": true,
  "requires_approval": false,
  "reason": "Transaction within auto-approve threshold"
}

request_approval

payments

Escalates a pending transaction to the human approval queue. The designated approver is notified via portal, email, and Slack.

Parameters

ParameterTypeDescription
transaction_idrequiredstringID of the pending transaction to escalate
reasonrequiredstringBusiness context for the approver

Response

{
  "approval_id": "apr_xyz789",
  "status": "pending",
  "approver": "jane@company.com"
}

get_card_details

read

Returns the agent's virtual card information and current spend totals.

Parameters

No parameters required.

Response

{
  "card_id": "card_def456",
  "last_four": "4289",
  "status": "active",
  "spend_today": 340.00,
  "spend_month": 12850.00
}

Permissions

After authentication, the MCP server calls list_tools and returns only the tools the connected agent is authorized to use. Permissions are configured per agent in the portal and follow an additive hierarchy.

PermissionTools grantedTypical use case
readget_balance, get_transactions, get_card_detailsMonitoring agents, dashboards, reporting
policy_checkAll read tools + check_policyAgents that validate before requesting human action
paymentsAll above + send_payment, request_approvalRefund agents, procurement agents, payment automation

If an agent's permissions change while connected, the updated tool list is pushed to the client automatically via MCP notifications. The agent does not need to reconnect.

Principle of least privilege. Grant agents only the permissions they need. A monitoring agent only needs read. A refund agent needs payments.

Rate limits

Rate limits protect the platform from runaway agents and ensure fair usage. Limits are enforced per agent and per organization using sliding window counters.

ScopeLimitWindow
Per agent60 requests1 minute
Per agent1,000 requests1 hour
Per organization10,000 requests1 hour

When exceeded, the server returns a rate_limit_exceeded error with a retry_after field indicating how many seconds to wait.

Errors

All errors follow a consistent format with a machine-readable code and human-readable message.

{
  "error": {
    "code": "policy_violation",
    "message": "Transaction exceeds daily spending limit of $5,000",
    "details": {
      "limit": 5000.00,
      "current_daily_spend": 4800.00,
      "requested_amount": 500.00
    }
  }
}

Error codes

CodeDescription
invalid_tokenAPI token is missing, malformed, or revoked
agent_inactiveAgent has been paused or deactivated
policy_violationTransaction denied by the policy engine
insufficient_fundsAgent's account balance is too low
recipient_not_foundSpecified recipient ID does not exist
duplicate_requestTransaction with this idempotency key already exists
rate_limit_exceededToo many requests; retry after the specified delay
permission_deniedAgent does not have the required permission for this tool
approval_timeoutApproval request expired without a decision
internal_errorUnexpected server error; contact support