Skip to content

v0.4.0 — reconciliation, and a request budget you can see

Latest

Choose a tag to compare

@github-actions github-actions released this 06 Sep 13:40
· 1 commit to master since this release

v0.4.0 — reconciliation, and a request budget you can see

Reconciliation, a request budget an agent can pace itself against, and the
tool-surface changes that came out of a twenty-one-month audit of a real plan.
62 read-only tools, 84 with writes enabled.

  • A reconcile family. reconcile_preview compares an account's cleared
    balance as of a statement date against the statement, and reports the four
    queues that explain a difference. transactions_match_statement pairs the rows
    of a bank export with the register on exact amount within a date tolerance, and
    names what is left over on each side. reconcile_apply marks the agreed
    transactions reconciled and posts the adjustment as one journaled write, whose
    revert undoes both halves together.

  • The request budget is visible. Every response now carries
    requests_used_this_hour and requests_remaining, the way an HTTP API returns
    X-RateLimit-Remaining — an agent paces itself against a number it already
    has. ping answers whether the server is reachable without touching YNAB,
    which is what you need while waiting out a rate limit. Rate-limit errors carry
    retry_at as an absolute timestamp beside retry_after, and say that the
    quota belongs to the token and is shared with your own YNAB apps.

  • adjust_by on both assignment writes: "add $4,500 to this category"
    without reading the current figure first. It is read-modify-write and not an
    atomic delta — YNAB offers neither a delta nor a conditional update — so
    expected_budgeted is there to refuse the write when the amount read is not
    the one you expected. That catches a caller acting on a stale figure; it does
    not close the gap between the read and the write, and the descriptions say so.

  • triage_pending_imports finds imported card authorisations that never posted —
    the ones triage_unmatched_manual cannot see, because they have an import id.

  • analysis_unassigned_transfers and analysis_assignment_patterns for two
    traps a person never notices and a script sees instantly: transfers between
    on-budget accounts that funded nothing, and assignments that quietly add a
    category's own inflow to a fixed base.

  • transactions_bulk_update cost one YNAB request per transaction while its
    description implied otherwise. The write was always a single PATCH; the cost
    was in capturing the state a revert would restore, one GET at a time. It now
    reads the batch in one call, so a batch of two costs what a batch of three
    hundred costs.

  • Bulk write responses no longer echo the full transactions. Pass
    return_transactions=true for the previous shape.

  • months_list omits months with no income and no activity, the way YNAB's own
    month picker does. include_empty=true returns them.

  • Transaction list items omit null and empty fields, and fields projects them
    further. A missing category_id therefore means the transaction is
    uncategorized.

YNAB's API has no route that sets an account's last_reconciled_at. Transactions
marked reconciled genuinely are reconciled, but the YNAB app will still show the
date of the last reconciliation done there. Every tool that could mislead on this
says so in its description and in its response.

Also includes the move to the mcp 2.x SDK.