idoklad-mcp
Click on "Deploy 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., "@idoklad-mcp Which of my iDoklad invoices are overdue?"
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.
idoklad-mcp
An unofficial MCP server for iDoklad, the Czech and Slovak online invoicing service. It lets Claude, Codex, Cursor and other AI assistants read and create invoices in your iDoklad account.
This project is not affiliated with or endorsed by iDoklad or Seyfor, a. s. 🇨🇿Návod v češtině
Early development (v0.4). Tools and their inputs may still change. See the roadmap.
What you can ask
"Which invoices are overdue?"
"How much has ACME paid us this year?"
"Download the PDF of the last invoice for Globex."
"Which received invoices haven't we paid yet?"
"Kdo mi dluží nejvíc?" / "Jak se mi letos daří oproti loňsku?"
"Kolik mi zbývá do povinné registrace k DPH?"
"Create an invoice for ACME s.r.o.: 10 hours of consulting at 1,500 CZK, due in 14 days." (needs write mode)
"Invoice Globex like last month, but for 42 hours." (copies currency, VAT and language from the previous invoice)
"Mark invoice 20260018 as paid today."
"Send payment reminders for all overdue invoices."
"Issue a credit note for invoice 20260015, the client returned 2 of the 10 licences."
Related MCP server: SuperFaktura MCP Server
Requirements
An iDoklad plan that includes API access: Oblíbený (Popular) or Prémiový (Premium). The Free and Basic plans have no API.
Node.js 22 or newer.
An MCP client: Claude Desktop, Claude Code, Codex, Cursor, VS Code or similar.
Setup
1. Get your credentials
You need three values. They take about five minutes to get.
Client ID and Client Secret, from iDoklad:
Sign in to app.idoklad.cz.
Go to Nastavení (Settings) → API.
Copy the Client ID and Client Secret.
These belong to one company (agenda) and one user.
Application ID, from the iDoklad developer portal:
Create an account at developer.idoklad.cz.
Under Nová aplikace, enter any name and set Flow to ClientCredentials. Then click Uložit.
Copy the new app's Client Id from the list. That value is your Application ID.
The appmust use the ClientCredentials flow. With an AuthorizationCode app, iDoklad rejects the login with Invalid parameter application_id.
2. Add the server to your AI client
Replace the ... placeholders with your three values.
claude mcp add idoklad \
-e IDOKLAD_CLIENT_ID=... \
-e IDOKLAD_CLIENT_SECRET=... \
-e IDOKLAD_APPLICATION_ID=... \
-- npx -y idoklad-mcpDownload the latest
idoklad-mcp-<version>.mcpbfrom Releases.Double-click the file, or drag it into Claude Desktop → Settings → Extensions.
Click Install, then fill in your Client ID, Client Secret and Application ID.
The extension is read-only by default. You can switch that off in its settings.
Open Settings → Developer → Edit Config and add:
{
"mcpServers": {
"idoklad": {
"command": "npx",
"args": ["-y", "idoklad-mcp"],
"env": {
"IDOKLAD_CLIENT_ID": "...",
"IDOKLAD_CLIENT_SECRET": "...",
"IDOKLAD_APPLICATION_ID": "..."
}
}
}
}Restart Claude Desktop afterwards.
Add to ~/.codex/config.toml:
[mcp_servers.idoklad]
command = "npx"
args = ["-y", "idoklad-mcp"]
[mcp_servers.idoklad.env]
IDOKLAD_CLIENT_ID = "..."
IDOKLAD_CLIENT_SECRET = "..."
IDOKLAD_APPLICATION_ID = "..."Use the same command, args and env values as in the Claude Desktop example, in your client's MCP settings.
3. Try it
Ask your assistant "Which of my iDoklad invoices are unpaid?"
Configuration
Variable | Required | Default | Description |
| yes | From iDoklad → Settings → API | |
| yes | From iDoklad → Settings → API | |
| yes | The Client Id of your ClientCredentials app on developer.idoklad.cz | |
| no |
| Set to |
| no |
| Folder where downloaded PDFs are saved |
To use several companies, add the server once per company under different names (for example idoklad-firma-a and idoklad-firma-b), each with that company's credentials.
Read-only by default
Out of the box, the server can only read your data. To let the assistant create or change documents, set:
IDOKLAD_READ_ONLY=falseWrite tools are marked as such, so clients can ask you to confirm before running them.
Tools
Documents: issued invoices, proforma invoices, credit notes, received invoices.
Tool | Mode | What it does |
| read | List issued invoices (vydané faktury), newest first. Filter by unpaid, paid, partly paid or overdue, customer, issue date or number. |
| read | Same for proforma invoices (zálohové faktury). |
| read | Same for credit notes (dobropisy). |
| read | Same for received invoices (přijaté faktury), filtered by supplier. |
| read | Full detail of one document: items, partner and totals. |
| read | Save a document's PDF to your Downloads folder, optionally in another language or with payments. |
| write | Create an invoice from your default settings, or copy a previous invoice's settings. Supports currency (exchange rate filled in automatically), language, VAT rate and due date. |
| write | Same for proforma invoices (zálohové faktury). |
| write | Create the final invoice from a paid proforma (vyúčtování zálohy). |
| write | Credit a whole invoice or selected items, with a reason. It can also settle the credit note against the invoice. |
| write | Record full payment of an invoice, proforma or received invoice. |
| write | Remove payments, so the document is unpaid again. |
| write | Email an invoice, proforma or credit note through iDoklad, using your iDoklad email template. |
| write | Email an overdue payment reminder (upomínka) using your iDoklad reminder template. |
| write | Email a customer a confirmation that their payment arrived. |
Business overview
Tool | Mode | What it does |
| read | Income and costs by month, quarter or year, this year against last year, overdue amounts by age, VAT for the period, progress toward the VAT registration limit, and document counts. |
| read | Biggest customers, or biggest debtors. |
| read | How a customer pays: invoices, paid, unpaid and late. |
Contacts and price list
Tool | Mode | What it does |
| read | Search contacts by name, IČO, DIČ or email. |
| read | Full detail of one contact. |
| write | Create a customer or supplier. |
| read | Search the price list (ceník) by name or code. |
Everything else
Tool | Mode | What it does |
| read | Currencies, countries, VAT rates, payment options, your bank accounts, numeric sequences and other lists. |
| read | Search the full iDoklad API reference, which is bundled with the server. |
| read / write | Call any iDoklad endpoint directly, e.g. bank statements, recurring invoices or stock. In read-only mode it only allows GET. |
Privacy and security
The server runs on your computer. Your credentials stay in your local client configuration and are only sent to iDoklad.
Data the assistant reads from iDoklad, such as invoices and contacts, is passed to the AI model you use, just like anything else you share in the chat.
Treat your Client Secret like a password. Never commit it or paste it into a chat. To revoke it, delete it in iDoklad → Settings → API.
Troubleshooting
Message | Fix |
| One of the three credentials is not set in your client configuration. |
| Your developer portal app doesn't use the ClientCredentials flow, or you copied the wrong value. Use the app's Client Id. |
| Check the Client ID and Secret in iDoklad → Settings → API. They may have been regenerated. |
| Your iDoklad plan doesn't include the API, or your subscription has expired. |
| You've hit iDoklad's rate limit: 200 requests per minute, and a monthly quota that depends on your plan. The server retries on its own; wait and try again. |
Roadmap
Issued invoices: list, detail, create
Currency for new invoices, and copying a previous invoice
Proforma invoices, credit notes, received invoices
Contacts and price list items
Payments (mark as paid or unpaid)
PDF download and sending documents by email
Generic tools: call any iDoklad endpoint, search the API docs
Create proforma invoices and credit notes, and invoices from paid proformas
Business overview: revenue, debtors, VAT, VAT registration limit
Payment reminders and payment confirmations
Partial payments
Supplier invoices from a PDF (iDoklad inbox)
Bank matching, editing and deleting documents, recurring invoices
One-click install for Claude Desktop, and a listing in the MCP Registry
Hosted version with iDoklad login (OAuth) for claude.ai and ChatGPT
Ideas and requests are welcome in issues.
Development
git clone https://github.com/honzsik/idoklad-mcp.git
cd idoklad-mcp
npm install
cp .env.example .env # add your credentialsCommand | What it does |
| Unit tests against a fake API, with no network calls |
| Read-only checks against your real iDoklad account (uses |
| Calls the read tools through a real MCP connection |
| Checks that Claude picks the right tools for 30 Czech and English requests (see below) |
| Opens the tools in MCP Inspector |
| Compiles to |
| Refreshes the bundled API reference from iDoklad's docs |
| Builds the Claude Desktop extension ( |
Evals
evals/ checks whether Claude picks the right tool, with the right inputs, for real requests such as "Které faktury jsou po splatnosti?" or "Invoice Globex like last time, but for 42 hours". Each case runs as a short conversation against a made-up iDoklad company, so no real data is touched. It also checks that Claude doesn't send emails or change documents unless asked.
npm run evals # all cases
npm run evals -- --only overdue-cs,mark-paid-cs
npm run evals -- --repeat 3 # models vary; run each case 3 timesIt needs ANTHROPIC_API_KEY in .env from an account at console.anthropic.com with prepaid API credit. A Claude subscription doesn't include API credit. Each full run costs roughly $1–2. Run it after changing tool names, descriptions or inputs.
If you open this folder in Claude Code, it picks up .mcp.json and runs the server from source as idoklad-dev.
For anything that writes data, use a separate test company in iDoklad, so test invoices don't use up your real invoice numbers.
The code is in src/:
client.ts: the iDoklad API client. It handles login, token renewal and retries.filter.ts: the iDoklad filter syntax.tools/: the MCP tools.
Pull requests are welcome. Please run npm run typecheck && npm test before opening one.
Releasing
Pushing a version tag runs release.yml. It publishes to npm, creates a GitHub release with the Claude Desktop extension attached, and publishes to the MCP Registry:
npm version minor # or patch / major: updates package.json and creates a tag
git push --follow-tagsBefore tagging, move the changes in CHANGELOG.md under the new version.
License
MIT © Jan Vítek
Česky
idoklad-mcp je neoficiální MCP server pro iDoklad. Umožní AI asistentům (Claude, Codex, Cursor a dalším) číst a vystavovat faktury ve vašem iDokladu. Projekt není spojen se společností Seyfor, a. s.
Co budete potřebovat
Tarif iDokladu s přístupem k API: Oblíbený nebo Prémiový. Tarify Zdarma a Základní API nemají.
Node.js ve verzi 22 nebo novější.
Postup
V iDokladu otevřete Nastavení → API a zkopírujte Client ID a Client Secret.
Na developer.idoklad.cz si založte účet a vytvořte novou aplikaci s Flow: ClientCredentials. Její Client Id použijete jako
IDOKLAD_APPLICATION_ID.Server přidejte do svého AI klienta podle návodu výše.
Zeptejte se asistenta: „Které faktury v iDokladu jsou po splatnosti?"
Ve výchozím stavu server data jen čte. Vystavování faktur zapnete proměnnou IDOKLAD_READ_ONLY=false.
Pokud iDoklad hlásí Invalid parameter application_id, vytvořili jste aplikaci s jiným flow než ClientCredentials.
Available Tools
18 toolsget_business_statsGet business statisticsARead-only
Business overview calculated by iDoklad. All amounts are in the company's home currency (usually CZK). Reports:
revenue_by_period: issued (income) and received (costs) invoice totals per month, quarter or year, with paid/unpaid split.
year_comparison: this year's totals against last year's.
overdue_aging: overdue amounts by age (1–30, 31–60, 61–90, 90+ days), for receivables (customers owe you) and payables (you owe suppliers).
vat: VAT on output and input for the current and previous VAT period (VAT payers).
vat_registration_limit: this calendar year's sales against the CZ VAT registration limit (for companies not yet registered for VAT).
document_counts: how many invoices, contacts and other documents the company has.
Inputs: report (required), period, periods.
get_codebookGet codebookARead-only
Get an iDoklad codebook (číselník) or company setting list: currencies, countries, VAT rates (current only), VAT codes, payment options, your bank accounts, numeric sequences, constant symbols or tags. Use it to translate IDs in documents.
Inputs: codebook (required).
get_contactGet contactARead-only
Get full detail of one contact by ID: address, IČO, DIČ, bank account, default due days.
Inputs: id (required).
get_contact_statsGet customer payment statisticsBRead-only
How a customer pays: number of invoices, total invoiced, how many are paid, unpaid and were paid after the due date.
Inputs: contactId (required).
get_credit_noteGet credit noteARead-only
Get full detail of one credit note (opravný daňový doklad / dobropis) by ID, including items, partner and prices.
Inputs: id (required).
get_document_pdfDownload document PDFAIdempotent
Download the PDF of an invoice, proforma, credit note or received invoice and save it to a local folder. Returns the file path.
Inputs: id (required), documentType (required), language, withPayments.
get_issued_invoiceGet issued invoiceARead-only
Get full detail of one issued invoice (vydaná faktura) by ID, including items, partner and prices.
Inputs: id (required).
get_proforma_invoiceGet proforma invoiceARead-only
Get full detail of one proforma invoice (zálohová faktura) by ID, including items, partner and prices.
Inputs: id (required).
get_received_invoiceGet received invoiceARead-only
Get full detail of one received invoice (přijatá faktura) by ID, including items, partner and prices.
Inputs: id (required).
get_top_partnersGet top customers or debtorsARead-only
Biggest customers by total invoiced, or biggest debtors by unpaid amount (who owes you the most). Amounts in home currency.
Inputs: kind (required), count.
idoklad_api_requestCall iDoklad APIARead-only
Call any iDoklad API v3 endpoint directly (find it with search_api_docs first). Path is relative, e.g. 'BankStatements'. List endpoints accept filter, sort, page and pagesize query parameters; filter syntax: (FieldopvalueandFieldopvalue) with ops eq, !eq, lt, lte, gt, gte, ct, !ct. Read-only mode: only GET is allowed.
Inputs: path (required), method (required), body, query.
list_contactsList contactsARead-only
Search contacts (kontakty: customers and suppliers) by company name, IČO, DIČ or email. Without filters, lists all contacts.
Inputs: dic, ico, name, page, +2 more.
list_credit_notesList credit notesARead-only
List credit note (opravný daňový doklad / dobropis) documents, newest first. Filter by payment status, overdue, customer, issue date range or document number. Returns a compact summary per document; use get_credit_note for full detail.
Inputs: page, status, issuedTo, pageSize, +3 more.
list_issued_invoicesList issued invoicesARead-only
List issued invoice (vydaná faktura) documents, newest first. Filter by payment status, overdue, customer, issue date range or document number. Returns a compact summary per document; use get_issued_invoice for full detail.
Inputs: page, status, issuedTo, pageSize, +3 more.
list_price_list_itemsList price list itemsARead-only
Search the price list (ceník) by item name or code. Use the prices when creating invoices.
Inputs: code, name, page, pageSize.
list_proforma_invoicesList proforma invoicesARead-only
List proforma invoice (zálohová faktura) documents, newest first. Filter by payment status, overdue, customer, issue date range or document number. Returns a compact summary per document; use get_proforma_invoice for full detail.
Inputs: page, status, issuedTo, pageSize, +3 more.
list_received_invoicesList received invoicesARead-only
List received invoice (přijatá faktura) documents, newest first. Filter by payment status, overdue, supplier, issue date range or document number. Returns a compact summary per document; use get_received_invoice for full detail.
Inputs: page, status, issuedTo, pageSize, +3 more.
search_api_docsSearch iDoklad API docsARead-only
Search the iDoklad API v3 reference for endpoints not covered by other tools (bank statements, cash vouchers, recurring invoices, sales orders, stock, webhooks…). Returns method, path, parameters (* = required). Then call idoklad_api_request.
Inputs: query (required), limit.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 18 tools
Each document type has a clear list/get pair (received invoices, issued invoices, proforma, credit notes) and the contacts/price list/codebook tools target distinct resources. The only mild overlap is among the analytics trio (get_business_stats, get_top_partners, get_contact_stats), but their descriptions carve out separate report scopes, and search_api_docs vs idoklad_api_request are explicitly sequenced as a discovery/call pair.
The dominant pattern is consistent verb_noun snake_case (list_*, get_*), applied across most of the surface. Minor deviations are get_document_pdf (noun object rather than a resource) and idoklad_api_request (namespaced noun), but both remain readable and predictable.
18 tools is slightly above the ideal band but justified: four document families each need a list and get, plus contacts, price list, PDF export, stats, codebook, and a generic API escape hatch. No tool appears redundant, though the four parallel list/get pairs make the surface feel heavier than strictly necessary.
The read-only domain (invoices, contacts, price list, statistics, codebooks, PDF export) is well covered, and the search_api_docs + idoklad_api_request pair provides an escape hatch for bank statements, cash vouchers, stock and other endpoints. Minor gaps: no get_price_list_item detail tool, and no issued/received document creation or update (consistent with the stated read-only design).
Maintenance
Related MCP Connectors
Create EU-compliant invoices, manage clients and download PDFs from your AI assistant.
Invoicing tools for AI assistants: clients, draft invoices with computed tax, and email sending.
Create, send and track invoices from a conversation in Claude, ChatGPT or any MCP client that supports OAuth. Draft an invoice from one sentence or from last month's invoice for the same client, finalize it, email it to your client and send payment reminders for overdue ones. See revenue by month and by client, download PDFs and e-invoices (ZUGFeRD, XRechnung), and export DATEV packages for your tax advisor. Invoices follow the tax rules of 25 countries, including reverse charge and the small-business VAT exemption. New invoices are drafts, and nothing is emailed until you ask. Pay per invoice with no subscription: the first invoice is free.
Malaysian SME accounting, e-Invoice and payroll for your AI. 77 tools; writes are approved drafts.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with the Polish National e-Invoice System (KSeF) for authentication, invoice creation, validation, and retrieval via 30 tools.326MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with the SuperFaktura invoicing system for managing invoices, clients, and expenses via natural language.4Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to issue Italian FatturaPA electronic invoices and transmit them to the SdI via Invoicetronic. Supports creating and querying invoices with Italian VAT rates.MIT
- FlicenseNot gradedqualityCmaintenanceProvides read-only access to inv.bg invoicing data, enabling users to list clients and invoices and retrieve full document details and line items through natural language in Claude.1-