From d0ccf6a4a2fb3cf665e46558e635ad293b6f03c1 Mon Sep 17 00:00:00 2001 From: Radith Samarakoon Date: Tue, 6 Jan 2026 01:13:25 +0530 Subject: [PATCH 1/3] Add account filtering to get transactions --- src/lampyrid/clients/firefly.py | 20 ++++++++++++++++++++ src/lampyrid/models/lampyrid_models.py | 4 ++++ src/lampyrid/tools/transactions.py | 5 ++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/lampyrid/clients/firefly.py b/src/lampyrid/clients/firefly.py index 34bc48d..fd52843 100644 --- a/src/lampyrid/clients/firefly.py +++ b/src/lampyrid/clients/firefly.py @@ -242,6 +242,26 @@ async def get_transactions(self, req: GetTransactionsRequest) -> TransactionArra r.raise_for_status() return TransactionArray.model_validate(r.json()) + async def get_account_transactions(self, req: GetTransactionsRequest) -> TransactionArray: + """Get transactions for a specific account with optional time range filtering.""" + params: Dict[str, Any] = { + 'page': req.page, + 'limit': req.limit, + } + + if req.start_date: + params['start'] = req.start_date.strftime('%Y-%m-%d') + + if req.end_date: + params['end'] = req.end_date.strftime('%Y-%m-%d') + + if req.account_id is None: + raise ValueError('account_id must be provided for account transactions retrieval.') + + r = await self._client.get(f'/api/v1/accounts/{req.account_id}/transactions', params=params) + r.raise_for_status() + return TransactionArray.model_validate(r.json()) + async def get_transaction(self, req: GetTransactionRequest) -> Transaction: """Get a single transaction by ID.""" r = await self._client.get(f'/api/v1/transactions/{req.id}') diff --git a/src/lampyrid/models/lampyrid_models.py b/src/lampyrid/models/lampyrid_models.py index b964110..16d047d 100644 --- a/src/lampyrid/models/lampyrid_models.py +++ b/src/lampyrid/models/lampyrid_models.py @@ -253,6 +253,10 @@ class CreateTransferRequest(BaseModel): class GetTransactionsRequest(BaseModel): + account_id: Optional[str] = Field( + None, + description='Filter transactions by specific account ID (asset, expense, or revenue)', + ) start_date: Optional[date] = Field( None, description='Start date for filtering transactions (YYYY-MM-DD format). If not specified, returns recent transactions.', diff --git a/src/lampyrid/tools/transactions.py b/src/lampyrid/tools/transactions.py index 09cf4b9..b5a3606 100644 --- a/src/lampyrid/tools/transactions.py +++ b/src/lampyrid/tools/transactions.py @@ -67,7 +67,10 @@ async def get_transaction(req: GetTransactionRequest) -> Transaction: @mcp.tool(tags={'transactions', 'query'}) async def get_transactions(req: GetTransactionsRequest) -> TransactionListResponse: """Retrieve transaction history with flexible filtering and pagination. Essential for financial analysis, spending pattern review, and account activity monitoring.""" - transaction_array = await client.get_transactions(req) + if req.account_id is not None: + transaction_array = await client.get_account_transactions(req) + else: + transaction_array = await client.get_transactions(req) return TransactionListResponse.from_transaction_array( transaction_array, current_page=req.page or 1, per_page=req.limit or 50 From 98c1094ba32d018fb2b9f44f3107c6939a4b62d5 Mon Sep 17 00:00:00 2001 From: Radith Samarakoon Date: Tue, 6 Jan 2026 01:20:17 +0530 Subject: [PATCH 2/3] Add tx type filtering to account txs --- src/lampyrid/clients/firefly.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lampyrid/clients/firefly.py b/src/lampyrid/clients/firefly.py index fd52843..f12ed80 100644 --- a/src/lampyrid/clients/firefly.py +++ b/src/lampyrid/clients/firefly.py @@ -255,6 +255,9 @@ async def get_account_transactions(self, req: GetTransactionsRequest) -> Transac if req.end_date: params['end'] = req.end_date.strftime('%Y-%m-%d') + if req.transaction_type: + params['type'] = req.transaction_type.value + if req.account_id is None: raise ValueError('account_id must be provided for account transactions retrieval.') From 693d1f09c3f01c76f761bc1b92ff1a6fd275bf53 Mon Sep 17 00:00:00 2001 From: Radith Samarakoon Date: Tue, 6 Jan 2026 22:22:28 +0530 Subject: [PATCH 3/3] Improve field description --- src/lampyrid/models/lampyrid_models.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lampyrid/models/lampyrid_models.py b/src/lampyrid/models/lampyrid_models.py index 16d047d..94a02c5 100644 --- a/src/lampyrid/models/lampyrid_models.py +++ b/src/lampyrid/models/lampyrid_models.py @@ -255,7 +255,9 @@ class CreateTransferRequest(BaseModel): class GetTransactionsRequest(BaseModel): account_id: Optional[str] = Field( None, - description='Filter transactions by specific account ID (asset, expense, or revenue)', + description='Optional account ID to filter results. When provided, only transactions involving this ' + 'specific account (as source or destination) are returned. When omitted or None, ' + 'transactions for all accounts are returned (subject to other filters).', ) start_date: Optional[date] = Field( None,