Skip to content
Automation
MCP

lhv

Ships with merit-aktiva-workspace: Do your Merit Aktiva accounting from the command line — or let Claude Code do it for you. Merit Aktiva is Estonia's cloud accounting platform.

From plugin
merit-aktiva-workspace
1018 skills3 agents5 commands1 MCP

Claude Code

> /plugin marketplace add Elnora-AI/elnora-merit-aktiva
> /plugin install merit-aktiva-workspace@elnora-merit-aktiva

Security report

Found

Low risk

  • Known flaws

    Not published

  • Signed build

    Not published

  • Maintained

    Nov 9, 2026

    Last push

  • Licence

    Apache-2.0

  • Runs as

    Remote

    mcp.lhv.ai

  • Deprecated

    Not published

Signals from public registries, not an audit. Checked Nov 13, 2026.

merit-aktiva-workspace README

elnora-merit-aktiva

License npm version CI

Do your Merit Aktiva accounting from the command line — or let Claude Code do it for you.

Merit Aktiva is Estonia's cloud accounting platform. This repo gives you two ways to drive its API:

  • elnora-merit — a CLI that covers the entire Merit Aktiva API (invoices, payments, VAT/KMD, ledger, reports, and more) plus Merit Palk payroll. JSON in, JSON out.
  • A Claude Code plugin that wraps the CLI in skills, agents, and slash commands, so you can ask in plain English ("book this purchase invoice", "file my KMD") and Claude runs the right commands the right way.

Everything is universal — nothing about any one company is hardcoded. Point it at your own Merit credentials and it works.

Requires a Merit Aktiva Pro or Premium license — the API is not available on lower tiers.


Install

As a CLI

npm install -g @elnora-ai/merit-aktiva

This puts the elnora-merit command on your PATH. Node.js ≥ 20 required.

As a Claude Code plugin

Paste these two slash commands into Claude Code one at a time — wait for the first to finish before the second:

/plugin marketplace add Elnora-AI/elnora-merit-aktiva
/plugin install merit-aktiva-workspace@elnora-merit-aktiva

The plugin uses the elnora-merit CLI under the hood, so install that first.

Make the write agents actually fire

The plugin ships three agents that wrap the CLI with guardrails — resolve the customer, build per-rate VAT totals, preview the payload, gate on your approval:

When you ask to…Agent
create / bill a sales invoicemerit-aktiva-workspace:merit-invoice-creator
record a payment, enter a purchase invoice, reconcile open itemsmerit-aktiva-workspace:merit-bookkeeper
look up a company (legal name / VAT / address / e-invoice capability)merit-aktiva-workspace:merit-company-lookup

A host that only loads the merit-* skills gets a recipe and then hand-runs the CLI itself — skipping those guardrails. To make the agents fire at the right time, add one routing rule to your host's own instructions (Claude Code CLAUDE.md, AGENTS.md, .cursorrules, or persistent agent memory), e.g.:

For Merit write/lookup work (create invoice, record payment, enter purchase, reconcile, company lookup) dispatch the merit-aktiva-workspace agent above — do not hand-run the elnora-merit CLI. Read/report/VAT work (KMD, reports, Stripe/LHV import, reverse charge, payroll) has no agent — use the merit-* skills directly.

That write-vs-read split is the whole rule: agent-first only where an agent exists.


Authenticate

Generate an API ID and API Key in Merit Aktiva: Settings → Company data → API settings → "Koosta võti" (Generate key).

The CLI reads them from environment variables. On first run it also prompts and saves them to ~/.config/elnora-merit/.env (mode 0600):

export MERIT_API_ID=your-api-id
export MERIT_API_KEY=your-api-key

Or copy .env.template to .env and fill it in (.env is gitignored — never commit it).

VariableRequiredNotes
MERIT_API_IDyesGUID from API settings
MERIT_API_KEYyesbase64 secret; the HMAC signing key
MERIT_API_VERSIONnov1 (default) or v2 for dual-version endpoints
MERIT_PALK_API_IDfor palkMerit Palk API ID (separate payroll product)
MERIT_PALK_API_KEYfor palkMerit Palk API key (base64 secret)
MERIT_REFERENCES_DIRnoBase dir for config + reference files (stripe map, ledger, overrides, company-profile.json). Default ~/.config/elnora-merit.

