financial-agent
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FINANCE_AGENT_ENV | No | Path to a .env file the server loads at startup. | |
| TODOIST_API_TOKEN | No | Todoist API token for reading and (optionally) writing review tasks. | |
| TODOIST_PROJECT_ID | No | Todoist project that holds finance review tasks. | |
| SIMPLEFIN_ACCESS_URL | No | SimpleFIN access URL for read-only bank sync. | |
| FINANCE_AGENT_DB_PATH | No | Path to the SQLite database to use. | |
| TODOIST_WRITE_ENABLED | No | Set to enable live Todoist write-back (off by default). | |
| FINANCE_WORKING_ACCOUNT | No | Substring matched against account names to pick your operating checking account. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_finance_statusC | Return read-only finance status: balances, source freshness, trace ids, and stable V1 slots. |
| list_income_sourcesC | List configured income sources, schedule versions, review dates, and generated horizons. |
| apply_income_sourceC | Create or update an income source and schedule version after user confirmation. |
| import_calendar_factsA | Import normalized calendar facts into local storage. This tool expects source-specific calendar import to happen before the call. Facts should include fact_type, date, source, and optional external_id, calendar_id, related entity, title, confidence, notes, and payload. |
| list_calendar_factsC | List local normalized calendar facts with optional filters. |
| apply_obligation_instancesC | Create or update an obligation and exact dated instances. |
| list_obligationsC | List local canonical obligations and optionally their dated instances. |
| list_obligation_review_candidatesC | List obligation instances that need review, such as estimated amounts due for refresh. |
| list_statement_input_estimatesC | List card-spend inputs that feed future statement estimates without directly reducing checking. |
| generate_income_instancesC | Generate dated income obligation instances from configured income schedules. extra_closure_dates accepts YYYY-MM-DD dates imported from a payroll or calendar source for one-off local closures. |
| scan_charge_onboarding_candidatesA | Scan transaction history and discover reviewable charge-pattern candidates. This is the background-discovery entry point: it groups related transactions by merchant and account, proposes schedule/amount/cash-impact/review policies, and stores durable candidates in a review queue. It is idempotent and never writes canonical obligations or moves cash flow. Options support min_evidence, include_inflows, and link_existing_obligations. |
| list_charge_onboarding_queueA | List charge-onboarding candidates ordered by estimated monthly cash impact. By default returns only the active queue (candidates still awaiting a decision). Pass status to filter exactly, or include_resolved=True to see decided/paused candidates such as deferred or rejected ones. |
| get_next_charge_onboarding_candidateB | Return the single highest-priority unresolved charge-onboarding candidate. |
| record_charge_onboarding_decisionA | Record a review decision against a charge-onboarding candidate. Supported actions in this slice: defer, reject, needs_more_evidence, in_review, reset. Applying a candidate into a canonical obligation (accept/apply) or restructuring (merge/split) is a separate guarded slice and is rejected here. |
| preview_charge_onboarding_applyA | Preview the canonical obligation and dated instances that applying would create. Read-only and writes nothing. Use this to show a reviewer exactly what would land in the cash-flow model (obligation, instances, schedule summary, and warnings) before committing to apply. |
| apply_charge_onboarding_candidateA | Promote an accepted candidate into a canonical obligation plus dated instances. This is the guarded write that turns a reviewed candidate into cash-flow truth. By default the candidate must already be accepted (record an accept decision first). Writing is idempotent: re-applying the same window updates instances in place instead of duplicating them. |
| aggregate_statement_inputsB | Group card-statement-input charges into the statement cycle that pays them. Deterministic and idempotent. Builds statement cycles from the target obligation's statement instances (those with a statement close date) and assigns each card input to its cycle, reporting any inputs that fall past the last known statement close as unrolled. |
| list_statement_cyclesC | List statement cycles for a card obligation with their aggregated card-input evidence. |
| recompute_statement_estimatesA | Fill unconfirmed statement estimates from the card-input rollup, guarded. Only statement instances whose amount is an unconfirmed projection are recomputed, as baseline (expected non-modeled card spend) plus the rolled-up modeled card inputs for that cycle. Portal/observed amounts are never overwritten. Idempotent. |
| reconcile_obligation_instancesA | Match expected obligation instances against observed transactions. Deterministic and idempotent. Records the best transaction match per instance as review evidence (amount + date + merchant scoring). Conservative by default: matches are not silently marked paid (set options.auto_mark_paid to opt in), unmatched past-grace instances become needs_review not overdue (set options.flag_unmatched_needs_review to opt in), and card-statement-input instances are skipped (they settle via the statement, not a checking match). |
| list_matched_obligation_instancesC | List obligation instances matched to a transaction, with score and evidence. |
| list_unmatched_obligation_instancesC | List expected obligation instances with no matching transaction (drift inputs). |
| detect_driftB | Detect evidence-backed drift findings, ordered by severity. Finds missing expected obligations (past due, no matching transaction), stale estimates (review date passed), amount changes (charge happened but differs materially), and unexpected recurring charges (discovered by onboarding but not yet modeled). Deterministic and idempotent. When persist is true, findings are upserted and disappeared ones marked resolved. |
| list_drift_findingsC | List stored drift findings, filtered by status (default active) and type. |
| preview_todoist_review_batchA | Render the day's review items (drift findings) as a Todoist task + subtasks. Read-only and sends nothing. Returns the parent task and per-item subtasks with specific guidance, so the user can see the review batch before any write. |
| enqueue_todoist_review_batchA | Record the day's review batch in the durable action outbox. No live write. Idempotent (one batch per day). dry_run (default true) records the payload without intending to send; dry_run=false marks it pending for a sender that is intentionally not configured. Nothing is ever sent to Todoist here. |
| execute_action_outboxA | Process outbox items. Live Todoist sending is gated OFF by default. Dry-run items are always simulated. Pending items send to Todoist ONLY when TODOIST_WRITE_ENABLED is set in the finances .env AND a token + project id are configured; otherwise they are marked awaiting-integration (no external call). When enabled, sending is idempotent - one task per outbox key, updated in place on rerun rather than duplicated. |
| list_action_outboxC | List durable action-outbox items (intended external writes) and their status. |
| run_background_syncB | Run the finance pipeline as one auditable background run. Orchestrates: scan charge candidates, reconcile transactions, detect drift, and preview the Todoist review batch (dry run). Records a run record plus an ordered operation-event log. A failing step is logged and the run continues (partial_success). Returns the run id, trace id, status, and step summaries. |
| get_background_runC | Return a background run record plus its ordered operation-event log. |
| list_background_runsC | List recent background runs with their status and timing. |
| write_finance_memoryA | Store a finance memory (a correction, decision, or fact to recall later). Idempotent by (kind, source, text). Use kind to scope memories, e.g. 'decision', 'correction', 'fact'. |
| search_finance_memoryA | Retrieve the most relevant finance memories for a query, under a context policy. Records are scored by similarity, then filtered by min_score, capped at k, and bounded by a max_tokens budget. The result reports how many records each limit dropped so the amount of memory entering context is explicit. |
| list_finance_memoriesC | List stored finance memories, optionally filtered by kind. |
| delete_finance_memoryB | Delete a finance memory by id (e.g. when a correction is no longer true). |
| import_todoist_obligationsA | Import cashflow-candidate Todoist tasks as canonical one-off obligations. The local DB stays the source of truth; Todoist is the origin for one-off obligations only. Idempotent by task id. A checked/completed task sets a review date but is never auto-marked paid; a deleted task cancels its instance; a task resembling a recurring obligation is flagged needs_review_dedup_conflict instead of imported. If tasks is omitted, reads cashflow_candidate tasks from the local todoist_tasks snapshot. |
| list_todoist_sync_recordsC | List Todoist-to-obligation sync records, optionally filtered by status or task id. |
| resolve_todoist_dedup_conflictC | Resolve a flagged Todoist dedup conflict: import_anyway, skip, or merge. |
| apply_obligation_migrationA | Migrate the complete obligation set from a legacy source into canonical rows. source is 'obligations_yaml' (trusted, machine-readable) or 'cashflow_md' (stale narrative, imported as needs_review). Instance-level dedup skips anything already modeled; ambiguous rows become needs_review. dry_run (the default) computes the full plan and writes nothing. Reads the legacy file read-only. |
| evaluate_guardrailsA | Evaluate operating guardrails (cash floor, drift threshold, window age, debt avalanche). Returns findings ordered by severity. Reads balances and drift from the DB. When persist is true, records the evaluation (pass/fail per rule). |
| list_guardrail_findingsC | List recorded guardrail evaluations, optionally filtered by date or rule. |
| apply_guardrail_rulesC | Idempotently seed the default guardrail rules into the database. |
| sync_simplefinA | Pull live accounts, balances, and transactions from SimpleFIN into the DB. Reads SIMPLEFIN_ACCESS_URL from the finances .env at runtime (never returned). Read-only against SimpleFIN; idempotent upsert by transaction id. When start_date is omitted, incremental=true resumes from the last synced transactions (cheap for a daily run); otherwise it pulls lookback_days (SimpleFIN caps the window at 90 days). Returns counts and any warnings. |
| sync_todoistA | Pull the live Todoist board (tasks + sections) into the local DB, read-only. Reads TODOIST_API_TOKEN and the project id from the finances .env / obligations.yaml at runtime (never returned). Normalizes each task into the cashflow fields the onboarding importer uses, upserts by id, and marks tasks no longer seen as deleted. Does NOT write to Todoist. |
| run_live_validationA | Validate the pipeline on live data without touching the committed snapshot. Copies the database to a throwaway working DB, optionally pulls live SimpleFIN
|
| get_daily_digestB | The daily finance summary (replaces |
| list_reconciliation_review_itemsB | List recorded transaction matches whose obligation instance still awaits confirmation (the day's close-out queue). Read-only. |
| confirm_reconciliation_matchA | Mark a reviewed obligation instance paid using its recorded transaction match. Guarded: requires a recorded match (run reconcile first); never auto-pays. Reversible with unconfirm_reconciliation_match. |
| unconfirm_reconciliation_matchB | Reverse a confirmation: return the obligation instance to 'expected' and clear the matched-transaction evidence. |
| compare_to_legacyA | Parallel-run parity: diff a legacy cash-flow.md against the new daily digest. Reads the legacy markdown the caller points at (supply a fresh one from your own daily ritual); never runs the legacy ritual or writes any legacy file. Reports matched / missing-in-new / extra-in-new / amount-or-date-changed obligations with a severity each, plus the working-cash delta. Set render_markdown for a short parity summary under the 'markdown' key. |
| summarize_spendingA | Summarize outflow spending over a date range, grouped by category, merchant, or month: totals, counts, top buckets, a month-over-month trend, and the transaction ids behind each bucket. Transfers and income are excluded by default. Read-only. Set render_markdown for a summary under 'markdown'. |
| verify_groundingA | Check that every headline dollar figure in a finance payload (a get_finance_status or get_daily_digest result) traces to a source: working cash to the latest operating-account balance snapshot, each upcoming obligation to its instance row, each projection endpoint recomputable from those. Returns a grounding report flagging any number it could not trace. Read-only - use it to verify a finance answer before relying on it. |
| backfill_recurring_instancesA | Materialize past-due instances for active recurring obligations over a trailing window and reconcile them against posted transactions, so the digest can answer "did rent / Amex / Apple clear this cycle?". Past instances do not enter the cash-flow projection (forward-only); no payment is fabricated - matches come from the normal reconciliation matcher. |
| auto_model_high_confidence_recurringA | Apply HIGH-confidence, well-evidenced direct-checking recurring candidates (e.g. a car payment) as proper obligations so they enter the cash-flow projection and the runway becomes accurate. Conservative: only confidence=high direct-checking with >=3 occurrences; everything else stays in the review queue. |
| dedupe_todoist_recurring_duplicatesB | Cancel future instances of a Todoist-imported obligation that duplicates a proper recurring obligation (e.g. a stale one-off "New York Times" $28.62 vs the recurring "New York Times subscription" $30.30). Conservative subset match; reversible (status -> canceled). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/albeorla/personal-finance-agent'
If you have feedback or need assistance with the MCP directory API, please join our Discord server