copilot-money-mcp 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,7 +17,7 @@
17
17
 
18
18
  An [MCP](https://modelcontextprotocol.io/) server that gives AI assistants access to your Copilot Money personal finance data. It reads from the locally cached Firestore database (LevelDB + Protocol Buffers) on your Mac. **Reads are 100% local with zero network requests.**
19
19
 
20
- **17 read tools** across spending, investments, budgets, goals, and more — query transactions, accounts, holdings, balances, categories, recurring charges, budgets, goals, and investment performance.
20
+ **14 cache-mode read tools (or 21 in `--live-reads` mode: 8 surviving cache + 13 live), plus up to 17 write tools** — query and modify transactions, accounts, holdings, balances, categories, recurring charges, budgets, goals, and investment performance. See [Tools by Mode](#tools-by-mode) below.
21
21
 
22
22
  ## Privacy First
23
23
 
@@ -32,6 +32,22 @@ We never collect, store, or transmit your data to any server operated by this pr
32
32
  >
33
33
  > **By using this MCP server with a hosted AI model, you are knowingly sharing your financial data with that AI provider.** Only use this tool if you are comfortable with that trade-off. If you are not, consider waiting for an official Copilot Money integration or using a fully local model.
34
34
 
35
+ ## Tools by Mode
36
+
37
+ This server exposes different tools depending on which CLI flags you enable.
38
+
39
+ | Mode | Flag | What it does | Auth | Network | Tools available |
40
+ |---|---|---|---|---|---|
41
+ | 🟢 Default | _(none)_ | Reads from your local LevelDB cache | ❌ None | 🔌 Zero (offline) | 14 cache-mode read + utility tools |
42
+ | 🌐 Live reads | `--live-reads` | Real-time reads via Copilot's GraphQL API; swaps out 6 cache tools and adds 7 live-only ones | 🔒 Browser session | 🌐 HTTPS per request | 21 read tools (8 cache + 13 live) |
43
+ | ✍️ Writes | `--write` | Adds mutation tools (transactions, tags, categories, budgets, recurrings, splits) | 🔒 Browser session | 🌐 HTTPS per request | +17 write tools (additive to either read mode) |
44
+
45
+ `--live-reads` and `--write` can be combined.
46
+
47
+ 📖 **See [docs/tools-by-mode.md](docs/tools-by-mode.md)** for the full per-tool inventory with status, caveats, and known limitations (goals, stock splits, response-size caps).
48
+
49
+ ---
50
+
35
51
  ## Quick Start
36
52
 
37
53
  ### Prerequisites
@@ -95,7 +111,7 @@ Then add to your Claude Desktop configuration (`~/Library/Application Support/Cl
95
111
 
96
112
  > "What are my top 5 spending categories this year?"
97
113
 
98
- Uses `get_transactions`, `get_categories` with date ranges, text search, and category filters.
114
+ Uses `get_transactions` (or `get_transactions_live` for fresh data via `--live-reads`) and `get_categories` (or `get_categories_live`), with date ranges, text search, and category filters.
99
115
 
100
116
  ### Account Overview
101
117
 
@@ -105,17 +121,17 @@ Uses `get_transactions`, `get_categories` with date ranges, text search, and cat
105
121
 
106
122
  > "Which bank connections need attention?"
107
123
 
108
- Uses `get_accounts`, `get_balance_history`, `get_connection_status`.
124
+ Uses `get_accounts` (or `get_accounts_live` for fresh balances via `--live-reads`), `get_balance_history` (with optional `get_balance_history_live` per-account live variant), `get_connection_status`, and `get_networth_live` for net-worth-over-time charts.
109
125
 
110
126
  ### Investment Portfolio
111
127
 
112
128
  > "What are my current holdings and total returns?"
113
129
 
114
- > "Show me AAPL price history for the past year"
130
+ > "Show me the price history for my largest equity holding over the past year"
115
131
 
116
- > "What's my time-weighted return this quarter?"
132
+ > "What's my current cost basis on META?"
117
133
 
118
- Uses `get_holdings`, `get_investment_prices`, `get_securities`, `get_investment_performance`, `get_twr_returns`.
134
+ Uses `get_holdings` (or `get_holdings_live` for live cost basis), `get_investment_prices` (or `get_investment_prices_live` for live per-security price history).
119
135
 
120
136
  ### Budgets & Goals
121
137
 
@@ -125,7 +141,7 @@ Uses `get_holdings`, `get_investment_prices`, `get_securities`, `get_investment_
125
141
 
126
142
  > "Show me my goal history over the past 6 months"
127
143
 
128
- Uses `get_budgets`, `get_goals`, `get_goal_history`.
144
+ Uses `get_budgets` (or `get_budgets_live` via `--live-reads`), and `get_goals` / `get_goal_history` (cache-only — Copilot's GraphQL endpoint doesn't expose goal data).
129
145
 
130
146
  ### Subscriptions & Recurring
131
147
 
@@ -133,31 +149,7 @@ Uses `get_budgets`, `get_goals`, `get_goal_history`.
133
149
 
134
150
  > "How much do I spend on recurring charges per month?"
135
151
 
136
- Uses `get_recurring_transactions`.
137
-
138
- ## Available Tools
139
-
140
- ### Read Tools (17)
141
-
142
- | Tool | Description |
143
- |------|-------------|
144
- | `get_transactions` | Query transactions with filters — date range, category, merchant, amount, account, location, text search, and special types (foreign, refunds, duplicates, HSA-eligible). |
145
- | `get_accounts` | List all accounts with balances, filter by type (checking, savings, credit, investment). Includes net worth calculation. |
146
- | `get_categories` | List categories with transaction counts and spending totals. Supports list, tree, and search views. |
147
- | `get_recurring_transactions` | Identify subscriptions and recurring charges with frequency, cost, and next expected date. |
148
- | `get_budgets` | Get budgets with spending vs. limit comparisons. |
149
- | `get_goals` | Get financial goals with target amounts, progress, and monthly contributions. |
150
- | `get_goal_history` | Monthly progress snapshots for goals with daily data and contribution records. |
151
- | `get_balance_history` | Daily balance snapshots for accounts over time. Supports daily, weekly, or monthly granularity. |
152
- | `get_holdings` | Current investment holdings with ticker, quantity, price, cost basis, and total return. |
153
- | `get_investment_prices` | Historical price data (daily + high-frequency) for stocks, ETFs, mutual funds, and crypto. |
154
- | `get_investment_splits` | Stock split history with ratios, dates, and multipliers. |
155
- | `get_investment_performance` | Per-security investment performance data. |
156
- | `get_twr_returns` | Time-weighted return (TWR) monthly data for investment holdings. |
157
- | `get_securities` | Security master data — ticker, name, type, price, and identifiers (ISIN/CUSIP). |
158
- | `get_connection_status` | Bank sync health for linked institutions, including last sync timestamps and errors. |
159
- | `get_cache_info` | Local cache metadata — date range, transaction count, cache age. |
160
- | `refresh_database` | Reload data from disk. Cache auto-refreshes every 5 minutes. |
152
+ Uses `get_recurring_transactions` (or `get_recurring_live` via `--live-reads`) and `get_upcoming_recurrings_live` for next-due unpaid items.
161
153
 
162
154
  ## Configuration
163
155
 
@@ -210,6 +202,58 @@ The `period` parameter supports these shortcuts:
210
202
 
211
203
  `this_month` `last_month` `last_7_days` `last_30_days` `last_90_days` `ytd` `this_year` `last_year`
212
204
 
205
+ ## Authentication & Optional Modes
206
+
207
+ Both `--live-reads` and `--write` make authenticated calls to Copilot Money's GraphQL API at `app.copilot.money/api/graphql`. They require a **logged-in browser session** against `app.copilot.money` — the server reads the same Firebase refresh token the web app stores in your browser (Chrome, Arc, Safari, or Firefox).
208
+
209
+ Default mode requires no authentication and makes zero network requests — reads come from the local LevelDB cache.
210
+
211
+ ### `--live-reads`: real-time reads via GraphQL
212
+
213
+ ```bash
214
+ copilot-money-mcp --live-reads
215
+ ```
216
+
217
+ Replaces 6 cache-mode read tools (`get_transactions`, `get_accounts`, `get_categories`, `get_budgets`, `get_recurring_transactions`, `get_holdings`) with live GraphQL-backed equivalents, and adds 7 net-new ones (`get_tags_live`, `get_networth_live`, `get_upcoming_recurrings_live`, `get_monthly_spend_live`, `get_balance_history_live`, `get_investment_prices_live`, `refresh_cache`).
218
+
219
+ Use this when:
220
+ - You need transactions the macOS app hasn't pre-fetched yet (the auto-fetch window is typically ~30 days; past that, open the app and scroll back to force the cache to populate, or use `--live-reads` to query the server directly).
221
+ - You want fresh per-security cost basis or balance-over-time data.
222
+ - The macOS app hasn't synced recently.
223
+
224
+ ### `--write`: mutations via GraphQL
225
+
226
+ ```bash
227
+ copilot-money-mcp --write
228
+ ```
229
+
230
+ Adds 17 mutation tools for transactions, tags, categories, recurrings, budgets, and split-transactions. Off by default — the server is read-only unless you opt in.
231
+
232
+ ### Combining both
233
+
234
+ ```bash
235
+ copilot-money-mcp --live-reads --write
236
+ ```
237
+
238
+ Live reads + write tools together — the most common power-user setup.
239
+
240
+ ### Configuring via Claude Desktop / Cursor
241
+
242
+ Add the flags to the `args` array in your MCP config:
243
+
244
+ ```json
245
+ {
246
+ "mcpServers": {
247
+ "copilot-money": {
248
+ "command": "copilot-money-mcp",
249
+ "args": ["--live-reads", "--write"]
250
+ }
251
+ }
252
+ }
253
+ ```
254
+
255
+ Restart Claude Desktop / Cursor after editing.
256
+
213
257
  ## Known Limitations
214
258
 
215
259
  ### Local Cache Dependency
@@ -218,6 +262,24 @@ This server reads from Copilot Money's **local Firestore cache**, not the cloud.
218
262
 
219
263
  **To maximize cached data:** Open the Copilot Money app and browse through your data (transaction history, accounts, budgets) to ensure it has been fetched and cached locally.
220
264
 
265
+ ### Goals are read-only
266
+
267
+ `get_goals` and `get_goal_history` work (cache-only), but there are no goal write tools — Copilot's GraphQL endpoint doesn't expose goal mutations. Goal creation, editing, and contributions are mobile-only in Copilot itself, and live in a path our project can't reach without iOS / desktop traffic capture.
268
+
269
+ ### Investment splits are limited to currently-held securities
270
+
271
+ `get_investment_splits` returns split events (date + adjustment multiplier) for securities you currently hold. Securities you no longer hold eventually fall out of the cache. There's no GraphQL endpoint for splits, so this is the only path.
272
+
273
+ Also: `get_investment_prices` and `get_investment_prices_live` already return split- and dividend-adjusted prices (Copilot applies Plaid's adjustment factors server-side). You generally don't need raw split events to back-correct prices.
274
+
275
+ ### Live investment prices are ownership-gated
276
+
277
+ `get_investment_prices_live` only works for securities currently in your linked accounts. Asking for a price series on a ticker you don't own returns an explicit "not in your linked accounts" error.
278
+
279
+ ### Long time-series responses are capped
280
+
281
+ Time-series live tools (`get_balance_history_live`, `get_networth_live`, `get_investment_prices_live`) cap responses at 500 rows by default to fit the MCP single-tool-result token limit. Pass `max_rows` / `offset` to paginate, or narrow `time_frame` for fewer rows.
282
+
221
283
  ## Troubleshooting
222
284
 
223
285
  ### Database Not Found