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.

126 tools
16 ready workflows
7+ AI clients supported

News

News & announcements

Notable changes and fixes. The tool is under active development.

31.10.2026Released · v0.38.0

Release 0.38.0 is published

Version 0.38.0 is published on npm. It makes bank confirmations and owner expenses safer. An owner-paid expense can no longer be saved to an account that needs a dimension without choosing one, for example when account 2110 has dimensions. A duplicate transfer row is deleted only through a freshly checked, reviewed plan. A Wise statement is no longer booked to another bank account just because it is your only one. Classification approval shows what each group would book, and a payment is not overwritten when someone has changed it in the meantime. Invoice booking keeps the supplier's usual payable account, and Lightyear no longer offers to confirm an older draft this run did not create. Full release notes.

30.10.2026Released · v0.37.0

Release 0.37.0 is published

Version 0.37.0 is published on npm. It fixes the gaps found in a test on real books. A bank payment that names an invoice's order or cart number is now matched to that invoice even when another invoice has the same amount. Wise payments to a client already in your list get that client and can be confirmed. The guided assistant can now delete the duplicate half of a transfer between your own accounts after you approve it, and book a ticket that names both the seller and the carrier once you choose the supplier. Classification proposes the account a counterparty has always been booked to and lists payments that may pay an open invoice. The guided report can be computed from fresh data. Full release notes.

30.10.2026Released · v0.36.0

Release 0.36.0 is published

Version 0.36.0 is published on npm. This release follows a thorough review of all workflow instructions. A bank payment that names an open purchase invoice's number or order number is no longer booked as a new expense. Reconciliation, invoice booking and month-end now stop and ask when something may already be in the books, and month-end no longer confirms invoices or journals in a batch. Guided invoice booking keeps the payment reference and supplier IBAN, and one approval covers both creating and confirming the invoice. Asking the guided assistant to close the month now opens the month-end workflow. The VAT-registration check asks about sales that do not count toward the threshold before saying it is exceeded. Full release notes.

30.10.2026Released · v0.35.0

Release 0.35.0 is published

