Skip to main content
Glama
MCP-Mirror
by MCP-Mirror

Brex MCP Server

A Model Context Protocol (MCP) server for integrating with the Brex API, enabling AI agents to interact with financial data and resources.

Overview

This MCP server provides a bridge between AI agents and the Brex financial platform, allowing agents to:

  • Retrieve account information and transactions

  • Access expense data and receipts

  • Manage budget resources and spend limits

  • View team information

The server implements standardized resource handlers and tools following the MCP specification, enabling secure and efficient access to financial data.

Features

Resources

Account Resources

  • brex://accounts - List all accounts

  • brex://accounts/{id} - Access specific account details

Expense Resources

  • brex://expenses - List all expenses with pagination

  • brex://expenses/{id} - Access specific expense details

  • brex://expenses/card - List all card expenses

  • brex://expenses/card/{id} - Access specific card expense details

Note: Expense resources automatically expand merchant and budget information to display human-readable names instead of IDs.

Budget Resources

  • brex://budgets - List all budgets with pagination

  • brex://budgets/{id} - Access specific budget details

  • brex://spend_limits - List all spend limits

  • brex://spend_limits/{id} - Access specific spend limit details

  • brex://budget_programs - List all budget programs

  • brex://budget_programs/{id} - Access specific budget program details

Team Resources

  • brex://users/me - Get current user information

Tools

Receipt Management

  • match_receipt - Match a receipt with existing expenses

  • upload_receipt - Upload a receipt for a specific expense

Expense Management

  • update_expense - Update details for a card expense (memo, category, etc.)

  • get_all_expenses - Get all expenses with filtering options and expanded merchant/budget information

  • get_all_card_expenses - Get all card expenses with filtering options and expanded merchant/budget information

Note: For security reasons, tools that create, update, or delete budgets, spend limits, and budget programs are not implemented in this version.

Installation

Prerequisites

  • Node.js v18 or higher

  • Brex API access token

Setup

  1. Clone this repository:

git clone https://github.com/dennisonbertram/brex-mcp-server.git
cd brex-mcp-server
  1. Install dependencies:

npm install
  1. Create a .env file with your Brex API token:

BREX_API_KEY=your_token_here
BREX_API_URL=https://platform.brexapis.com
PORT=3000
NODE_ENV=development
RATE_LIMIT_REQUESTS=1000
RATE_LIMIT_WINDOW_MS=60000
LOG_LEVEL=info
  1. Build the server:

npm run build

Configuration with Claude

To use with Claude Desktop, you need to add the server to Claude's configuration file:

On macOS: ~/Library/Application Support/Claude/claude_desktop_config.json On Windows: %APPDATA%\Claude\claude_desktop_config.json

  1. Open Claude for Desktop and go to settings by clicking on the Claude menu and selecting "Settings..."

  2. Click on "Developer" in the left sidebar, then click "Edit Config"

  3. Update the configuration file with the Brex MCP server settings:

{
  "mcpServers": {
    "brex-server": {
      "command": "node",
      "args": [
        "/path/to/brex-mcp-server/build/index.js"
      ],
      "env": {
        "BREX_API_KEY": "your_brex_api_key_here",
        "BREX_API_URL": "https://platform.brexapis.com",
        "PORT": "3000",
        "NODE_ENV": "development",
        "RATE_LIMIT_REQUESTS": "1000",
        "RATE_LIMIT_WINDOW_MS": "60000",
        "LOG_LEVEL": "info"
      }
    }
  }
}

Make sure to:

  • Replace /path/to/brex-mcp-server with the actual path where you installed the server

  • Replace your_brex_api_key_here with your actual Brex API key

  • Use absolute paths for the server location

Only the BREX_API_KEY and BREX_API_URL values are required; the other environment variables have sensible defaults but can be customized if needed.

  1. Save the file and restart Claude for Desktop

  2. Verify the server is working by checking for the hammer icon in the bottom right corner of the input box

Development

For development with auto-rebuild:

npm run dev

Lint your code:

npm run lint

Run tests:

npm run test

Debugging

Since MCP servers communicate over stdio, debugging can be challenging. We recommend using the MCP Inspector for debugging.

Security Considerations

This server implements several security measures:

  • Read-only operations for sensitive financial resources

  • No storage of API credentials in code

  • Rate limiting for API requests

  • Proper error handling and logging

Implementation Status

For a detailed implementation plan and status of various features, see documentation/implementation_plan.md.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Author

Dennison Bertram - dennison@dennisonbertram.com

Available Tools

9 tools
get_account_detailsC

Get detailed information about a Brex account

