Skip to main content
Glama
Brex MCP Server

Brex MCP Server

Brex MCP Server

A Model Context Protocol (MCP) server for the Brex API. Optimized for safe, small, read-only responses with projection and batching.

Installation

Claude Code

# Install the package
npm install -g mcp-brex

# Add to Claude Code with your API key
claude mcp add brex --env BREX_API_KEY=your_brex_api_key -- npx mcp-brex

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "brex": {
      "command": "npx",
      "args": ["mcp-brex"],
      "env": {
        "BREX_API_KEY": "your_brex_api_key"
      }
    }
  }
}

Manual Setup (Development)

git clone https://github.com/dennisonbertram/mcp-brex.git
cd mcp-brex
npm install
npm run build
claude mcp add brex --env BREX_API_KEY=your_key -- node build/index.js

Related MCP server: YNAB MCP Server

Resources

  • brex://expenses | brex://expenses/{id} | brex://expenses/card | brex://expenses/card/{id}

  • brex://budgets | brex://budgets/{id}

  • brex://spend_limits | brex://spend_limits/{id}

  • brex://budget_programs | brex://budget_programs/{id}

  • brex://transactions/card/primary | brex://transactions/cash/{id}

  • brex://docs/usage (compact usage guide for agents)

Notes:

  • Resources accept ?summary_only=true&fields=id,status,... to control payload size.

  • Expenses resources auto-expand merchant and budget for readability.

Tools (read-only unless noted)

  • Budgets: get_budgets, get_budget

  • Spend Limits: get_spend_limits, get_spend_limit

  • Budget Programs: get_budget_programs, get_budget_program

  • Expenses (single page): get_expenses

  • Expenses (paginated): get_all_expenses, get_all_card_expenses

  • Expense by ID: get_expense, get_card_expense

  • Card Statements: get_card_statements_primary

  • Transactions: get_card_transactions, get_cash_transactions

  • Cash Statements: get_cash_account_statements

  • Accounts: get_all_accounts, get_account_details

  • Receipts (write): match_receipt, upload_receipt

  • Updates (write): update_expense

How to call tools

Always send parameters under arguments (not input). Keep payloads small with pagination and filtering.

Common parameters:

  • Pagination: page_size (<=50), max_items (<=200 recommended)

  • Date filtering: start_date, end_date, window_days

  • Status filtering: status array for expenses/transactions

  • Amount filtering: min_amount, max_amount for expenses

  • Merchant filtering: merchant_name for expenses

  • Expand control: expand array to include nested objects (e.g., ["merchant", "budget"])

Recommended examples:

{
  "name": "get_all_card_expenses",
  "arguments": {
    "page_size": 10,
    "max_items": 20,
    "start_date": "2025-08-25T00:00:00Z",
    "end_date": "2025-08-26T00:00:00Z",
    "status": ["APPROVED"],
    "min_amount": 100
  }
}
{
  "name": "get_expenses",
  "arguments": {
    "limit": 5,
    "status": "APPROVED"
  }
}
{
  "name": "get_card_transactions",
  "arguments": {
    "limit": 10,
    "posted_at_start": "2025-08-25T00:00:00Z"
  }
}
{
  "name": "get_all_accounts",
  "arguments": {
    "page_size": 10,
    "max_items": 20,
    "status": "ACTIVE"
  }
}
{
  "name": "get_transactions",
  "arguments": {
    "accountId": "acc_123456789",
    "limit": 10
  }
}
{
  "name": "get_expenses",
  "arguments": {
    "limit": 5,
    "expand": ["merchant", "user"]
  }
}

Pagination and Filtering Best Practices

IMPORTANT: Use pagination, filtering, and sorting to control response sizes instead of relying on summaries.

Key Parameters for Data Control:

  • page_size: number — Items per page (recommended: ≤50)

  • max_items: number — Maximum total items across all pages (recommended: ≤200)

  • start_date/end_date: string — ISO date range filtering

  • window_days: number — Split large date ranges into smaller batches

  • status: string[] — Filter by status (e.g., ["APPROVED", "PENDING"])

  • min_amount/max_amount: number — Amount-based filtering for expenses

Best Practices:

  • Always use date ranges for bulk requests to avoid huge responses

  • Use small page sizes (≤50) and reasonable max_items (≤200)

  • Apply status filters to get only the data you need

  • Use window_days (e.g., 7) to batch large date ranges

  • Control nested object expansion with the expand parameter:

    • Default: expand: [] returns lean objects (~500-1000 tokens each)

    • With expansion: expand: ["merchant", "budget"] returns full objects (~15K+ tokens each)

    • Available expand options: merchant, budget, user, department, location, receipts

  • Test with small limits first before scaling up

  • Cash endpoints require additional Brex scopes; handle 403s gracefully

Publishing

Only build/, README.md, and LICENSE are published.

License

MIT — see LICENSE.

Available Tools

21 tools
get_account_detailsC

Get detailed information about a Brex account

Inputs: accountId (required).

get_all_accountsB

Get all Brex accounts with pagination support

Inputs: page_size, max_items, status.

get_all_card_expensesB

LIST: Paginated card expenses (no expense_type needed). Returns complete card expense objects. Example: {"page_size":5,"max_items":5,"window_days":7,"min_amount":100}

Inputs: page_size, max_items, status, payment_status, +7 more.

