Brex MCP server for AI agents

Live

OAUTH 2.0

SPEND MANAGEMENT

Accounting & Finance

Brex gives your agent spend management on your Brex account: review card and cash transactions, issue and lock cards, set budgets and spend limits, track expenses and Travel trips, and pay vendors by transfer.

  • Per-user credentials: each call uses the actual user's token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Brex
agent · Acme Q3
Run
Which card expenses over $500 this month are still missing a memo?
S
brex_expense_list
124ms
Finance agent
7 card expenses over $500 have no memo this month. The largest is $2,340 at Delta Air Lines on Maya Chen's card.
Sources: Brex expenses, 7 missing memos
brex
7 expenses
18:29
Message Claude...

Tools your finance agent reaches for on Brex, scoped per user.

CALL ANY TOOL
68 tools for spend management in Brex: list card and cash transactions, create, lock, and unlock cards, set budgets and spend limits, update expense memos, manage vendors, and send transfers.
brex_budget_create
Create budget
Create a Brex budget that tracks spend against a target amount under a parent budget. Returns the new budget with its budget ID, name, parent, owners, period, amount, dates and status. Use this to set up a tracking budget. Use brex_spend_limit_create for a limit that controls card authorizations. Requires a parent budget ID from brex_budget_list.
Parameters
Name
Type
Required
Description
amount
integer
Required
Target amount the budget tracks, as an integer in the smallest unit of the currency (cents for USD). For example 150000 means $1,500.00. Example: 150000.
description
string
Required
What the budget is used for. Example: Cloud and tooling spend for the engineering team.
idempotency_key
string
Required
Unique key for this request, sent as the Idempotency-Key header that Brex requires on this endpoint. Generate a new value (for example a UUID) for each new operation, and reuse the same value only when retrying the same request, so Brex does not apply it twice. Example: 6f1c2b3a-9d4e-4f5a-8b7c-1d2e3f4a5b6c.
name
string
Required
Name of the budget. Example: Engineering Q3.
parent_budget_id
string
Required
ID of the parent budget this budget sits under. Get it from brex_budget_list. Example: budget_cl9rh1n8g001e0j84w6fb4fd1.
period_recurrence_type
string
Required
How often the budget period repeats: WEEKLY, MONTHLY, QUARTERLY, YEARLY, or ONE_TIME. Example: QUARTERLY. One of: `WEEKLY`, `MONTHLY`, `QUARTERLY`, `YEARLY`, `ONE_TIME`.
currency
string
Optional
ISO 4217 currency code for target amount the budget tracks. Brex defaults to USD when omitted. Example: USD.
end_date
string
Optional
Date (YYYY-MM-DD) the budget stops counting. Example: 2026-09-30.
limit_type
string
Optional
Whether the budget amount blocks spend. Only SOFT (track without blocking) is accepted here; HARD is rejected, so use brex_spend_limit_create for hard limits. Example: SOFT. One of: `SOFT`.
owner_user_ids
array
Optional
User IDs of the budget owners. Get IDs from brex_user_list. Example: ["cuuser_cky0xs54b004h01pidi0pcuz1"].
start_date
string
Optional
Date (YYYY-MM-DD) the budget starts counting. Example: 2026-07-01.
brex_budget_get
Get budget
brex_budget_list
List budget
brex_budget_update
Update budget
brex_card_account_list
List card account
brex_card_get
Get card
brex_card_lock
Card lock
brex_card_statement_list
List card statement
brex_cash_account_list
List cash account
brex_cash_transaction_list
List cash transaction
brex_company_get
Get company
brex_custom_field_create
Create custom field
brex_custom_field_get
Get custom field
brex_custom_field_list
List custom field
brex_custom_field_update
Update custom field
brex_department_create
Create department
brex_department_get
Get department
brex_expense_list
List expense
brex_expense_update
Update expense
brex_legal_entity_get
Get legal entity
brex_linked_account_list
List linked account
brex_location_create
Create location
brex_spend_limit_get
Get spend limit
brex_spend_limit_list
List spend limit
brex_spend_limit_update
Update spend limit
brex_title_create
Create title
brex_transfer_get
Get transfer
brex_transfer_list
List transfer
brex_trip_get
Get trip
brex_trip_list
List trip

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Brex tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["brex"], toolNames: [
    "brex_expense_list",
    "brex_expense_update",
    "brex_card_transaction_list"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Find card expenses over $500 this month that are missing a memo" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["brex"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Find card expenses over $500 this month that are missing a memo" }],
  tools,
});