ParametersJSON Schema
NameRequiredDescriptionDefault
accountIdYesID of the Brex account

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure but provides minimal information. It doesn't indicate whether this is a read-only operation, what authentication is required, whether there are rate limits, what format the detailed information returns, or any error conditions. While 'Get' implies a read operation, the lack of behavioral details is a significant gap for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise - a single sentence that directly states the tool's purpose without any wasted words. It's front-loaded with the core functionality and doesn't include unnecessary elaboration. For a simple retrieval tool, this level of conciseness is appropriate and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete for a tool that presumably returns detailed account information. It doesn't specify what 'detailed information' includes, what format it returns, or any behavioral constraints. For a financial account tool with no structured output documentation, the description should provide more context about what information agents can expect to receive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the single parameter 'accountId' clearly documented as 'ID of the Brex account'. The description doesn't add any parameter information beyond what the schema provides, which is acceptable given the high schema coverage. The baseline score of 3 reflects adequate but not exceptional parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('detailed information about a Brex account'), making the purpose understandable. However, it doesn't distinguish this tool from its sibling 'get_all_accounts' - both appear to retrieve account information, but this one seems focused on a single account while the sibling retrieves all accounts. The description could be more specific about what 'detailed information' includes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'get_all_accounts' and 'get_transactions' available, there's no indication whether this tool should be used for single account details versus the sibling for multiple accounts, or what specific use cases warrant this tool. The agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_all_accountsB

Get all Brex accounts with pagination support

ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNoNumber of items per page (default: 50, max: 100)
max_itemsNoMaximum total number of items to retrieve across all pages
statusNoFilter accounts by status

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'pagination support', which is useful context not in the schema. However, it doesn't describe other key behaviors like authentication requirements, rate limits, error handling, or what the return format looks like (e.g., list structure, metadata). For a list tool with no annotations, this leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core purpose ('Get all Brex accounts') and adds only essential behavioral context ('with pagination support'). Every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is minimally adequate for a list tool. It covers the core purpose and pagination behavior but lacks details on authentication, rate limits, error cases, and return format. For a tool with 3 parameters and no structured safety/behavior annotations, it should provide more contextual guidance to be complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all three parameters. The description doesn't add any parameter-specific information beyond what's in the schema (e.g., it doesn't explain how pagination parameters interact or provide examples). Baseline 3 is appropriate when the schema does all the parameter documentation work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('all Brex accounts'), making the purpose unambiguous. It distinguishes from siblings like 'get_account_details' by emphasizing 'all' accounts rather than specific details. However, it doesn't explicitly differentiate from other list tools like 'get_all_expenses' beyond the resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose 'get_all_accounts' over 'get_account_details' for individual accounts, or how it relates to other list tools like 'get_all_expenses'. There's no context about prerequisites, limitations, or typical use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_all_card_expensesC

Get all Brex card expenses with pagination and filtering support

ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNoNumber of items per page (default: 50, max: 100)
max_itemsNoMaximum total number of items to retrieve across all pages
statusNoFilter card expenses by status
payment_statusNoFilter card expenses by payment status
start_dateNoFilter card expenses created on or after this date (ISO format)
end_dateNoFilter card expenses created on or before this date (ISO format)
merchant_nameNoFilter card expenses by merchant name (partial match)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions 'pagination and filtering support', which hints at large-scale data handling, but fails to describe critical behaviors like rate limits, authentication needs, response format, error conditions, or whether this is a read-only operation. For a tool with 7 parameters and no annotations, this is inadequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose ('Get all Brex card expenses') and adds key features ('with pagination and filtering support'). Every word earns its place with zero waste, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 parameters, no output schema, no annotations), the description is incomplete. It lacks details on return values, error handling, pagination mechanics, and behavioral constraints. For a data retrieval tool with filtering and pagination, more context is needed to guide effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all 7 parameters. The description adds no parameter-specific semantics beyond mentioning 'filtering support' generically, which doesn't enhance understanding of individual parameters. Baseline 3 is appropriate when schema does all the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and resource 'all Brex card expenses', making the purpose evident. It distinguishes from siblings like 'get_expenses' by specifying 'card expenses' and mentions 'pagination and filtering support' which adds specificity. However, it doesn't explicitly differentiate from 'get_all_expenses' which might be similar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'get_expenses' or 'get_all_expenses'. It mentions 'pagination and filtering support' which implies usage for bulk retrieval with filters, but offers no explicit when/when-not instructions or named alternatives, leaving the agent to guess.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_all_expensesC