Company profile (optional)

Snapshot your account's own chart of accounts, banks, VAT codes, and financial years so an agent (or you) can look up the real codes without transcribing them by hand:

elnora-merit profile sync                  # → company-profile.json (in MERIT_REFERENCES_DIR)
elnora-merit profile show --section taxes  # the VAT TaxId guids, etc.

company-profile.json holds no secrets but is company-specific, so it is gitignored. Re-run profile sync whenever the chart of accounts changes.

Estonian Business Register lookups (optional)

This step is entirely optional. Everything else in the CLI and the Merit agent works without it. Setting it up just adds one extra capability: the elnora-merit ariregister commands, which pull company data straight from the Estonian Business Register (äriregister) using RIK's free ("tasuta") API services — so an agent can fill a new customer's legal name, VAT number, and address, and check e-invoice capability, from the authoritative source instead of asking you.

One of the two lookups needs no setup at all:

# e-invoice capability — works with NO credentials:
elnora-merit ariregister e-invoice-check 16818352

The requisite lookup needs a free äriregister contract + login. To enable it:

  1. Register for the free API tier. Go to rik.ee → e-äriregister → XML teenus and conclude a contract for the "Ainult e-äriregistri tasuta API-teenused" (free API services only) tier at the e-äriregister portal. You log in with an Estonian ID-card / Mobiil-ID / Smart-ID. The free tier has no per-query cost. See RIK's contractual-client admin guide.

  2. Create an XML-authorised user. In the portal: Haldus → Kasutajate haldamine → Lisa kasutaja, and enable XML/API access for it. (Optionally set the credit limit to 0 so only free services can ever run.)

  3. Get the username + password. The username is shown in the users table; generate the password with the "Uus parool" button (note: this XML-service password is separate from your portal login, and a freshly generated one can take ~10 minutes to activate).

  4. Save them to ~/.config/elnora-merit/.env (mode 0600, gitignored — never commit):

    ARIREG_XML_USER=YOURUSERNAME
    ARIREG_XML_PASSWORD=your-xml-service-password
    

Then both lookups work:

elnora-merit ariregister requisites 16818352      # → name, VAT, status, address
elnora-merit ariregister e-invoice-check 16818352 # → OK/MR + e-invoice operator

Only the free services are exposed; billable queries (detailed data, beneficial owners, representation rights) are intentionally excluded. See the merit-company-lookup skill/agent.

LHV bank connection (optional — recommended if you bank with LHV)

Optional. Everything else works without it. Connecting it automates the other half of the books: instead of exporting a statement file from your internet bank and uploading it, your agent pulls the statement from LHV directly and imports it into Merit.

LHV (AS LHV Pank) publishes its own read-only MCP server, and this plugin already bundles it — there is nothing to install and no key to add. Just connect it:

  1. Run /mcp, pick lhv, choose Authenticate.
  2. Sign in exactly as you would in your internet bank — Smart-ID, Mobiil-ID, ID-card, or biometrics.
  3. On LHV's consent screen pick the scopes. Statement import needs both accounts:read and transactions:read.

The token lives in your own MCP client for 30 days. This plugin never sees or stores it, and LHV exposes no write scope at all — an assistant can read your accounts and can never move money. Revoke any time: internet bank → Settings → Active sessions.

What the connection gives you:

Ask your agentWhat it uses
"What's our balance?"every account — IBAN, currency, available balance
"How much is actually available vs reserved?"available, settled, and reserved balance per IBAN
"What did we spend on X last month?"totals, top counterparties, income vs spend (max 31 days)
"Show me last week's transactions"the full statement — what came in, what went out
"Import July's statement into Merit"the statement as camt.053, straight into payments import-statement — no file export