// Execute the tool call with the user's vaulted Brex OAuth token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["brex"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Find card expenses over $500 this month that are missing a memo" }],
  tools,
});

// Tool call runs with the user's vaulted Brex OAuth token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["brex"] }, pageSize: 100,
});

const agent = new Agent({
  name: "spend_agent",
  model: "gemini-2.5-pro",
  instruction: "Brex tools scoped to this user",
  tools,
});

await agent.run("Find card expenses over $500 this month that are missing a memo");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Brex tool. Click to copy, paste into your agent, done.
Cards and transactions
Copy the prompt
Copied
List card transactions over $1,000 from the last 7 days.
Copy the prompt
Copied
Lock the card ending 4412 until finance reviews it.
Copy the prompt
Copied
Create a virtual card for Priya Shah.
Budgets and expenses
Copy the prompt
Copied
Show the Marketing budget and the spend limits under it.
Copy the prompt
Copied
List expenses that are out of policy this month.
Copy the prompt
Copied
Add the memo 'Client dinner, Acme renewal' to this expense.
Vendors and transfers
Copy the prompt
Copied
List outgoing transfers from our primary cash account this month.
Copy the prompt
Copied
Add Northwind Supply as a vendor with their ACH details.
Copy the prompt
Copied
Send $4,800 to Northwind Supply from our primary cash account.
SEE HOW AUTH WORKS
Each user signs in to Brex once, and Scalekit stores and refreshes their tokens. Credentials stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Brex
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Brex
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Brex
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Brex
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other accounting and finance connectors.
GTM and RevOps Teams
Revenue forecast commentary
Pulls open pipeline from Salesforce and HubSpot, calculates coverage against quota, flags at-risk stages, posts commentary to Slack, and logs every snapshot to Google Sheets.
Engineering Teams
Slack triage
Polls Slack for new messages, classifies bugs and support requests with a LangGraph router, files GitHub issues or Zendesk tickets, and confirms in the thread.
Test other agents
See the same per-user auth pattern across other accounting and finance connectors.
GTM
Revenue forecast agent
Score pipeline coverage against quota across Salesforce and HubSpot, post forecast commentary to Slack, log snapshots to Sheets.
ENGINEERING
Slack triage agent
Classify new Slack messages as bugs or support requests, file the GitHub issue or Zendesk ticket, and reply in the thread.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Brex token looks fine in a demo. In production every card lock and transfer looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Brex today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Brex as the user or through a shared service account?
As the user. Each user signs in to Brex once, and Scalekit stores and refreshes their tokens. Card changes, budget updates, and transfers the agent makes are attributed to that user in your audit trail, not a shared service account.
Where is the Brex OAuth token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Refresh is automatic. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Brex?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the list and get tools for transactions, budgets, and expenses without brex_transfer_create, which sends money from a Brex business account to a vendor. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Brex access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Which Brex account does the agent work on?
The Brex company the signed-in user belongs to. brex_company_get returns that company and brex_current_user_get returns the user who authorized the connection. Card, budget, expense, and transfer tools act on that company's accounts.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""brex"": {
""url"": ""https://mcp.scalekit.com/brex"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.brex]
url = ""https://mcp.scalekit.com/brex""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""brex"": {
""url"": ""https://mcp.scalekit.com/brex"",
""type"": ""http""
}
}
}