Get all Brex expenses with pagination and filtering support

ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNoNumber of items per page (default: 50, max: 100)
max_itemsNoMaximum total number of items to retrieve across all pages
expense_typeNoFilter expenses by type
statusNoFilter expenses by status
payment_statusNoFilter expenses by payment status
start_dateNoFilter expenses created on or after this date (ISO format)
end_dateNoFilter expenses created on or before this date (ISO format)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions pagination and filtering support, which is helpful, but doesn't address important aspects like rate limits, authentication requirements, error conditions, or what the response format looks like. For a tool with 7 parameters and no output schema, this leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that communicates the core functionality and key features (pagination and filtering) without any wasted words. It's appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 7 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain the response format, error handling, or important behavioral aspects. While the schema covers parameters well, the description fails to provide the broader context needed for effective tool use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 7 parameters thoroughly with descriptions and enum values. The description adds minimal value beyond confirming filtering exists, but doesn't provide additional context about parameter interactions or usage patterns beyond what's in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('all Brex expenses') with additional functionality ('with pagination and filtering support'). It distinguishes from some siblings like 'get_account_details' but doesn't explicitly differentiate from 'get_expenses' or 'get_all_card_expenses', which appear to be similar expense-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'get_expenses' or 'get_all_card_expenses'. It mentions pagination and filtering support but doesn't explain when these features are needed or when other tools might be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_expensesC

Get expenses from Brex

ParametersJSON Schema
NameRequiredDescriptionDefault
expense_typeNoType of expenses to retrieve
statusNoStatus filter for expenses
payment_statusNoPayment status filter for expenses
limitNoMaximum number of expenses to return (default: 50)

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states the basic action without disclosing behavioral traits like pagination, rate limits, authentication needs, or response format. It fails to address whether this is a read-only operation, what happens on errors, or if it supports sorting, making it inadequate for a tool with multiple parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with a single sentence, 'Get expenses from Brex', which is front-loaded and wastes no words. However, it may be overly terse given the tool's complexity, as it omits necessary context that could aid the agent in proper tool selection and usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 4 parameters, no annotations, and no output schema, the description is incomplete. It lacks details on behavior, output format, error handling, and differentiation from siblings, making it insufficient for an agent to reliably invoke the tool without guessing or relying solely on the input schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with clear enum values and descriptions for all parameters, so the description adds no additional semantic meaning. The baseline score of 3 reflects that the schema adequately documents parameters, but the description doesn't compensate or enhance understanding beyond what's already structured.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get expenses from Brex' restates the tool name with minimal elaboration, making it tautological. It specifies the resource ('expenses') and source ('Brex') but lacks a clear verb beyond 'Get' and doesn't differentiate from sibling tools like 'get_all_expenses' or 'get_all_card_expenses', leaving ambiguity about scope or filtering.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as 'get_all_expenses' or 'get_all_card_expenses'. The description implies a general retrieval but offers no context on prerequisites, exclusions, or specific use cases, leaving the agent to infer usage from parameters alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_transactionsC

Get transactions for a Brex account

ParametersJSON Schema
NameRequiredDescriptionDefault
accountIdYesID of the Brex account
limitNoMaximum number of transactions to return (default: 50)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions 'Get transactions' but doesn't disclose behavioral traits such as whether this is a read-only operation, if it requires specific permissions, rate limits, pagination details, or error handling. This leaves significant gaps for an agent to understand how to use it safely and effectively.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and appropriately sized, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., transaction format, fields), behavioral aspects like safety or performance, or how it fits with sibling tools. For a tool with 2 parameters and no structured context, more detail is needed to guide an agent effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, clearly documenting both parameters ('accountId' and 'limit'). The description adds no additional meaning beyond what the schema provides, such as explaining transaction types or date ranges. With high schema coverage, the baseline score of 3 is appropriate as the schema handles the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('transactions for a Brex account'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_expenses' or 'get_all_expenses' that might retrieve similar financial data, leaving some ambiguity about scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_expenses' and 'get_all_expenses' available, it's unclear if this tool is for specific account transactions, all transactions, or how it differs, offering no context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

match_receiptB

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

