Skip to content

v0.7.0 — receipt file storage

Choose a tag to compare

@yuens1002 yuens1002 released this 14 Jun 10:35
d6b80a0

bookie is an MCP server for personal and business double-entry bookkeeping. You talk to it through any MCP-capable environment (Claude Desktop, Cursor, VS Code, or any host supporting stdio MCP). It stores your ledger in Neon Postgres and runs on Railway.

What's in v0.7.0

Added

  • Receipt file storage via Railway Bucketmanage_receipts action='attach' now accepts optional fileContent (base64) + mimeType (JPEG, PNG, WEBP, HEIC, or PDF) to upload the original receipt image or PDF to S3-compatible object storage. A signed download URL (1-hour TTL) is returned on attach. New action='get_url' refreshes the URL on demand. action='delete' removes the stored file alongside the DB row. action='list' surfaces hasFile and mimeType per receipt.
  • src/domain/blob.ts — thin S3 client wrapper using @aws-sdk/client-s3 + @aws-sdk/s3-request-presigner. Storage uses Railway's injected AWS_ENDPOINT_URL, AWS_S3_BUCKET_NAME, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION env vars (AWS SDK Generic style). Structured receipt data continues to save even when no bucket is configured.

Changed

  • README.md — stdio quickstart now says "any MCP-capable environment" rather than Claude Desktop only; added BOOKIE_DB_DIRECT_URL to the example config block.

Full feature history

v0.6.x — OAuth connector + remote hardening (2026-06-13)

  • OAuth 2.0 authorization server (PKCE S256, JWT access tokens, refresh token rotation) so bookie can be added as a Claude.ai MCP connector
  • Per-request rate limiting (fixed-window per-IP, RATE_LIMIT_RPM), audit logging to Railway logs
  • send_report tool — run any report and email it as Markdown via Resend

v0.6.0 — MCP resources + prompts (2026-06-13)

  • bookie://accounts resource (JSON list of all accounts with balances) and bookie://reports/{year} (annual fiscal snapshot: Schedule C, Schedule E, month-by-month summary)
  • MCP prompts: monthly-close, categorize-uncategorized, prepare-tax-summary
  • manage_rules action='suggest' — scans past categorizations and surfaces candidate automation rules

v0.5.0 — HTTP hardening + email reports (2026-06-13)

  • Rate limiting, audit logging, send_report via Resend

v0.4.0 — Tax reports (2026-06-13)

  • generate_report type='schedule-c' and type='schedule-e' — fiscal-year P&L for sole-proprietor and rental real estate segments
  • export_report tool — render any report as Markdown or CSV

v0.3.0 — Receipts + reconciliation (2026-06-13)

  • manage_receipts — attach, list, delete structured receipt data (merchant, date, total, line items) against a journal entry
  • generate_report type='monthly-reconciliation' — opening/closing balance, income/expense by segment, uncategorized entries, uncleared discrepancies
  • reconcile — two-step (preview → commit): match a bank/card statement CSV against payment-leg postings and mark them cleared

v0.2.0 — CSV import + categorization rules (2026-06-10)

  • import_transactions — two-step (preview → commit) bank/card statement CSV import with RFC-4180 parsing, content-hash dedup, possible-match flagging
  • manage_rules — description-substring categorization rules; auto-suggestion from past postings
  • split_transaction — one payment leg + N category legs (receipt splits)
  • delete_transaction — correct mistakes / duplicate imports
  • Segment model (manage_segments) + Property model (manage_properties) for per-entity P&L and Schedule E tracking
  • Vitest integration test suite

v0.1.0 — Core ledger scaffold (2026-06-03)

  • MCP server with dual transport: stdio (local) + Streamable HTTP over Hono (Railway deploy)
  • Neon Postgres via Prisma; seeded US sole-proprietor chart of accounts
  • manage_accounts, add_transaction, query_transactions, account_balances
  • Integer-cent money math; bearer-token auth for HTTP transport
  • Dockerfile + railway.json for one-click deploy