{
  "markdown": "<!-- mycelium-badges:start -->\n\n<p>\n  <a href=\"https://github.com/adelaidasofia/finance-mcp/blob/main/LICENSE\"><img alt=\"License\" src=\"https://img.shields.io/github/license/adelaidasofia/finance-mcp?color=blue\"></a>\n  <a href=\"https://github.com/adelaidasofia/finance-mcp/stargazers\"><img alt=\"GitHub stars\" src=\"https://img.shields.io/github/stars/adelaidasofia/finance-mcp?color=eab308\"></a>\n  <a href=\"https://github.com/adelaidasofia/finance-mcp/commits/main\"><img alt=\"Last commit\" src=\"https://img.shields.io/github/last-commit/adelaidasofia/finance-mcp\"></a>\n  <a href=\"https://github.com/adelaidasofia/finance-mcp/issues\"><img alt=\"Open issues\" src=\"https://img.shields.io/github/issues/adelaidasofia/finance-mcp\"></a>\n  <a href=\"https://pypi.org/project/adelaidasofia-finance-mcp/\"><img alt=\"PyPI version\" src=\"https://img.shields.io/pypi/v/adelaidasofia-finance-mcp?color=blue&label=pypi\"></a>\n  <a href=\"https://pypi.org/project/adelaidasofia-finance-mcp/\"><img alt=\"PyPI downloads\" src=\"https://img.shields.io/pypi/dm/adelaidasofia-finance-mcp?color=blue&label=downloads\"></a>\n  <a href=\"https://myceliumai.co\"><img alt=\"Built by Mycelium AI\" src=\"https://img.shields.io/badge/built_by-Mycelium_AI-15B89A\"></a>\n</p>\n\n<!-- mycelium-badges:end -->\n\n## finance-mcp\n\nLocal-first personal finance MCP. Aggregates bank, brokerage, credit, and loan accounts via Plaid. Writes balances, holdings, and transactions to your local Obsidian-style markdown vault. Access tokens stay in macOS Keychain. Never sends data anywhere except plaid.com.\n\n### What it does\n\n- **Link any US bank or brokerage** via Plaid (Chase, Citi, Schwab, Discover, Fidelity, Wells Fargo, Bank of America, Capital One, Vanguard, Robinhood, Coinbase, student-loan servicers, 12,000+ institutions total).\n- **Pull live balances** for every account → writes the auto-sync block in your vault's `Accounts.md`.\n- **Pull investment holdings** with shares, cost basis, current value → writes `Investments.md`.\n- **Pull transactions** cursor-style (delta only after first sync) → stores in local SQLite.\n- **Roll up monthly cash flow** by category → writes `Cash Flow.md`.\n- **Pull liabilities** (credit-card APRs, statement balances, student-loan payoff info).\n- **Audit log** every Plaid call and every keychain access.\n\n### Why local-first matters\n\nMost personal-finance SaaS (Mint, Copilot, YNAB, Monarch) puts your bank data on their servers and charges you for the privilege. This MCP:\n\n- **Runs on your laptop**, talks directly to Plaid, writes to your local vault.\n- **Stores access tokens in macOS Keychain**, not env files or any database.\n- **Never returns access tokens** in tool responses — items are referenced by alias (`chase`, `citi`, etc.).\n- **Vault data is plain markdown** with inline Dataview fields — your data, your format, queryable forever.\n\n## Install\n\nOpen Claude Code, paste:\n\n    /plugin marketplace add adelaidasofia/finance-mcp\n    /plugin install finance-mcp@finance-mcp\n\nRequires macOS (for Keychain) and Python 3.11+. After install, set your Plaid credentials in `.env` at the plugin root (see [SETUP.md](SETUP.md) for the Plaid signup walkthrough).\n\n### First-time use\n\n```\n> healthcheck\n```\n\nIf it shows blockers, follow them. Once green:\n\n```\n> link_start(institution_alias=\"chase\")\n```\n\nOpen the returned `link_token` in Plaid's [Link demo page](https://plaid.com/docs/quickstart/) (paste the token in the field labeled \"Link Token\", then click \"Open Plaid Link\"). Complete bank auth in the browser. Copy the `public_token` from the success page.\n\n```\n> link_complete(institution_alias=\"chase\", public_token=\"public-sandbox-...\")\n```\n\nRepeat for each bank.\n\n```\n> sync_balances\n> sync_holdings\n> sync_transactions\n> rollup_month(month=\"2026-05\")\n```\n\nYour vault's `Accounts.md`, `Investments.md`, and `Cash Flow.md` now have auto-sync blocks with current data. Re-run any time.\n\n### Tool surface\n\n| Tool | What it does |\n|---|---|\n| `healthcheck` | Verify Plaid creds, vault path, keychain access. |\n| `link_start(alias)` | Start linking a new bank. Returns link_token. |\n| `link_complete(alias, public_token)` | Exchange public_token, store in Keychain. |\n| `list_linked` | List linked institutions + last-sync timestamps. |\n| `unlink(alias)` | Remove an institution. Revokes Plaid item + deletes Keychain entry. |\n| `sync_balances([alias])` | Pull current balances → Accounts.md. |\n| `sync_holdings([alias])` | Pull investment positions → Investments.md. |\n| `sync_transactions([alias])` | Cursor-based transaction sync → SQLite. |\n| `sync_liabilities([alias])` | Pull credit + loan details. |\n| `sync_all([alias])` | All of the above in sequence. |\n| `rollup_month(month)` | Compute monthly income/expense rollup → Cash Flow.md. |\n| `audit_tail(n)` | Last N audit-log entries. |\n\n### Security model\n\n- Plaid `access_token` lives in macOS Keychain (`security` CLI), service name `finance-mcp`, account name = your institution alias.\n- Plaid `client_id` + `secret` live in `.env` (chmod 600). Never committed (in `.gitignore`).\n- Transaction history lives in SQLite at `~/.claude/finance-mcp/data.db` (not in your vault).\n- Vault writes only happen inside the configured `FINANCE_MCP_FINANCE_FOLDER`. Set to empty string to disable vault writes entirely.\n- Audit log records every Plaid call and every keychain operation.\n- Tool responses never include raw access tokens.\n\n### Plaid environments\n\n- **sandbox** (default): fake banks, fake credentials (`user_good` / `pass_good`). Free forever. Use this first.\n- **development**: real banks, free up to 100 items per Plaid account. Use this for personal accounts.\n- **production**: real banks at scale. Requires a Plaid application + paid plan.\n\nSet via `PLAID_ENV` in `.env`. Switch by re-linking all institutions (tokens are environment-bound).\n\n### Companion MCPs\n\n- [`jkoelker/schwab-mcp`](https://github.com/jkoelker/schwab-mcp) — Direct Charles Schwab Trader API for options, trade placement, and deep position data beyond what Plaid exposes.\n- [`tomasgesino/schwab-mcp`](https://github.com/tomasgesino/schwab-mcp) — Schwab wheel-strategy management with dry-run-default trading.\n\n`finance-mcp` covers Schwab basic balances and holdings via Plaid; the above are the route for Schwab power-user features.\n\n### Related MCPs in this family\n\n- [apollo-mcp](https://github.com/adelaidasofia/apollo-mcp) — Apollo.io CRM + outbound sequences.\n- [slack-mcp](https://github.com/adelaidasofia/slack-mcp) — Multi-workspace Slack with draft+confirm safety.\n- [imessage-mcp](https://github.com/adelaidasofia/imessage-mcp) — Local iMessage with Whisper voice transcription.\n- [whatsapp-mcp](https://github.com/adelaidasofia/whatsapp-mcp) — WhatsApp via local bridge.\n- [substack-mcp](https://github.com/adelaidasofia/substack-mcp) — Publish posts + Notes, pull analytics.\n- [parse-mcp](https://github.com/adelaidasofia/parse-mcp) — Multi-backend document parsing router.\n- [graph-query-mcp](https://github.com/adelaidasofia/graph-query-mcp) — Personal knowledge graph queries.\n\n\n## Telemetry\n\nThis plugin sends a single anonymous install signal to `myceliumai.co` the first time it loads in a Claude Code session on a given machine.\n\n**What is sent:**\n- Plugin name (e.g. `slack-mcp`)\n- Plugin version (e.g. `0.1.0`)\n\n**What is NOT sent:**\n- No user identifiers, names, emails, tokens, or API keys\n- No file paths, message content, or anything from your work\n- No IP address is stored after dedup processing\n\n**Why:** Helps the maintainer know which plugins people actually install, so attention goes to the ones that get used.\n\n**Opt out:** Set the environment variable `MYCELIUM_NO_PING=1` before launching Claude Code. The hook will skip the network call entirely. Already-pinged installs leave a sentinel at `~/.mycelium/onboarded-<plugin>` — delete it if you want to reset state.\n\n### License\n\nMIT. See [LICENSE](LICENSE).\n\n---\n\n<details>\n<summary>Legacy install (manual)</summary>\n\nFor users who can't use the plugin marketplace yet, the manual flow:\n\n```bash\ngit clone https://github.com/adelaidasofia/finance-mcp ~/.claude/finance-mcp\ncd ~/.claude/finance-mcp\npip3 install --break-system-packages -r requirements.txt\ncp .env.example .env\nchmod 600 .env\n```\n\nThen register with Claude Code by adding to your vault's `.mcp.json` (project scope) or `~/.claude.json` (user scope, via `claude mcp add`):\n\n```json\n\"finance\": {\n  \"type\": \"stdio\",\n  \"command\": \"python3\",\n  \"args\": [\"-m\", \"finance_mcp.server\"],\n  \"env\": {\n    \"PYTHONPATH\": \"/Users/<you>/.claude/finance-mcp\",\n    \"FINANCE_MCP_VAULT_PATH\": \"/Users/<you>/Documents/MyVault\",\n    \"FINANCE_MCP_FINANCE_FOLDER\": \"Finance\"\n  }\n}\n```\n\nRestart Claude Code. Tools appear under `mcp__finance__*`.\n\n</details>\n\n---\n\nBuilt by Adelaida Diaz-Roa. Full install or team version at diazroa.com.\n",
  "bytes": 8795,
  "sha": "f4e64ac7aff75799d28e91e431f39592908ad6ae52069205a57798c8ea7a9ae9",
  "repo_slug": "adelaidasofia/finance-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_adelaidasofia_finance_mcp_3d7d547f/readme"
}