Experimental, unofficial project — use at your own risk
Let AI handle the bookkeeping routine.
The e-arveldaja MCP server connects your AI assistant straight to Estonia's e-arveldaja (RIK e-Financials). Invoices from PDFs and images, bank imports, month-end close and Estonian taxes — in plain language. You review and approve.
What it is
A bridge between AI and e-arveldaja
e-arveldaja is the Estonian state's accounting software (RIK e-Financials). An MCP server is a small connector that links it to your AI assistant — be it Claude, ChatGPT/Codex, Gemini, Cursor, or another client.
The result: you talk to your assistant in plain language and it does the work in e-arveldaja — reading invoices from PDFs and images, importing bank statements, matching payments, creating sales invoices, generating reports and computing taxes. You stay the decision-maker; the assistant handles the routine. It works with both VAT-registered and non-registered companies.
It doesn't do absolutely everything, though. The server covers the everyday routine, but some tasks — such as the VAT return (KMD), the TSD payroll-tax return, and other Tax and Customs Board (EMTA) matters — you still handle in the e-arveldaja web environment.
The server is free and open source (Apache 2.0). The code and full documentation live on GitHub.
Speak plainly
"Import the LHV statement and match it to invoices." No export-import dance, no hunting through menus.
The assistant shows a preview
Every batch operation runs in dry-run mode first — you see exactly what will happen before anything changes.
You approve
Records are written only after your approval. Every change goes into a readable Markdown audit log.
Why I built this
It started as a classic "scratching my own itch" — I wanted to make Wise and Lightyear imports, and entering invoices, easier for myself. It grew from there.
It's starting to come together. It doesn't do everything — VAT and TSD returns still live in the e-arveldaja web UI — but it does quite a lot: it reads PDFs and images as invoices, imports bank statements, ties it all together, creates sales invoices, and checks limits and accounting rules where it can. And you can ask, in plain language, how your company is doing.
I run a couple of my own micro-companies on it and I'm already pretty happy with it. It hasn't been tested extensively yet, so always double-check. If you keep your micro-company's books in e-arveldaja, I think it'll genuinely help.
What it can do
Features
The everyday accounting routine through natural conversation — the final check is yours.
Purchase invoices from PDFs and images
OCR reads the invoice from a PDF or image (JPG/PNG), resolves the supplier from the business registry, fills the VAT rate and account from past bookings, creates the purchase invoice and matches it to the bank payment. OCR can misread, so check the fields.
Bank import (CAMT.053)
Import statements from LHV, Swedbank, SEB, Coop or Luminor. Re-imports preserve CAMT references and counterparty-account metadata even when the API drops dedicated fields, making duplicate review safer.
Wise transactions
Import the Wise transactions CSV — incoming and outgoing payments, with fees split into separate entries for proper expense accounting.
Bank reconciliation
Matches incoming and outgoing payments to the right invoices. Conservative with transfers — when unsure, it skips rather than guesses.
Month-end & reports
Month-end checklist, profit & loss, balance sheet, receivables and payables aging — by date range, as of any chosen date.
Estonian taxes
Dividend package with 22/78 income tax, retained-earnings and net-asset checks (ÄS §157).
Lightyear investments
Creates journal entries from Lightyear trades, dividends and interest, and computes capital gains from the FIFO report.
Accounting "inbox"
Scans your working folder and tells you what can be done automatically, what needs one decision, and what needs an accountant's eye. It returns a recommended next step, review questions and approval previews.
Sales invoices
Create and send sales invoices, manage clients, articles and invoice series. Incoming payments are later matched to these invoices by the bank import.
You don't need to memorize these — the assistant picks the right workflow from your request. But if you'd like to see what's there:
All 15 workflows (MCP prompts)
accounting-inboxStart here: scans the folder, detects inputs and suggests the next safe steps.book-invoicePurchase invoice from PDF: extract, validate, resolve supplier, preview, create, upload, confirm.receipt-batchReceipt batch: create and upload project purchase invoices (separate approval).import-camtCAMT.053 statement: preview, then create entries after approval.import-wiseWise CSV preview: fees, duplicates, skips.reconcile-bankMatch bank rows to invoices, then auto-confirm or review.classify-unmatchedGroup unmatched bank rows, preview, apply after approval.month-end-closeMonth-end: checklist, trial balance, P&L, balance sheet.company-overviewFinancial overview: balance sheet, P&L, receivables, payables.new-supplierCreate a supplier via business-registry lookup.lightyear-bookingBook Lightyear trades and distributions from CSV.resolve-accounting-reviewTurn a review item into a concrete action plan.prepare-accounting-review-actionPrepare the next action for a resolved item.setup-credentialsVerify and import the API key from apikey.txt.setup-e-arveldajaExplain API-credential setup in setup mode.Trust & privacy
The final word is yours
It only touches live data when you allow it — and leaves a trail.
Dry-run by default
Bank import, Wise, Lightyear, receipt batches and auto-confirm all preview first. Records change only after your explicit approval.
Audit log
Every mutating operation is written to a Markdown log (logs/{company}.audit.md) — a short action sentence, a clear field table, accounts, amounts and dimensions when present.
OCR is sandboxed
Text from scanned invoices is wrapped in security delimiters so a malicious document cannot smuggle hidden instructions to your assistant (prompt-injection protection).
Local and narrow
Documents are parsed locally by default. The server only reaches out to the e-arveldaja API and your chosen AI model — plus the business registry for supplier lookups.
Follows past bookings
It first checks how similar entries were booked before, then does the same. It doesn't invent VAT treatment on its own.
Multiple companies
Several API keys side by side; switch with one command. Switching clears the cache so data doesn't get mixed between companies.
Important — use at your own risk
This is an experimental, unofficial project — tested, but not extensively. It is not affiliated with, endorsed by, or connected to RIK or the e-arveldaja / e-Financials service. The software works with live data and can create, modify, confirm and delete accounting records. Always verify the results. The author accepts no responsibility for data loss or incorrect bookings.
Technical setup
Up and running in ~5 minutes
You need an e-arveldaja account, an MCP-capable AI assistant and Node.js 18+.
Get an API key from e-arveldaja
Log in to e-arveldaja → Settings → General settings → Add new access token. Add your public IP address and save. Download the apikey.txt file. Never commit this file to git.
Add the MCP server
Most AI assistants can set the server up for you — just say: "Add the e-arveldaja MCP server, the npm package is e-arveldaja-mcp."
If you prefer to do it manually — in Claude Code, one line is enough:
In other clients (Cursor, Windsurf, Cline, Gemini CLI, Codex CLI, Antigravity) add the same to your MCP config — or let the assistant create the file for you:
Tip — install the server per project. The e-arveldaja MCP loads 120 tools into the model's context by default at the start of every session; that's a fixed token cost per session. So add the server only in the folder where you do your accounting. claude mcp add does this by default — the server applies to this project only. Avoid a global install (-s user): otherwise every tool loads into context in every project, including ones unrelated to accounting, wasting tokens. In other clients, prefer a project-local config (e.g. .cursor/mcp.json in Cursor) over a global one.
You can trim context by disabling unused feature groups: EARVELDAJA_DISABLE_LIGHTYEAR=1, EARVELDAJA_DISABLE_TAX_TOOLS=1, EARVELDAJA_DISABLE_REFERENCE_ADMIN=1, EARVELDAJA_DISABLE_ANNUAL_REPORT=1, EARVELDAJA_DISABLE_SALES=1 and EARVELDAJA_DISABLE_PRODUCTS=1. A purchase-side-focused setup with every trim lands near 80 tools; set EARVELDAJA_EXPOSE_GRANULAR_TOOLS=1 if you need the hidden low-level tools back.
Import the key and start
Put apikey.txt in your working folder. The server detects it and offers to import — or tell your assistant: "Import my API key from apikey.txt." Then try: "Scan this folder and tell me what can be done automatically."
Want to try it before touching live data? Set EARVELDAJA_SERVER=demo to run against the e-arveldaja demo server.
Need help setting it up or tailoring it? Email Indrek.
Frequently asked questions