mmex-mcp
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., "@mmex-mcpHow much did I spend on dining 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.
mmex-mcp
A read-only Model Context Protocol server for
Money Manager EX. Point it at your .mmb file and
ask an assistant about your finances.
It never writes to your database and never opens a network socket.
Install
Not published to npm yet, so build it from a clone:
git clone https://github.com/EriWinckler/mmex-mcp && cd mmex-mcp
npm install && npm run buildRegister it with Claude Code:
claude mcp add mmex -- node "$PWD/dist/bin/server.js" --db ~/finances.mmbOnce published that becomes claude mcp add mmex -- npx -y mmex-mcp --db ~/finances.mmb.
Try it without your own data
node dist/bin/fixture.js --out demo.mmb
claude mcp add mmex-demo -- node "$PWD/dist/bin/server.js" --db "$PWD/demo.mmb"That writes a synthetic database with fabricated accounts, payees and 18 months
of transactions. Remove it with claude mcp remove mmex-demo.
Related MCP server: OpenCoffer
Options
--db <file> Path to the MMEX database
--config <file> Config file (default ./mmex-mcp.config.json, then ~/.config/mmex-mcp/config.json)
--snapshot Read a temporary copy, for when Money Manager EX is running and holding the file
--redact Replace payee, account and category names with stable placeholders; amounts unchangedEnvironment equivalents: MMEX_MCP_DB, MMEX_MCP_SNAPSHOT, MMEX_MCP_REDACT.
Flags beat environment beats config file. Set MMEX_MCP_LOG=debug for
diagnostics on stderr.
Full details in docs/CLAUDE_CODE.md.
Tools
Tool | Answers |
| Where did my money go? Totals by category, optionally rolled up to top level |
| How much do I have? Per account and net worth, with reconciled balances |
| Am I saving? Income, expense and net per month, quarter or year |
| Which transactions make up that total? Paged, filterable, newest first |
| The category tree, for turning a name into an id |
| What is in this database, and is the server actually read-only |
Every tool returns exact decimal amounts in your base currency, plus a basis
block saying how the figure was produced: which rate date was used, and what was
excluded. When a number disagrees with a Money Manager EX report, that block
plus docs/CONFORMANCE.md is the explanation.
Status
Early. The foundation is built and tested; the analytics surface is not.
Read-only connection, schema-version check | Done |
Exact money arithmetic | Done |
MMEX semantics (transfers, splits, deletes, currency, categories) | Done |
Synthetic database generator | Done |
MCP server, Claude Code integration, configuration | Done |
Six tools: spending, balances, income vs expense, transactions, categories, database info | Done |
Answer-accuracy regression suite | Planned |
Encrypted | Planned |
148 tests. Typecheck and lint clean.
Why the queries are not obvious
The reason this is a semantic layer rather than a SQL passthrough is that the MMEX schema has five traps, and a plausible-looking query falls into all of them:
Trap | Where | Effect of getting it wrong |
Transfers are one row, not two |
| Moving money to your own savings counts as an expense |
Splits carry the category, the parent does not |
| Split transactions are misfiled or dropped |
Soft deletes |
| Deleted transactions counted as real |
Historical vs current exchange rates |
| Last year's totals change when today's rate moves |
Categories are a tree rooted at |
| No rollup; a cyclic parent hangs the query |
Amounts are stored in numeric columns, which SQLite returns as floats:
SELECT 10.10 + 20.20 gives 30.299999999999997. This server converts to
integer minor units at the SQL boundary and formats back only at output.
Which semantics
MMEX's two published general reports disagree with each other, so they cannot serve as the specification:
Category report | Income vs Expense report | |
Transfers | excluded | mapped to zero |
Soft deletes | filtered | not filtered |
Void / Duplicate | both excluded | only void |
Currency conversion | applied | none |
This server follows the desktop application instead, read from its C++ source
(1.9.4 RC1, commit 35f3081), with a file and line citation for each rule.
The comparison surfaced eight divergences from the published reports, including
two that lose data: ExpenseAndRevenueByMonth ignores DELETEDTIME entirely,
and CategoriesStatLast12Months drops uncategorized non-split transactions
rather than bucketing them.
All eight are in docs/CONFORMANCE.md, which is the answer to "why does your number differ from my report".
Safety
Read-only, enforced by
readonly: trueat the SQLite handle andPRAGMA query_only = ONat the SQL layer.mmex_database_inforeports the live posture by attempting a write (DELETE ... WHERE 1 = 0, a no-op even if permitted) and returning the SQLite error code that refused it.No network access. The server opens no sockets.
The database path is never exposed. It contains your account name and would otherwise land in transcripts, screen shares and pasted bug reports. This is privacy hygiene, not an access control: an assistant with shell access can still find the file via
ps, the client config, orfind. The defense against a raw query is that it gives wrong answers, which is what the semantic layer and the conformance document are for.--redactfor screen sharing;--snapshotto avoid touching a live file.API keys are read only from named environment variables, never from a config file; an inline key is rejected with an error.
.gitignorerefuses*.mmband*.emb.Three direct dependencies, 97 transitive, mostly from the MCP SDK's bundled HTTP transport that this stdio server does not use.
Threat model and limits: SECURITY.md.
Development
Node 22+ (24 LTS recommended).
npm install
npm run verify # typecheck, lint, test
npm run buildArchitecture and design decisions: docs/ARCHITECTURE.md. Contributing: CONTRIBUTING.md.
Roadmap
An answer-accuracy regression suite: unit tests prove the SQL is right, but not that an assistant given these tools answers correctly. Running the same questions against raw SQL is the control, showing which semantic rules are load-bearing.
Encrypted
.emb(SQLCipher) support.Optional write mode behind a flag, with dry-run and backup.
Related
Personal finance MCP servers exist for MoneyWiz, Monarch Money and others. None targets Money Manager EX.
License
MIT, see LICENSE. Money Manager EX is GPL-2.0 and unaffiliated; the schema definitions here are written from the documented table and column names rather than copied from upstream.
This server cannot be installed
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
Chat with your bank data: balances, transactions, budgets, bills. Reads only, never moves money.
Ask your Rent Manager portfolio anything: live, read-only financials, rent roll, leasing.
Ask business questions in plain English. Get instant answers from your database, no SQL needed.
Query your real net worth, spending, transactions, budgets and portfolio from any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides read-only access to Quicken for Mac financial data, allowing users to query accounts, transactions, and spending trends through natural language. The server functions by reading the local SQLite database directly while the Quicken application is open.9638MIT
- AlicenseNot gradedqualityCmaintenanceEnables querying personal finance data including accounts, transactions, spending, holdings, net worth, and budgets from your self-hosted OpenCoffer instance. Supports natural language queries through any MCP-compatible client.14MIT
- AlicenseAqualityDmaintenanceMCP server for interacting with Money Manager EX databases. Enables querying and managing financial data like accounts, transactions, payees, categories, currencies, and more through natural language.68MIT
- FlicenseNot gradedqualityDmaintenanceProvides read-only access to Banktivity 8 personal finance databases, enabling LLM-powered summaries of transactions, balances, and spending.1
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/EriWinckler/mmex-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server