FinStat

Your AI runs the books.

От сообщества: Добавлен пользователем или импортирован; проверьте владельца перед подключениемРаботаетБез входаГлобальныйБесплатноТолько чтение

Что умеет

  • Open Workspace: Resolve an existing workspace by tag (id or exact name) and return its current status and resource links. The server is stateless — this does not set a session context; every tool take
  • Create Workspace: Create a new workspace — the container that scopes all books, documents, COA, and reports for one entity. Call this FIRST when starting a new set of books; every other tool needs a w
  • Create Standard Documents: Convert ONE source document — or canonical statement JSON supplied as canonical_document — into encrypted .statement.json standard documents, one per statement found (N stat

Какие данные видит

Нужен ли аккаунт

Не нужен: сервер работает без входа

Your AI runs the books. Hand it bank and card statements, invoices, bills and receipts; get reconciled double-entry books with every number traceable to the page it came from.

⚠️ Requires a host that can reach files on your machine — Claude Code, Codex, Cursor, Grok Build, or Claude Desktop + Cowork. Browser chat can install FinStat and the tools will respond, but the files never arrive.

Open beta. First 1,000,000 tokens free, then usage-metered — no seats, no minimums.

Список инструментов сервера (60)

Технические названия из tools/list. Нужны только разработчикам.

open_workspaceResolve an existing workspace by tag (id or exact name) and return its current status and resource links. The server is stateless — this does not set a session context; every tool takes workspace_tag explicitly — but call it when resuming work to confirm the workspace exists and is active. Read-only. Use list_workspaces first if you don't know the tag.
create_workspaceCreate a new workspace — the container that scopes all books, documents, COA, and reports for one entity. Call this FIRST when starting a new set of books; every other tool needs a workspace_tag. The caller becomes the owner, and all metered usage in the workspace bills to the owner. Returns the new workspace_tag plus resource links. Next steps: admit documents (submit; create_standard_documents previews the extraction first if wanted), and optionally install one or more charts of accounts (create_standard_coa then submit). A COA is just a reporting view over the workspace, not a requirement — organizing and cross-referencing documents alone is a fully supported use.
create_standard_documentsConvert ONE source document — or canonical statement JSON supplied as canonical_document — into encrypted .statement.json standard documents, one per statement found (N statements -> N standard documents), admitting nothing to a workspace. Each envelope carries a cleartext routing header (kind, account identity, period, format+engine version, SHA-256 of the source) and an AES-256-GCM-encrypted canonical body; the cleartext metadata is authenticated as GCM AAD and the header is re-derived from the decrypted body on open. Only Finstat holds the key, so envelopes are server-minted and tamper-evident. WHEN THE SOURCE IS A PDF the result also carries sealed_original — the evidence artifact: the PRISTINE original bytes plus ONE encrypted statpill.json attachment (the canonical document + source SHA-256), delivered as a SINGLE-USE download session. In incremental_append mode the original is a literal byte prefix of the sealed file (recover by truncating at prefix_length, verify by rehashing the prefix); in rewrite mode the sealed file authenticates a retained original by source_sha256. Usage is reported for every standardization attempt and account policy determines what is charged. require_pill=true accepts only a source carrying an embedded canonical pill and guarantees no assisted extraction. Consumes its upload session when one is used (a retry needs a fresh upload). Provide workspace_tag (auth + metering scope only) and a finstack handle (preferred after create_document_upload_session) or content_base64; server-local paths and remote URLs are not accepted; the file_name extension selects preparation. Next: validate_standard_statement, decrypt_standard_document, create_standard_pdfs, submit.
validate_standard_statementValidate one or more .statement.json standard statements: decode each envelope and authenticate its cleartext metadata plus AES-256-GCM body with the server key, then verify the header re-derived from the decrypted canonical document. Standard statements are server-minted and tamper-evident, so authenticity IS the validation — an envelope that opens is genuine Finstat output; one that fails was edited, fabricated, header/body-mismatched, or sealed under a different key. Returns a per-document verdict (valid/authentic, kind, account count, reconciliation statuses) plus all_valid. Read-only: nothing is admitted and no LLM runs; workspace_tag scopes auth only. To AUDIT a standard statement against its origin, submit the ORIGINAL source document and compare — the cleartext header's source_sha256 references the original bytes. Pairs with create_standard_documents (mint), decrypt_standard_document (contents), and submit (admit).
decrypt_standard_documentDecrypt ONE .statement.json standard document and return its canonical statement JSON for analysis — the server-side read: standard-document bodies are encrypted, so analysis access is a REQUEST to Finstat, not a local file read. Returns the cleartext routing facts (kind, account, period, source_sha256, engine version) plus the full canonical document (accounts[].{statement,register,reconciliation}, provenance). Fails with an authentication error on any envelope that was edited, fabricated, header/body-mismatched, or sealed under a different key. Read-only: no LLM runs and nothing is admitted; workspace_tag scopes auth only. Pairs with validate_standard_statement (verdict without contents) and create_standard_pdfs (a human-reviewable rendering of the same data).
create_standard_pdfsRender standard documents into standardized statement PDFs (or HTML) through the ONE canonical render path. Preferred input: finstack handles (handle / handles) naming .statement.json envelopes from create_standard_documents or list_transfer_sessions — ciphertext stays server-side. Also accepts inline envelopes (standard_documents / standard_document) or canonical statement JSON (canonical_document, validated through the shared membrane and sealed per account first). One artifact per account (N accounts -> N artifacts), each delivered as one SINGLE-USE download session — bytes are never returned inline, sessions expire (default 900s), verify downloaded bytes against the reported SHA-256 and request a new session rather than retrying an expired one. The reconcile-before-seal gate runs first — the shared canonical control law and running-balance audit — so an account that fails its own law is refused and inconsistent input never becomes sealed truth. Each rendered PDF carries its canonical JSON as an encrypted pill (PDF+): submitting it later skips the LLM parse entirely; format=html renders the same styled document without a pill. Options: style (cursor-flat) and qbo_entity (QBO source template variant). Deterministic and LLM-free; rendering covers every admissible statement type — financial registers (checking, savings, wallet, credit card, loan, brokerage) and commercial documents (invoice, bill, receipt, credit/debit note, collection notice, settlement, payroll). Rendered PDFs are NOT source documents — they become workspace evidence only via submission. Composition: exit_ramp_qbo -> create_standard_documents -> create_standard_pdfs (review) -> submit (books).
create_document_upload_sessionStart an upload for one document too large to inline as base64: returns handle (upload:N), a host-only signed HTTPS PUT program, and ready-to-pass submit_args. REQUIRES a host that can execute an HTTP PUT (code/network execution); hosts without it (web connectors) must NOT use upload sessions — pass content_base64 to submit directly instead (fine up to a few MB). Enforced server-side: the body is size-capped (max_bytes; oversized uploads are rejected, never truncated) and optionally SHA-256-verified (expected_sha256). Host PUTs bytes with upload_program; agent then calls submit / create_standard_documents with handle only — do not re-send file bytes. Pairs with create_document_upload_sessions (batch).
create_document_upload_sessionsBatch variant of create_document_upload_session: one handle + signed upload program per document, preserving your client_document_id on each so you can correlate results. Same size/SHA enforcement per document. After host PUTs succeed, call submit once with submit_args (items[] of handles).
create_document_download_sessionCreate a download session for a stored source document: returns handle (download:N) for tool-to-tool pass-through, plus a host-only signed HTTPS GET program when a local file is needed. Bytes are never returned inline. The session is SINGLE-USE and expires (default 900s): verify downloaded bytes against the reported SHA-256, and if the fetch fails, request a new session rather than retrying the same one. Requires a workspace and a source_document_id. The export_workspace_account_* tools return the same kind of program for generated files.
connection_checkEmpirically test whether THIS host can reach the signed HTTPS data channel — the same channel upload sessions use — before choosing an intake path. REQUIRES an accessible workspace_tag even though the verdict is about the host: the probe parks as a real (never-admitted) upload handle in that workspace's transfer sessions, because probing the EXACT channel uploads use is the point, and that channel is workspace-scoped. Any workspace you can reach works; with no workspace yet, create_workspace first (inspect_mcp_connection needs none). Call 1 (workspace_tag only): returns check_id (upload:N), a nonce, and probe (a signed HTTP PUT program with a tiny text body, 300s TTL). Host PUTs the exact nonce string to probe.upload_url with probe.headers; hosts without code/network execution (web connectors) skip the PUT. Call 2 (workspace_tag + check_id): returns verdict handle_flow (probe arrived hash-verified — create_document_upload_session works from this host; the result echoes the observed PUT user_agent and source_ip) or base64_flow (nothing arrived — pass content_base64 to submit; do not mint upload sessions). The verdict is idempotent until the probe expires, and the probe never becomes workspace evidence. Use at session start when host capability is unknown, or after an upload-session dead end.
statement_testHost/agent conformance runbook over the compiled-in case registry. No arguments: list the catalog. case_key (e.g. tutorial): mint a 24h test — returns test_id, suggested_workspace_name, and steps[], an actor-tagged runbook (agent steps carry ready-to-pass tool args with ${run.*} placeholders you bind from earlier results; host steps are byte-level work; user steps are HARD review gates — present, ask, wait). The runbook's first step creates a disposable scratch workspace; nothing touches real books, and pill-sealed fixtures keep the whole loop LLM-free. test_id + workspace_tag (the runbook's fetch-bundle step): binds the scratch workspace and mints the case bundle (pill-sealed statement PDF, coa.md, instructions.md) as download sessions it owns — re-call to re-mint expired sessions. Grading (submit_statement_test_result, the runbook's last step) verifies observed workspace end-state plus local-vs-submitted integrity.
submit_statement_test_resultGrade a statement_test run (the runbook's final step). Verifies the scratch workspace's OBSERVED end-state against the case's expected block — workspace idle, expected accounts present with closing balance and transaction count, open review items within bound, active COA, documents-admitted and trial-balance law via the shared expectations evaluator — plus integrity: pass artifacts[] of {role, handle|content_base64} holding your locally saved copies (roles standard_document, coa_md); each must SHA-256-match a document admitted to the workspace, proving what the user reviewed locally is what entered the books. Omitted artifacts are reported skipped, never failed. Returns the scorecard {status: passed|failed, checks[] (id, rung, status, detail), observations[]} — observations (timing, artifact delivery paths, review count) are non-punitive QA data. Idempotent: re-grading re-reads current workspace state and overwrites the stored scorecard. NOT a submission boundary — nothing passed here becomes evidence.
example_casesCurated example bundles from the compiled-in case registry (e.g. tutorial — one pill-sealed checking statement + minimal coa.md + instructions; the no-arg catalog is authoritative as cases grow). No arguments: list the catalog and delivery modes. case_key + workspace_tag delivers: delivery=download (default) mints the bundle (statement PDF, coa.md, instructions.md) as download sessions the host GETs — self-guided material, and the raw ingredients of a statement_test run; delivery=seed has the SERVER submit the statement PDF and coa.md straight into the workspace through the normal submit pipeline — zero host byte-handling, the onboarding path for hosts that cannot execute HTTP (base64_flow verdicts from connection_check). Fixtures are statgen-generated and pill-sealed: LLM-free, no real bank data, safe to re-run. Seed writes evidence to the named workspace — use a demo workspace, not your books.
list_transfer_sessionsList the workspace's live (and just-expired, one hour of grace) finstack transfer sessions — every upload and download handle with its role, artifact kind, file name, byte count, SHA-256, status, and expiry. THE RECOVERY SURFACE: if a client times out or disconnects mid-call, the completed result's handle is still here — list, then resume, instead of re-running (and re-paying for) the producing call. Handles with artifact_kind standard_document are multi-read within TTL and feed directly into validate_standard_statement, decrypt_standard_document, create_standard_pdfs, and submit (handles/handle argument); other artifacts keep their original single-use download programs. Read-only.
exit_ramp_qboDecode a QuickBooks Online export zip into structured JSON for analysis or migration. INPUT: exactly one QBO-exported .zip (Reports — Balance Sheet, P&L, Trial Balance, General Ledger, zipped); prefer create_document_upload_session then handle — not PDF/CSV alone (not_a_zip_archive). Admits nothing; consumes the upload session. RETURNS (small / inline=true): company_name, reports[], accounts[] (canonical headers + reconciliation; canonical_document rows when include_contexts=true), coa_hints[], recommended_coa, warnings[], next_steps[]. LARGE (over ~4 KB): payload_inline=false — summary + top-level handle (full JSON behind payload_session; host GET only if needed) AND accounts[].handle per account (canonical Document JSON). Rebuild: create_standard_documents(handle=accounts[i].handle) seals without LLM, then submit those envelopes. Do NOT pass the top-level exit_ramp handle to create_standard_documents.
submitThe ONE workspace submission boundary: admit a mixed batch of financial artifacts as evidence. Each item in items[] names ONE source and the server SELF-IDENTIFIES its form — pdf (incl. sealed.pdf, whose embedded pill short-circuits the LLM parse), statement.json (a finstat-standard-document envelope), canonical.json (a bare xw-statement canonical document, sealed then admitted), or coa.md (standard COA markdown) — then routes it to the matching admit path. Provide each item as a finstack artifact handle (handle, e.g. upload:12 or download:69 — the PREFERRED source, resolved in place with no download-then-reupload), content_base64 with file_name, or document (an inline JSON object: a standard-document envelope or a canonical document); server-local paths and remote URLs are not accepted on the hosted surface. An unrecognized item is a per-item rejection with structured feedback, not a whole-call failure — the other items still process. No COA is required for documents. Returns per-item results (input, recognized_as, status admitted/reused/rejected, produced, disposition, feedback); then call wait_for_workspace_idle and check list_review_items.
get_import_statusReturn the processing state of one import: the job tree by stage (parse, entity resolution, event grouping, COA posting), per-stage counts, the current blocker if any, and resource links. Requires the import_id returned by submit. Read-only. Pairs with wait_for_workspace_idle (blocking wait) and get_workspace_job_summary (workspace-wide view).
get_workspace_job_summaryReturn the workspace's job counts by state (enqueued / processing / complete / failed), the active and failed job lists, and retry/fallback lineage. The at-a-glance progress check — cheaper than wait_for_workspace_idle when you only want a snapshot. Requires a workspace. Read-only. Pairs with wait_for_workspace_idle and diagnose_workspace.
wait_for_workspace_idleBlock until the workspace has no enqueued or processing jobs, or until timeout_seconds (default 45, sized inside CLI hosts' ~60s tools/call windows; a timeout is a normal payload — call again to keep waiting) elapses, polling every poll_millis (default 1000). Call after submit before reading results or generating reports. Read-only and idempotent — safe to retry. Returns elapsed time, job counts by state, failures, and any blockers; a timeout is reported in the payload (timed_out), not thrown. Pairs with get_import_status for one import's detail and diagnose_workspace for health.
list_report_optionsList the workspace's report catalog: every report_type generate_report accepts, with resource URIs, output formats, and available filters. Call before generate_report when you're unsure what's available. Requires a workspace. Read-only.
generate_workspace_reportGenerate the workspace-level summary: intake, document, statement, event, COA, and job counts in one payload — the quick what's-in-this-workspace view. Requires a workspace only (no COA needed). Read-only. Pairs with generate_report for detailed views and diagnose_workspace for health.
generate_reportGenerate any cataloged report by report_type with optional filters — the generic report entry point. The catalog includes COA-independent views over the evidence (transaction space, account activity, event crosswalk — available with no COA at all) as well as COA-scoped detail; see list_report_options for what this workspace offers. Financial statements have their dedicated tools (generate_balance_sheet / generate_profit_and_loss / generate_trial_balance). Requires a workspace. Read-only. Returns the report payload plus resource links.
generate_balance_sheetGenerate the balance sheet for a ledger view, optionally as_of_date. Requires a workspace with a posted COA; coa_id selects one view (an invalid coa_id errors rather than widening to all COAs). Returns no_coa_installed or coa_not_posted with next_steps when those prerequisites are missing — not an empty report_generated. Read-only. Returns the balance-sheet payload. Pairs with generate_profit_and_loss and generate_trial_balance; create_coa_snapshot preserves an immutable copy.
generate_profit_and_lossGenerate the profit & loss for a ledger view over an optional date_from/date_to range. Requires a workspace with a posted COA; coa_id selects one view. Returns no_coa_installed or coa_not_posted with next_steps when those prerequisites are missing — not an empty report_generated. Read-only. Returns the P&L payload. Pairs with generate_balance_sheet and generate_trial_balance.
generate_trial_balanceGenerate the trial balance — debit/credit account rows and rollups — for a ledger view. The tie-out check: use it to verify the books balance before presenting statements. Requires a workspace with a posted COA; coa_id selects one view. Returns no_coa_installed or coa_not_posted with next_steps when those prerequisites are missing — not an empty report_generated. Read-only. Pairs with generate_balance_sheet and generate_profit_and_loss.
list_review_itemsReturn the queue of things that need a human: quarantined or pending admissions, partial obligation settlements, suspected duplicates, processor deposits missing their settlement report, entity rejections, and failed jobs — each with a review_kind, the evidence, and a suggested action. Check this prominently after intake and after posting; an empty queue plus clean diagnostics means the books are unblocked. Requires a workspace. Read-only. Resolve items via the correction tools or by submitting the missing evidence.
list_workspace_accountsList the workspace's real financial accounts (bank, card, …) discovered from submitted statement registers — this is the home of account attributes: id, type, name, identifier, currency, institution and owner names, active flag, statement/transaction counts, first and last transaction dates, and the latest statement close. Obligation documents (bills/invoices/receipts) are counted separately as obligation_statement_count with an obligation_documents_hint pointing at generate_report document_statements — they are not bank accounts. Requires a workspace. Read-only. The account id or identifier here feeds list_workspace_account_transactions and the export_workspace_account_* tools.
list_workspace_account_transactionsList register transactions grouped by account: the response is accounts[], each carrying its account context once (id, type, name, identifier, currency) with lean transactions[] underneath — the transaction facts only: date, amount, direction (inflow/outflow), description, reference_number, counterparty_name. No database ids appear in rows. Filter by account_id OR account_identifier (both work), date_from/date_to, and limit (default 500, max 5000). Invalid filter values error rather than silently widening the result. Read-only. Pairs with list_workspace_accounts; the finstat CSV export (export_workspace_account_csv) emits exactly these row columns.
export_workspace_account_qboExport a workspace account's register transactions as a QuickBooks .qbo (OFX-variant) file for import into another system. Account may be an account id or account identifier; optional date range. Does not change the books; creates a single-use download session and returns its signed download program (not inline base64). Siblings: export_workspace_account_ofx, export_workspace_account_csv.
export_workspace_account_ofxExport a workspace account's register transactions as a generic OFX (.ofx) file for import elsewhere. Account may be an account id or account identifier; optional date range. Does not change the books; creates a single-use download session and returns its signed download program (not inline base64). Siblings: export_workspace_account_qbo, export_workspace_account_csv.
export_workspace_account_csvExport a workspace account's register transactions as a CSV (target: qbo | xero | sage | finstat). qbo/xero/sage emit that system's exact import columns; finstat emits Finstat's register CSV (columns = the workspace-account transaction JSON: date, amount, direction, description, reference_number, resolution_kind, counterparty_name, transfer_account — resolution_kind is transfer|counterparty|unresolved; a transfer has NO counterparty, so counterparty_name is blank and the other own account's full number is in transfer_account). Account may be an account id or account identifier; optional date range. Does not change the books; creates a single-use download session and returns its signed download program (not inline base64). Siblings: export_workspace_account_qbo, export_workspace_account_ofx.
list_coasList the workspace's COA instances with id, name, entity, active flag, accounting basis, and account/posting counts. Remember each COA is an independent reporting view — several can be active at once, one per entity. Requires a workspace. Read-only. Pairs with submit, list_coa_accounts, and diagnose_coa.
list_coa_accountsList account definitions and current balances — codes, names, types, normal balances, ledger roles — for the active COAs, or one COA via coa_id. Requires a workspace. Read-only. An invalid coa_id errors rather than silently widening to all COAs. Pairs with list_coas and the financial report tools.
diagnose_workspaceRun a workspace health check: summary counts, active and failed jobs, open review items, and events with missing COA postings. Call before or after a batch of work, or whenever something looks off — it points at which follow-up tool to use next. Requires a workspace. Read-only. Pairs with get_workspace_job_summary, list_review_items, and diagnose_coa for the ledger-view side.
diagnose_coaRun a COA health check for the active COAs or one coa_id: missing posted entries, failed COA requests, and unclaimed accounts. Call after submit or a posting run to see why a ledger view is incomplete. Requires a workspace with at least one COA. Read-only. Pairs with get_coa_posting_status (gate/queue), create_standard_journal_entry (bankless or party-gap failures that workers cannot retry), and wait_for_workspace_idle.
hold_coa_postingPause automatic COA posting for the workspace or one COA while document processing continues — intake, extraction, and event grouping keep running; only ledger posting waits. REQUIRES reason: the hold is discovered later (often by a different session), and the recorded reason/actor/held_at are what make it self-explanatory instead of 'the system stopped working'. Takes effect immediately: queued evaluations for the held chart drain as free deferrals (v3_post_deferred_held — no metered calls), and nothing new schedules. The hold surfaces in workspace_overview (posting_holds), reports (posting_held warning), get_coa_posting_status, and a coa_posting_held review item. Reverse with release_coa_posting, which resets the deferrals and re-derives them.
release_coa_postingRelease a COA posting hold and schedule eligible settled EventGroups for posting. Requires an existing hold (see get_coa_posting_status). Returns the released state plus the scheduled request count; then wait_for_workspace_idle to watch posting complete. Reverses hold_coa_posting.
get_coa_posting_statusReturn the COA posting gate state: held or released, pending COA requests, and deferred EventGroup counts. Requires a workspace. Read-only. Pairs with hold_coa_posting and release_coa_posting.
verify_expectationsEvaluate a standard case's declarative expectations against this workspace and report pass/fail with got/expected per expectation — the user-facing assertion surface (no SQL, no DB access; evaluation runs server-side over the same facts the report tools expose). Kinds: pipeline (documents_admitted, no_failed_jobs), accounts (identifier_last4/type), journal (expected entry lines for a document, by account_code for exact books or account_role for COA-portable cases), trial_balance, report_totals. Requires workspace_tag and an expectations object (expectations_format 1); coa_id optional when one COA is active. Read-only. Pairs with submit (documents and the COA) in the standard-case lifecycle.
get_startedState-aware onboarding: inspect the workspace (or the account when no workspace_tag is given) and return the branch-appropriate ordered next steps as directly-callable {label, tool, args} entries with a short narration. Documents-first: submit statements/invoices first; a COA is the OPTIONAL reporting view, and COA-independent transaction views and exports are a complete outcome. Call it whenever you are unsure what to do next. Read-only.
workspace_overviewOne-call workspace snapshot: identity, the diagnostic summary counts (documents, statements including obligation_statement_count / financial_statement_count, accounts, COAs, jobs, review items — review_item_count includes failed imports), whether the pipeline is idle, and the single top suggested_next_action as a directly-callable {label, tool, args}. Failed imports route to list_review_items before 'submit first documents'. Answers 'what is in workspace X and what should happen next?' without a multi-tool fan-out. Requires workspace_tag. Read-only.
create_coa_snapshotCapture an immutable point-in-time snapshot of one COA: trial balance, balance sheet, and P&L payloads frozen together under a snapshot_id — the durable record to hand to an accountant or keep as period history (especially before resubmitting a revised COA). Requires a posted coa_id; optional snapshot_name and as_of_date. Returns the snapshot_id. Pairs with list_coa_snapshots and get_coa_snapshot.
list_coa_snapshotsList the workspace's immutable COA report snapshots with id, name, COA, and creation time, optionally scoped to one coa_id. Read-only. Pairs with create_coa_snapshot and get_coa_snapshot.
get_coa_snapshotRead one immutable snapshot's full payload (trial balance, balance sheet, P&L as frozen at creation) by snapshot_id. Read-only. Snapshots never change after creation — safe to cite as period records. Pairs with list_coa_snapshots.
interpret_workspace_requestTurn a natural-language request about the workspace into a structured, read-only plan of proposed MCP calls — it does NOT execute anything; you review and run the proposed tools yourself. Use when the user describes an outcome (fix this duplicate, why is this deposit unmatched) OR a structural books-setup ask (separate business from household / one account two entities) — entity-separation language proposes create_standard_coa, not a single-transaction correction. Requires a workspace. METERED: each call runs a paid LLM interpretation — do not auto-retry. Returns the advisory call program plus any clarifications needed. Pairs with create_standard_coa, the correction tools, and diagnose_workspace.
interpret_coa_requestTurn a natural-language COA or journal request into a structured, read-only plan (proposed accounts, entries, or COA calls) — it does NOT post or mutate anything. Requires a workspace; coa_id scopes the request to one ledger view. METERED: each call runs a paid LLM interpretation — do not auto-retry. Returns the advisory plan with resolved inputs and any missing ones flagged for clarification; feed the result into submit or create_standard_journal_entry after review.
create_standard_journal_entryAUTHOR a journal-entry DECLARATION document — the durable, portable form of a manual journal entry. Validates lines (by account CODE against the named or single active chart; balanced; >=2 lines), resolves evidence (document_id -> the document's content sha256, or explicit sha256), computes the canonical content hash, and returns the declaration JSON. Touches NO books state: review the returned document, keep it durably (it IS the auditable artifact), then admit it with submit like any other document. Admission is idempotent by content hash and order-independent — submitted before its chart, it pends and posts when the chart arrives; submitted to another workspace with the same chart and evidence, it posts the identical entry. This is the durable, portable form of every manual journal entry.
create_standard_adjustment_scheduleAUTHOR an adjustment-schedule DECLARATION document: the durable, portable form of a recurring adjustment (accruals, depreciation, amortization). Validates the chart and both account CODES read-only, resolves evidence (document_id -> sha256 or explicit sha256), computes the canonical content hash, and returns the document. Touches NO books state: review, keep durably, then admit with submit — admission installs the schedule ACTIVE (a declaration is approved by definition; drafting is authoring-side review), pends without its chart, and is idempotent by content hash. The durable, portable form of every recurring adjustment.
create_standard_coa_retirementAUTHOR a chart-retirement DECLARATION document: chart NAME + reason (+ optional replacedByChart). Touches NO books state: review, keep durably, then admit with submit — admission retires the named ACTIVE chart (frozen-readable) and supersedes its pending requests; replayed against an already-retired name it is idempotent, and it pends in a workspace where the chart is not installed yet. Chart retirement is append-only: the chart stays readable, never deleted.
create_standard_workspace_correctionAUTHOR a workspace-correction DECLARATION document: a human ATTESTATION answering what the pipeline could not — today, resolve_obligation_party (who the obligation's unresolved counterparty is). The target is named durably (source document sha256 + optional source_key; pass statement_id and the tool converts it), so the attestation travels with the folder. Touches NO books state: review, keep durably, then admit with submit — admission attests the party, backfills the quarantined obligation header, and re-runs settlement; it pends until the target is admitted, replays idempotently against the same resolution, and stays pending (never destructive) on a conflicting one. The durable, portable form of a workspace correction.
export_workspace_documentsEXPORT the workspace as its complete document set: backup is a folder. Gathers every admitted source document's ORIGINAL bytes, every chart's coa.md (active and retired), and every declaration into one zip — manifest.json + evidence/ + charts/ + declarations/ — served through a single-use download session. Restore anywhere: create_workspace, then submit every file in any order (declarations pend until their referents arrive). Fidelity: evidence-complete — derivations re-run and LLM classifications re-derive on restore (audit mode uses exactly this); declared state replays identically. The manifest WARNS about posted manual entries without declaration identity (adopt_journal_entry_declaration converts them). Read-only.
adopt_journal_entry_declarationADOPT a manual journal entry posted before declaration documents existed: rebuilds the declaration from the entry's own lines and metadata, computes its canonical content hash, RECORDS identity adoption (so replaying the emitted file reuses instead of duplicating), and returns the document. The recorded mutation is identity only — no amounts change; the emitted document is its artifact and the entry's portable/backup form. Idempotent: re-adopting returns the same document. Required before void-by-entry_id on legacy entries.
create_standard_journal_entry_voidAUTHOR a journal-entry VOID declaration: reference + reason, nothing else — the referenced declaration's content hash pins chart, lines, and amounts. Pass voids (the 64-hex content hash) or entry_id (resolved to the hash the entry was declared/adopted under). Touches NO books state: review the returned document, keep it durably, then admit it with submit. Admission pends until the voided declaration is posted in that workspace, then voids its entry with the declared reason — append-only, never an edit or delete of the original document.
add_statement_noteAppend a note to a stored statement: a timestamped annotation kept in the statement's metadata alongside any engine-authored notes (finstat writes one when it DERIVES facts a reader should know — e.g. the synthetic account identifier for a card that prints no number). Use it to record facts the document does not print: the actual card number behind a derived identifier, why a document was re-submitted, a bookkeeping decision. Notes never affect reconciliation, identity, or posting — they are for readers. Returns the statement's full notes list, newest last.
list_adjustment_schedulesList draft and active adjustment schedules for the workspace, optionally scoped to one COA. Shows kind, cadence, amounts, accounts, and status so you can tell what will post each period. Requires a workspace. Read-only. Pairs with create_standard_adjustment_schedule.
list_workspace_correctionsList durable correction artifacts with status (draft/applied), kind, and targets, optionally scoped to one EventGroup — the audit trail of human attestations over the evidence. Requires a workspace. Read-only. Pairs with get_workspace_correction and create_standard_workspace_correction.
get_workspace_correctionRead one durable correction artifact by id, including its text, kind, artifact payload, targets, and applied status. Requires the correction_id. Read-only. Pairs with list_workspace_corrections and create_standard_workspace_correction.
create_standard_coaCreate a standard COA: turn user-provided COA source (CSV, outline, or rough markdown) into a reviewable Finstat COA markdown proposal — the COA counterpart of create_standard_documents. This does NOT install or replace anything — a COA is an optional reporting view over the workspace, and this step only produces the draft. METERED: a paid LLM normalization runs. The finished proposal is ALSO minted server-side as a finstack download handle (returned as handle, with proposal_handle alias kept for one release; artifact_kind coa_proposal, 24h expiry) — list_transfer_sessions shows it even if this call's transport dropped before the result arrived. IDEMPOTENT within 1 hour: re-calling with the IDENTICAL source_text attaches to the finished or in-flight prior run — including a parse-FAILED one, which returns the same parse_errors free — with llm_called=false. Nothing is lost and nothing is billed twice on retry; fix the source text before paying for a new run. The handle is minted for parse-failed proposals too (the candidate markdown is the recoverable work product). Use validate_standard_coa for the deterministic parser-only check of existing standard COA markdown. Every account in the proposal must carry a nonblank Description (or Aliases/Examples) — submit rejects description-less accounts with their account codes. Returns the standard COA markdown under file_name <entity>.coa.md with format/engine version and the full COA header (entity name/type, legal form, accounting basis, claimed accounts) plus account and claimed-account counts for review. A failed parse returns ALL defects at once in parse_errors[] (parse_error is the joined summary) with the candidate markdown — fix every named field in one edit rather than iterating. Next: review with the user, then submit to install.
validate_standard_coaValidate existing Finstat standard COA markdown without installing it and without running an LLM. Use this after editing a create_standard_coa proposal, or when a user supplies a .coa.md file. Returns parse_valid, all parse_errors when invalid, header metadata, account counts, claimed accounts, warnings, file_name, format, format_version, and engine for review. Next: fix the markdown if invalid; submit only after human review.
inspect_mcp_connectionReport what the server observes about THIS MCP connection, right now: your client's user agent, the protocol revision you claimed and where you claimed it (per-request header, _meta, or the spec-mandated 2025-03-26 default), auth shape (never the credential), whether you sent a legacy Mcp-Session-Id (ignored — this server is sessionless), plus the server's build, session mode, and supported revisions — and your client's trailing-hour request history from the server's wire ledger (counts by status, any JSON-RPC error codes). One read-only call, no workspace needed, returns a paste-ready banner plus full JSON. The control-channel companion to connection_check (which probes the data channel and, unlike this tool, requires a workspace): when a connection behaves oddly, call this and share the result — it replaces guessing about client/server protocol state with the server's own contemporaneous record.