ParametersJSON Schema
NameRequiredDescriptionDefault
receipt_nameYesName of the receipt file (e.g., 'receipt.jpg')
receipt_typeNoType of the receipt (optional)
notify_emailNoEmail address to notify after matching (optional)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. While it mentions the creation of a pre-signed URL and automatic matching, it doesn't describe what happens after upload, whether there are rate limits, authentication requirements, error conditions, or what the matching process entails. The description is insufficient for a mutation tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that efficiently communicates the core functionality without unnecessary words. It's front-loaded with the main action and outcome, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool that creates pre-signed URLs (implying file upload and backend processing) with no annotations and no output schema, the description is incomplete. It doesn't explain what the pre-signed URL is used for, what format the response takes, or what happens after matching. The agent lacks crucial information about this tool's behavior and outputs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so all parameters are documented in the input schema. The description doesn't add any parameter-specific information beyond what's already in the schema properties. This meets the baseline expectation when schema documentation is complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Create a pre-signed URL for uploading a receipt') and the outcome ('that will be automatically matched with existing expenses'). It distinguishes from sibling tools like 'upload_receipt' by specifying the pre-signed URL creation and automatic matching functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'upload_receipt' or other expense-related tools. It doesn't mention prerequisites, constraints, or typical use cases, leaving the agent with no contextual decision-making information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_expenseC

Update an existing card expense

ParametersJSON Schema
NameRequiredDescriptionDefault
expense_idYesID of the expense to update
memoNoMemo text to attach to the expense (optional)
categoryNoCategory of the expense (optional)
budget_idNoID of the budget to associate with the expense (optional)
department_idNoID of the department to associate with the expense (optional)
location_idNoID of the location to associate with the expense (optional)
custom_fieldsNoCustom fields to update (optional)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. 'Update' implies a mutation operation, but the description doesn't specify what happens during updates (e.g., whether fields are overwritten or merged, if changes are reversible, permission requirements, or rate limits). This leaves significant gaps for an agent to understand the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that communicates the core purpose without any wasted words. It's appropriately sized for a straightforward update operation and is front-loaded with essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 7 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what the tool returns, error conditions, or behavioral nuances. While the schema covers parameters well, the overall context for safe and effective use is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with each parameter clearly documented in the schema itself. The description adds no additional parameter information beyond what's already in the schema (like explaining relationships between parameters or special constraints). This meets the baseline expectation when schema coverage is complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update') and target resource ('an existing card expense'), making the purpose immediately understandable. However, it doesn't differentiate this tool from potential sibling update operations (like updating transactions or receipts) that might exist in the broader system, though none are listed among the provided siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (like needing an existing expense ID), when not to use it (e.g., for creating new expenses), or how it relates to sibling tools like 'get_all_card_expenses' or 'upload_receipt'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_receiptC

Upload a receipt image to match with expenses

ParametersJSON Schema
NameRequiredDescriptionDefault
receipt_dataYesBase64-encoded image data
receipt_nameYesName of the receipt file (e.g., 'receipt.jpg')
content_typeYesMIME type of the receipt (e.g., 'image/jpeg')

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('upload') but doesn't mention whether this is a mutation (likely yes), what permissions are required, how errors are handled, or what happens after upload (e.g., does it trigger matching automatically?). For a tool that likely modifies data, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of an upload operation with no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., a receipt ID, match status), error conditions, or side effects, leaving the agent with insufficient context to use it effectively beyond basic parameter passing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, clearly documenting all three required parameters (receipt_data, receipt_name, content_type) with examples. The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline of 3 for adequate but not enhanced coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('upload') and resource ('receipt image') with the purpose 'to match with expenses', which is specific and actionable. However, it doesn't explicitly distinguish this tool from its sibling 'match_receipt', which appears related but has a different name, leaving some ambiguity about their distinct roles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'match_receipt' or other expense-related tools. It lacks context about prerequisites (e.g., whether an expense must exist first) or exclusions, leaving the agent to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

B3.1/5.0
Disambiguation3/5

The tools have some clear distinctions, such as between get_all_accounts and get_account_details, but there is significant overlap between get_all_expenses, get_all_card_expenses, and get_expenses, which could confuse an agent about which to use for expense retrieval. The match_receipt and upload_receipt tools also have related purposes, though their descriptions help differentiate them slightly.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern (e.g., get_account_details, update_expense, upload_receipt), with clear verbs like 'get', 'match', 'update', and 'upload'. The only minor deviation is get_all_accounts vs. get_account_details, but overall the naming is predictable and readable across the set.

Tool Count5/5

With 9 tools, the server is well-scoped for managing Brex accounts, expenses, and receipts. This count is appropriate for the financial domain, covering core operations without being overwhelming, and each tool appears to serve a distinct function in the workflow.

Completeness4/5

The tool set covers key areas like account retrieval, expense management, and receipt handling, with good CRUD-like operations (e.g., get, update). However, there are minor gaps, such as no tool for creating new expenses or deleting data, which might limit full lifecycle management, but agents can likely work around these for common tasks.

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MCP-Mirror/crazyrabbitLTC_mcp-brex-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server