Last time I wrote about how an AI agent found an anomaly in sales at our client. Then the agent read data from ERPJS — statistics, invoices, GP. These are read operations: safe, with no side effects.
This week we made the next step — write operations through MCP. The same client, the same Telegram bot, but now the agent creates documents in ERPJS. At the moment I was writing this, I didn’t fully understand what would come of it. What came out was: one message → three ready documents in the system in 30 seconds.
This post is about a specific dialog that happened on May 3, 2026. Real client, real tax expenses, real documents in the ERP. And why this isn’t “automation of routine tasks” in the classic sense.
Context: a sole proprietor paying three monthly taxes
The client is the same small B2B distributor from the previous case. The owner has a separate sole proprietorship (ФОП) alongside the main company — common for many Ukrainian entrepreneurs. The ФОП pays three fixed taxes monthly:
- ВЗ — military levy
- ЄП ФОП — single tax for sole proprietors
- ЄСВ ФОП — unified social contribution for sole proprietors
In ERPJS, these are three expense documents per month. End of month — duplicate the documents for next month, adjust the sums (rates can change). Previously, done by hand: open April’s ВЗ document → “Make copy” → fix the date to May → fix the sum. Same with ЄП. Same with ЄСВ. 5-7 minutes, 90% routine clicking.
Round 1: the owner’s request
Owner, 09:56:
“Find 3 expenses: ВЗ, Single tax, ЄСВ. And make duplicates for May — with changed amounts: 900, 1730, 2000”
One message. No template, no specific function call, no document numbers. Just a description of the task in language the owner would use to explain it to a colleague.
Round 2: reconnaissance — the agent finds 3 existing documents
Agent: Found in April 2026:
- 🔍 №1432 — ВЗ ФОП · 750 UAH · April 2026
- 🔍 №1438 — Single tax ФОП · 1,580 UAH · April 2026
- 🔍 №1444 — ЄСВ ФОП · 1,800 UAH · April 2026
Create May duplicates with amounts 900, 1730, 2000 UAH?
The agent parsed the request itself: “ВЗ” → found a document of type “Military levy ФОП”, “Single tax” → found “ЄП ФОП”, “ЄСВ” → found “ЄСВ ФОП”. No mapping was programmed. The agent knows the ERPJS register schema and can search by document type + description + counterparty.
Note: the agent didn’t immediately rush to create. It showed what it found and asked for confirmation. This is the principled moment — more on it below.
Round 3: creation — 3 new documents as drafts
Owner: Yes
Agent: Done. Created 3 documents as drafts:
- ✅ №1545 — ВЗ ФОП · May 2026 · 900 UAH · Draft
- ✅ №1546 — Single tax ФОП · May 2026 · 1,730 UAH · Draft
- ✅ №1547 — ЄСВ ФОП · May 2026 · 2,000 UAH · Draft
Documents are not posted automatically — review and confirm in the system.
From “Yes” to “Done” — about 30 seconds. Three documents in the system, with updated amounts, with updated month, with correct references to counterparties and expense items. The owner opens ERPJS, sees three drafts, clicks “OK” on each — they get posted. Or wants to change one — clicks “Cancel”, the draft is deleted.
Why we chose this UX: drafts + confirmation
This is the principled part of the case. The accents matter.
Technically MCP imposes no such limit on write operations. The agent could create “posted” documents directly, with no draft status and no owner confirmation. It’s a UX choice on our part, not a protocol constraint.
Our default: the agent creates documents in “Draft” status, the owner confirms with one click. Why?
Because trust in an AI agent inside a real ERP is built by observation. The owner sees what the agent created, how it interpreted the request, what fields it filled. After a week or two — habit forms, drafts get skimmed. After a month, the owner can enable auto-posting for routine document types (e.g. monthly ФОП taxes). It’s a gradual process: human-in-the-loop first, more automation later where trust has been earned.
A draft in ERPJS is also a convenient error-catch point: it exists in the system but doesn’t affect balances or accounting postings:
- Not counted in P&L
- Doesn’t deduct money from cash balance
- Doesn’t appear in tax reports
- Deleted with one click without traces in accounting
If the agent makes a mistake (interprets “200” as “2000”, confuses ВЗ with ЄП), the owner sees it before the ERP has posted anything. But that’s a consequence of how we designed the workflow — not “MCP technical safety”.
A separate risk — and how it’s handled
What if the agent erred not in the sum, but in context? For example, created documents for the wrong counterparty.
ERPJS logs record:
- Who created the document → AI agent on behalf of a specific user
- Based on what input request → “Find 3 expenses ВЗ, Single tax, ЄСВ…”
- With which fields → with full JSON description of all attributes
So even if the error is noticed a month later — the audit log shows where the document came from, from whom, on what request. A standard internal audit tool, but AI operations are flagged separately.
Why this is not “RPA” or a “macro”
The classic approach to automating these tasks is RPA (robotic process automation) or a macro. They have limits:
1. RPA is set up in advance. Someone must pre-configure a rule “copy three documents from the previous month into the new month, replace such sums”. If the owner suddenly wants not duplicates but 6 documents for two months — or different logic — RPA needs reconfiguring.
2. RPA doesn’t understand context. RPA can’t tell “ВЗ” from “Military levy”. It needs the exact name. The agent figures it out itself.
3. RPA skips drafts. Most RPA scenarios post documents directly (it’s simpler). Error → fix it via a separate procedure. The draft-based agent — every document is reviewed by a human.
The same applies to “macros”: “click a button — 3 documents are created” is fixed logic. The AI agent accepts arbitrary phrasing and chooses which documents to create, how many, with which sums, for which month.
The honest part: where work still needs doing
This specific case worked. But that doesn’t mean MCP write operations are a finished product. What’s still needed:
- Confirmations for risky operations. The agent currently asks for confirmation only when it deems it necessary. We want a configurable threshold: creating a document over X UAH = automatic confirmation request, regardless of agent confidence.
- Bulk operations. If the owner wants to create 24 documents (full year ahead), they need confirm-all-with-one-click, not click each one separately.
I’m publishing this case publicly so we don’t have to wait for the “perfect product”. If you have ERPJS for small business — get in touch.
What the client says
“Hi. I’ve almost completely freed up my evenings for other tasks. All my main work in the system now happens during the day. Thank you!”
— owner, Telegram message (translated from Ukrainian), 2026-05-06
Context: the owner’s main system work — creating documents, reviewing reports, managing prices and inventory — now goes through the MCP-connected AI agent. Previously it ate up the evenings (daytime is for clients, phones, calls). Now it’s done in parallel with the day, in minutes. And messages of thanks like this one have been arriving steadily over the past month.
What this means for ERPJS clients
Previously, “an AI agent does something in my ERP” sounded like a risk. Now it’s a predictable workflow with a clear human role:
- Any document types. MCP covers the full ERPJS spectrum — expenses, invoices, transactions, sales documents. Not a curated subset of “what’s available so far”.
- Agent creates — human confirms. Default: drafts + one click. A UX tuned for gradual trust-building.
- Every operation has an author. Audit trail from a specific user, not “the robot did it”.
- No magic RPA scenarios. Owner writes in natural language, the agent figures it out.
This isn’t “AI replaced the accountant”. It’s “AI did 90% of the work, the human decides on the 10%”.
Frequently asked questions
Can the agent create a document without owner confirmation?
Technically — yes, MCP doesn’t restrict this. But our default UX is different: the agent creates documents in “Draft” status, and the owner reviews them in ERPJS and clicks “OK” to post. It’s an intentional design choice for the early adoption phase — so that trust in the agent is built by observation. Once the client is comfortable that the agent handles a given task type well, auto-posting can be enabled for routine operations (e.g. monthly ФОП tax duplicates).
What if the agent created a document with wrong data?
The draft is deleted with one “Cancel” click. It doesn’t affect accounting balances because the draft wasn’t posted. The log keeps a record “AI agent created, then deleted by owner” — for audit, not for accounting.
Does the agent see all my documents?
No. The agent sees only what its connected user can see. ERPJS has a full permission system, MCP fully respects it. If a user has no access to ФОП documents, the agent can’t find or create them either.
How long does setup take?
If you’re already an ERPJS client, connecting write operations to your agent (e.g. Telegram bot or Claude Desktop) takes the same as read operations: 30 minutes. It’s the same MCP server, just with a wider operation set.
What about security? What if someone hacks the Telegram bot and creates fraudulent documents?
First, MCP access rights = the user’s rights in ERPJS. If you revoked the user’s access — the agent acting on their behalf no longer works either. Second, every operation is logged from a specific user — the log shows “who requested, what request, what document was created”. Third, in our default UX the agent creates drafts that the owner reviews before posting — an extra layer that catches errors or malicious requests.
Can you limit which operations the agent can do?
Yes. The “MCP capabilities” setting defines which operations are available: read only, read+write with confirmation, read+write automatic, only specific modules (e.g. expenses only or warehouse only). It’s configured at the MCP-to-agent connection level.
Want your own AI agent that creates documents in your ERPJS system?
If you’re already an ERPJS client — get in touch, we’ll connect MCP with write operations to your agent in 30 minutes.
If you’re still evaluating ERPJS — try the free plan, MCP is available out of the box.