1c-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., "@1c-mcpdiagnose document ПоступлениеТоваров 00000001"
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.
1c-mcp
Give an AI agent eyes into your 1C:Enterprise 8.3 base — read metadata & data, run queries, and diagnose why a document won't post — over one extension HTTP service.
Why
Most 1C automation tooling either reads metadata or reads data. The thing an analyst actually gets stuck on — "this document won't post, why?" — needs both, plus the ability to run the posting logic and capture the error. 1c-mcp does exactly that.
It exposes your base as MCP tools through a thin HTTP service in a configuration extension. The MCP server stays a small, strict TypeScript client; the reasoning about how to fix a broken document is left to the agent (Claude) — no LLM baked into the server, no API keys to manage.
🔎 Metadata introspection — objects, attributes, tabular sections, register records
📄 Data & queries — read objects by ref, run 1C query-language, list documents, read register movements
🩺 Document diagnosis — test-post a document inside a rolled-back transaction, capture the fill errors, the exception text, the failing attribute, and the movements it tried to make — the whole context an agent needs to explain and fix it
🔒 Read-only by default — write tools (
object_update,document_post) exist but only register whenONEC_ALLOW_WRITE=1🪶 TypeScript, ESM, MIT — 2 runtime deps (
@modelcontextprotocol/sdk,zod), no 1C secrets in the repo
Related MCP server: 1C MCP Server
How document diagnosis works
document_diagnose(ref) is the headline. The extension runs, inside a transaction it always rolls back:
ПроверитьЗаполнение()— collects required-field / validation problemsЗаписать(…Проведение)in aПопытка/Исключение— captures the posting exception and everyСообщить()reads back the register movements it would have made
…then returns one structured object. The agent gets the error text, the exact attribute/row that failed, the document data, the object's metadata, and the attempted movements — and works out the fix:
document_diagnose # ref → { filled, fillErrors, posts, errorText, messages, wouldMove, data, metadata }
# agent reads it, explains the cause, proposes the change
object_update # (if ONEC_ALLOW_WRITE=1) apply the fix
document_post # (if ONEC_ALLOW_WRITE=1) post for realBecause the transaction is always rolled back, diagnosis has zero side effects on the base.
Requirements
1C:Enterprise 8.3 base published on a web server with HTTP services enabled.
A configuration extension exposing the HTTP service
mcp(see The 1C side — this is the part you build, against a fixed contract).A 1C user for the MCP to authenticate as (Basic Auth).
Node ≥ 18.
Setup
npm install
cp .env.example .env # set ONEC_URL / ONEC_USER / ONEC_PASSWORD
npm run buildRegister it with your MCP client:
{
"mcpServers": {
"1c": {
"command": "node",
"args": ["D:/projects/1c-mcp/dist/index.js"],
"env": {
"ONEC_URL": "http://localhost/mybase/hs/mcp",
"ONEC_USER": "mcp",
"ONEC_PASSWORD": "secret",
"ONEC_ALLOW_WRITE": "0"
}
}
}
}Env | Meaning |
| HTTP-service root: |
| 1C user for Basic Auth |
|
|
The env prefix is
ONEC_(not1C_) on purpose — a var name starting with a digit breaks in POSIX shells.
Tools
Tool | Purpose |
| List metadata objects (Catalogs / Documents / Registers …) with a filter. |
| Full structure of one object: attributes, tabular sections, register records. |
| Search objects by name/synonym across all kinds. |
| Read an object by GUID ref — attributes + tabular sections. |
| Run a 1C query-language query and return rows. |
| List documents by type / period / filter. |
| Register movements / balances by document or filter. |
| Test-post in a rolled-back transaction → fill errors, exception text, failing attribute, movements, data, metadata. |
| Fill check only (no test-post). |
| Write an object's attributes / tabular sections. |
| Post a document for real. |
⚑ — registered only when ONEC_ALLOW_WRITE=1.
The 1C side
The MCP talks to one HTTP service. You implement it in a configuration extension, against this contract.
Root: http://<host>/<base>/hs/mcp. Every method: POST, JSON body, Basic Auth. Errors: non-2xx with body { "error": { "code": string, "message": string } } (the client turns this into a tool error).
Method | Request | Response (key fields) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| see below |
|
|
|
|
|
|
|
|
|
/document/diagnose response
{
"ref": "guid",
"presentation": "Реализация 0001 от 01.01.2026",
"filled": false,
"fillErrors": [{ "field": "Организация", "message": "Поле не заполнено" }],
"posts": false,
"errorText": "Недостаточно 5 шт номенклатуры X на складе Y",
"messages": [{ "text": "...", "field": "Товары", "dataPath": "Товары[2].Количество" }],
"wouldMove": [{ "register": "ТоварыНаСкладах", "records": [{ "...": "..." }] }],
"data": { "Организация": null, "Товары": [{ "...": "..." }] },
"metadata": { "attributes": [], "tabularSections": [], "registerRecords": [] }
}Extension setup checklist
Create a configuration extension, add an HTTP service with root URL
mcp.Implement the URL templates from the contract (method POST, JSON in/out).
The key handler
/document/diagnose— a side-effect-free test-post:Объект = Ссылка.ПолучитьОбъект(); Результат = Новый Структура("filled, fillErrors, posts, errorText, messages, wouldMove, data, metadata"); НачатьТранзакцию(); Попытка Результат.filled = Объект.ПроверитьЗаполнение(); // messages collected below Попытка Объект.Записать(РежимЗаписиДокумента.Проведение); Результат.posts = Истина; Исключение Результат.posts = Ложь; Результат.errorText = ОписаниеОшибки(); КонецПопытки; Результат.messages = ПолучитьСообщенияПользователю(Истина); Исключение Результат.errorText = ОписаниеОшибки(); КонецПопытки; ОтменитьТранзакцию(); // always roll back — the base is never changedFill
data/metadata/wouldMoveand return the JSON above.Publish the base on a web server, enable HTTP services, create the
ONEC_USERuser.Smoke test:
curl -u user:pass -X POST http://host/base/hs/mcp/metadata/list -d "{}".
Development
npm test # vitest — config, HTTP client, write-tool gating (no live 1C needed)
npm run build # tsc → dist/
npx tsc --noEmit # typecheckThe design spec and implementation plan live in docs/superpowers/.
Security
document_diagnosealways runs inside a rolled-back transaction — zero side effects.Write tools register only when
ONEC_ALLOW_WRITE=1.1C credentials come from the environment only;
.envis git-ignored and never committed.
Contributing
PRs welcome. Good first ideas:
a bundled reference extension (
.xmlsources of the HTTP-service module)OData transport as a read-only fallback (no extension required)
richer
wouldMoveshaping / typed diagnose resultRussian README
Fork and branch:
git checkout -b feature/my-changenpm install;npm run buildandnpx tsc --noEmitmust pass;npm testgreenNever commit secrets (
.env, passwords) or real base dataOpen a PR describing what and why
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.
- odooOAuthcom.odooconsole
Odoo ERP for AI agents: hosted OAuth endpoint, gated writes, one endpoint for every instance.
Connect Claude or Cursor to books, invoices, bills, payroll, and sealed closes.
QuickBooks Online in Claude and ChatGPT: 221 tools, full ledger, multi-company, Canada + US, FR/EN.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with 1C:Enterprise databases through natural language, providing metadata retrieval, configuration analysis, and code generation.9-
- FlicenseNot gradedqualityDmaintenanceActs as a bridge between AI agents (Claude, Cursor) and 1C:Enterprise databases, enabling metadata retrieval, configuration analysis, and code generation through natural language using the MCP protocol.-
- AlicenseNot gradedqualityBmaintenanceIntegrates AI agents with 1C:Enterprise databases via MCP and REST API, supporting a built-in HTTP server (no Python required) or a Python proxy mode.279GPL 3.0
- AlicenseAqualityBmaintenanceBridges AI agents to 1C:Enterprise via OData, enabling natural language queries of business entities like counterparties and invoices with read-only access.861 npmMIT