The last one is the point: LHV returns a real ISO 20022 camt.053 statement, which is exactly what Merit's bank import accepts, so the bank and the books talk to each other with no file in between. The merit-lhv skill drives it — and its first step is checking whether the period is already booked, because importing an already-booked month double-books it.

Estonia-only, and only for LHV customers. Other banks: export camt.053 from your internet bank and use payments import-statement --file as usual.


Quickstart

elnora-merit accounts list                              # chart of accounts
elnora-merit banks list                                 # bank accounts
elnora-merit taxes list                                 # VAT rates
elnora-merit customers list --name "Acme"               # find a customer
elnora-merit sales-invoices list --period-start 2026-01-01 --period-end 2026-03-31
elnora-merit reports income-statement --end-date 20260331 --per-count 3

# Output controls (work on any command)
elnora-merit accounts list --output table --fields Code,Name
elnora-merit accounts list --pretty                     # pretty JSON

Creating documents. Create/send commands take the Merit JSON body via --data (inline) or --file (path). Each command's --help lists the required fields:

elnora-merit sales-invoices create --file invoice.json

See the official Merit reference manual for field details.


What you can do

Full coverage of the Merit Aktiva REST API — 22 resource groups — plus four local helpers: profile (snapshot your account's codes), reconcile (book Stripe payouts), documents (audit + attach missing receipts), and ariregister (free Estonian Business Register lookups). Run elnora-merit <group> --help for per-command options and payload schemas.

GroupCommands
sales-invoiceslist, find, get, create, create-v2, create-credit, create-multi-payment, create-from-xml, get-pdf, send-email, send-einvoice, delete
sales-offerslist, get, create, create-v1, update, set-status, create-invoice
recurring-invoicescreate, list, get, list-client-addresses, send-indication-values
purchase-invoicescreate, create-pending, create-pending-xml, list, find, list-pending, get, delete, pay, report
inventorylist, list-locations, send, send-v1
paymentslist, find, list-types, create, create-purchase, create-offer, delete, list-income, list-expense, send-income, send-expense, send-prepayment, send-prepayment-vendor, send-settlement, import-statement, list-imports
glcreate, list, get, list-full
fixed-assetslist, list-locations, list-responsible-persons, send
taxeslist, create
customerslist, create, update, create-group, list-groups
vendorslist, create, update, update-v1, create-group, list-groups
accountslist
projectslist
cost-centerslist
dimensionslist, create, create-values
departmentslist
priceslist, get, send, list-discounts, send-discounts
unitslist, create
bankslist
financial-yearslist
itemslist, list-groups, create, create-group, update
1018 skills3 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
10
Star history of Elnora-AI/elnora-merit-aktiva on GitHub, a chart by star-history.com

More MCP servers from other plugins.

playwright

playwright

MCP

Drives a real browser so the agent can open pages, click, fill forms and read what actually rendered.

windmill13d18k
@windmill-labs@windmill-labsInstall MCP
pinchtab

pinchtab

MCP

Ships with pinchtab: High-performance browser automation bridge and multi-instance orchestrator with advanced stealth injection…

@pinchtab@pinchtabInstall MCP
open-computer-use

open-computer-use

MCP

Ships with open-computer-use: open-computer-use is an open-source Computer Use service wrapped as MCP. Any AI agent or MCP client…

@ifuryst@ifurystInstall MCP
atlas

atlas

MCP

Ships with babysitter: Enforce obedience on agentic workforces. Manage extremely complex workflows through deterministic,…

babysitter11d1.9k
@a5c-ai@a5c-aiInstall MCP

Questions about lhv.

Which coding agents can use lhv?
lhv works in any agent that reads an MCP config file: Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf. Each agent reads it from its own file; this page names the file for each one.
How do I add lhv to Claude Code?
Run these in order, one at a time. 1. In Claude Code: /plugin marketplace add Elnora-AI/elnora-merit-aktiva 2. In Claude Code: /plugin install merit-aktiva-workspace@elnora-merit-aktiva
Is lhv safe to install?
Low risk. Signals from public registries, not an audit.