merit-aktiva-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., "@merit-aktiva-mcplist sales invoices from the last 30 days"
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.
merit-aktiva-mcp
Open-source Model Context Protocol server for the
Merit Aktiva accounting API (Estonia; also serves
360 Księgowość in Poland via MERIT_BASE_URL).
It exposes customers, vendors, invoices, payments, ledger, reports, offers, recurring
invoices, inventory, fixed assets, and prices as merit_-prefixed MCP tools over
stdio, so AI assistants (Cursor, Claude Desktop, etc.) can work with a Merit
company without the hosted SaaS product.
Status: OSS stdio package is complete for GitLab issues M1–M6 (auth, reads, writes, extended domains). Hosted SaaS wiring is later GitLab work on
werkstatt.ee/e-financials-mcp. Bank import, settlements, expense/income/prepayments, and dimension/tax/unit mutations are deferred.
Endpoint → tool mapping and official-vs-seed quirks: docs/api-coverage.md.
Prerequisites
Node.js 20+ (see
package.jsonengines; nativefetch; CI uses Node 20 and 22).A Merit Aktiva company with Pro/Premium (API Settings is not on lower plans).
Merit has no sandbox. Use a free test company (Program Settings → API Settings) or a real company you control.
API credentials
Create keys as an admin in Merit Aktiva → Settings → API Settings:
Add an API client. Merit shows an Api ID and Api Key.
Copy them into
.envasMERIT_API_IDandMERIT_API_KEY(never commit.env).
Poland (360 Księgowość): set MERIT_BASE_URL=https://program.360ksiegowosc.pl.
Related MCP server: merit-aktiva-mcp
Quick start
git clone https://github.com/werkstatt-jasper/merit-aktiva-mcp.git
cd merit-aktiva-mcp
cp .env.example .env # set MERIT_API_ID / MERIT_API_KEY
npm install
npm run build
npm start # MCP server on stdioEnvironment
Copy .env.example to .env and fill in values. The server loads .env via
dotenv with quiet: true so the banner cannot corrupt MCP stdio. Never commit
.env (it is gitignored).
Variable | Required | Default | Description |
| yes | — | Api ID from Settings → API Settings |
| yes | — | Api Key (HMAC-SHA256 shared secret; never sent on the wire) |
| no |
| Poland: |
| no |
| Extra attempts on 429/5xx/network errors |
| no |
| Exponential backoff base delay |
| no |
| Outbound HTTP timeout |
| no |
| pino level; logs go to stderr only |
Structured logs go to stderr only. stdout is reserved for MCP JSON-RPC.
MCP host configuration
Point your MCP client at the built server (dist/index.js). Use an absolute path.
Cursor (~/.cursor/mcp.json or project .cursor/mcp.json):
{
"mcpServers": {
"merit-aktiva": {
"command": "node",
"args": ["/absolute/path/to/merit-aktiva-mcp/dist/index.js"],
"env": {
"MERIT_API_ID": "your_api_id",
"MERIT_API_KEY": "your_api_key"
}
}
}
}Claude Desktop — same mcpServers shape in claude_desktop_config.json
(macOS: ~/Library/Application Support/Claude/; Linux: ~/.config/Claude/;
Windows: %APPDATA%\Claude\).
If .env is populated and the working directory is the project root, npm start
picks up credentials without duplicating them in the MCP client env block.
Architecture
flowchart LR
subgraph host [MCP_host]
Client[Cursor_or_Claude]
end
subgraph mcp [merit_aktiva_mcp]
Server[stdio_MCP_server]
HttpClient[MeritClient]
end
subgraph merit [Merit_Aktiva]
API[aktiva.merit.ee]
end
Client <-->|stdio_JSON_RPC| Server
Server --> HttpClient
HttpClient -->|"POST HMAC query auth"| APIAuthentication
Merit signs every request with HMAC-SHA256 query parameters (apiId, UTC
timestamp as yyyyMMddHHmmss, signature):
Body is
JSON.stringifyof the payload (compact — pretty-print will not match the official signing vector).Signature is HMAC-SHA256 over
utf8(apiId + timestamp + rawBody), then URL-encoded on the query string.On 429 / 5xx retries the client must mint a fresh timestamp and signature (reusing the first signature fails). See
src/auth.tsandsrc/client.ts.
The Api Key never leaves the process. URLs logged on error have the query string stripped.
Dates and periods
Tool date arguments accept ISO
YYYY-MM-DDand are converted to Merit'syyyymmdd.List filters (
periodStart/periodEnd) are capped by Merit at 3 months, except recurring-invoice lists (max 180 days; period = next-invoice date).Offer and purchase-invoice payments send
PaymentDateasyyyyMMddHHmm(ISO date or datetime in, midnight if date-only).Paginated reports continue via
HasMore/Id4More→POST /api/v2/getmoredata(merit_get_customer_payments_reportdoes this automatically).
Destructive and send-external tools
These tools mutate the company or send mail. Descriptions start with DESTRUCTIVE or SENDS …:
merit_delete_sales_invoice,merit_delete_purchase_invoice,merit_delete_paymentmerit_email_sales_invoice(SENDS EMAIL)merit_send_sales_invoice_einvoice(SENDS E-INVOICE; receiver not capable →api-noeinv)
Sales invoices cannot be updated — delete and recreate. Credit invoice: negative
quantity and totalAmount.
Tools
Each tool POSTs to the Merit API. Required columns are MCP argument names (camelCase);
the client maps them to PascalCase wire fields. Full path matrix:
docs/api-coverage.md.
Customers
Tool | API | Required |
|
| — |
|
|
|
|
|
|
|
| — |
|
|
|
Vendors
Tool | API | Required |
|
| — |
|
|
|
|
|
|
|
| — |
|
|
|
Sales invoices
Tool | API | Required |
|
|
|
|
| — |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Sales offers
Tool | API | Required |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DocType: 1 = quote, 2 = order, 3 = prepayment. DocStatus: 1–7 (7 = canceled).
Payments
Tool | API | Required |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Purchases
Tool | API | Required |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GetPOrders is purchase orders waiting for approval, not the booked purchase-invoice list.
sendpurchinvoice books immediately (bypasses approval).
General ledger
Tool | API | Required |
|
| — |
|
|
|
|
|
|
|
|
|
|
|
|
Items
Tool | API | Required |
|
| — |
|
| — |
|
|
|
|
|
|
|
|
|
Reference data
Tool | API | Required |
|
| — |
|
| — |
|
| — |
|
| — |
|
| — |
|
| — |
|
| — |
|
| — |
Reports
Tool | API | Required |
|
| — |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Recurring invoices
Tool | API | Required |
|
|
|
|
|
|
|
|
|
|
| — |
|
|
|
Inventory
Tool | API | Required |
|
| — |
|
|
|
|
|
|
Type: 1 = in, 2 = out, 3 = between stocks.
Fixed assets
Tool | API | Required |
|
| — |
|
| — |
|
| — |
|
|
|
Prices and discounts
Tool | API | Required |
|
| — |
|
|
|
|
|
|
|
| — |
|
|
|
Development
npm run lint # Biome
npm run test:coverage # Vitest, 100% coverage thresholds on src/
npm run build # tsc
npm run test:integration # live API tests; skip cleanly without credentialsSee CONTRIBUTING.md for the pre-push checklist.
API reference: Merit AKTIVA Reference Manual
Acknowledgements
The endpoint map (paths, request-body fields, and behavioural quirks) was seeded from
roosa-dev/merit-aktiva-mcp
(src/server.ts ENDPOINTS table), used under the MIT License:
MIT License — Copyright (c) 2026 Roosa
This project is an independent implementation (typed schemas, retrying signed client, test suite) and is not affiliated with Merit Software or roosa-dev.
License
MIT — Copyright (c) 2026 Werkstatt OÜ
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
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
AI for Tally Prime and Tally ERP 9. Hosted MCP server to ask your accounts in any language.
Connect Exact Online to your AI assistant via MCP. Manage Exact Online with natural language.
Read-only NuMetric.work accounting & ERP data: statements, KPIs, reports, invoices, documents.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables full CRUD operations on 29 QuickBooks Online entity types and 11 financial reports via natural language, allowing users to manage customers, invoices, payments, and more through MCP-compatible clients.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceExposes ~60 tools for the Merit Aktiva accounting API, covering sales/purchase invoices, payments, customers, vendors, items, general ledger, offers, reference data, and reports with both read and write operations.17MIT
- AlicenseNot gradedqualityBmaintenanceA read-only MCP server for the NuMetric.work accounting/POS/ERP platform, exposing 38 tools to query live business data such as financial statements, invoices, taxes, projects, inventory, and documents. It enables AI assistants to answer from real accounting data without any create, edit, or delete capabilities.MIT
- FlicenseNot gradedqualityCmaintenanceEnables read-only access to company data across PostgreSQL, MongoDB Atlas, and flat files through MCP tools, allowing AI assistants to query and retrieve information via natural language.
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/werkstatt-jasper/merit-aktiva-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server