MCP server for AI assistants
eFaktúra exposes a remote MCP server(Model Context Protocol) so Claude, ChatGPT, Claude Code, Cursor or your own agent can work with your company's invoices, customers and expenses directly — no code required. Authorization is standard OAuth 2.1, access is always bound to one company and subject to the same permissions, limits and audit trail as the REST Agent API.
Connecting
| Client | Steps |
|---|---|
| Claude.ai | Settings → Connectors → Add custom connector → URL https://api.efaktura.sk/mcp |
| ChatGPT | Settings → Apps & connectors → Create → MCP server URL |
| Claude Code | claude mcp add --transport http efaktura https://api.efaktura.sk/mcp |
| Cursor / any MCP client | Streamable HTTP endpoint https://api.efaktura.sk/mcp |
The client sends you to the eFaktúra sign-in (e-mail + password, 2FA if enabled), then you choose the company and approve what the assistant may do. Reads are on by default, writes are opt-in. Revoke access any time in the app under Settings → Integrations → API keys (the connection carries an “Assistant” badge).
Technical parameters
| Parameter | Value |
|---|---|
| MCP endpoint | https://api.efaktura.sk/mcp (Streamable HTTP, POST) |
| Protocol | MCP 2026-07-28, plus 2025-06-18 stateless for older clients |
| Protected resource metadata | https://api.efaktura.sk/.well-known/oauth-protected-resource/mcp |
| Authorization server metadata | https://api.efaktura.sk/.well-known/oauth-authorization-server |
| Authorization | OAuth 2.1, authorization code + PKCE (S256), refresh token |
| Client registration | Dynamic Client Registration or Client ID Metadata Document |
| Access token | JWT (EdDSA), 1 h lifetime, audience = MCP endpoint, claim org_id |
| Rate limits and quotas | Same as the REST Agent API for the company's plan |
Scopes
The assistant receives the intersection of what you approved and what your role in the company allows. Identity scopes openid profile email offline_access only match the account and refresh the token.
| Scope | Allows |
|---|---|
| invoice:read | Read invoices and attachments; Peppol: status and delivery evidence, recipient lookup, XML preflight, received documents (detail, PDF, XML, acknowledge), event log; customer vehicles |
| invoice:create | Issue invoices (with an idempotency key) |
| invoice:update | Edit invoice content (items, dates, notes), change status (paid, cancelled, overdue), add and remove attachments |
| invoice:send | Send invoices to the Peppol network one by one or in batch (requires confirmation) and e-mail reminders |
| invoice:download | Download PDF and UBL XML of issued invoices |
| contact:read | Read customers and search the company register |
| contact:create | Create customers (with an idempotency key) |
| receipt:read | Read expenses, vendors, projects, statistics and the payment QR |
| receipt:create | Record expenses, upload documents with OCR, parse a payment QR, create vendors and projects |
| receipt:update | Edit expenses and projects, record payments, run OCR, bulk actions |
| receipt:approve | Approve and reject expenses |
| report:read | Monthly dashboard |
| bank:read | Bank accounts and account movements |
| inventory:read | Warehouses, stock levels, stock documents |
| inventory:write | Create and confirm stock documents |
| autopark:read | Fleet: vehicles, documents (MOT, emissions, vignettes), insurance, fines, deadlines, installment sales, vehicle register |
| autopark:write | Write vehicles, documents, insurance, fines and installments |
| contract:read | Contracts, their payments and totals |
| contract:create | Create contracts |
| contract:update | Edit contracts and generate payments |
Tools
The tools cover the whole Agent API — every module, reads and writes. The list shown in the client follows the granted scopes; names are stable (snake_case, English), descriptions are Slovak/English.
| Module | Tools |
|---|---|
| Invoices | list_invoices, get_invoice, get_invoice_payments, create_invoice, update_invoice, update_invoice_status, send_invoice_reminder, download_invoice_pdf, download_invoice_xml, list_invoice_attachments, add_invoice_attachment, delete_invoice_attachment |
| Peppol | send_invoice_peppol, send_invoices_peppol_batch, get_peppol_status, get_peppol_sent_evidence, lookup_peppol_recipient, validate_peppol_xml, get_peppol_submission, list_received_peppol_documents, get_received_peppol_document, get_received_peppol_evidence, acknowledge_received_peppol_document, download_received_peppol_pdf, download_received_peppol_xml, list_peppol_events |
| Customers, vendors, register | list_customers, get_customer, create_customer, update_customer, list_vendors, get_vendor, create_vendor, search_companies, get_company_by_ico |
| Expenses and projects | list_expenses, get_expense, create_expense, upload_expense_document, update_expense, approve_expense, reject_expense, mark_expense_paid, process_expense_ocr, bulk_update_expenses, scan_payment_qr, get_expense_payment_qr, get_expense_stats, list_projects, get_project, create_project, update_project |
| Dashboard and bank | get_dashboard_summary, list_bank_accounts, list_bank_movements |
| Inventory | list_warehouses, list_stock_levels, get_stock_level, list_stock_documents, get_stock_document, create_stock_document, confirm_stock_document |
| Vehicles and fleet | list_vehicles, get_vehicle, get_vehicle_by_plate, list_fleet_vehicles, create_fleet_vehicle, lookup_vehicle_register, list_vehicle_documents, create_vehicle_document, list_vehicle_fines, create_vehicle_fine, list_vehicle_insurances, create_vehicle_insurance, list_fleet_deadlines, list_installment_sales, get_installment_sale, create_installment_sale, add_installment_item, record_installment_payment |
| Contracts | list_contracts, get_contract, list_contract_payments, get_contract_stats, create_contract, update_contract, generate_contract_payments |
Downloaded files (PDF, XML) arrive as an embedded resource (PDF base64, XML as text) together with the file name and size. Lists are paginated (page/per_page, limit/offset or cursor depending on the endpoint). Write tools accept idempotency_key wherever the API supports it.
send_invoice_peppol without confirm: truereturns a preview only (number, recipient, amount) and sends nothing. Sending is irreversible and consumes the company's Peppol credit.Example prompts
List my overdue invoices and how many days late each one is.
Issue an invoice to Novák s.r.o. for 12 hours of consulting at €60 net, due in 14 days.
Check whether the company with IČO 36631124 is on Peppol and, if so, send invoice 2026-0142.
What did I spend on fuel in August 2026?
Download the PDF of invoice 2026-0142 and send it to me as an attachment.
Which documents are waiting for approval? Approve all from Slovnaft.
What moved on the company bank account last week, and what is still unmatched?
What expires in the fleet within 30 days (MOT, insurance, vignettes)?
How many units of product ABC-1 are in stock, and in which warehouse?Errors the assistant receives
| Situation | Tool response |
|---|---|
| Connection revoked | HTTP 401, error connection_revoked — connect the assistant again |
| Missing permission | isError with code FORBIDDEN / INSUFFICIENT_SCOPE naming the missing role |
| Document quota exhausted | isError with hint “upgrade the package under Settings → Subscription” |
| Rate limit exceeded | isError with retryAfterSeconds |
Privacy and data
The assistant only sees the company you selected and only within the approved scopes. Every call is written to the API audit log (the same table as API keys) and kept under the API-log retention policy. eFaktúra does not send data to AI model providers — data flows only to the client you connected. Tokens are bound to our endpoint (RFC 8707) and cannot be used elsewhere. Privacy policy: efaktura.sk/ochrana-osobnych-udajov.
Sandbox
Companies in sandbox mode (test Peppol) get a test-mode key: Peppol sending goes to the test network, never to production. Use it to rehearse prompts before going live.