Skip to main content
Glama
crazyrabbitLTC

Brex MCP Server

README.md
# 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
```bash
# 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`:
```json
{
  "mcpServers": {
    "brex": {
      "command": "npx",
      "args": ["mcp-brex"],
      "env": {
        "BREX_API_KEY": "your_brex_api_key"
      }
    }
  }
}
```

### Manual Setup (Development)
```bash
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
```

## 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:

```json
{
  "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
  }
}
```

```json
{
  "name": "get_expenses",
  "arguments": {
    "limit": 5,
    "status": "APPROVED"
  }
}
```

```json
{
  "name": "get_card_transactions",
  "arguments": {
    "limit": 10,
    "posted_at_start": "2025-08-25T00:00:00Z"
  }
}
```

```json
{
  "name": "get_all_accounts",
  "arguments": {
    "page_size": 10,
    "max_items": 20,
    "status": "ACTIVE"
  }
}
```

```json
{
  "name": "get_transactions",
  "arguments": {
    "accountId": "acc_123456789",
    "limit": 10
  }
}
```

```json
{
  "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`.

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 issues