My Finance MCP Server
My Finance MCP Server enables Claude to act as an AI bookkeeper for personal finance tracking through natural language interactions.
Core capabilities:
Store financial transactions - Upload unstructured documents (receipts, statements, CSVs) and Claude extracts structured data including date, amount, description, and category, persisting to both ChromaDB for vector search and JSON ledger for backup in
~/.my_finance_mcp/Semantic search - Query financial history using natural language (e.g., "How much did I spend on groceries last month?") to find relevant transactions across all stored data
List transactions - Browse stored transactions with pagination, optional category filtering, and view transaction indices
Delete transactions - Remove specific entries by index or wipe all data with confirmation
Analyze spending patterns - Ask Claude about portfolio positions, spending trends, allocations, and other financial insights from your data
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., "@My Finance MCP Serverhow much did I spend on dining out last month?"
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.
My Finance MCP Server
Bare-bones Model Context Protocol server that lets Claude store personal finance transactions and later query them via semantic search. Transactions are persisted in ChromaDB for vector search plus a JSON ledger for backup.
Run it alongside Claude Desktop and you get an AI bookkeeper that remembers your receipts, statements, and portfolios—then answers natural language questions about spending trends, allocations, or anything else you upload.
Setup
Install
uv syncRun
uv run my_finance_mcp.pyConfigure Claude Desktop
Add to ~/.claude_desktop_config.json:
{
"mcpServers": {
"my-finance": {
"command": "uv",
"args": [
"run",
"--project",
"/path/to/my_finance",
"/path/to/my_finance/my_finance_mcp.py"
]
}
}
}Related MCP server: Finance MCP Server
Usage
Exposed tools:
store_transactions(transactions)– ingest structured transactions (Claude will extract them from uploaded docs)query_financial_history(query)– run semantic search across everything storedlist_transactions(limit=20, offset=0, category=None)– page through the JSON ledger to inspect what’s saved and see each transaction’s indexdelete_transactions(indices=None, delete_all=False, confirm=False)– delete entries by index or wipe them all (requiresconfirm=True)
Upload financial data to Claude
Say: "Store this transaction data"
Claude calls the MCP server to save it
Later ask: "How much did I spend on groceries last month?"
Claude searches your historical data via MCP
Use "Show me the stored transactions" or "Delete transaction xx" to invoke the management tools
Example Claude Desktop interaction
User: Remember these portfolio positions for later analysis.
Claude: I'll help you store your portfolio positions from the uploaded CSV file for later analysis. Let me read the file and process the data..
Perfect! I've stored your portfolio positions from November 6, 2025 in your finance system. Here's a summary of what was recorded:...
User: List my stored transactions
Claude: Here are your current stored transactions (4 total):...
User: Delete VXUS - International Stock ETF transaction
Claude: The VXUS - International Stock ETF transaction has been successfully deleted from your stored transactions.
User: List all transactions
Claude: Here are your current stored transactions (3 total):...Data Storage
~/.my_finance_mcp/financial_data/- ChromaDB vector database (created automatically)~/.my_finance_mcp/transactions.json- JSON backup of all transactions
Set the MY_FINANCE_MCP_DIR environment variable before launching Claude if you want to store data in a different directory.
Available Tools
4 toolsdelete_transactionsA
Delete transactions from both the JSON ledger and ChromaDB.
Args:
indices: List of transaction indices (from list_transactions) to delete
delete_all: Set to true to delete all transactions
confirm: Must be true to actually perform deletion (safety guard)
Returns:
Status message describing the deletion result
| Name | Required | Description | Default |
|---|---|---|---|
| indices | No | ||
| delete_all | No | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by disclosing key behavioral traits: it's a destructive operation (deleting from two data stores), includes a safety guard (confirm parameter), and describes the return value. However, it doesn't mention potential side effects like data irreversibility or error conditions, leaving some gaps.
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 appropriately sized and front-loaded: the first sentence states the purpose clearly, followed by a structured Args and Returns section. Every sentence earns its place by providing critical information without redundancy, making it efficient and easy to parse.
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 complexity (destructive operation with 3 parameters), no annotations, and an output schema (which handles return values), the description is mostly complete. It covers purpose, parameters, and safety, but could improve by mentioning prerequisites (e.g., needing list_transactions first) or error cases, slightly reducing completeness.
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 schema description coverage is 0%, so the description must compensate fully. It does so by clearly explaining all three parameters: indices (list from list_transactions), delete_all (set to true for all), and confirm (safety guard). This adds essential meaning beyond the bare schema, making the parameters understandable and actionable.
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 specific action ('Delete transactions') and resources ('from both the JSON ledger and ChromaDB'), distinguishing it from sibling tools like list_transactions (read-only) and store_transactions (create/update). It precisely defines what the tool does beyond just restating the name.
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 by referencing list_transactions for indices, but does not explicitly state when to use this tool versus alternatives like query_financial_history or store_transactions. It provides some context (e.g., using indices from list_transactions) but lacks clear exclusions or comparative guidance with other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_transactionsA
List stored transactions from the JSON ledger with optional pagination and filtering.
Args:
limit: Maximum number of transactions to return (default 20)
offset: Number of transactions to skip from the beginning (default 0)
category: Optional category filter (case-insensitive)
Returns:
Dictionary containing total count, pagination info, and transactions with index field
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| category | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions pagination and filtering capabilities, which adds useful context beyond basic listing. However, it lacks details on permissions, rate limits, error handling, or whether the operation is read-only (implied by 'List' but not explicitly stated).
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 well-structured with a brief overview followed by clearly labeled 'Args' and 'Returns' sections. Every sentence adds value: the first sentence states purpose and features, and the subsequent sections efficiently document parameters and return values without redundancy.
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 moderate complexity (3 parameters, no annotations, but with output schema), the description is fairly complete. It covers purpose, parameters, and return structure. The output schema exists, so the description doesn't need to detail return values, but it could benefit from more behavioral context like error cases or performance notes.
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 schema description coverage is 0%, so the description must compensate. It provides clear semantics for all three parameters (limit, offset, category) in the 'Args' section, explaining their purposes and defaults. This adds significant value beyond the bare schema, though it doesn't cover edge cases like format for 'category'.
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 'List' and resource 'stored transactions from the JSON ledger', making the purpose specific and understandable. It distinguishes from siblings like 'delete_transactions' (deletion) and 'store_transactions' (storage), though it doesn't explicitly differentiate from 'query_financial_history' which might have overlapping functionality.
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 mentions 'optional pagination and filtering', which implies usage for retrieving filtered data, but provides no explicit guidance on when to use this tool versus alternatives like 'query_financial_history'. There are no statements about when-not-to-use or prerequisites, leaving usage context vague.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_financial_historyC
Search through all stored financial data using semantic search.
Args:
query: Search query string to find relevant transactions
Returns:
Formatted summary of matching transactions with totals
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'semantic search' which hints at intelligent matching beyond exact terms, but doesn't explain what 'all stored financial data' encompasses, whether there are rate limits, authentication requirements, or how results are formatted beyond 'formatted summary'. For a search tool with zero annotation coverage, this leaves significant behavioral gaps.
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 appropriately concise with three sentences that each serve a purpose: stating the tool's function, describing the parameter, and explaining the return value. It's front-loaded with the core purpose and avoids unnecessary verbiage.
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 an output schema (which handles return values) and only one parameter, the description covers the basics: purpose, parameter role, and return type. However, as a search tool with no annotations, it lacks details on behavioral aspects like search scope, limitations, or error handling, making it minimally adequate but with 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?
The schema description coverage is 0%, so the description must compensate. It adds that the 'query' parameter is a 'Search query string to find relevant transactions', which provides basic semantic context beyond the schema's title 'Query'. However, it doesn't elaborate on query syntax, examples, or constraints, leaving the parameter only partially documented.
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 as 'Search through all stored financial data using semantic search' - this specifies the verb (search), resource (financial data), and method (semantic search). However, it doesn't explicitly differentiate from sibling tools like 'list_transactions' which might also retrieve financial data, leaving room for ambiguity about when to use semantic search versus listing.
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 no guidance on when to use this tool versus alternatives like 'list_transactions' or 'store_transactions'. It doesn't mention scenarios where semantic search is preferred over other methods, nor does it specify prerequisites or exclusions for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
store_transactionsA
Parse and store transaction data from uploaded financial documents.
If you receive unstructured financial data (statements, receipts, CSV files, etc.),
extract transactions into the format: [{"date": "YYYY-MM-DD", "amount": number, "description": "string", "category": "string"}]
Args:
transactions: List of transaction dictionaries, each containing:
- date: Transaction date (string, format: YYYY-MM-DD)
- amount: Transaction amount (number, can be negative for expenses)
- description: Transaction description (string)
- category: Transaction category (string, optional, e.g. "Food", "Transport", "Bills")
Returns:
Success message with count of stored transactions
| Name | Required | Description | Default |
|---|---|---|---|
| transactions | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It describes the core behavior (parsing and storing transactions) and specifies the expected input format, but doesn't disclose important behavioral traits like authentication requirements, error handling, rate limits, or whether this is a mutating operation (implied by 'store' but not explicitly stated).
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 well-structured and appropriately sized. It begins with the core purpose, provides usage context, details the expected format, and explains the return value. Every sentence adds value with no redundant information.
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 complexity (parsing and storing financial data), no annotations, and an output schema present, the description is reasonably complete. It explains the transformation process and return value, though could benefit from more behavioral context about the storage operation itself (e.g., whether it overwrites existing data).
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?
With 0% schema description coverage, the description fully compensates by providing detailed parameter semantics. It explains the 'transactions' parameter structure, lists all required fields (date, amount, description, category), specifies data types and formats, and provides examples of category values.
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 with specific verbs ('parse and store') and resources ('transaction data from uploaded financial documents'). It distinguishes from siblings by focusing on storage rather than deletion, listing, or querying operations.
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 clear context for when to use this tool ('If you receive unstructured financial data...'), but doesn't explicitly mention when not to use it or name specific alternatives among the sibling tools. The guidance is helpful but lacks explicit exclusions.
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.
4 tool updates
v1.0.0- Added
delete_transactions - Added
list_transactions - Changed
query_financial_history1 field changed- added
Input schema / titleAdded value: +"query_financial_historyArguments"
- Changed
store_transactions1 field changed- added
Input schema / titleAdded value: +"store_transactionsArguments"
2 tool updates
- First observed
query_financial_history - First observed
store_transactions
TDQS
Each tool has a distinct and non-overlapping purpose: list_transactions retrieves data, store_transactions adds new data, delete_transactions removes data, and query_financial_history performs semantic search. The descriptions clearly differentiate their functions, with no ambiguity in selection.
Three tools follow a consistent verb_noun pattern (list_transactions, store_transactions, delete_transactions), but query_financial_history deviates slightly with a different verb style. The naming is still readable and mostly predictable, with only minor inconsistency.
With only 4 tools, the set feels thin for a finance management server, lacking operations like update_transactions, get_transaction_by_id, or category management. While the tools cover basic CRUD and search, the scope suggests more functionality is needed for comprehensive financial handling.
There are significant gaps in the tool surface for a finance domain. The server supports create (store_transactions), read (list_transactions, query_financial_history), and delete (delete_transactions), but lacks update operations (e.g., modify_transaction) and essential features like budget tracking, reporting, or category CRUD, which will limit agent effectiveness.
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
- Era ContextOAuthapp.era
Personal finance, bank account, and shared memory connector for Claude, ChatGPT, Gemini Spark & more
Household finance memory, budgets, transactions, and monthly reviews for AI assistants.
Personal-finance workspace for AI agents: accounts, spending, budgets, goals, and investments.
Personal finance tracker — log transactions, view summaries, and browse a dashboard
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage personal expenses through natural language conversations. Supports adding, searching, and analyzing transactions with automatic categorization and financial insights.3MIT
- FlicenseNot gradedqualityDmaintenanceEnables personal finance tracking through Claude Desktop using natural language to manage income and expenses with persistent SQLite storage. Supports adding and deleting transactions, checking balances, and viewing spending summaries grouped by category or month.-
- AlicenseNot gradedqualityDmaintenanceAI-powered personal finance analysis through Claude AI using Plaid integration, enabling natural language queries about transactions, subscriptions, budgets, and spending trends.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables users to manage personal expenses through natural conversation with Claude, including adding, updating, deleting expenses, and viewing summaries by category or date range.3MIT
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/xinrong-meng/my-finance-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server