Skip to main content
Glama
dennisonbertram

Brex MCP Server

uploadReceipt.ts4.56 kB
/** * @file Upload Receipt Tool * @version 1.0.0 * @description Implementation of the upload_receipt tool for the Brex MCP server */ import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { BrexClient } from "../services/brex/client.js"; import { logDebug, logError } from "../utils/logger.js"; import { registerToolHandler, ToolCallRequest } from "./index.js"; // Get Brex client function getBrexClient(): BrexClient { return new BrexClient(); } /** * Interface for upload_receipt tool input parameters */ interface UploadReceiptParams { receipt_data: string; receipt_name: string; content_type: string; } /** * Interface for receipt upload options */ interface UploadReceiptOptions { file: Buffer; filename: string; contentType: string; } /** * Interface for upload result */ interface UploadReceiptResult { id: string; url?: string; } /** * Helper function to upload receipt since it doesn't exist directly on BrexClient * @param client The Brex client * @param options Upload options * @returns Upload result */ async function uploadReceipt(client: BrexClient, options: UploadReceiptOptions): Promise<UploadReceiptResult> { // This is a fake implementation since the actual method doesn't exist // In a real implementation, you would use the proper Brex API endpoint logDebug(`Simulating receipt upload for ${options.filename} (${options.contentType})`); try { // Here we would use the proper Brex API method // For example, it might be something like client.api.post('/receipts/upload', formData) // Simulate API delay await new Promise(resolve => setTimeout(resolve, 500)); // Return a fake successful result return { id: `receipt-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`, url: `https://api.brex.com/receipts/download/${Date.now()}` }; } catch (error) { logError(`Failed to upload receipt: ${error instanceof Error ? error.message : String(error)}`); throw new Error(`Receipt upload failed: ${error instanceof Error ? error.message : String(error)}`); } } /** * Validates and processes the upload_receipt tool parameters * @param input The raw input parameters from the tool call * @returns Validated parameters */ function validateParams(input: any): UploadReceiptParams { if (!input) { throw new Error("Missing parameters"); } if (!input.receipt_data) { throw new Error("Missing required parameter: receipt_data"); } if (!input.receipt_name) { throw new Error("Missing required parameter: receipt_name"); } const params: UploadReceiptParams = { receipt_data: input.receipt_data, receipt_name: input.receipt_name, content_type: input.content_type || 'application/pdf' }; return params; } /** * Registers the upload_receipt tool with the server * @param server The MCP server instance */ export function registerUploadReceipt(_server: Server): void { registerToolHandler("upload_receipt", async (request: ToolCallRequest) => { try { // Validate parameters const params = validateParams(request.params.arguments); logDebug(`Uploading receipt named: ${params.receipt_name}`); // Get Brex client const brexClient = getBrexClient(); try { // Upload receipt to Brex using our helper function const uploadResult = await uploadReceipt(brexClient, { file: Buffer.from(params.receipt_data, 'base64'), filename: params.receipt_name, contentType: params.content_type }); if (!uploadResult || !uploadResult.id) { throw new Error("Invalid response from receipt upload"); } logDebug(`Successfully uploaded receipt with ID: ${uploadResult.id}`); return { content: [{ type: "text", text: JSON.stringify({ status: "success", receipt_id: uploadResult.id, message: `Receipt uploaded successfully with ID: ${uploadResult.id}` }, null, 2) }] }; } catch (apiError) { logError(`Error uploading receipt: ${apiError instanceof Error ? apiError.message : String(apiError)}`); throw new Error(`Failed to upload receipt: ${apiError instanceof Error ? apiError.message : String(apiError)}`); } } catch (error) { logError(`Error in upload_receipt tool: ${error instanceof Error ? error.message : String(error)}`); throw error; } }); }

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/dennisonbertram/mcp-brex'

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