SmartUp 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., "@SmartUp MCP Which clients owe us money, and who should I call first?"
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.
SmartUp MCP
An MCP server for SmartUp ERP. It lets an AI assistant read orders, stock, prices, contractors, payments and debts from your accounting system — and, when you explicitly allow it, create orders and update them.
Works with Claude Desktop, Claude Code, OpenAI Codex, OpenClaw, Hermes and any other MCP client.
You: Which clients owe us money, and who should I call first?
AI: [smartup_debt] → 8 clients with outstanding balance, 18.2M UZS total.
Yapona Mama owes 6.9M — shipped in July, no payment since.
Jononchicken owes 8.1M but has 13.5M in open orders — call before shipping more.What it does
19 tools in three groups.
Reading
Tool | Answers |
| Orders for a period, with line items and statuses |
| One order in full, by deal id or external id |
| Free stock by product and warehouse, with names resolved |
| Product catalogue: name, code, article, box size |
| Prices by price type |
| Legal entities and their retail points |
| Incoming payments for a period |
| Returns for a period |
| Sales managers: staff codes, names and the zones they work in |
| Which codes an order will use and where they came from |
| Warehouses, product groups, producers, price types, contracts, routes |
| Direct call to any |
| How many requests the connector has spent today |
Reports
These do not exist as API endpoints. Each is two or three exports plus arithmetic on top.
Tool | Answers |
| Who owes what: shipped − paid − returned, per client |
| Sales breakdown by client, product, day or status, with shares |
Writing — off by default
Tool | Does |
| Creates an order (a draft unless you ask otherwise) |
| Changes an order status: post, cancel, move along the pipeline |
| Writes a note into an order header |
| Creates a legal entity or a retail point of a chain |
Related MCP server: ECOUNT MCP Server
Safety
Writing into a live accounting system is not the same as reading from it. Three rules make the difference explicit rather than implicit.
Writing is off until you turn it on. The default configuration reads only. Every write tool is still listed — so the assistant can say "this is disabled in settings" instead of "I can't do that" — but the call is refused before it reaches the network.
Writing goes to exactly one branch. When write mode is on, the connector only accepts requests addressed to the filial_code from your settings. A request without a branch is refused too: SmartUp serves a branchless request against the account's default organisation, which is usually the production one.
Orders are created as drafts. Unless you pass an explicit status, a new order lands as D — visible to a manager, invisible to the warehouse. Every write carries an idempotency key, so a retry after a network failure updates the same document instead of creating a second one.
Daily quotas are shared with real work. SmartUp limits API calls per day — around a hundred for reference data, several hundred for documents — and those limits are the same ones your shipping operation uses. The connector counts its own calls, stops before the shared limit is gone, and caches reference data for six hours. smartup_usage shows the current spend.
Install
Claude Desktop — one click
Download smartup.mcpb from Releases, then drag it into the Claude Desktop window (or double-click it, or use Settings → Extensions → Advanced → Install Extension).
Claude will ask for the settings itself:
Field | Meaning |
Login | SmartUp user the connector acts as |
Password | Stored in the OS keychain, never in a file |
Branch code | Default branch, e.g. |
Allow data changes | Off by default. Turn on only if you want the assistant to create orders |
Server address |
|
Daily request limit | Default 60 |
Any other client — from source
git clone https://github.com/ASPanferov/smartup-mcp.git
cd smartup-mcp
npm installThen point your client at server/index.js and pass credentials through the environment:
Variable | Required | Default |
| yes | — |
| yes | — |
| for writing | — |
| no |
|
| no |
|
| no |
|
Connecting
Claude Code
claude mcp add smartup \
--env SMARTUP_LOGIN=your_login \
--env SMARTUP_PASSWORD=your_password \
--env SMARTUP_FILIAL_CODE=220.012 \
-- node /absolute/path/to/smartup-mcp/server/index.jsOr commit it to the project as .mcp.json, keeping secrets in the environment:
{
"mcpServers": {
"smartup": {
"command": "node",
"args": ["/absolute/path/to/smartup-mcp/server/index.js"],
"env": {
"SMARTUP_LOGIN": "${SMARTUP_LOGIN}",
"SMARTUP_PASSWORD": "${SMARTUP_PASSWORD}",
"SMARTUP_FILIAL_CODE": "220.012"
}
}
}
}Check with /mcp inside a session.
OpenAI Codex
Add to ~/.codex/config.toml:
[mcp_servers.smartup]
command = "node"
args = ["/absolute/path/to/smartup-mcp/server/index.js"]
[mcp_servers.smartup.env]
SMARTUP_LOGIN = "your_login"
SMARTUP_PASSWORD = "your_password"
SMARTUP_FILIAL_CODE = "220.012"Or codex mcp add smartup -- node /absolute/path/to/smartup-mcp/server/index.js. Verify with codex mcp list.
OpenClaw
openclaw mcp add smartup \
--command node \
--arg /absolute/path/to/smartup-mcp/server/index.js \
--transport stdioOr in openclaw.json:
{
"mcp": {
"servers": {
"smartup": {
"command": "node",
"args": ["/absolute/path/to/smartup-mcp/server/index.js"],
"transport": "stdio",
"enabled": true
}
}
}
}Credentials belong in the environment OpenClaw launches with, not in the config literal. Verify with openclaw mcp doctor smartup --probe.
Hermes
In ~/.hermes/config.yaml:
mcp_servers:
smartup:
command: "node"
args: ["/absolute/path/to/smartup-mcp/server/index.js"]
env:
SMARTUP_LOGIN: "${env:SMARTUP_LOGIN}"
SMARTUP_PASSWORD: "${env:SMARTUP_PASSWORD}"
SMARTUP_FILIAL_CODE: "220.012"
enabled: trueSecrets go into ~/.hermes/.env. Verify with hermes tools list.
Anything else
The server speaks MCP over stdio. Command node, single argument — the absolute path to server/index.js, credentials in the environment. That is all any MCP client needs.
How it talks to SmartUp
Three things about this API shape everything in the code, and they will surprise you if you meet them for the first time in production:
Everything is POST, including reads. There are no GET endpoints.
Errors arrive as HTTP 200. A refusal is a valid JSON body with error_code, or plain Russian text, or an errors[] array next to successes[]. A response that arrives is not a response that succeeded.
Two incompatible response shapes. Most endpoints answer { "<entity>": [...], "limits": {...} }; the /api/v2/ ones answer { "count": "1", "data": [...] }. One endpoint — product_price$export — is /api/v2/ but still uses the entity key. The connector handles all three.
Dates go in as dd.mm.yyyy. Tools accept 2026-09-06, 06.09.2026, yesterday or -7d and convert.
Codes an order needs — and the error that lies about them
Creating an order requires codes a human has no way to look up: work zone, sales staff, price type, warehouse, robot. There is no staff endpoint in the API at all — staff$export answers 404 — and the code on a client's card may point at a zone with nobody assigned to it.
Worse, the refusal arrives under the wrong name. An order without room_code is rejected with "Штат не найден. Код штата =" — "staff not found" — because SmartUp derives the staff from the zone and, finding no zone, reports an empty staff code. You go hunting for a manager while the missing piece is the zone.
So the connector does not ask you for these codes. It reads them off orders that already went through — codes that are provably valid, since the document exists — and tells you what it used:
"подставлено_автоматически": {
"room_code": "000001", "sales_manager_code": "012",
"price_type_code": "B2B", "warehouse_code": "124799"
},
"источник_кодов": "заказы этого клиента"Pass no_autofill: true to turn this off, or smartup_order_defaults to see the codes before writing anything.
Development
npm start # run the server on stdio
npx @anthropic-ai/mcpb pack # build smartup.mcpbThe server is plain ES modules, no build step. server/smartup.js is the API client, guards and quota counter; server/tools.js reading; server/reports.js the computed summaries; server/write.js everything that changes data; server/format.js how answers are shaped.
Pull requests are welcome — especially tools for parts of SmartUp we have not covered.
Author and licence
Made by Artem Panferov — panferov.uz — at AI LAB, ailab.uz.
Released under the MIT licence. Open source, free to use, fork and modify.
Disclaimer
This is an independent project. It is not affiliated with, endorsed by, or supported by SmartUp or its developers.
The software is provided "as is", without warranty of any kind. The author and AI LAB accept no liability for any errors, data loss, incorrect documents, financial consequences or security incidents arising from its use.
You are responsible for your own data and credentials. Two things deserve particular care:
Write mode gives an AI assistant the ability to create documents in your accounting system. Review what it produces. Keep it off unless you need it.
The connector holds credentials to your ERP. Treat the machine it runs on accordingly.
Test on a non-production branch first.
Available Tools
19 toolssmartup_contractor_createЗавести контрагента или точкуADestructiveIdempotent
Создаёт юрлицо в справочнике. Точка сети — это то же юрлицо с parent_person_code головной карточки: отдельной сущности «точка» в API нет. Требует включённого режима записи. Повтор с тем же кодом обновляет карточку, а не создаёт вторую.
Inputs: name (required), tin, code, phone, +6 more.
smartup_contractorsКонтрагенты и точкиARead-onlyIdempotent
Юрлица из справочника: клиенты и их торговые точки. Отвечает на «есть ли такой клиент», «какой у него ИНН и код», «какие у него точки». Точка — это юрлицо с родительской карточкой, отдельной сущности «точка» в API нет.
Inputs: limit, query, filial_code, parent_code.
smartup_debtДолги и взаиморасчётыARead-onlyIdempotent
Сколько клиент должен: отгрузки минус оплаты минус возвраты за период. Отвечает на «кто сколько должен», «есть ли долг у клиента», «кому пора звонить». Считается из заказов, оплат и возвратов — трёх выгрузок. Дата: 2026-09-06, 06.09.2026, «вчера» или «-7d».
Inputs: end, begin, limit, query, +3 more.
smartup_exportПроизвольная выгрузкаARead-onlyIdempotent
Прямой вызов любого метода $export, когда готового инструмента не хватает. Записывающие методы ($import, $change_status, $attach_data) запрещены — коннектор только читает.
Inputs: path (required), body, limit, entity.
smartup_orderОдин заказARead-onlyIdempotent
Один заказ целиком по номеру сделки или внешнему номеру: шапка, состав, статус. Отвечает на «что в заказе 283581248», «почему заказ не отгружен».
Inputs: end, begin, deal_id, external_id, +1 more.
smartup_order_createСоздать заказADestructiveIdempotent
Заводит заказ в учётной системе. Достаточно указать клиента и товары: рабочую зону, менеджера, тип цены и склад коннектор подставит сам из заказов, которые уже прошли. По умолчанию заказ создаётся ЧЕРНОВИКОМ — склад его не соберёт, пока менеджер не проведёт документ. Требует включённого режима записи. Повторный вызов с тем же external_id обновляет тот же заказ, а не создаёт второй.
Inputs: products (required), person_code (required), note, status, +9 more.
smartup_order_defaultsКоды для создания заказаARead-onlyIdempotent
Какие коды подставятся при создании заказа и откуда они взяты: рабочая зона, менеджер, тип цены, склад, робот. Полезно посмотреть до записи — особенно если заказ уже отклоняли. Ничего не меняет.
Inputs: filial_code, person_code.
smartup_order_noteПримечание к заказуADestructiveIdempotent
Пишет примечание в шапку существующего заказа, не трогая его состав. Требует включённого режима записи. Прежнее примечание заменяется целиком.
Inputs: note (required), deal_id (required), filial_code.
smartup_ordersЗаказыARead-onlyIdempotent
Заказы (сделки) за период с составом и статусом. Отвечает на «что заказали», «в каком статусе заказ», «сколько отгрузили клиенту за неделю». Дата: 2026-09-06, 06.09.2026, «вчера» или «-7d».
Inputs: end, begin, limit, query, +4 more.
smartup_order_statusСменить статус заказаADestructiveIdempotent
Меняет статус существующего заказа: провести, отменить, вернуть в работу. Требует включённого режима записи. Отмена необратима со стороны коннектора — вернуть заказ можно только в самой учётной системе.
Inputs: status (required), deal_id (required), filial_code.
smartup_paymentsОплатыARead-onlyIdempotent
Приходы денег за период. Отвечает на «платил ли клиент», «сколько пришло за неделю». Дата: 2026-09-06, 06.09.2026, «вчера» или «-7d».
Inputs: end, begin, limit, query, +1 more.
smartup_pricesЦеныARead-onlyIdempotent
Действующие цены товаров по типам прайса. Отвечает на «почём отгружаем», «какая цена у этого товара». Показывает название товара, а не только код.
Inputs: limit, query, with_zero, filial_code, +1 more.
smartup_productsНоменклатураARead-onlyIdempotent
Справочник товаров: название, код, артикул, упаковка, бренд. Отвечает на «есть ли такой товар», «какой у него код».
Inputs: limit, query, fields, filial_code.
smartup_referenceСправочникиBRead-onlyIdempotent
Остальные справочники: склады (room), группы товаров (product_group), производители (producer), типы цен (price_type), договоры (contract), физлица (natural_person), рейсы (logistics).
Inputs: name (required), limit, query, filial_code.
smartup_returnsВозвратыBRead-onlyIdempotent
Возвраты товара за период. Отвечает на «что вернули», «сколько возвратов у клиента». Дата: 2026-09-06, 06.09.2026, «вчера» или «-7d».
Inputs: end, begin, limit, query, +1 more.
smartup_salesОтчёт по продажамARead-onlyIdempotent
Свод продаж за период: по клиентам, по товарам или по дням. Отвечает на «что продавалось лучше всего», «сколько отгрузили за месяц», «кто крупнейший клиент». Дата: 2026-09-06, 06.09.2026, «вчера» или «-7d».
Inputs: end, begin, limit, query, +2 more.
smartup_staffМенеджеры и штатARead-onlyIdempotent
Менеджеры продаж, которых учётная система принимает в заказах: код штата, имя и рабочие зоны. Отдельного справочника штата в API SmartUp нет, поэтому список собирается из проведённых заказов — то есть содержит только те коды, которые заведомо работают.
Inputs: query, filial_code.
smartup_stockОстатки на складахARead-onlyIdempotent
Свободные остатки по товарам и складам на дату. Отвечает на «сколько осталось», «есть ли товар на складе».
Inputs: date, limit, query, no_names, +3 more.
smartup_usageСколько запросов потраченоARead-onlyIdempotent
Сколько запросов коннектор сделал за сегодня и какой у него предел. Лимиты SmartUp общие с боевой работой, поэтому смотреть сюда стоит перед большими выгрузками.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 19 tools
Most tools target a distinct resource or action: orders, stock, prices, payments, returns, debt, contractors, etc. The main ambiguity is between smartup_orders (period list), smartup_order (single order), and smartup_sales (aggregate sales), though the descriptions clarify the differences; smartup_reference and smartup_export are also catch-all tools.
All names share the smartup_ prefix and use snake_case, which makes them easy to group. However, the convention mixes plural noun read tools like smartup_orders with singular object/action tools like smartup_order_create and smartup_order_status, so it is not a uniform verb_noun pattern.
19 tools is slightly above the ideal range, but the broad ERP domain covering orders, stock, sales, payments, debts, contractors, and reference data justifies most of them. A few are auxiliary—smartup_usage, smartup_export, smartup_reference—so the set feels slightly heavy rather than bloated.
The surface covers the main order and contractor workflows: read orders, create an order, change its status, add a note, and upsert a contractor, plus core analytics and reference lookups. It lacks write operations for stock, prices, payments, or returns, but the server is explicitly positioned as read-oriented with limited writes, so this appears to be a deliberate scope rather than a critical gap.
Maintenance
Related MCP Connectors
weclapp ERP in your AI assistant: reads instantly, writes only after a preview you approve.
Operate Obriym CRM from your AI assistant: leads, deals, orders, catalog, stock, marketplaces.
AI agents for CRM, mail, calendar, ERP and accounting - you approve. EU-hosted, OAuth.
Connect AI to store orders, products and inventory with scoped access and human approvals.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with SmartKasa Ukrainian POS system through natural language, managing shops, products, inventory, sales receipts, employees, and fiscal reports with full API coverage.1MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with ECOUNT ERP through natural language, providing tools for products, inventory, sales, purchases, and more.2334 npm5MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with SalesDrive CRM, allowing order management, product queries, and more through natural language.1Apache 2.0
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to query and execute Slingrs ERP endpoints for sales orders, inventory, production, purchasing, shipments, and custom entities through dynamically loaded OpenAPI tools.9 npm-