up_list_transactions
Retrieve and filter banking transactions by account, date range, status, category, or tags to analyze spending patterns and financial activity.
Instructions
List transactions across all accounts or for a specific account. Supports filtering by status, date range, category, and tags. Returns paginated results ordered newest first.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | No | Optional: Filter to transactions for a specific account | |
| status | No | Filter by transaction status (pending or settled) | |
| since | No | Start date-time in RFC 3339 format (e.g., 2024-01-01T00:00:00+10:00) | |
| until | No | End date-time in RFC 3339 format (e.g., 2024-12-31T23:59:59+10:00) | |
| category | No | Filter by category ID (e.g., 'restaurants-and-cafes', 'good-life') | |
| tag | No | Filter by transaction tag | |
| pageSize | No | Number of records to return (default: 30, max: 100) |
Implementation Reference
- src/index.ts:426-445 (handler)MCP tool handler that parses input arguments and delegates to UpApiClient.listTransactions method, formatting the response as JSON text.case "up_list_transactions": { const args = request.params.arguments as { accountId?: string; status?: "HELD" | "SETTLED"; since?: string; until?: string; category?: string; tag?: string; pageSize?: number; }; const result = await client.listTransactions(args); return { content: [ { type: "text", text: JSON.stringify(result, null, 2), }, ], }; }
- src/index.ts:266-302 (schema)JSON Schema defining the input parameters and their types/descriptions for the up_list_transactions tool.inputSchema: { type: "object", properties: { accountId: { type: "string", description: "Optional: Filter to transactions for a specific account", }, status: { type: "string", enum: ["HELD", "SETTLED"], description: "Filter by transaction status (pending or settled)", }, since: { type: "string", description: "Start date-time in RFC 3339 format (e.g., 2024-01-01T00:00:00+10:00)", }, until: { type: "string", description: "End date-time in RFC 3339 format (e.g., 2024-12-31T23:59:59+10:00)", }, category: { type: "string", description: "Filter by category ID (e.g., 'restaurants-and-cafes', 'good-life')", }, tag: { type: "string", description: "Filter by transaction tag", }, pageSize: { type: "number", description: "Number of records to return (default: 30, max: 100)", }, }, },
- src/index.ts:263-303 (registration)Registration of the up_list_transactions tool in the TOOLS array, including name, description, and input schema.name: "up_list_transactions", description: "List transactions across all accounts or for a specific account. Supports filtering by status, date range, category, and tags. Returns paginated results ordered newest first.", inputSchema: { type: "object", properties: { accountId: { type: "string", description: "Optional: Filter to transactions for a specific account", }, status: { type: "string", enum: ["HELD", "SETTLED"], description: "Filter by transaction status (pending or settled)", }, since: { type: "string", description: "Start date-time in RFC 3339 format (e.g., 2024-01-01T00:00:00+10:00)", }, until: { type: "string", description: "End date-time in RFC 3339 format (e.g., 2024-12-31T23:59:59+10:00)", }, category: { type: "string", description: "Filter by category ID (e.g., 'restaurants-and-cafes', 'good-life')", }, tag: { type: "string", description: "Filter by transaction tag", }, pageSize: { type: "number", description: "Number of records to return (default: 30, max: 100)", }, }, }, },
- src/index.ts:148-187 (helper)Core implementation of listing transactions via Up API, constructing endpoint with filters and calling makeRequest.async listTransactions(filters?: { accountId?: string; status?: "HELD" | "SETTLED"; since?: string; until?: string; category?: string; tag?: string; pageSize?: number; }): Promise<{ data: TransactionResource[] }> { let endpoint = filters?.accountId ? `/accounts/${filters.accountId}/transactions` : "/transactions"; const params = new URLSearchParams(); if (filters?.status) { params.append("filter[status]", filters.status); } if (filters?.since) { params.append("filter[since]", filters.since); } if (filters?.until) { params.append("filter[until]", filters.until); } if (filters?.category) { params.append("filter[category]", filters.category); } if (filters?.tag) { params.append("filter[tag]", filters.tag); } if (filters?.pageSize) { params.append("page[size]", filters.pageSize.toString()); } if (params.toString()) { endpoint += `?${params.toString()}`; } return this.makeRequest(endpoint); }