Version 0.35.0 is published on npm. A Wise transfer to a third party (for example the owner's private account) is now imported as an ordinary unconfirmed bank row and no longer holds up the whole import. Bus and train tickets take the purchase date as the invoice date, not the departure time. A reverse-charge footnote no longer adds a made-up VAT amount to the invoice. Duplicate warnings say when the other entry has a different import reference. An order or cart number printed on the invoice is saved in its notes, so a bank payment that names it is suggested as its match. Full release notes.

28.10.2026Released · v0.34.3

Release 0.34.3 is published

Version 0.34.3 is published on npm. The verified reading is slightly stricter: a character that text recognition reads beside a printed value can no longer complete it into a different value, and your own registry code counts as printed even when a date or another number follows it on the line. Full release notes.

28.10.2026Released · v0.34.2

Release 0.34.2 is published

Version 0.34.2 is published on npm. The payment reference (viitenumber) printed on an invoice is now saved when booking through the verified reading. A VAT-registered invoice whose VAT is one cent off the line maths now books with one confirmation. A logo that text recognition reads as a stray letter or digit no longer adds confirm rows to the review card. A ticket with a discount line is no longer blocked as mixing VAT rates. When the previous invoice's title names goods this invoice does not mention, you are asked for a new title. An invoice from a non-VAT-registered supplier that prints your VAT number is no longer blocked. Full release notes.

26.10.2026Released · v0.34.1

Release 0.34.1 is published

Version 0.34.1 is published on npm. Google invoices now go through the verified reading with one confirmation: an invoice number printed in the header under the same label is confirmed instead of typed. Abbreviated Estonian month names (veebr, okt, dets, märts) are now read. A 0% VAT invoice can be confirmed right after it is created. A transfer between your own bank accounts no longer holds a new invoice as a possible duplicate payment. The audit log now shows which fields were read from the image. Full release notes.

26.10.2026Released · v0.34.0

Release 0.34.0 is published

Version 0.34.0 is published on npm. When an invoice PDF loses its date or number behind a dotted line (as Google invoices do), the assistant now reads it from a picture of that row, and the server accepts it only when its own text recognition reads the same; you confirm it on the review card. Invoices with a typed date can now be booked when they carry VAT too, and corrections on the review card are re-checked against the whole document before anything is created. Works in verified-reading mode. Full release notes.

26.10.2026Released · v0.33.0

Release 0.33.0 is published

Version 0.33.0 is published on npm. A Wise transfer that matches rows on two of your banks can now be pointed at the right one, row by row. A Wise payment booked twice is held for review instead of slipping through. Wise payouts into your bank book automatically when the sending account's row proves them. Recurring broker top-ups get an account suggestion from your history. Invoices that print net, VAT and total on one total row (like Tele2) are read when the supplier's Estonian VAT number is on the invoice. A final invoice whose prepayment is already booked by hand is held. Older receipts at the 9% and 5% rates of the time are no longer held. IBANs and foreign VAT numbers are now checked with maintained libraries, and review guidance is in English. Full release notes.

26.10.2026Released · v0.32.3

Maintenance release 0.32.3 is published

Version 0.32.3 is published on npm. These fixes came from a test run on real books. A Wise payment you already booked by hand, with its Wise ID as the journal's document number, is now recognised as booked instead of being held for review. A bank statement row is no longer flagged as booked in the wrong direction just because a different same-day payment of the same amount went the other way. The bank-reconciliation and Wise-import guides explain the new review reasons. Full release notes.

26.10.2026Released · v0.32.2

Maintenance release 0.32.2 is published

Version 0.32.2 is published on npm. A transfer under the company's own name to an own account that is not set up in e-arveldaja, or has no accounting dimension, is now held for review instead of being booked to a different own account. A transfer to an unregistered IBAN (such as a Wise top-up) is booked automatically only when the other account's matching row proves it. An own account with an empty IBAN field is recognised by its account number, and a transfer with a manually chosen target account now executes without a plan-drift error. Dependencies are updated. Full release notes.

20.10.2026Released · v0.32.1

Maintenance release 0.32.1 is published

Version 0.32.1 is published on npm. It fixes product-name updates, percentage discounts and sales-invoice-note updates while preserving invoice amounts. Bank previews with an empty work queue make fewer requests. Bank workflow execution calls now include the required plan handle, and workflow instructions require reviewing all planned effects before approval. Real MCP tests also covered transaction confirmation and invalidation, plus company-switching safeguards. Full release notes.

19.10.2026Updated · v0.32.0

Opening balances come directly from e-arveldaja

The server reads opening-balance entries from the API and includes them in reports once. No separate import or local opening-balance file is needed. Maintain the source entries in e-arveldaja; opening balances are not counted as cash receipts or payments.

19.10.2026Fixed · v0.32.0

Cash flow separates cash movements from noncash changes

The annual report separates actual receipts and payments from offsets and other noncash entries. Invoice, investment and foreign-exchange treatment uses evidence from linked entries; missing or conflicting evidence leaves the amount marked for review. Read the change notes.

19.10.2026 New · v0.31.0

Your assistant can read an invoice and submit its values for checking

In the optional reading mode, the assistant reads the PDF and the server checks the submitted values against the document's text. The review shows the total, supplier and supporting text lines; the assistant asks you about missing or ambiguous values. Enable the mode explicitly with EARVELDAJA_DOCUMENT_READING=1.

A non-VAT company can charge purchase-invoice VAT to its expense account. Supported EUR invoices can retain the document VAT while charging it to the same row's cost account. Receipt batches book the whole gross amount as expense; a bug that could leave only the net amount on the cost row is fixed.

19.10.2026 Fixed · v0.31.0

Approval applies to the invoice and document you reviewed

When confirming an approved plan, changes to material invoice or linked payment details stop confirmation. The receipt-batch plan shows each file's supplier, invoice, bank distribution and any client reassignment. PDF attachment checks verify the exact file bytes; adding the approved attachment no longer triggers a false change warning.

A partially completed creation retains the known invoice ID and recovery details. If creation has an unknown outcome, another invoice is not created automatically. The fixes were checked on real accounts for both a VAT-registered and a non-VAT company.

19.10.2026 Updated · v0.31.0

Bank import keeps more description text, and reports state their limits

CAMT import keeps the full bank description where possible and reports any shortening. Historical aging reports clearly state that they use the invoice's current payment status. Account balances can be narrowed to one sub-account, and unknown tool arguments are no longer silently ignored. All 16 workflow prompts have been reviewed.

Restart the server after updating and obtain a fresh preview. After importing with the new CAMT markers, downgrading below 0.31.0 is unsupported. Full release notes.

16.10.2026 Security · v0.30.1

A receipt already booked by a manual journal is held for review

If the receipt's invoice number already appears in a journal's document number or title (for example ETR1:EE1966453), no new purchase invoice is created: the receipt is held for review with the journal number, and the note suggests attaching the document to that journal. A receipt whose invoice number looks cut short (for example “AB1.234”) is held too; the extracted number itself is unchanged, so an invoice booked earlier is still found as a duplicate.

16.10.2026 Security · v0.30.1

A receipt with an unverified amount or buyer is held for review

A receipt is held for review in every mode when the file holds several documents, the buyer is another company, the invoice numbers disagree, the total is not confirmed by a label, an amount exceeds the receipt limit, or the total is 0. A wrong-company invoice can no longer be created in the guided workflow. Net / VAT / total rows, table headers, zero balances and supplier names are read more accurately, and “MTÜ” and “Mittetulundusühing” are recognised as the same supplier.

15.10.2026 Security · v0.30.0

A receipt whose payment is already booked is held for review

If the receipt's outgoing payment is already booked from the bank, no new purchase invoice is created from the receipt: it is held for review with the matching journal number, so the expense is not booked twice. Journals are re-read before each create, so a payment booked in the meantime is caught too. Receipt amounts are read more carefully (VAT is no longer taken from, say, a street address), and a receipt whose net, VAT and total do not add up, or whose VAT rate was not in force on the invoice date, is held for review.

15.10.2026 Fixed · v0.30.0

Purchase invoice totals are checked before writing

Purchase-invoice VAT and total rules are now checked before the invoice is created, not after; nothing is written for an invoice that fails them. For a VAT-registered company, an invoice line that carries VAT must state its VAT rate. Receipt batch output is compact by default (detail: "full" includes the OCR text), and the accounting inbox now reports Lightyear CSV exports and XML files that are not bank statements.

15.10.2026 Security · v0.30.0

Wise transfers booked against the right own account

The counterpart of a Wise transfer (your other bank account) is now resolved per row from own-account evidence, not by one choice for the whole file. If the same transfer may already be booked on the Wise account, the row is held for review; the owner can release such rows with acknowledged_journal_holds, after which the entry is created and confirmed as usual. Each entry is re-checked right before it is written.

14.10.2026 Fixed · v0.29.2

Lightyear income is no longer proposed twice

When a Lightyear reward or dividend has already been booked by hand under another document number (for example reward), the tool no longer proposes it as a new entry. A same-amount entry on the broker account within a day sends the row to review with the matching journal's number. A reference shared by rows with different content is reviewed row by row, and rows already booked count as duplicates rather than review items. The legacy-booking check has a request budget, so a large statement can't stall.

14.10.2026 Fixed · v0.29.2

Stricter checks before booking

Dates that don't exist (such as 31 February) are now refused by every tool. Journal titles over 100 characters are refused before reaching the API; the dividend package shortens a long shareholder name itself. A non-VAT-registered company's purchase invoice no longer accepts deductible VAT fields. Your own bank account is recognised even when its IBAN is written with spaces, so inter-account transfers aren't missed. Client debt now states clearly when offsetting entries booked under other clients are left out.

14.10.2026 Security · v0.29.2

An approved plan runs only on the reviewed file

Bank statement, Wise, Lightyear and document imports now check before writing that the file is exactly the one you previewed: content, size, extension and location. A copied, moved or swapped file stops the run and nothing is written. The audit log is written through a safe temporary file, and document numbers of possible duplicate postings are sandboxed from the AI assistant like other imported text.

2026-10-12 New · v0.29.0

More bank transactions confirm themselves

A new rule confirms a receipt automatically when its reference number and amount match exactly one confirmed, unpaid EUR invoice and its direction and currency are proven by the statement. A row whose client differs from the invoice's client goes to review, and automatic confirms still go through a reviewed preview. Rows that e-arveldaja's own bank import already created are recognised and skipped on CAMT import. Classification suggests the counterparty's previous booking even without an IBAN. The LHV payment instruction id helps pick the right Wise top-up among eligible candidates, and flags a conflict for review when it names another candidate. The summary shows examples of the automatic decisions and says where to find the full list.

2026-10-12 Fixed · v0.29.0

Bank import guards better against double-booking

CAMT and Wise import now also check manual journals: a movement whose journal is found with certainty is not created again. An uncertain hit is flagged for review; CAMT does not create the row, while Wise may still create an unconfirmed row for you to review or delete. Several earlier duplicate cases are fixed: re-imports after an upgrade, concurrent imports, partly imported statements, rows booked in the wrong direction, Wise card payments split across two balances, and fees already booked.

2026-10-12 Fixed · v0.29.0

Foreign-currency invoices: rate and currency

e-arveldaja's currency_rate means foreign units per 1 EUR. Some paths used to multiply to get the EUR amount; they now divide (e.g. 108 USD at 1.08 = 100 EUR). A EUR payment is matched to a foreign-currency invoice by the invoice's EUR base amount. When a receipt's total lines show two currencies (e.g. a USD invoice that also prints a EUR equivalent), the read currency is cross-checked against the supplier's past invoices, and in a receipt batch also against a linked payment; a contradiction sends it to review. A new supplier, or single-document processing without the payment check, may not reveal every contradiction.

2026-10-12 Security · v0.29.0

Imported text and files are better protected

Forged sandbox delimiters are stripped from bank statement, Wise and Lightyear CSV and receipt text as soon as it is read, so a malicious file cannot carry them into the books or the AI assistant's instructions. Input files have a hard size cap, and a file that changes while it is being read is refused.

2026-10-02 Fixed · v0.28.1

Google invoices: a date is no longer read as the total

On Google's Estonian 0% invoices (Workspace, Cloud, Gemini) the PDF reader took the billing-period row "Kokkuvõte – 1. sept 2026 – 30. sept 2026" as the total, so the total became a day number (such as 30) and VAT was computed as the difference from the net amount. The reader now recognises the "Kogusumma" (total) row and no longer reads part of a date as an amount.

2026-10-02 Fixed · v0.28.0

Incoming bank transactions confirm again

The e-arveldaja API reads every transaction back as outgoing, even one stored as incoming, so a check added in 0.26.0 left incoming CAMT and Wise rows unconfirmed. The check is gone; the direction comes from the statement. Rows whose direction is unknown (entered manually or imported another way) are no longer treated as money out: duplicate checks look at both sides and the tool won't book a refund as an expense. Attaching a document to a record that has none works again, and balances and reports no longer break when the number of entries is an exact multiple of 100.

2026-10-02 New · v0.28.0

Unconfirmed entries no longer drop out of balances unnoticed

Account balances still count confirmed entries only, but now also show how many unconfirmed entries post to the account in the period and for what amount, with a warning to confirm them before comparing with a statement. Lightyear booking lists the draft entries it created along with a ready-to-run confirm command. Previously they could be left unconfirmed and the broker account then didn't match the statement.

2026-09-25 Fixed · v0.27.0

A dropped connection no longer leads to double bookings

When e-arveldaja doesn't answer or the connection drops during a write, the tool no longer treats it as a failure; it reports that the outcome is unknown — check before retrying, because the entry may in fact have been saved. That way a retry can't create a duplicate entry or send an e-invoice twice. Duplicate and invoice-payment checks before a write now always read fresh data, not the cache.

2026-09-25 New · v0.27.0

Owner-paid receipts can be finished from the inbox

When you paid an expense out of your own pocket, the assistant asks for the missing details as separate yes/no questions and applies the VAT rules: for example, input VAT on guest reception is not deductible, and on an M1 passenger car not excluded from private use generally only 50%. Guided mode (guided) flows now run end to end without switching to the full toolset. The dividend package previews by default — entries are created only after your approval.

2026-09-25 New · v0.26.0

Year-end close the RIK way

The year-end close now books the two closing entries described in RIK's e-arveldaja guide (result to account 2970 on 31 Dec, then to retained earnings 2960 on 1 Jan), recognises entries you already made by hand and adds only what's missing — it never books twice. The month-end overdue list no longer includes invoices that aren't due yet, and a closed year's profit and loss no longer shows zeros. Lightyear sells are booked with the cash the statement actually shows, and a Wise own-account transfer already recorded from the other bank is no longer booked a second time.

2026-09-18 New · v0.25.7

Protection against third-party payers and the wrong company

When someone else pays an invoice (say, a ministry paying a foundation's invoice), e-arveldaja records the receipt under the payer rather than the invoice's customer, so the customer still appears to owe the money. The tool no longer auto-confirms such payments and sends them to review instead. With several companies, every write can be pinned to a specific company — if the server restarted in the meantime and another company is active, the command is refused.

2026-07-25 New · v0.25.0

Choose how many tools your assistant sees

The EARVELDAJA_PROFILE setting selects the toolset: guided mode guided (19 tools) for everyday bookkeeping, guided-sales with sales invoices, the default standard, or every tool with full. A smaller set means fewer tokens in every conversation.

2026-07-21 New · v0.24.0

Warns about duplicate payments and closing-balance mismatches

The tool now warns when the same bank payment is already in the books — no matter how it got there — and checks that the bank statement's closing balance reconciles with the accounting. It never deletes anything on its own — it only flags.

2026-07-20 Fixed · v0.22.1

Incoming receipts could be recorded as outgoing payments during a short window

In version 0.22.0, incoming receipts (including deposits and refunds) could be recorded as an outgoing payment instead. Fixed in version 0.22.1. This could only affect those who happened to create new bank transactions overnight into 20 July, roughly 22:30–04:15 (Estonian time).

If in doubt, compare the bank-account balance e-arveldaja shows against your real balance; if they differ, re-import the affected statements.

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.

01

Speak plainly

"Import the LHV statement and match it to invoices." No export-import dance, no hunting through menus.

02

The assistant shows a preview

Every batch operation runs in dry-run mode first — you see exactly what will happen before anything changes.

03

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.

Indrek Seppo creator of e-arveldaja MCP

What it can do

Features

The everyday accounting routine through natural conversation — the final check is yours.

01

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.

02

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.

03

Wise transactions

Import the Wise transactions CSV — incoming and outgoing payments, with fees split into separate entries for proper expense accounting.

04

Bank reconciliation

Matches incoming and outgoing payments to the right invoices. Conservative with transfers — when unsure, it skips rather than guesses.

05

Month-end & reports

Month-end checklist, profit & loss, balance sheet, receivables and payables aging — by date range, as of any chosen date. At year end, it books the closing entries following RIK's guide.

06

Estonian taxes

Dividend package with 22/78 income tax, retained-earnings and net-asset checks (ÄS §157). Reimbursing owner-paid expenses, with the input-VAT deduction limits applied.

07

Lightyear investments

Creates journal entries from Lightyear trades, dividends and interest, and computes capital gains from the FIFO report.

08

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.

09

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 16 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.
vat-registration-thresholdCheck the 40 000 € VAT registration threshold (finance, insurance and real-estate turnover separated).
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, the dividend package 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+.

1

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. To allow access from any IP address (e.g. with a changing IP or a laptop), enter 0.0.0.0/0 as the IP address — note that this is less secure. Download the apikey.txt file. Never commit this file to git.

2

Add the MCP server

Most AI assistants can set the server up for you — just say: "Add the e-arveldaja MCP server to this project, the npm package is e-arveldaja-mcp."

If you prefer to do it manually — in Claude Code, one line is enough:

$ claude mcp add e-arveldaja -- npx -y e-arveldaja-mcp

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:

{ "mcpServers": { "e-arveldaja": { "command": "npx", "args": ["-y", "e-arveldaja-mcp"] } } }

Tip — install the server per project. The e-arveldaja MCP loads 126 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 pick the toolset with a profile: EARVELDAJA_PROFILE=guided gives a narrow 19-tool set for everyday bookkeeping (guided-sales adds sales invoices, 20 tools); the default is standard (126), and full exposes all 146 tools.

You can also 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 at 86 tools.

3

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."

Claude Code Codex CLI Gemini CLI Cursor Windsurf Cline Antigravity

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

FAQ

What is the e-arveldaja MCP server?
An open-source tool (MCP server) that connects your AI assistant (Claude, Codex, Gemini, Cursor and others) to Estonia's e-arveldaja (RIK e-Financials) API. In plain language it can enter purchase invoices from PDFs and images, import bank statements, match payments and generate reports.
Is this an official RIK tool?
No. It is an experimental, unofficial project. It is not affiliated with, endorsed by, or connected to RIK or the e-arveldaja / e-Financials service. Use it at your own risk — always verify the results.
Do I still need an accountant?
The tool handles the routine, but the responsibility is yours alone. It's wise to have an accountant review the entries from time to time; at the very least, ask the assistant whether anything looks off. Some accounting knowledge definitely helps — without it, the results are hard to judge.
Is my accounting data safe?
Documents are parsed locally by default, and the server only reaches out to the e-arveldaja API and your chosen AI model. Batch operations run in dry-run mode first (a preview); records change only after your approval, and every change is written to a Markdown audit log. Text from scanned invoices is protected against prompt injection with security delimiters.
How much does the e-arveldaja MCP server cost?
The server itself is free and open source (Apache 2.0). You only pay for your AI assistant (for example Claude) if it is a paid service. Good to know: the server loads 126 tools into context by default each session, so add it per project (not globally) — that way you don't spend tokens in projects unrelated to accounting.
Which AI clients does it work with?
Any MCP-capable client: Claude Code, Codex CLI, Gemini CLI, Cursor, Windsurf, Cline, Antigravity and others. Node.js 18+ is required.
Which banks and data does it support?
Bank statements in CAMT.053 format (LHV, Swedbank, SEB, Coop, Luminor) and the Wise transactions CSV, plus Lightyear investments. On top of that: purchase invoices from PDFs and images, reports and Estonian taxes (dividends 22/78, owner expenses).
Can it see my opening balance?
Yes. The server reads opening-balance entries directly from the e-arveldaja API and includes them in account balances, the trial balance, balance sheet, profit and loss statement, annual report and dividend checks. No separate local import is needed. Maintain opening balances in e-arveldaja; these entries are not treated as cash receipts or payments.