get_all_expensesC

LIST: Paginated expenses with filters. Returns complete expense objects. Example: {"page_size":5,"max_items":5,"status":["APPROVED"],"window_days":7,"min_amount":100}

Inputs: page_size, max_items, expense_type, status, +7 more.

get_budgetA

Get a budget by ID (read-only). Returns the complete budget object. Example: {"budget_id":"budget_123"}

Inputs: budget_id (required).

get_budget_programC

Get a budget program by ID (read-only). Example: {"id":"bp_123"}

Inputs: id (required).

get_budget_programsC

List budget programs (read-only). Returns complete budget program objects. Example: {"limit":10,"budget_program_status":"ACTIVE"}

Inputs: limit, cursor, budget_program_status.

get_budgetsB

List budgets (read-only). Example: {"limit":10}

Inputs: limit, cursor, parent_budget_id, spend_budget_status.

get_card_expenseC

Get a single card expense by ID. Returns the complete card expense object. Example: {"expense_id":"expense_123","expand":["merchant"]}

Inputs: expense_id (required), expand.

get_card_statements_primaryC

Get complete statements for the primary card account. Returns full statement objects. Example: {"limit":10}

Inputs: cursor, limit.

get_card_transactionsC

LIST: Primary card transactions. Returns complete transaction objects. Example: {"limit":10,"posted_at_start":"2025-08-01T00:00:00Z","expand":["merchant"]}

Inputs: cursor, limit, user_ids, posted_at_start, +1 more.

get_cash_account_statementsC

Get cash account statements by account ID. Returns complete statement objects. Example: {"account_id":"cash_acc_123","limit":5}

Inputs: account_id (required), cursor, limit.

get_cash_transactionsB

LIST: Cash transactions (requires cash scopes). Example: {"account_id":"cash_acc_123","limit":10}. Returns complete transaction objects.

Inputs: account_id (required), cursor, limit, posted_at_start, +1 more.

get_expenseB

Get a single expense by ID. Returns the complete expense object. Example: {"expense_id":"expense_123","expand":["merchant"]}

Inputs: expense_id (required), expand.

get_expensesB

LIST (single page): Expenses with optional filters. Returns complete expense objects. Example: {"limit":5,"status":"APPROVED","expand":["merchant"]}

Inputs: expense_type, status, payment_status, limit, +1 more.

get_spend_limitB

Get a spend limit by ID (read-only). Example: {"id":"sl_123"}

Inputs: id (required).

get_spend_limitsC

List spend limits (read-only). Example: {"limit":10,"status":"ACTIVE"}

Inputs: limit, cursor, parent_budget_id, status, +1 more.

get_transactionsC

Get transactions for a Brex account

Inputs: accountId (required), limit.

match_receiptA

Create a pre-signed URL for uploading a receipt that will be automatically matched with existing expenses

Inputs: receipt_name (required), receipt_type, notify_email.

update_expenseC

Update an existing card expense

Inputs: expense_id (required), memo, category, budget_id, +3 more.

upload_receiptC

Upload a receipt image to match with expenses

Inputs: receipt_data (required), receipt_name (required), content_type (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 21 tools

    Disambiguation4/5

    Most tools have distinct purposes targeting specific resources like accounts, expenses, budgets, or transactions, with clear naming. However, some overlap exists between 'get_all_expenses' and 'get_expenses' (both list expenses with filters), and 'get_all_card_expenses' and 'get_card_expense' could cause minor confusion due to similar naming but different functions (list vs. single).

    Naming Consistency5/5

    Tool names follow a highly consistent verb_noun pattern throughout, using 'get_' for read operations, 'update_' for modifications, and 'match_'/'upload_' for specific actions. All names are in snake_case with no deviations, making them predictable and easy to parse for an agent.

    Tool Count3/5

    With 21 tools, the count is on the higher side for a financial management server, bordering on heavy. While it covers many aspects of Brex's domain (accounts, expenses, budgets, transactions, receipts), it might be slightly overwhelming for an agent to navigate efficiently, though not extreme.

    Completeness4/5

    The tool set provides comprehensive read coverage for core resources like accounts, expenses, budgets, and transactions, with some write/update capabilities (e.g., update_expense, match_receipt). Minor gaps include lack of create/delete operations for budgets or spend limits, but agents can likely work around this for most workflows in the financial domain.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      F
      maintenance
      A Model Context Protocol server that enables LLMs to interact with Ramp's financial data by retrieving, analyzing, and running tasks through Ramp's Developer API, using an in-memory SQLite database to overcome token limitations.
      34
      MIT
    • A
      license
      A
      quality
      A
      maintenance
      A Model Context Protocol server that enables AI-powered interaction with YNAB (You Need A Budget) data, allowing users to query their budgets through conversational interfaces.
      22
      288 npm
      168
      MIT
    • A
      license
      B
      quality
      Not graded
      maintenance
      Enables AI agents to interact with the Brex financial platform, allowing access to account information, transactions, expenses, receipts, budgets, and spend limits through the Brex API.
      9
      2 npm
      -
    • A
      license
      Not graded
      quality
      C
      maintenance
      A Model Context Protocol server that provides a secure wrapper around the Brale API, enabling AI assistants to perform stablecoin issuance, transfers, account management, and other financial operations.
      1
      MIT