icount-mcp
This server lets an AI agent connect to an iCount Israeli accounting account to manage documents and clients via MCP.
Verify the API token/connection with
icount_test_connection.Create documents (invoices, receipts, orders, offers, deliveries, etc.) with line items, client details, payments, and optional emailing.
Search documents by type, status, client, date range, or number; fetch full document details.
Cancel, close/mark-paid, and convert documents between types; get printable PDF URLs.
Create, update, fetch, list, and permanently delete client records.
List a client's open/unpaid documents (outstanding balance).
Supports read/write annotations and irreversible-operation warnings so MCP clients can prompt appropriately.
Provides tools for creating and managing iCount accounting documents and clients, enabling AI agents to interact with iCount's API for invoicing, receipts, orders, offers, and client management.
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., "@icount-mcp Create an invoice for a new client named ACME for 1,500 ILS"
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.
icount-mcp
An MCP server for iCount — Israeli cloud accounting/invoicing software. Lets any MCP-compatible AI agent (Claude Code, Claude Desktop, Cursor, Windsurf, n8n, etc.) create and manage iCount documents (invoices, receipts, orders, offers...) and clients directly from a conversation.
Runs as a local stdio server — no hosting, no OAuth flow, just a static API token.
Unofficial, community-built integration. Not affiliated with or endorsed by iCount. You are responsible for the documents and data this creates in your own iCount account.
Keep your MCP client's tool-approval prompts on for this server. It acts on real financial records, and
icount_cancel_document/icount_delete_clientare irreversible. See SECURITY.md.
Requirements
Node.js 18+
An iCount account with an API Token (not your login user/pass — see below)
Related MCP server: FreeAgent MCP Server
Getting your API token
Log in to your iCount account.
Go to אזור אישי → הגדרות → API (Personal area → Settings → API).
Create a new API Token.
Copy it — you'll need it below. It looks like
API3E8-XXXXXXXX-XXXXXXXX-XXXXXXXXXXXXXXXX.
This is iCount API v3, which authenticates with a single static Bearer token — unlike the legacy
create_doc.php API, which used cid/user/pass. Only the token works with this server.
Install
Nothing to clone or install — npx fetches and runs it on demand. Just add it to your MCP client
config with your token:
{
"mcpServers": {
"icount": {
"command": "npx",
"args": ["-y", "icount-mcp"],
"env": {
"ICOUNT_API_TOKEN": "API3E8-XXXXXXXX-XXXXXXXX-XXXXXXXXXXXXXXXX"
}
}
}
}That file is .mcp.json in your project (Claude Code), claude_desktop_config.json (Claude Desktop),
~/.cursor/mcp.json (Cursor), or the equivalent for your client. On Windows, some clients need
"command": "npx.cmd".
Claude Code
claude mcp add icount --env ICOUNT_API_TOKEN=API3E8-... -- npx -y icount-mcpPin a version
npx -y icount-mcp always runs the latest published version. To pin:
{ "command": "npx", "args": ["-y", "icount-mcp@0.3.1"] }Or install it once, globally, and skip the npx download entirely:
npm install -g icount-mcp{ "command": "icount-mcp", "env": { "ICOUNT_API_TOKEN": "API3E8-..." } }From source (development)
git clone https://github.com/davidkotler/icount-mcp.git
cd icount-mcp
npm install
cp .env.example .env # then paste your token into it{ "command": "node", "args": ["/absolute/path/to/icount-mcp/src/index.js"] }npm test # offline: no iCount account or network neededThe token can come from either the env block or a .env file — the env block wins when both are
set. A .env is looked for next to the package and in the working directory; with npx you'll want
the env block.
Configuration
Variable | Required | Default | What it does |
| yes | — | Your iCount API v3 token |
| no |
| Per-request timeout, clamped to 1s–300s |
Verify it's working
Ask your agent to "test the icount connection" — it should call icount_test_connection and get back
basic account/API info.
Tools
Documents
Tool | What it does | |
| Verify the token works | read |
| Create an invoice, receipt, order, offer, etc. | write |
| Search documents by type, status, client, date range (needs ≥1 filter) | read |
| Fetch full details of one document | read |
| Cancel a document (iCount has no hard delete) | ⚠️ irreversible |
| Mark a document closed/paid | write |
| Convert a document to another type (e.g. offer → order) | write |
| Get a printable/viewable PDF URL | read |
Clients
Tool | What it does | |
| Create a client record directly (no document) | write |
| Update an existing client's fields | write |
| Fetch a client's details | read |
| List clients (bounded — returns | read |
| Really delete a client — no cancel-only restriction here | ⚠️ irreversible |
| One client's outstanding/unpaid documents (needs a client id/email/name) | read |
Every tool carries MCP tool annotations
(readOnlyHint / destructiveHint / idempotentHint / openWorldHint), so a well-behaved client
knows which calls are safe to run without asking and which need your confirmation.
Document types (doctype): invoice, invrec (חשבונית מס-קבלה), receipt, refund, order, offer,
delivery, deal.
⚠️ Important: real tax documents need a payment breakdown
invoice, invrec, receipt, and refund are real fiscal documents. Creating them without a
payment object will fail with an opaque "יצירת המסמך נכשלה" ("document creation failed") error —
even though the client record may already have been created as a side effect before validation failed.
{
"doctype": "receipt",
"clientName": "Some Client",
"items": [{ "description": "Service", "quantity": 1, "unitprice": 100 }],
"payment": { "method": "cash", "sum": 100 }
}payment.method is one of cash, creditcard, cheque, banktransfer. For testing purposes, prefer
order or offer doctypes instead — they're non-tax documents with no payment requirement, and (like
all iCount documents) can't be hard-deleted, only cancelled.
Search quirks
iCount's doc/search has two behaviours worth knowing about, both verified against a live account:
At least one filter is required. An unfiltered search is rejected; pass a
doctype, client,docnum, or date range. This server catches that locally, without a wasted round trip.A very broad date range can be refused with
too_many_results. Narrow the range or add filters —maxResultsdoes not raise iCount's server-side limit.
A search that legitimately matches nothing returns { "docs": [], "matched": 0 }. iCount itself
reports that case as a failure; this server normalises it to an empty result so your agent doesn't
conclude something broke.
Development notes / how this was verified
iCount's public documentation (apiv3.icount.co.il/docs/iCount/) is a JS-rendered Postman page that
isn't easy to scrape. The endpoint map used here (/api/v3.php/<module>/<method>) was cross-checked
against the open-source n8n-nodes-icount node (MIT
licensed) and then empirically verified against a live iCount account: every tool in this server was
exercised end-to-end (including a full create → update → delete client lifecycle, and a real receipt
creation + cancellation) before being shipped.
Security
Short version: this is a local stdio server that talks only to a hardcoded https://api.icount.co.il,
never logs your token, redacts it from error messages, times out every request, and keeps stdout
reserved for JSON-RPC. It adds no confirmation step of its own — the model can call every tool, so
leave your client's approval prompts on. Full threat model in SECURITY.md.
Roadmap / not yet implemented
Client contacts (
client/get_contacts,add_contact,update_contact,delete_contact)Client upsert-by-VAT/email (
client/find+client/create_or_update)doc/update_doc_income_type,doc/list(superseded here by the more flexibledoc/search)Expenses, suppliers, inventory, CRM, and time-tracking modules (separate iCount API areas entirely)
Contributing
PRs welcome — see CONTRIBUTING.md for setup, how to verify a change against a
live account without wrecking it, and what CI enforces. main is protected: fork, branch, and open
a PR. Please also read the Code of Conduct.
Security issues go to a private advisory, never a public issue.
License
MIT
Available Tools
14 toolsicount_cancel_documentCancel documentADestructive
Cancel an existing document (iCount has no hard delete — this is the only way to void one). Irreversible: confirm the document number with the user before calling.
Inputs: docnum (required), doctype (required), reason, refundCc.
icount_close_documentClose documentA
Mark a document as closed/paid, optionally linking it to base documents it settles.
Inputs: docnum (required), doctype (required), basedOn.
icount_convert_documentConvert documentA
Convert a document to another type (e.g. offer -> order). Omit conversionType to first list the valid conversion options for this document; pass one of those values back in conversionType to perform the actual conversion.
Inputs: docnum (required), doctype (required), conversionType.
icount_create_clientCreate clientA
Create a new client/recipient record directly, without also creating a document.
Inputs: name (required), city, email, notes, +6 more.
icount_create_documentCreate documentA
Create a document (invoice, receipt, order, offer, etc.) in iCount. Prefer non-tax types (order/offer) for testing since iCount has no hard delete, only cancel. Real tax documents (receipt/invrec) require a payment breakdown or iCount will reject them.
Inputs: items (required), doctype (required), lang, dueDate, +12 more.
icount_delete_clientDelete clientADestructive
Permanently delete a client record. Unlike documents, this is a real, irreversible delete — confirm with the user first, and prefer it only for clients with no associated documents.
Inputs: clientId (required).
icount_get_clientGet clientARead-onlyIdempotent
Fetch full details of a single client by id.
Inputs: clientId (required).
icount_get_client_open_docsGet client open documentsARead-onlyIdempotent
List one client's open (unpaid/unsettled) documents — their outstanding balance. Requires a client: pass clientId (preferred), email, or clientName. There is no all-clients mode; for that, use icount_search_documents with status 0.
Inputs: email, doctype, clientId, getItems, +1 more.
icount_get_documentGet documentARead-onlyIdempotent
Fetch full details of a single existing document by type and number.
Inputs: docnum (required), doctype (required), getItems, getPdfLink, +1 more.
icount_get_document_urlGet document PDF URLARead-onlyIdempotent
Get a viewable/printable URL (PDF) for an existing document.
Inputs: docnum (required), doctype (required), lang, docLang, +3 more.
icount_list_clientsList clientsARead-onlyIdempotent
List clients in the account. Returns { total, returned, clients } so you can tell when the list was truncated.
Inputs: maxResults, detailLevel.
icount_search_documentsSearch documentsARead-onlyIdempotent
Search existing iCount documents by type, status, client, date range, or document number. At least one filter is required. A search that matches nothing returns { docs: [], matched: 0 } — that is a normal empty result, not an error. A very broad date range can be rejected as too_many_results; narrow it rather than raising maxResults, which does not lift that limit.
Inputs: vatId, docnum, offset, status, +10 more.
icount_test_connectionTest iCount connectionARead-onlyIdempotent
Verify the configured iCount API token works by fetching basic app/account info.
Inputs: no named parameters.
icount_update_clientUpdate clientAIdempotent
Update fields on an existing client. Only fields provided are changed.
Inputs: clientId (required), city, name, email, +7 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Each tool targets a distinct resource and action, cleanly separating document operations from client operations and from connection testing. The only near-overlapping pair, get_client_open_docs and search_documents, is explicitly differentiated in the descriptions.
All tools share the icount_ prefix and follow a verb_noun snake_case pattern: create_document, get_client, list_clients, cancel_document. The compound get_client_open_docs is slightly longer but still fits the same predictable naming convention.
14 tools is well within the appropriate range for a domain covering documents and clients. Every tool has a clear purpose, and there are no apparent redundant or filler tools.
Client CRUD is fully covered, and the document lifecycle is strong with create, get, search, cancel, close, convert, URL fetching, and open-document lookup. Minor gaps exist: there is no document update operation, and no unfiltered list-all-documents endpoint, though cancel/recreate and filtered search provide reasonable workarounds.
Maintenance
Related MCP Connectors
Connect any AI agent to 1,000+ apps and 27,000+ actions through one remote MCP server (OAuth).
Automate 1,000+ services from any MCP-compatible AI agent: build Applets, run actions and queries.
Bokio MCP server for ChatGPT, Claude and any AI agent: create invoice, send invoice, upload receipt, create journal entry and list unpaid invoices in your own Bokio account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to Bokio yourself; Cotlet does not store your password and you need no Bokio API key. About the official Bokio API: Yes, Bokio has a public REST API for invoices, customers, journal entries, uploads and supplier invoices (checked 14 Oct 2026), but it depends on your price plan and on the kind of integration: a private integration token works for one company only, and a tool that serves several companies must be registered as a public integration with OAuth 2.0. Bokio publishes no MCP server of its own. Setup and FAQ: https://cotlet.dev/integrations/bokio-api-mcp-server
Számlázz.hu MCP server for ChatGPT, Claude and any AI agent: issue invoice, cancel invoice, issue receipt, record payment and get invoice PDF in your own Számlázz.hu account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to Számlázz.hu yourself; Cotlet does not store your password and you need no Számlázz.hu API key. About the official Számlázz.hu API: Yes. Számlázz.hu has an official API called Számla Agent, in operation since 2010, that issues, reverses and queries invoices and records payments over HTTP with XML (checked 14 Oct 2026). Setup and FAQ: https://cotlet.dev/integrations/szamlazz-hu-api-mcp-server
Related MCP Servers
- FlicenseBqualityDmaintenanceMCP server for DACH accounting automation. Connect AI assistants to sevDesk and Lexoffice — create invoices, manage contacts, handle bookings and vouchers for German-speaking businesses.1559 npm-
- AlicenseNot gradedqualityCmaintenanceMCP server for the FreeAgent accounting API, enabling LLMs to securely access and manage accounting data including contacts, invoices, bills, bank transactions, and more.5 npm1MIT
- AlicenseAqualityCmaintenanceMCP server for creating and fiscalizing invoices via solo.com.hr API. Enables AI agents to generate invoices, retrieve invoice details, list invoices, and check next invoice number.4MIT
- AlicenseAqualityBmaintenanceConnects Claude Desktop, Claude Code, and other MCP-compatible clients to cloud accounting and GST billing records, enabling GST-compliant invoice creation, ledger and voucher management, balance queries, and real-time financial reporting through natural language with role-based tenant isolation.2238 npmMIT