finance-mcp
Allows linking Bank of America accounts via Plaid to pull balances, holdings, transactions, and liabilities.
Allows linking Chase accounts via Plaid to pull balances, holdings, transactions, and liabilities.
Allows linking Coinbase accounts via Plaid to pull balances, holdings, transactions, and liabilities.
Allows linking Discover accounts via Plaid to pull balances, holdings, transactions, and liabilities.
Writes financial data (balances, holdings, cash flow) to a local Obsidian-style markdown vault for querying and long-term storage.
Allows linking Robinhood accounts via Plaid to pull balances, holdings, transactions, and liabilities.
Allows linking Wells Fargo accounts via Plaid to pull balances, holdings, transactions, and liabilities.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@finance-mcpSync all my accounts"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
finance-mcp
Local-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.
What it does
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).
Pull live balances for every account → writes the auto-sync block in your vault's
Accounts.md.Pull investment holdings with shares, cost basis, current value → writes
Investments.md.Pull transactions cursor-style (delta only after first sync) → stores in local SQLite.
Roll up monthly cash flow by category → writes
Cash Flow.md.Pull liabilities (credit-card APRs, statement balances, student-loan payoff info).
Audit log every Plaid call and every keychain access.
Why local-first matters
Most personal-finance SaaS (Mint, Copilot, YNAB, Monarch) puts your bank data on their servers and charges you for the privilege. This MCP:
Runs on your laptop, talks directly to Plaid, writes to your local vault.
Stores access tokens in macOS Keychain, not env files or any database.
Never returns access tokens in tool responses — items are referenced by alias (
chase,citi, etc.).Vault data is plain markdown with inline Dataview fields — your data, your format, queryable forever.
Related MCP server: plaid-mcp
Install
Open Claude Code, paste:
/plugin marketplace add adelaidasofia/finance-mcp
/plugin install finance-mcp@finance-mcpRequires macOS (for Keychain) and Python 3.11+. After install, set your Plaid credentials in .env at the plugin root (see SETUP.md for the Plaid signup walkthrough).
First-time use
> healthcheckIf it shows blockers, follow them. Once green:
> link_start(institution_alias="chase")Open the returned link_token in Plaid's Link demo page (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.
> link_complete(institution_alias="chase", public_token="public-sandbox-...")Repeat for each bank.
> sync_balances
> sync_holdings
> sync_transactions
> rollup_month(month="2026-05")Your vault's Accounts.md, Investments.md, and Cash Flow.md now have auto-sync blocks with current data. Re-run any time.
Tool surface
Tool | What it does |
| Verify Plaid creds, vault path, keychain access. |
| Start linking a new bank. Returns link_token. |
| Exchange public_token, store in Keychain. |
| List linked institutions + last-sync timestamps. |
| Remove an institution. Revokes Plaid item + deletes Keychain entry. |
| Pull current balances → Accounts.md. |
| Pull investment positions → Investments.md. |
| Cursor-based transaction sync → SQLite. |
| Pull credit + loan details. |
| All of the above in sequence. |
| Compute monthly income/expense rollup → Cash Flow.md. |
| Last N audit-log entries. |
Security model
Plaid
access_tokenlives in macOS Keychain (securityCLI), service namefinance-mcp, account name = your institution alias.Plaid
client_id+secretlive in.env(chmod 600). Never committed (in.gitignore).Transaction history lives in SQLite at
~/.claude/finance-mcp/data.db(not in your vault).Vault writes only happen inside the configured
FINANCE_MCP_FINANCE_FOLDER. Set to empty string to disable vault writes entirely.Audit log records every Plaid call and every keychain operation.
Tool responses never include raw access tokens.
Plaid environments
sandbox (default): fake banks, fake credentials (
user_good/pass_good). Free forever. Use this first.development: real banks, free up to 100 items per Plaid account. Use this for personal accounts.
production: real banks at scale. Requires a Plaid application + paid plan.
Set via PLAID_ENV in .env. Switch by re-linking all institutions (tokens are environment-bound).
Companion MCPs
jkoelker/schwab-mcp— Direct Charles Schwab Trader API for options, trade placement, and deep position data beyond what Plaid exposes.tomasgesino/schwab-mcp— Schwab wheel-strategy management with dry-run-default trading.
finance-mcp covers Schwab basic balances and holdings via Plaid; the above are the route for Schwab power-user features.
Related MCPs in this family
apollo-mcp — Apollo.io CRM + outbound sequences.
slack-mcp — Multi-workspace Slack with draft+confirm safety.
imessage-mcp — Local iMessage with Whisper voice transcription.
whatsapp-mcp — WhatsApp via local bridge.
substack-mcp — Publish posts + Notes, pull analytics.
parse-mcp — Multi-backend document parsing router.
graph-query-mcp — Personal knowledge graph queries.
Telemetry
This plugin sends a single anonymous install signal to myceliumai.co the first time it loads in a Claude Code session on a given machine.
What is sent:
Plugin name (e.g.
slack-mcp)Plugin version (e.g.
0.1.0)
What is NOT sent:
No user identifiers, names, emails, tokens, or API keys
No file paths, message content, or anything from your work
No IP address is stored after dedup processing
Why: Helps the maintainer know which plugins people actually install, so attention goes to the ones that get used.
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.
License
MIT. See LICENSE.
For users who can't use the plugin marketplace yet, the manual flow:
git clone https://github.com/adelaidasofia/finance-mcp ~/.claude/finance-mcp
cd ~/.claude/finance-mcp
pip3 install --break-system-packages -r requirements.txt
cp .env.example .env
chmod 600 .envThen register with Claude Code by adding to your vault's .mcp.json (project scope) or ~/.claude.json (user scope, via claude mcp add):
"finance": {
"type": "stdio",
"command": "python3",
"args": ["-m", "finance_mcp.server"],
"env": {
"PYTHONPATH": "/Users/<you>/.claude/finance-mcp",
"FINANCE_MCP_VAULT_PATH": "/Users/<you>/Documents/MyVault",
"FINANCE_MCP_FINANCE_FOLDER": "Finance"
}
}Restart Claude Code. Tools appear under mcp__finance__*.
Built by Adelaida Diaz-Roa. Full install or team version at diazroa.com.
Available Tools
12 toolsaudit_tailA
Return the last N audit-log entries. Every Plaid call and every keychain operation is recorded.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions that entries cover Plaid calls and keychain operations, but lacks critical info like authorization requirements, rate limits, ordering (most recent first?), or whether entries are system-wide or user-specific. For a read tool, more behavioral context is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first sentence states the core action, and the second provides context about what is recorded. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an output schema, the description covers the core functionality and scope. Minor omissions like ordering direction or maximum N are acceptable given the tool's simplicity. The output schema handles return value details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter 'n' with default 50 and 0% description coverage. The description adds meaning by stating 'last N', clarifying that the parameter controls the count and implies recency. This adequately compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Return the last N audit-log entries', which is a specific verb and resource. It distinguishes the tool from all sibling tools, which are focused on syncing, linking, or health checks, not auditing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the audit log is needed, but provides no explicit guidance on when to use this tool versus alternatives or prerequisites. Given the sibling tools are unrelated, the usage context is clear but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
healthcheckA
Verify the MCP's runtime config: Plaid creds, vault path, finance folder, keychain access, SQLite state. Returns a green/yellow/red summary with explicit blockers if any.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It transparently describes the output format (green/yellow/red summary with blockers) and implies it is a read-only verification with no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences that efficiently convey the tool's purpose and output. Every sentence adds value without verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description adequately covers what the tool verifies and what the response looks like. No missing context for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so schema coverage is 100% by default. The description does not need to add parameter meaning, and it does not repeat any trivial info. Baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: verifying multiple runtime config items (Plaid creds, vault path, etc.). It uses a specific verb 'Verify' and resource 'MCP's runtime config', which distinguishes it from sibling sync/link tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly guides usage by specifying what the tool checks, but it does not explicitly state when to use this tool versus alternatives. However, given that siblings are sync/link operations, the healthcheck's focus on config verification is distinct enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_completeA
Exchange a public_token (from completed Plaid Link) for a permanent access_token. Stores token in macOS Keychain. Caches institution + accounts metadata in SQLite.
| Name | Required | Description | Default |
|---|---|---|---|
| public_token | Yes | The public_token returned by Plaid Link after the user completed bank auth in their browser. | |
| institution_alias | Yes | Same alias used in link_start. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key side effects: storing token in Keychain and caching metadata in SQLite. Without annotations, this adds value, but could mention auth requirements or error cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with main action, no wasted words. Highly concise and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, description adequately covers purpose and side effects. Could mention that access_token is returned, but not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. Description adds minimal extra meaning beyond schema; the note 'Same alias used in link_start' is helpful but not parameter-specific.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Exchange' and resources 'public_token' for 'access_token', with additional side effects. Distinguishes from sibling 'link_start' as its counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage after link_start by mentioning 'from completed Plaid Link'. Provides clear context but lacks explicit when-not-to-use or alternative tool guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_startA
Start linking a new institution. Returns a Plaid link_token the user completes in their browser, then calls link_complete with the public_token.
| Name | Required | Description | Default |
|---|---|---|---|
| user_token | No | Optional persistent Plaid user_token. Pass empty string to use the alias as the ephemeral client_user_id. | |
| institution_alias | Yes | A short label for this bank (e.g. "chase", "citi", "schwab"). Used as the Keychain account name. Must be unique. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the return of a link_token, the browser interaction, and the expected follow-up call to link_complete. No side effects or destructive behavior are mentioned, but the flow is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that cover purpose, return value, and next step. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, output schema exists), the description adequately covers purpose, flow, parameter details, and relationship to sibling tools. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds value beyond the schema by explaining how to use user_token (empty string for ephemeral client_user_id) and that institution_alias is used as the Keychain account name and must be unique. Schema coverage is 100% but description enriches understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it starts linking a new institution, returns a link_token, and describes the subsequent flow with link_complete. This distinguishes it from sibling tools like link_complete and unlink.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the usage context (starting the linking process) and mentions the next step (link_complete), but does not explicitly state when not to use it or provide alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_linkedA
List all linked institutions with their last-sync timestamps and keychain status. Does NOT return any access tokens.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully bears behavioral disclosure. It explicitly states what it returns (institutions with timestamps and keychain status) and importantly excludes access tokens, a critical behavioral constraint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences conveying purpose and a critical exclusion. Front-loaded with action and scope. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists to detail return values. Description covers purpose and key exclusion. Complete for a simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. Description doesn't need to add parameter info; baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists all linked institutions with specific fields (last-sync timestamps, keychain status) and explicitly distinguishes from siblings by noting it does NOT return access tokens.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking linked institutions and their sync status, but doesn't explicitly state when to use vs alternatives. However, given no parameters and distinct purpose, it's adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollup_monthB
Compute income / expense / by-category totals for a given YYYY-MM from the SQLite transaction store, then write the auto-sync block in Cash Flow.md.
| Name | Required | Description | Default |
|---|---|---|---|
| month | Yes | Format YYYY-MM (e.g. "2026-05"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description must disclose behavioral traits. It mentions reading from SQLite and writing to a file, but lacks details on side effects, idempotency, or auth needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, concise, no fluff. Could be slightly more front-loaded but still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, description needn't detail return values. It covers the main actions and gives enough context for basic understanding. However, could elaborate on the auto-sync block.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter 'month' with schema description. Description adds minimal extra meaning beyond the schema (both mention YYYY-MM format). Schema coverage is 100%, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes income/expense/by-category totals for a given month and writes to Cash Flow.md. However, it does not distinguish from sibling tools like sync_transactions or sync_all.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. No prerequisites or context for usage provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_allB
Convenience: balances + holdings + liabilities + transactions in sequence. Use this for daily / on-demand full refresh.
| Name | Required | Description | Default |
|---|---|---|---|
| institution_alias | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. It mentions sequence but does not disclose side effects, authentication needs, or whether operations are destructive. For a multi-sync tool, more transparency is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, zero filler. The second sentence adds valuable usage guidance. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool runs multiple syncs, the description lacks details about output format, error handling, or side effects. An output schema exists but is not described, leaving the agent without a complete picture of the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the 'institution_alias' parameter. It does not mention it at all, leaving the parameter's purpose and usage entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a convenience tool that syncs balances, holdings, liabilities, and transactions in sequence. It names the specific resources and distinguishes it from siblings that sync individual types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this for daily / on-demand full refresh,' which tells when to use. It lists components, implying alternatives for individual syncs, but does not explicitly state when not to use or mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_balancesA
Pull current balances for all linked institutions (or one specific alias) and write the auto-sync block in Accounts.md.
| Name | Required | Description | Default |
|---|---|---|---|
| institution_alias | No | Pass empty string to sync ALL linked institutions. Otherwise sync just the named one. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions writing to Accounts.md, which is a behavioral trait, but does not disclose whether the write is destructive or additive, or what happens if the institution alias is invalid. Additional context on side effects would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with key information. It is concise and contains no unnecessary words, though it could be slightly clearer about the auto-sync block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one optional parameter, no required, output schema exists), the description adequately covers what the tool does. It distinguishes from siblings and mentions the output file, though it could explicitly note prerequisites like linked institutions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter. The tool description reiterates the parameter behavior but does not add meaning beyond what the schema already provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'pull' and the resource 'current balances for all linked institutions (or one specific alias)', and specifies the action 'write the auto-sync block in Accounts.md'. This distinguishes it from sibling tools like sync_transactions and sync_liabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for syncing balances, but does not explicitly state when to use this tool over alternatives like sync_all or when not to use it. No comparisons or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_holdingsA
Pull investment holdings (stocks, ETFs, mutual funds, bonds) and write the auto-sync block in Investments.md.
Skipped silently for institutions that don't support the Plaid investments product (most checking-only banks).
| Name | Required | Description | Default |
|---|---|---|---|
| institution_alias | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description discloses two behavioral traits: writing to a file (side effect) and silent skipping for unsupported institutions. This adds value beyond what annotations would provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. The first sentence front-loads the primary action and result; the second adds an important constraint. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional param, output schema exists), the description covers the main action and side effect but omits parameter explanation. The output schema likely covers return format, but ambiguity remains about the parameter's effect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'institution_alias' is not mentioned in the description, and schema coverage is 0%. The description does not explain how this parameter affects behavior, leaving the agent to guess its role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Pull' and the resource 'investment holdings' with specific asset types (stocks, ETFs, etc.). It also names the output action ('write the auto-sync block in Investments.md'). This distinguishes it from sibling tools like sync_transactions and sync_liabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a useful caveat about institutions without Plaid investments support, but lacks explicit guidance on when to use this tool versus alternatives like sync_all or sync_balances. No 'use X instead' or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_liabilitiesA
Pull credit-card APRs, minimums, statement balances, and student-loan payoff info. Skipped silently for institutions that don't support the Plaid liabilities product.
| Name | Required | Description | Default |
|---|---|---|---|
| institution_alias | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behavior (silent skip for unsupported institutions) but lacks details on idempotency, error handling, or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. Front-loaded with the core purpose, then a brief edge-case note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values are covered. However, the parameter is undocumented, and behavioral details are minimal. Adequate but has a clear gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter institution_alias has 0% schema coverage and is not mentioned in the description. The description fails to add any meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it pulls liability-specific data (APRs, minimums, balances, student-loan payoff) and distinguishes from siblings like sync_transactions or sync_balances by specifying the data domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains silent skipping for unsupported institutions, implying when to use. It could explicitly mention alternatives like sync_balances for balance data, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_transactionsA
Cursor-based transaction sync. First run pulls historical; subsequent
runs pull only the delta. Stores raw transactions in SQLite. Use
rollup_month to write the Cash Flow.md monthly summary afterward.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Initial-pull window hint (Plaid honors its own default). | |
| institution_alias | No | Empty string syncs all. Otherwise one specific bank. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries full burden. It discloses the cursor-based approach, delta-only incremental sync, SQLite storage, and hints about the 'days' parameter behavior. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each serving a distinct purpose: defining the tool, explaining its behavior, and guiding on subsequent use. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a sync tool with output schema, the description adequately covers behavior, storage, parameter hints, and follow-up. Missing discussion on error states or rate limits, but these are not critical for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage, but the description adds meaningful context: 'days' is an 'Initial-pull window hint (Plaid honors its own default)' and 'institution_alias' empty string syncs all. This enhances understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Cursor-based transaction sync', 'First run pulls historical; subsequent runs pull only the delta', and 'Stores raw transactions in SQLite'. It effectively communicates the tool's purpose and distinguishes it from siblings like sync_liabilities or sync_balances.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear next-step recommendation ('Use rollup_month to write the Cash Flow.md monthly summary afterward'). However, it does not explicitly state when to avoid this tool or compare it to alternatives like sync_all or sync_holdings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlinkA
Remove a linked institution. Revokes the Plaid item, deletes the keychain entry, and clears local SQLite state.
| Name | Required | Description | Default |
|---|---|---|---|
| institution_alias | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral consequences: revoking Plaid item, deleting keychain entry, and clearing local state. Clearly communicates destructive nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy, front-loaded with verb and resource. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite low complexity and presence of output schema, description omits parameter semantics and does not mention prerequisite (institution must be linked). Adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must explain parameter 'institution_alias'. It only states the parameter is required but gives no format, source, or example. Agent cannot infer where to get the alias value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly specifies the verb 'Remove a linked institution' and provides specific actions (revokes Plaid item, deletes keychain, clears SQLite). It distinguishes from sibling tools like link_start and sync_transactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for unlinking an institution but lacks explicit guidance on when to use vs alternatives or prerequisites. No exclusion criteria or context about prior steps like linking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
12 tool updates
v0.1.0- First observed
audit_tail - First observed
healthcheck - First observed
link_complete - First observed
link_start - First observed
list_linked - First observed
rollup_month - First observed
sync_all - First observed
sync_balances - First observed
sync_holdings - First observed
sync_liabilities - First observed
sync_transactions - First observed
unlink
TDQS
Each tool has a clearly distinct purpose: sync operations for different data types, monthly rollups, institution linking, health checks, audit logs, and unlink. No overlap or ambiguity.
Tool names consistently follow a verb_noun pattern (e.g., sync_transactions, rollup_month, link_start). Even single-word names like healthcheck fit the pattern (verb as noun). No mixing of conventions.
12 tools is well-scoped for a finance management server covering syncing, monthly rollups, institution linking, healthchecks, and audit logs. Each tool earns its place without redundancy.
The set covers core lifecycle: link, sync (transactions, balances, holdings, liabilities), rollup, unlink, healthcheck, audit. Minor gaps: no tool for manual transaction editing or single-institution transaction sync, but the domain is well-covered overall.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Personal finance for AI agents — onboard, import statements, categorize & budget over MCP.
Personal finance assistant — track transactions, budgets, net worth via Plaid
Personal-finance workspace for AI agents: accounts, spending, budgets, goals, and investments.
- Era ContextOAuthapp.era
Personal finance, bank account, and shared memory connector for Claude, ChatGPT, Gemini Spark & more
Related MCP Servers
- AlicenseAqualityCmaintenanceSelf-hosted, read-only MCP server that connects banks, credit cards, loans, and brokerage accounts via Plaid. 9 tools for balances, transactions, recurring charges, liabilities, and investment holdings.97MIT
- AlicenseAqualityDmaintenanceA read-only MCP server that enables users to analyze their real bank, credit card, loan, and brokerage data through Plaid. It provides financial analysis tools for transactions, balances, investments, liabilities, and debt while keeping all access tokens and data locally stored.24MIT
- AlicenseBqualityAmaintenanceopen-source personal finance app with a first-party MCP server. 91 HTTP tools (OAuth 2.1 + DCR) and 87 stdio tools cover transactions, budgets, accounts, portfolio analytics, FX conversion, loans, subscriptions, goals, importers, and rules. Users self-host with Docker + PostgreSQL or use the managed cloud8913AGPL 3.0
- AlicenseAqualityBmaintenanceLocal-first crypto portfolio aggregation across exchanges (Bybit, Binance), EVM and Solana wallets, and Polymarket. Read-only credentials, runs as a local MCP server. Data aggregation only, not financial advice.15475MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/adelaidasofia/finance-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server