This release includes 4 breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
Affected surfaces
Summary
AI summaryBudget and recurring write tools consolidated, goal writes removed, transaction update fields trimmed.
Full changelog
Write tools are back — rewritten onto Copilot Money's official GraphQL API (https://app.copilot.money/api/graphql) after direct Firestore writes were blocked by Copilot's server-side type-check deploy. Opt-in via --write (unchanged). 13 write tools (down from 18) across transactions, tags, categories, budgets, and recurrings.
.mcpb bundle note: The .mcpb attached to this release is intentionally read-only (17 read tools, --write not in mcp_config.args). Non-technical users installing via Claude Desktop get zero exposure to the write surface — that's the right default for one-click install. Write tools are fully available to anyone who clones the repo and runs with --write; a separate opt-in "writes-enabled" bundle for self-builders is on the roadmap.
Breaking changes
- Budget write tools consolidated.
create_budget/update_budget/delete_budget→ singleset_budget. The Copilot API only exposesEditBudget(categoryId, {amount}), so budgets are addressed by category rather than by budget document ID.amount="0"clears the budget. Passmonth="YYYY-MM"for a single-month override (viaEditBudgetMonthly); omit for the all-months default. create_recurringsignature changed. Now takes{transaction_id, frequency}— the API requires seeding a recurring from an existing transaction, so the tool derivesaccountId/itemIdfrom the local DB. Previous{name, amount, category_id, ...}shape is gone.- Goal write tools removed.
create_goal/update_goal/delete_goalhave no web GraphQL equivalent (the app's goal mutations are mobile-only). Goal read tools (get_goals,get_goal_history) are unchanged. update_transactionfield set trimmed. No longer acceptsexcluded,name,internal_transfer, orgoal_id— these are not writable through the public GraphQL mutations. Remaining writable fields:category_id,note,tag_ids.- Error message wording changed. The old "budgeting disabled" message is gone. When budgeting or rollovers are disabled in Copilot → Settings → General, writes succeed on the server and return a
USER_ACTION_REQUIREDerror with an "enable manually in Copilot settings" hint. The value will not appear in the Copilot UI until those toggles are re-enabled — see theset_budgettool description for the full caveat.
Added
src/core/graphql/client.ts— typedGraphQLClientandGraphQLErrorwith discriminatedcode: 'AUTH_FAILED' | 'SCHEMA_ERROR' | 'USER_ACTION_REQUIRED' | 'NETWORK' | 'UNKNOWN'. Every thrown error logs operation name + code + HTTP status to stderr; response bodies are never logged (PII).- Six per-domain GraphQL modules (
transactions,categories,tags,recurrings,budgets,accounts) — thin pure functions over the client, typed args in and compact{id, changed}out. scripts/generate-graphql-operations.ts— build-time generator that reads captured mutation docs and emitsoperations.generated.tswith__typename-transformed query strings matching Apollo'sdocumentTransformwire shape.scripts/smoke-graphql.ts— opt-in, not in CI, runs against the developer's real account with create-edit-delete round-trips for each domain (--skip-destructivefor read-only steps).
Removed
src/core/firestore-client.ts,src/core/format/, and their tests. The direct-Firestore write backend is gone. Field-mapping knowledge preserved indocs/reference/firestore-write-schema.mdso future readers can recover it.
Known issues (this project)
set_budgetsync lag: Writes succeed on the server but may take minutes to appear viaget_budgets— budget docs appear to sync through Copilot's native app on a slower cadence than transactions/tags/categories/recurrings (which sync in seconds). Tool descriptions forset_budgetandget_budgetsdocument the caveat. Tracked in #278.- Per-month overrides written via
set_budget(month=...)are not surfaced inget_budgets— only the all-months defaultamountis shown.
Upstream Copilot server bugs
Surfaced during 2.0.0 smoke testing and reported to Copilot. No workaround on our side:
EditTransactionsilently accepts invalidcategoryIdvalues — the server returnschanged: truebut the category isn't actually updated. If strict success confirmation matters, verify with a follow-up read.- Error messages occasionally leak the user's Firebase UID in composite document IDs when a mutation fails (format:
{uid}/{collection}/{doc_id}). Error strings are surfaced to MCP clients verbatim — a downstream application that logs tool errors should treat GraphQL error text as sensitive.
Full changelog
See CHANGELOG.md.
Breaking Changes
- Budget write tools `create_budget`, `update_budget`, `delete_budget` removed; replaced by single `set_budget` addressing budgets by category ID.
- `create_recurring` signature changed to `{transaction_id, frequency}`; previous shape with name/amount/category_id removed.
- Goal write tools `create_goal`, `update_goal`, `delete_goal` removed (no GraphQL equivalent).
- `update_transaction` no longer accepts fields `excluded`, `name`, `internal_transfer`, or `goal_id`; only `category_id`, `note`, and `tag_ids` remain writable.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About ignaciohermosillacornejo/copilot-money-mcp
Read and manage Copilot Money personal finance data — 30 tools for transactions, budgets, accounts, recurring charges, investments, and goals. Reads are 100% local from the Firestore cache; opt-in writes (`--write`) go directly to Copilot's GraphQL API.
Related context
Beta — feedback welcome: [email protected]