Skip to main content
Glama

ИИ-агент ПТО

CI Python MCP Tests License

Агент для ПТО в строительстве: сверяет КС-2 с журналом и сметой, распознаёт выпуск исполнительной документации со сканов и фотографий, переводит каждый спор с актом в рубли и подключается к Claude Desktop / Cursor / VS Code по Model Context Protocol.

Главный принцип: ни одна цифра не выдумывается. У каждой суммы есть формула и источник, где данных нет — «не оценено» с причиной, а не ноль; чертёж не меняется без подтверждения человека; каждый вызов инструмента пишется в журнал с хэш-цепочкой.

Что умеет

Результат на демо-объекте

Сверка КС-2, объёмов, комплектности ИД

7 расхождений из 7 заложенных, 0 лишних

Выпуск ИД целиком (30–50 листов)

40 листов, 205 пометок, 43 конфликта с актом

Фото с телефона → чертёж

гомография по 4 точкам, rms 0,0 мм, 5/5 пометок

Деньги по выпуску

1 850 000 ₽ под риском = 5,42 % акта, каждый рубль с формулой

Портфель актов объекта

3 акта, покрытие 100 %, 2 091 000 ₽ под риском (5,43 %)

Исполнительная документация

схема из DXF + черновик АОСР по форме № 344/пр + реестр на 5 документов; 9 проверок черновика, матрица 17 видов работ

Смета 1166/Н (АРОС, 47 позиций)

читается напрямую: 33 работы + 14 материалов, 5 отдельных актов по скрытым работам, 0 лишних протоколов в акте на борозды, ПУЭ 1.8.37/1.8.39 — verified_partial

Закупка материалов

заявка из сметы 1166/Н → 11 позиций; 3 КП в сравнении, 1 отклонено (нет срока действия цены), 34 900,32 ₽ и 13 079,76 ₽ экономии; выбор человека в журнале аудита

Цены ФГИС ЦС

2 версии выгрузки, цена на дату: 410 ₽ на 01.10 против 459 ₽ на 01.12 — без подстановки свежего прайса

Аудит-лог

снимок «до/после», дельта, автор, причина, основание; хэш-цепочка, подмена видна

Материалы

заявка → приход → КС-2: заморожено 1 645,92 ₽, риск 15 134,40 ₽, возврат переплаты 840 ₽ — по позициям, с формулами

Стык takeoff КР

выгрузка объёмов (формат autoconst, MIT) → ведомость: 2 503 660 ₽ по строкам с ценой, из них 1 763 900 ₽ высокой уверенности; LOW и RATE_NOT_FOUND — в «не включено»

Том КР из PDF

школа на 825 мест (Сертолово, 49 стр.): 14 параметров с цитатами, ведомостей в томе нет, плита 5 259,2 м3 расчётом по габаритам, арматура — «нет ведомости расхода стали», а не «примерно»

MCP

36 инструментов, stdio + http; http — только с Bearer-токеном (PTO_MCP_TOKEN), по умолчанию 127.0.0.1, CORS закрыт, песочница путей

Быстрый старт

git clone https://github.com/akoffice933-maker/pto-agent.git && cd pto-agent
pip install -r requirements-pto.txt

# 1. демо-данные и чертежи
python3 scripts/make_demo_data.py && python3 scripts/make_demo_dxf.py
python3 scripts/make_demo_redline.py && python3 scripts/make_demo_batch.py

# 2. сверка КС-2 и объёмов
python3 -m pto_agent run --data data/demo --out out

# 3. выпуск исполнительной документации со сканов
python3 -m pto_agent cad scan-batch --manifest data/demo/batch/manifest.json \
        --engine vlm --summary out/summary.json --out out/cad/batch

# 4. деньги: сколько стоит спор с актом
python3 -m pto_agent cad impact --batch out/cad/batch/batch_summary.json \
        --summary out/summary.json --out out/cad/impact --with-background

# 5. страница руководителя
python3 docs/build_dashboard.py && open Дашборд_руководителя_ПТО.html

# 6. тесты
python3 -m pytest tests -q

Related MCP server: AutoCAD MCP Server - Codex Edition

MCP: подключить к своему клиенту

python3 scripts/install_mcp.py --client claude --write   # Claude Desktop
python3 scripts/install_mcp.py --client cursor --write   # Cursor
python3 scripts/install_mcp.py --client vscode --write   # VS Code
python3 -m pto_agent.mcp_server --transport http --port 8765   # http + инспектор
docker build -t pto-agent-mcp:0.6 . && docker run -p 8765:8765 pto-agent-mcp:0.6

36 инструментов: чтение DXF и takeoff, распознавание сканов и план правок, применение операций только с confirm{by, role, comment}, пакетная обработка выпуска, деньги по акту и по портфелю актов, итог проверки одним ответом (review_summary) и выпуск исполнительной документации (asbuilt_docs: схема, АОСР, реестр ИД, комплектность), цены с версиями и датой (prices), закупка материалов с обоснованием выбора (procurement) и журнал аудита (audit_trail), сверка материалов с приходом и актом (materials_reconcile), стык объёмов из чертежей с ценами (takeoff), черновик ТК/ППР со сверкой норм (tk_draft) и реестр карт объекта «объект → ТК → статус → кто проверил» (tk_registry), накопительная ведомость по актам (cumulative_ledger), акт на дополнительные работы с основанием (atn_draft) и расход материалов — потребность по нормам, списание, лимит, давальческие (consumption_report), чек-листы выполненных работ с источником пункта и подписью (checklist), два журнала комплекта ИД — общий журнал работ и журнал верификации закупленной продукции (journals), реестр документов качества на материалы с привязкой к партиям (quality_docs), движение документации — выдача РД «В производство работ» и согласование ИД (docflow) и переписка с внешними участниками — письма, лаборатории, геодезисты, авторские дни (correspondence), и комплект объекта целиком — одна команда pack build --config, одна папка out/pack, один вердикт «можно ли предъявлять» (object_pack) и портфель комплектов с деньгами — где можно предъявлять, где нет и сколько денег держит непредъявление, с разбивкой «подписи / ошибки / данные» (pack_portfolio) и график финансирования — что попадёт в платёж, что переносится и сколько стоит перенос по ставке из договора (funding_plan) и месячный план — обратный ход от платежа к работам: какие работы дают платёж, какой документ нужен по матрице и чего не хватает (monthly_plan). Подробно — docs/10_MCP_обвязка.md.

Репозиторий

https://github.com/akoffice933-maker/pto-agent — публичный, MIT.

git clone https://github.com/akoffice933-maker/pto-agent.git

Что настроено: .gitignore (артефакты прогонов и тяжёлые демо-сканы в git не едут — генерируются скриптами), LICENSE (MIT), CI на GitHub Actions: unit на Python 3.11/3.12 → e2e со сквозным прогоном (выпуск → деньги → дашборд) → сборка Docker-образа. Чтобы запушить в свой форк: ./scripts/publish_github.sh git@github.com:ВАШ_АККАУНТ/pto-agent.git.


Пакет проекта: что внутри

Дата: 02.11.2026 · Версия пакета: 1.2

0. MVP: работающий прототип агента

Решение: проект делаем сами, готовые open-source проекты используем как подспорье (с фиксацией лицензий). Прототип собран и прогнан на демо-наборе: 7 расхождений из 7 заложенных найдено, 17 тестов зелёные.

pip install -r requirements-pto.txt
python3 scripts/make_demo_data.py          # демо-смета, журнал, ранее закрытые акты, нормативы
python3 -m pto_agent run --data data/demo --out out
python3 -m pto_agent approve --out out --by "Иванов И.И." --decision returned_for_revision --comment "…"
python3 -m pto_agent takeoff --out out/kr1 schedules --schedules data/input/kr1_schedules.json
python3 -m pto_agent tk --out out/tk draft --work-type concrete --object-name "Школа"
python3 -m pto_agent tk --out out/tk registry          # реестр: объект → ТК → статус → кто проверил
python3 -m pto_agent cumulative --acts data/demo/acts/acts.json --out out/cumulative
python3 -m pto_agent consumption --works data/demo/consumption/works.json --norms data/demo/consumption/norms.json --out out/consumption
python3 -m pto_agent checklist --out out/checklists build --work-type earthworks --object-name "Школа"
python3 -m pto_agent journal --out out/journals work --entries data/demo/journals/work_entries.json --number ОЖР-1
python3 -m pto_agent journal --out out/journals verification --records data/demo/journals/verification.json --writeoffs data/demo/consumption/writeoffs.csv
python3 -m pto_agent quality --out out/quality build --documents data/demo/quality_docs/documents.json --requirements data/demo/quality_docs/requirements.json --usage data/demo/quality_docs/usage.json --number ДК-1
python3 -m pto_agent docflow --out out/docflow rd --transmittals data/demo/docflow/transmittals.json --revisions data/demo/docflow/revisions.json --works data/demo/docflow/works_rd.json --number РД-1
python3 -m pto_agent correspondence --out out/corr letters --source data/demo/correspondence/letters.json --number ПИС-1
python3 -m pto_agent audit-verify --path out/audit.jsonl
python3 scripts/check_expected.py          # 7 из 7 заложенных расхождений, без лишних
python3 -m pytest tests -q

Файл

Что внутри

40_Месячный_план_работы_и_документы.docx (docs/40_…md)

Круг 16 — обратный ход от платежа к работам: python3 -m pto_agent monthly plan берёт позиции акта, определяет вид работ тем же классификатором, что выпуск ИД, достаёт требования к документам из матрицы (17 видов работ) и показывает, что есть, что не подписано и чего не хватает — с деньгами по каждой работе. Шесть правил: требования только из матрицы (набор совпадает с ней один в один); позиция без опознанного вида работ — «требование не заявлено»; документ без ФИО и роли работу не закрывает; демонтаж и вывоз мусора — «требований в матрице нет», это не ошибка; сумма позиций сверяется с суммой акта; сроки — из графика. Демо, ноябрь 2026: 2 акта, 10 видов работ, готово 1 работа на 230 000 ₽, 36 056 600 ₽ держит документ, не хватает 31 документа и 6 без подписи; первые строки плана — АОСР и протокол по бетонным работам на 18 846 100 ₽. CLI monthly plan, MCP monthly_plan (35 → 36), 18 тестов, 43 правила scripts/check_monthly.py в CI

39_График_финансирования_и_комплекты.docx (docs/39_…md)

Круг 15 — деньги месяца, а не только риск: python3 -m pto_agent finance plan сводит график финансирования (сроки предъявления, даты платежей, суммы) с портфелем комплектов и отвечает, какая часть платежа наступит, что переносится и сколько стоит перенос. Семь правил: сроки и даты — только из графика (нет даты — «не заявлено», а не «обычно к 10-му»); сумма сверяется с актом, платят по акту; в платёж попадает только предъявляемый акт; перенесённая строка не показывает «к оплате» — это долг; пени — только по заявленной ставке с пунктом-основанием и формулой (нет ставки — «цена переноса не заявлена», а не 0 ₽); удержание — только из договора; акт в двух строках графика считается один раз. Демо, договор Д-118/26: 5 строк, запланировано 44 124 600 ₽, в платёж 0 ₽, перенос 38 524 600 ₽, пени 17 910,60 ₽, 3 пропущенных срока; чистый подписанный комплект на 5 млн → к оплате 4 750 000 ₽ (95 % после удержания). Заодно исправлено в круге 14: раздел, исключённый с основанием, больше не считается блокером. CLI finance plan, MCP funding_plan (34 → 35), 18 тестов, 33 правила scripts/check_funding.py в CI

38_Портфель_комплектов_и_деньги.docx (docs/38_…md)

Круг 14 — сводка по портфелю вместо чтения восьми отчётов: python3 -m pto_agent pack portfolio --config собирает комплект каждого объекта тем же кодом, что круг 13, и привязывает к вердикту суммы актов КС-2. Шесть правил денег: сумма берётся из акта с указанием источника; акт без суммы — «не оценено», а не 0 ₽; объект без комплекта — тоже «не оценено», а не «риска нет»; повторённый акт считается один раз (ACT_DOUBLE_COUNTED); разрез «раздел → деньги» строится только по заявленным covered_by и не складывается с итогом; деньги разложены по действию — «поставить подписи» отделено от «и данные, и ошибки, и подписи» и ставится только когда ошибок и пробелов в комплекте нет. Демо: 3 объекта, 5 актов, 36 654 600 ₽ под риском непредъявления, 2 акта «не оценено», разрез показывает три раздела, держащих один и тот же акт на 34,1 млн. CLI pack portfolio, MCP pack_portfolio (33 → 34), 16 тестов, 27 правил scripts/check_pack_portfolio.py в CI

37_Комплект_объекта.docx (docs/37_…md)

Круг 13 — не новые обязанности, а сквозной прогон комплекта по одному объекту: одна команда python3 -m pto_agent pack build --config собирает журналы, документы качества, чек-листы, РД и согласование, письма и участников, дни качества в одну папку out/pack и выдаёт один вердикт can_submit. Пять правил: раздел без источника — «нет данных» (блокер, а не «пройдено»); исключить раздел можно только с причиной (SECTION_DISABLED_WITHOUT_REASON), и он остаётся в описи; ошибка в любом разделе блокирует сдачу; не подписанный человеком раздел блокирует сдачу; пустой раздел — находка. Каждый раздел считается тем же модулем и теми же проверками, что отдельный реестр (сводка не может быть чище разделов — это тест), готовый подписанный реестр передаётся ссылкой registry и подпись проверяется, а не пересобирается: правка после подписи возвращает раздел в блокеры. Демо К-38: 9 разделов, 7 с ошибками, 1 исключён с причиной, 27 находок, 16 блокеров, «предъявлять нельзя» (код 2); чистый подписанный комплект — «можно». CLI pack build, MCP object_pack (32 → 33), 13 тестов, 23 правила scripts/check_pack.py в CI

36_РД_согласование_письма_участники.docx (docs/36_…md)

Последний круг очереди — 5 обязанностей: выдача РД (работать можно только по редакции со штампом «В производство работ», передача без подписи получившего не подтверждена, выдача заменённой редакции и ссылка на невыданную РД — ошибки), согласование ИД (подпись при открытых замечаниях недействительна, повторная передача без устранения — та же передача, просроченное замечание — ошибка), письма и запросы (без основания не предъявляется, без ФИО и роли не отправлено, просроченный ответ — ошибка), лаборатории и геодезисты (аттестат на дату работы, привязка результата), авторские дни и дни качества (участники, протокол, замечание со сроком и ответственным). CLI docflow / correspondence, MCP docflow и correspondence (30 → 32), 41 тест, 54 правила в CI. 18 из 18 обязанностей ПТО покрыты

35_Документы_качества_на_материалы.docx (docs/35_…md)

Документы качества: документ проверяется по трём вопросам — тот ли материал (марка и фракция входят в наименование), та ли партия, действовал ли он на дату применения. Товарный чек документом качества не является, копия без отметки «копия верна» в комплект не идёт, состав требуемых документов берётся из файла требований (проект, договор, ТУ) и не выдумывается, материал, применённый без документа на свою партию, — ошибка, стык с журналом входного контроля в обе стороны, комплект передаётся только подписанным человеком с ФИО и ролью. CLI quality build/sign, MCP quality_docs (29 → 30), 25 тестов, 28 правил в CI

34_Журналы_общий_и_верификации.docx (docs/34_…md)

Два журнала ИД: общий журнал работ — запись без даты, смены, описания или исполнителя в журнал не попадает (и это видно отдельным разделом), вид работ определяется матрицей, даты только по возрастанию, температура обязательна для земляных/бетонных/кровельных работ, объёмы сверяются с актом КС-2 построчно там, где в позициях есть наименования (деньги журнал не подтверждает); журнал верификации — «допущен» без документа качества невозможен, документ с истёкшим на дату проверки сроком не даёт допуска, без ФИО и роли проверяющего контроль не состоялся, материал, списанный без входного контроля, виден отдельно. Подпись только с ФИО и ролью и только при отсутствии ошибок, правка после подписи аннулирует подпись. CLI journal build/sign, MCP journals (28 → 29), 28 тестов, 25 правил в CI

33_Чек-листы_выполненных_работ.docx (docs/33_…md)

Чек-листы выполненных работ: пункт без источника (документ + пункт + редакция) не создаётся, три результата без «ок»/«да», подпись только при ФИО и роли и только когда все пункты проверены, несоответствие без описания не подписывается, правка после подписи аннулирует подпись, can_close объясняет, можно ли предъявлять работы. CLI checklist build/fill/sign, MCP checklist (27 → 28), 23 теста, 6 правил в CI

32_Нормы_расхода_лимиты_давальческие.docx (docs/32_…md)

Материалы в цифрах: потребность = объём × норма, норма без документа/пункта/редакции не применяется, норма без подтверждения базой идёт «справочно» (пока её не примет человек с ФИО), перерасход сверх нормы без причины — ошибка, списание без нормы не сравнивается с нулём, лимит закупки = потребность, давальческий материал в собственных закупках — двойной счёт. Демо-набор data/demo/consumption/, CLI consumption, MCP consumption_report (26 → 27), 29 тестов, 6 правил в CI

31_Накопительная_ведомость_и_АТН.docx (docs/31_…md)

Деньги по допработам: накопительная ведомость по позициям (периоды, итог нарастающим, остаток к смете) с 9 проверками — сумма акта против суммы позиций, дубль акта, одна позиция в двух актах периода, м² и м³ под одним кодом, сторно, nan, позиции вне сметы и превышение сметы; АТН, где позиция без основания (лист РД, схема, письмо) в акт не входит, без цены — сумма не считается, повтор не удваивается. CLI cumulative / atn, MCP cumulative_ledger / atn_draft (24 → 26), 28 тестов, 6 правил в CI

30_Обязанности_ПТО_матрица_покрытия.docx (docs/30_…md)

Сверка 18 обязанностей ПТО с кодом: все 18 закрыты кодом, страж-тестами и сквозной проверкой в CI (круги 7–12 закрыли журналы и верификацию, документы качества, чек-листы, нормы и списание, АТН и ведомости, выдачу РД, согласование ИД, письма, лаборатории и геодезистов, дни качества). Что остаётся за человеком — подписи, согласования и решения

29_Реестр_ТК_объекта.docx (docs/29_…md)

Реестр ТК объекта: объект → ТК/ППР → статус → кто проверил (ФИО, роль, дата). Статус «проверен инженером» ставится только при ФИО и роли и только пока совпадает отпечаток содержания: правка разделов после проверки даёт «проверка недействительна», а не «готово». Заодно исправлено затирание карт (имя файла теперь tk_<вид работ>), «кого ждём с данными» по объекту, registry.json/md/xlsx, CLI tk registry --strict, MCP-инструмент tk_registry (24-й), 18 тестов, сквозная проверка 5 правил scripts/check_tk_registry.py в CI

28_ТК_по_всем_видам_работ.docx (docs/28_…md, собирается скриптом)

Прогон ТК по всем 17 видам работ матрицы: 196 заполненных пунктов, 89 запросов данных, нормы сверено 2 из 34, нарушений 0. Таблица по видам работ (комплект ИД от 4 до 15 документов) и список 21 документа, которые надо загрузить в нормативную базу, чтобы пометки «не проверено» исчезли. Скрипт scripts/check_tk_all_work_types.py, шаг в CI

27_Черновик_ТК_и_ППР.docx (docs/27_…md)

Черновик ТК и ППР своими силами: 8 разделов ТК и 10 разделов ППР; заполняется только то, что есть в матрице требований, нормативной базе и смете; состав операций, машины, ОТиПБ и трудозатраты — needs_input с адресатом; каждая норма сверяется с базой, иначе помечается «не проверено»; статус «черновик», подтверждение — только с ФИО и ролью, в журнал аудита. python -m pto_agent tk draft, 20 тестов

26_ТК_и_ППР_открытый_код.docx (docs/26_…md)

Проверка обзора OSS по ТК/ППР/ИД: construction-ai-core заявляет ТК и ППР, но в репозитории — subprocess-вызов внешнего ../tk-generator (не опубликован) и шаблоны DOCX, лицензии нет; ru-aec-skills — CC0, 53 скилла, есть матрица ИД со «сроком до сокрытия», но ТК/ППР нет; DDC_Skills (MIT, 1026 файлов) — методики, не движок. Поиск GitHub: «ППР строительство», «проект производства работ», «технологическая карта строительство» — 0 результатов. Вывод: ТК/ППР делать своими силами на своей нормативной базе, из OSS брать формы и формулировки. Реестр data/reference/tk_ppr_oss.json + 12 тестов

25_Целостность_цифр_kr_pdf_takeoff_schedules.docx (docs/25_…md)

Целостность цифр (пункт 4 аудита): float("nan") проходил как количество — объём и итог становились nan, а сверка «Итого» с суммой по диаметрам молчала (abs(nan - x) > доп всегда ложно); неразобранный диаметр превращался в 0,0; дедупликация бетона сливала «плиту 100 м³» и «стены подвала 100 м³» → 100 вместо 200; сумма в несовпадающей единице (шт × ₽/м³) и отрицательные объёмы входили в итог; дубли строк удваивали сумму; цена nan и ≤ 0 попадала в базу версий. Один разбор чисел на проект (numeric.py), 35 новых тестов

24_Ревью_непокрытая_часть_сеть_и_парсеры.docx (docs/24_…md)

Сеть и недоверенные файлы (то, чего не покрывало ревью): SSRF в LLM (PTO_LLM_BASE_URL=http://169.254.169.254 уводил запрос на метаданные облака), перевёрнутая проверка адреса в vision, 1С с file:// и basic-auth по открытому http, повтор POST без Idempotency-Key (два документа в 1С), неограниченное чтение ответа, секреты в тексте ошибок; XLSX без лимитов и «тихие нули» (битая цена → 0 ₽, битая дата → сегодня), CSV-инъекция из чужой сметы. 34 новых теста

23_Ревью_e6de718_что_исправлено.docx (docs/23_…md), Ревью_e6de718_статус.xlsx

Ответ на внешнее ревью: 17 пунктов — 8 исправлено полностью, 2 частично, 5 в бэклоге с причиной; NameError в commit через MCP, синтаксис 3.12 в 3.11-поставке, открытый HTTP-MCP (теперь 127.0.0.1 + Bearer-токен + CORS без * + песочница путей), формальное подтверждение человеком, разрыв аудита при параллельной записи и удаление хвоста журнала (якорь), открытые работы в АОСР, классификатор (+57 сильных ключей, 16 примеров из ревью), Pillow 13.0.0

22_Ведомости_КР_расхода_стали_и_спецификации.docx (docs/22_…md)

Круг 9 — объёмы из ведомостей, а не из габаритов: 4 листа тома 7820/03-02-КР (спецификация на фундамент, котлован, ведомости расхода стали) — плита 2 871 м³ вместо оценки 5 259,2 м³ (+83 % завышения), арматура 376,4 т; арифметика ведомостей проверяется («Итого» плиты не сходится с суммой по диаметрам → low, в итог не идёт), марки бетона F50 против F150 — конфликт с адресатом, 8 конструкций — явный missing; ведомость с ценами: 19 строк, 42,8 млн ₽ по демо-ценам

21_Прогон_на_томе_КР_школа_Сертолово.docx (docs/21_…md)

Прогон на реальном томе КР: 7820/03-02-КР1, школа на 825 мест — 49 стр., 42 с текстовым слоем, 7 только с графикой; ведомостей объёмов/расхода стали в томе нет (и это сказано прямо); 14 параметров с цитатой и страницей, плита 5 259,2 м3 — расчёт по габаритам (MEDIUM, «оценка сверху»), арматура — вопрос «нужна ведомость расхода стали»

20_Стык_PDF_КР_объёмы_и_цены.docx (docs/20_…md)

Стык «PDF КР → объёмы → ведомость с ценами»: 6 takeoff-проектов проверены по GitHub API (код можно брать у одного — MIT), формат BOQ autoconst читается напрямую; уверенность строк не выбрасывается (HIGH в итог, MEDIUM с пометкой, LOW — в «не включено»), цены — из версий ФГИС ЦС на дату, расценку ФЕР ставит человек в журнал аудита

19_Материалы_заявка_приход_КС2.docx (docs/19_…md)

Материалы: заявка → приход → КС-2: 10 классов расхождений с ценой вопроса и адресатом, отсутствие двойного счёта (недопоставка и «акт без накладной» делят объём), единицы вместо количеств при несовпадении, act_materials: unknown вместо «материалов нет»; в review_summary — шестая проверка и открытый пункт «получить КС-2 с ресурсами»

18_Аудит_закупка_и_цены.docx (docs/18_…md)

Аудит-лог, закупка и версии цен: журнал со снимком «до/после», дельтой, автором и причиной (хэш-цепочка, подмена видна); заявка из сметы → сравнение КП с приведением к цене с НДС → решение человека; непригодное КП (нет срока действия цены) — в not_comparable с причиной; цены ФГИС ЦС версиями, цена на дату не берёт более свежую выгрузку

17_OSS_для_платформы_стройфирмы.docx (docs/17_…md)

Поиск готовых OSS-проектов под слои 2–9: 43 проекта в 9 слоях, лицензии сверены через GitHub API (звёзды, дата, LICENSE), у 22 можно брать код; честно про то, чего в OSS нет (сметы РФ, ФГИС ЦС, КС-2, БИТ)

16_Прогон_на_смете_1166Н_АРОС.docx (docs/16_…md)

Прогон на реальной смете АРОС: чтение выгрузки АРОС напрямую (47 позиций), работы отделены от материалов ФГИС ЦС (33/14), 5 отдельных актов по скрытым работам, протоколы и комплект документов — по группе акта (акт на борозды без протоколов испытаний), ПУЭ-7 пп. 1.8.37/1.8.39 в базе фрагментом → verified_partial

15_Классификатор_и_акты_по_скрытым_работам.docx (docs/15_…md)

Ответ на прогон на смете 1166/Н: классификатор v2 (сильные/слабые ключи, квалификаторы, доля вида работ в документе) — 46 из 47 позиций вместо 23; отдельный АОСР на каждую группу скрытых работ (7 актов, демонтаж и вывоз мусора вне актов); проверка норм по нормативной базе (verified / clause_missing / doc_missing) и cite_verify для цитат

14_Исполнительная_документация_и_схемы.docx (docs/14_…md)

Исполнительная документация — выпуск, а не только проверка: исполнительная схема из DXF (DOCX + PNG, ведомость объёмов, привязка к акту), АОСР по РД-11-02-2006, реестр ИД (XLSX) и проверка комплектности; 14 проверенных GitHub-проектов с лицензиями (ezdxf, pyHanko, IfcOpenShell, LibreDWG, OpenConstructionERP) — что берём, что только идеи

13_Сводка_проверки_review.docx (docs/13_…md)

Итог проверки одним ответом: что проверено (ok / warning / fail / skipped), что осталось, где нужно решение человека, сколько денег под риском и можно ли подписывать; правила вердикта, группировка 97 вопросов в 8 понятных, MCP-инструмент review_summary

12_Сравнение_с_БИТ_Строительство.docx (docs/12_…md)

1С/БИТ.Строительство vs pto-agent: матрица из 26 задач инженера ПТО (кто закрывает), где мы честно слабее, три уровня стыковки (файловый обмен → HTTP-сервис 1С → программный робот), реализованный контракт обмена CSV

11_Смежные_проекты_и_лицензии.docx (docs/11_…md)

Смежные проекты: 10 открытых сметных/обмерных проектов с проверенными звёздами и лицензиями, матрица «код можно / нельзя» (AGPL и «без лицензии» — только идеи), три сценария стыковки (внешний MCP-обмер, база ГЭСН/ФЕР, паттерны multi-agent), чего сознательно не делаем, дорожная карта

10_MCP_обвязка.docx (docs/10_…md)

MCP одной командой: установщик конфигов для Claude Desktop / Cursor / VS Code, HTTP-транспорт и Docker, настройки из окружения, 15 тестов протокола, правила безопасности

09_Портфель_актов_и_график_финансирования.docx (docs/09_…md)

Деньги под риском по объекту: реестр актов, покрытие проверкой 100 % после ретро-выпуска, разбивка по месяцам; непроверенный акт — «не оценено», а не «0 ₽»

08_Деньги_по_выпуску.docx (docs/08_…md)

Сколько стоит спор: конфликты пометок и расхождения ПТО → рубли по ценам сметы/КС-2; 1 850 000 ₽ под риском (5,42 % акта) на демо-выпуске, каждый рубль с формулой, «не оценено» вместо нуля

07_Фото_с_телефона_и_пакетная_обработка.docx (docs/07_…md)

Фото с телефона и выпуск целиком: калибровка по 4 точкам (гомография), выпрямление и выравнивание света, контроль качества съёмки; пакетная обработка 40 листов за сеанс со сводкой в XLSX/Markdown (конфликты, вопросы человеку, позиции)

06_Распознавание_сканов_redline.docx (docs/06_…md)

Распознавание сканов готово: скан листа с рукописными пометками → локальная VL-модель по API (или офлайн-CV без модели) → типизированные операции; анти-галлюцинационная проверка каждого bbox по чернилам, конфликты «согласовано»/объём против КС-2 уходят человеку, деньги по позициям, 14 MCP-инструментов (на тот круг)

05_CAD-модуль_и_MCP.docx (docs/05_…md)

CAD-модуль готов: headless DXF на ezdxf, корпоративный шаблон (слои/блоки/шрифты/рамка/штамп), белый список из 7 операций, dry_run/commit с подтверждением человека, сверка объёмов схемы с КС-2 (±5 %), MCP-сервер на 14 инструментов (stdio + http)

04_MVP_ИИ-агент_ПТО.docx (docs/04_…md)

Отчёт о сборке MVP: архитектура, результаты прогона, что переиспользовано из OSS и с какой лицензией, соответствие требованиям ТЗ, ограничения, дорожная карта этапа 2

pto_agent/mcp_server.py

Точка входа MCP-сервера (pto-mcp): фасад над CAD-модулем, настройки из PTO_MCP_*

mcp/, scripts/install_mcp.py

Готовые конфиги клиентов (Claude Desktop, Cursor, VS Code, http) и установщик: подставляет пути, не затирает чужие серверы, делает бэкап

Dockerfile, mcp/docker-compose.yml

HTTP-транспорт MCP в контейнере: /health, инспектор, журнал аудита на хосте

pyproject.toml

Пакет и точки входа: pto-agent, pto-cad, pto-mcp

tests/test_mcp_protocol.py

15 тестов протокола: рукопожатие, список инструментов, ошибки JSON-RPC, чистота stdout, схемы, http, установщик

pto_agent/integrations/one_c_http.py

Обмен с 1С по HTTP (уровень 2): акты и смета из HTTP-сервиса 1С, отправка проверенной КС-2 с Idempotency-Key, различимые ошибки (401/4xx/5xx), повторы только там, где безопасно

config/one_c.example.yaml

Конфиг HTTP-обмена: адрес сервиса, учётные данные из ${VAR} окружения, таймауты и повторы

tests/test_one_c_http.py

21 тест: фейковый HTTP-сервис 1С, аутентификация, 401/400/500, повторы, не-JSON, обе формы актов, идемпотентность, CLI

pto_agent/asbuilt/

Исполнительная документация: scheme (лист DXF + титул + ведомость объёмов + подписи, проверка оформления листа), aosr (ЧЕРНОВИК акта по действующей форме — приказ Минстроя № 344/пр, 7 пунктов; forms знает календарь форм), validation (хронология дат, нормы только с пунктами, РД, подписи и НРС), registry (реестр ИД в XLSX + комплектность по матрице видов работ), spec_from_estimate (спецификация акта из сметы/КС-2), cli (python3 -m pto_agent asbuilt …); чего нет в данных — прочерк и needs_input, а не выдуманное значение

pto_agent/audit.py

Журнал аудита: JSONL с хэш-цепочкой, append_change (снимок до/после, дельта по изменившимся полям, reason, reason_missing, ref), history/find/verify, выгрузка в xlsx; по схеме django-simple-history

pto_agent/procurement.py

Закупка: request_from_estimate (материалы из сметы, одинаковые коды склеиваются), validate_quote (реквизиты КП из схемы openprocurement.api), compare_quotes (приведение к цене с НДС, not_comparable, no_quotes), decide (решение человека с причиной в журнал), XLSX и отчёт

pto_agent/kr_pdf.py

Том КР из PDF: read_pdf_text (кэш страниц), find_schedules (есть ли ведомости — факт, а не ошибка), extract_facts (параметры с цитатой и страницей), extract_levels (перекрытия по надписям листов), derive_boq (объёмы только формулой из параметров; чего нет — в needs_input с адресатом)

pto_agent/tk.py

Черновик ТК (8 разделов) и ППР (10 разделов): нормативные ссылки со сверкой по базе (цитата либо явное «не проверено»), комплект ИД из матрицы, всё остальное — запрос человеку с адресатом; DOCX с местом для подписи, подтверждение с ФИО и ролью

pto_agent/tk_registry.py

Реестр ТК объекта: читает готовые черновики, группирует по объектам, ставит статус (черновик, не проверен / проверен инженером (не утверждена) / изменён после проверки — проверка недействительна / подтверждение без ФИО — не считается), сверяет отпечаток содержания (tk.content_fingerprint), verify() ловит удалённые и подменённые файлы, registry.json/md/xlsx + «кого ждём с данными»

pto_agent/cumulative.py

Накопительная ведомость: строки по коду и единице, количество и сумма по периодам, итог нарастающим, остаток к смете; 9 проверок (ACT_SUM_MISMATCH, DUPLICATE_ACT, BAD_NUMBER, UNIT_MISMATCH, NO_POSITIONS, SAME_PERIOD_DOUBLE, NEGATIVE_QTY, NOT_IN_ESTIMATE, OVER_ESTIMATE); cumulative.json/md/xlsx, кандидаты в АТН

pto_agent/atn.py

АТН на дополнительные работы: позиция проходит только с основанием (вид + ссылка) и ценой; needs_basis / no_price / rejected вместо выдуманных нулей; подтверждение с ФИО и ролью, отпечаток содержания; DOCX с основанием и местами подписей

pto_agent/docflow.py

Движение документации: реестр выдачи РД (редакции, штамп «В производство работ», подпись получившего, состояние документа, ссылки работ на РД) и реестр согласования ИД (комплект → замечания со сроками → устранение → повторная передача → подпись; подпись при открытых замечаниях и без ФИО/роли недействительна), подпись реестра человеком, JSON/Markdown/XLSX

pto_agent/correspondence.py

Переписка и участники: письма и запросы (основание, адресат, подписавший, срок ответа, ожидание ответа), лаборатории и геодезисты (аттестат, область, срок действия на дату работы, привязка результата), авторские дни и дни качества (участники, протокол, замечания со сроком и ответственным), подпись реестра человеком

pto_agent/quality_docs.py

Документы качества: реестр документов с привязкой к применённым партиям (материал, марка, фракция), проверка срока действия на дату применения (а не на сегодня), рабочий перечень типов документов, основание соответствия, файл и отметка «копия верна», состав требуемых документов из файла требований, стык с журналом входного контроля, can_transfer с причинами, подпись только человеком с ФИО и ролью, JSON/Markdown/XLSX/опись DOCX

pto_agent/journals.py

Журналы: общий журнал работ (полнота записи, классификация вида работ по матрице, хронология, погода для чувствительных работ, дубли, nan в объёме, сверка объёмов с актом КС-2 по видам работ) и журнал верификации закупленной продукции (партия → документ качества → решение → кто проверил; допуск без документа и по просроченному документу невозможен; списание без входного контроля — отдельно), can_close с причинами, подпись только человеком с ФИО и ролью, отпечаток содержания против правки после подписи, JSON/Markdown/XLSX

pto_agent/checklist.py

Чек-лист выполненных работ: пункты из файла организации или из матрицы/норм (только со ссылкой на документ и пункт), результаты «соответствует / не соответствует / не проверено», подпись с ФИО и ролью только на полностью проверенный чек-лист, can_close с причинами, отпечаток содержания против правки после подписи, DOCX с местами подписей

pto_agent/consumption.py

Расход материалов: нормы расхода с источником и сверкой по базе, потребность = объём × норма, списание против нормы (перерасход без причины — ошибка), лимит закупки против факта, давальческие (получено/израсходовано/возвращено/остаток, двойной счёт); consumption.json/md/xlsx

pto_agent/fingerprint.py

Отпечаток содержания документа и check_signature: подпись действительна только на проверенный текст (общий для реестра ТК и АТН)

pto_agent/numeric.py

Разбор чисел из внешних документов: nan/inf — не число, неразобранное не превращается в ноль, юникодный минус и бухгалтерские скобки, positive() для множителей. Используется в kr_pdf, kr_schedules, takeoff, prices

pto_agent/netguard.py

Сетевые предохранители: схема только http/https, запрет метаданных облака, https для внешних хостов, редирект только внутри хоста, предел размера ответа, очистка текста ошибок от адресов и учётных данных, csv_safe для выгрузок. Используется в llm, cad/vision/providers, integrations/one_c_http

pto_agent/kr_schedules.py

Ведомости расхода стали и спецификации: read_schedules, validate_schedules (арифметика «сумма по диаметрам против Итого», конфликт марок только внутри одного класса бетона, проверка правдоподобия кг/м³, пометка «перенесено с фото»), to_boq (одно количество из спецификации и ведомости не суммируется дважды; подозрительная сумма — low и не в итоге), coverage (чего в ведомостях нет — missing с адресатом, без долей от известного)

pto_agent/takeoff.py

Стык объёмов и цен: read_boq (формат autoconst + русские заголовки, кг → т), load_map/match_resource (только явные правила), build_draft (HIGH/MEDIUM/LOW гейт, цена из версии на дату, no_price вместо 0 ₽), confirm (человек, аудит, дельта), XLSX и отчёт

pto_agent/materials.py

Сверка материалов: read_receipts/read_act_materials (csv/xlsx, алиасы колонок), orders_from_decision (заказ = решение человека), reconcile (10 классов расхождений, деньги с формулой, unpriced вместо 0 ₽), XLSX и отчёт «кому идти»

pto_agent/prices.py

Цены версиями: импорт выгрузки (xlsx/csv) со снимком и digest, lookup(as_of) не отдаёт версию новее даты, price_history с процентами

data/reference/asbuilt_tools.json

Реестр 14 GitHub-проектов для ИД и схем: лицензия, звёзды, что берём и чего не берём; проверяется scripts/check_analogues.py --list

data/reference/work_type_requirements.json

Матрица комплектности и классификатор (профиль pto-agent/default@1.1): 17 видов работ, у каждого сильные/слабые ключи и квалификаторы, обязательные документы, протоколы с пунктами норм; электромонтаж — изоляция, петля «фаза-нуль», УЗО, заземление, освещение; демонтаж и вывоз мусора помечены как не скрытые работы

pto_agent/asbuilt/aros.py

Чтение сметы АРОС (html/markdown-выгрузка): разделы, позиции с ГЭСН/ФЕР/ФССЦпг, объёмы с формулой, отдельно работы и материалы ФГИС ЦС

data/input/kr1_schedules.json

Ведомости листов 2, 4–6 тома 7820/03-02-КР (перенесены с фото автора, needs_verification: true, в CI каталога нет)

data/demo/prices_kr1/, data/reference/takeoff_map_kr1.json

Версия цен от 15.09.2025 (10 ресурсов: В25 W6 F150 отдельно от базового В25) и 10 правил «позиция ведомости → код ресурса»

data/demo/kr1_schedules/

Результат прогона по ведомостям: kr_schedules_report.md (проверка, конфликты, missing), draft.xlsx

data/demo/kr1_run/

Результат прогона реального тома КР: kr_report.md (цитаты, вопросы), draft.xlsx

data/reference/takeoff_oss.json

Реестр takeoff-проектов: 6 репозиториев, звёзды и лицензии с GitHub API, код можно брать у одного

data/reference/tk_ppr_oss.json

Реестр ТК/ППР/ИД: 6 проектов с проверкой по дереву файлов и лицензии; выписка verified по каждому — что реально открыто в репозитории, а не что написано в README

data/reference/platform_oss.json

Реестр OSS под расширение в платформу: 43 проекта, 9 слоёв (сметы, закупки, подрядчики, финансы, график, CRM, поле, 1С, сквозные), лицензия, что берём и чего не берём, copy_allowed

scripts/check_platform_oss.py

Проверка реестра: структура, покрытие слоёв, лицензионная политика (exit 2 при попытке взять код из GPL/AGPL), сверка с GitHub --refresh

data/norms/

Рабочая нормативная база (ПУЭ-7 гл. 1.8 пп. 1.8.37/1.8.39 — фрагментом) + инструкция, как добавить документ

pto_agent/asbuilt/acts_plan.py

Отдельный акт на скрытые работы: смета режется по группам (борозды, проходки, трассы, щиты, освещение, заземление, испытания); демонтаж и вывоз мусора в акты не попадают и перечислены в excluded

pto_agent/asbuilt/norms_check.py

Сверка норм с базой data/norms: verified / clause_missing / doc_missing + дословная проверка цитаты (cite_verify)

scripts/make_demo_smeta_1166n.py, data/demo/smeta_1166n.xlsx

Демо-смета на 47 позиций по описанию прогона 1166/Н: автоматы, УЗО, провод в гофре, кабель, штробление, проходки, кронштейны под вентиляцию, демонтаж, вывоз мусора

data/demo/asbuilt/

Демо-спецификации: реестр ИД (5 документов, 56 листов) и АОСР № 114 на фундаментную плиту

tests/test_asbuilt.py

20 тестов: лист и ведомость в схеме, missing_fields, статус черновика, приложения ИД, реестр XLSX, виды пробелов комплектности, CLI и MCP

tests/test_asbuilt_rules.py

31 тест правил: форма № 344/пр против legacy, wording черновика, матрица по видам работ и электромонтаж, хронология дат, нормы без пунктов, НРС, спецификация из сметы, CLI и MCP

tests/test_procurement.py

26 тестов аудита, закупки и цен: цена на дату не берёт свежую выгрузку, КП без реквизитов в сравнение не идёт, приведение к НДС меняет победителя, решение человека ложится в журнал с причиной, подмена записи ломает хэш-цепочку, CLI и MCP

tests/test_materials.py

25 тестов: чтение накладных и акта, все классы расхождений, отсутствие двойного счёта, UNIT_MISMATCH без денег, unknown вместо «материалов нет», unpriced вместо 0 ₽, CLI, MCP, интеграция в сводку проверки

tests/test_takeoff.py

26 тестов стыка: чтение BOQ, кг → т, сопоставление по правилам, гейт уверенности, «нет цены» вместо нуля, цена на дату, подтверждение с аудитом, CLI, MCP, реестр OSS

tests/test_kr_pdf.py

18 тестов тома КР: отсутствие ведомостей как факт, факты с цитатами, опечатка «подала» не мешает прочитать 250 мм, габариты → объём плиты, число перекрытий из листов, высота подвала не угадывается, арматура — вопрос, а не ноль, CLI на реальном файле

tests/test_tk_work_types.py

8 тестов: прогон ТК по всем видам работ без нарушений, у каждого вида есть запросы данных и раздел ИД, у демонтажа явно написано «матрица не требует документов» + подтверждение, все несверенные нормы с причиной, в документе есть список того, что грузить в базу

tests/test_tk.py

20 тестов: норма с цитатой / без документа / без пункта, никаких выдуманных разделов (пустой раздел обязан быть запросом), статус «черновик» и запрет слов «готова к применению», подтверждение без ФИО не принимается, запись в аудит, ППР по смете, DOCX с таблицей сверки норм, CLI end-to-end

tests/test_docflow.py

21 тест: штамп «В производство работ» обязателен, подпись получившего, заменённая и неизвестная редакция, ссылки работ на РД, дубли, подпись при открытых замечаниях, анонимная подпись, просрочка и повторная передача, CLI и MCP

tests/test_correspondence.py

20 тестов: письмо без адресата/основания/подписи, сроки ответа, ответ без номера, аттестат и область аккредитации с проверкой на дату работы, привязка результата, заявка без результата, мероприятие без участников и протокола, замечания без ответственного и срока, CLI и MCP

tests/test_quality_docs.py

25 тестов документов качества: документ без реквизитов не принимается, товарный чек — не документ качества, документ на другую партию не закрывает применённую, фракция — часть наименования, срок сверяется с датой применения, копия без заверения, требования берутся из файла, стык с входным контролем, подпись без ФИО и при ошибках, правка после подписи, CLI и MCP через stdio

tests/test_journals.py

28 тестов журналов: неполная запись не проходит, вид работ определяется, дата назад — ошибка, погода только там, где объясняет материал, дубль и nan, закрытие без подписи и с ошибками невозможно, подпись без ФИО/роли, правка после подписи, построчная сверка с актом с дельтой, допуск без документа качества, просроченный документ, решение вне списка, проверяющий обязателен, дубль партии, списание без контроля, CLI и MCP через stdio

tests/test_checklist.py

23 теста чек-листов: пункт без источника не создаётся, источник из матрицы — это ссылка на пункт, «ок» вместо «соответствует» не принимается, подпись без ФИО, подпись при непроверенных пунктах, несоответствие без описания, приёмка работ при несоответствиях, правка после подписи, DOCX и CLI, MCP через stdio

tests/test_consumption.py

29 тестов расхода материалов: норма без источника не применяется, «справочно» против подтверждённого, коэффициент потерь только из нормы, перерасход с причиной и без, списание без нормы, лимит против факта, отсутствие цены не как 0 ₽, давальческие остаток/отрицательный остаток/двойной счёт, чтение колонок «причина»/«получено», CLI и MCP

tests/test_cumulative_atn.py

28 тестов ведомости и АТН: сумма акта ≠ сумма позиций, акт без позиций, дубль акта, двойное предъявление позиции, м² против м³, nan не ноль, сторно, позиции вне сметы; АТН без основания, без цены, с повтором, с nan-количеством, превышение сметы, анонимное подтверждение, DOCX, CLI и MCP через stdio

tests/test_tk_registry.py

18 тестов реестра: две карты в одном каталоге не затирают друг друга, свежий черновик — «не проверен», проверка без ФИО не считается, правка после проверки аннулирует подпись, группировка по объектам, в отчёте нет «готова к применению», копия файла не удваивает карты, удалённый файл виден verify(), CLI с кодом 2 и --strict, MCP tk_registry через stdio

tests/test_tk_ppr_oss.py

12 тестов: лицензионная политика реестра ТК/ППР (три проекта без лицензии — только идеи), обязательность verified, разбор construction-ai-core (ТК/ППР — внешний генератор), покрытие слоёв, отказ при copy_allowed без лицензии

tests/test_integrity_numbers.py

35 тестов: nan в габаритах, толщине, «Итого» и количестве; неразобранный диаметр как замечание, а не 0; дедупликация бетона по конструкции; единица ≠ единица цены, отрицательный объём и дубли строк вне итога; цена nan/≤ 0 в базе

tests/test_net_and_parsers.py

34 теста: SSRF и метаданные облака, file:// в клиенте 1С, повтор POST без ключа идемпотентности, предел размера ответа и блокировка редиректа на другой хост, секреты в тексте ошибки, политика класса данных в LLM и vision, лимиты XLSX, битые числа и даты как problems, экранирование CSV-формул

tests/test_review_fixes.py

43 теста по пунктам ревью: commit через MCP без NameError, парсинг всей поставки как Python 3.11, HTTP без токена → 401, отказ слушать сеть без токена, песочница путей, машинная идентичность в подтверждении, 120 записей аудита из 8 потоков, усечение хвоста через якорь, открытые работы вне актов, 16 примеров классификатора

tests/test_kr_schedules.py

25 тестов ведомостей: расхождение суммы с «Итого» как находка с обоими числами, марка В10 не конфликтует с В25, правдоподобие подано как эвристика, а не норматив, бетон из спецификации и ведомости не удваивается, этажи 2–3 и перекрытия — missing, отчёт не называет ведомость сметой, CLI и MCP-действие schedules

tests/test_platform_oss.py

11 тестов: покрытие слоёв 2–9, лицензионная политика (AGPL/GPL/Sustainable Use — только идеи), проект без лицензии, CLI --offline

tests/test_asbuilt_aros.py

21 тест: разбор выгрузки АРОС (шапка таблицы, colspan, формулы объёма), материалы против работ, материалы по актам, протоколы по группе, verified_partial для ПУЭ, прогон на реальной смете 1166/Н

tests/test_asbuilt_classifier.py

25 тестов: сильные ключи и квалификаторы, «ФЕРм» ≠ «ферма», «кладк» ≠ «прокладка», 46 из 47 позиций на смете 1166/Н, 7 актов по скрытым работам, демонтаж вне актов, три исхода проверки норм, cite_verify

pto_agent/review.py

Сводка проверки: собирает пять артефактов в один ответ — что проверено, что осталось, где нужен человек, деньги, вердикт; пропуск ≠ «ок», «не оценено» ≠ 0 ₽

tests/test_review.py

18 тестов: вердикты ready/needs_review/blocked/no_data, блокировки, группировка вопросов выпуска, деньги, markdown, CLI и MCP

pto_agent/integrations/one_c.py

Обмен с 1С/БИТ.Строительство: выгрузка проверенной КС-2 и реестра актов в CSV (utf-8-sig, ;, десятичная запятая), терпимое чтение смет и актов из 1С (синонимы шапок, cp1251, пробелы тысяч), «не оценено» вместо нуля

tests/test_one_c.py

12 тестов обмена: формат для 1С, режимы объёма (claim/journal/estimate), импорт сметы и актов, кодировки и разделители, круг «экспорт → импорт» без потери сумм

pto_agent/cad/external_takeoff.py

Внешний обмер по MCP: клиент (stdio/http, SSE), нормализация чужой схемы к нашей, сверка «чужой обмер ↔ наш DXF/смета», правило «не оценено ≠ 0», лицензионный режим «отдельный сервис» для AGPL

config/external_takeoff.example.yaml

Конфиг внешнего обмера: транспорт, команда/url, инструмент, лицензия; готовый self-check на нашем же MCP-сервере

tests/test_external_takeoff.py

22 теста: фейковые stdio- и http-серверы, SSE, ошибки JSON-RPC и isError, нормализация items/positions/lines, отказ на AGPL без подтверждения, совместимость с нашим сервером

pto_agent/cad/

CAD-модуль: drawing (чтение DXF), template (корпоративный шаблон), ops (белый список, валидация, dry_run/commit), diff, redline (пометки по расхождениям), takeoff (объёмы схемы ↔ акт), render (PNG), mcp_server (MCP stdio/http)

config/cad_template_corp_A.yaml

Корпоративный шаблон corp-A/v4: 8 слоёв, белый список блоков, стили, поля штампа, масштаб 1:100, допуск сверки ±5 %

drawings/, scripts/make_demo_dxf.py

Демо-чертёж A1 с заложенными дефектами оформления и машиночитаемыми объёмами; генератор + PNG-предпросмотр

out/cad/

План операций, журналы версий и аудита, выпущенная схема (DXF+PNG+манифест), предпросмотр «лист + фрагмент»

pto_agent/cad/vision/

Распознавание сканов: engine (тайлы, вызов модели, проверки), providers (OpenAI-совместимый API, лог вызовов), prompt+schema (версионированный промпт и строгая схема), calibrate (скан ↔ чертёж), imaging (маски чернил), reference+detect_offline (офлайн-CV), mock (заглушка VL-модели), plan (пометки → операции, конфликты с ПТО)

drawings/redline_scan.png, data/demo/redline_truth.json, data/demo/redline_texts.json

Демо-скан A1 с 5 рукописными пометками, эталон разметки и тексты, введённые инженером

scripts/make_demo_redline.py

Генератор демо-скана: шум, поворот, поля бумаги — и эталонных пометок

pto_agent/cad/vision/perspective.py

Фото с телефона: гомография по 4 точкам, выпрямление листа, выравнивание света, контроль качества снимка

pto_agent/portfolio.py

Портфель актов: покрытие проверкой, свод по актам и месяцам, сверка акта со сметой, отчёты portfolio.xlsx/md/json и диаграмма

scripts/make_demo_retro.py

Ретро-выпуск по прошлым актам: сканы + эталон пометок + сводка ПТО периода акта (сверка с количествами того акта, а не с текущим журналом)

data/demo/retro/

Сканы, эталон и манифесты ретро-выпуска: 15 листов по актам КС-2 №35 и №37

data/demo/acts/acts.json

Реестр актов объекта (КС-2 №35, №37, №38): суммы, статус проверки, ссылка на прогон выпуска; собирается scripts/make_demo_acts.py

pto_agent/impact.py

Стоимость споров: правила перевода расхождений в рубли, дедупликация по позиции, отчёты XLSX/Markdown и диаграмма «где деньги»

pto_agent/cad/vision/batch.py

Пакетная обработка выпуска: манифест, кеш по хэшу скана, изоляция ошибок листа, сводка XLSX/Markdown/JSON

drawings/redline_photo.jpg, data/demo/photo_anchors.json, data/demo/photo_truth.json

Демо-фото «с телефона» 2600×1950, 4 опорные точки и эталон пометок

data/demo/batch/

Демо-выпуск: 4 чертежа комплекта, 40 сканов, эталоны, тексты и manifest.json

scripts/make_demo_photo.py, scripts/make_demo_batch.py, scripts/demo_common.py

Генераторы демо-фото и демо-выпуска (общий рендер и рисование пометок)

tests/test_photo_batch.py

24 теста: гомография, отказы на плохих точках, равенство «фото = скан», качество съёмки, пакет, кеш, сводка, отчёты

tests/test_vision.py

24 теста распознавания: схема ответа, калибровка, mock-сервер, анти-галлюцинация, тексты инженера, конфликты с ПТО, MCP

tests/test_cad.py

24 теста CAD: DWG-отказ, проверка шаблона, белый список, HITL, diff, takeoff, MCP (включая stdio-процесс)

pto_agent/

Пакет: parsers → matching → reconcile → export/report, norms (RAG с проверкой цитаты), audit (hash-chain), llm (маршрутизация по классу данных), cli

scripts/make_demo_data.py, data/demo/

Генератор и сам демо-набор + expected.json — эталон расхождений

scripts/check_expected.py

Сверка прогона с эталоном expected.json: что найдено, что пропущено, что лишнее

tests/test_mvp.py

17 тестов: полнота выявления, дубли, единицы, арифметика, цитаты, применимость редакций, хэш-цепочка, маршрутизация моделей, экспорт КС-2

out/

Результаты прогона: ks2_draft.xlsx, discrepancies.xlsx/.csv, remainder.xlsx, report.html, norm_answer.json, audit.jsonl, summary.json, approval.json

docs/OSS_SBOM.csv

SBOM: компонент, версия, лицензия, тип использования, в поставке да/нет

data/reference/analogue_projects.json

Смежные проекты: репозиторий, лицензия, звёзды, «что берём / что не берём», тип интеграции; звёзды и лицензии сверяются с GitHub API

scripts/check_analogues.py

Проверка списка и лицензионной политики: --offline в CI, без флага — сверка с GitHub, --write — обновить данные; код возврата 2 при попытке «копировать AGPL»

tests/test_analogues.py

10 тестов политики: AGPL и проекты без лицензии никогда не «можно копировать», у MIT-проектов описано, что берём, подмена флага ломает сборку

requirements-pto.txt

Зависимости с лицензиями; запрещённые (AGPL/GPL, без лицензии) отмечены явно

1. Документы

Файл

Что внутри

Кому

ТЗ_ИИ-агент_ПТО_v1.2.docx

Полное ТЗ: 17 разделов + приложения A–F. Готово к согласованию

ИТ, ПТО, закупки

ТЗ_ИИ-агент_ПТО_v1.2.md

То же в markdown — для правок в git/Confluence

команда

01_Golden_set_и_методика_разметки.docx

ТЗ на эталонную выборку: состав 360 единиц, схемы разметки, метрики с порогами, регламент регрессии, критерии приёмки

ПТО + методолог

Видео_презентация_ИИ-агент_ПТО.mp4

Видео-презентация продукта, 3:36, 1080p, с озвучкой. 10 слайдов: проблема → 4 сценария MVP → как работает → прозрачность и остатки → исполнительные схемы → безопасность → ИИ по API → план и бюджет → что нужно для старта

руководство, инвесторы

Презентация_ИИ-агент_ПТО.pptx

14 слайдов для защиты бюджета: проблема → scope → архитектура → CAD → безопасность → рынок/OSS → план → бюджет → метрики → риски → ask

руководство

Дашборд_руководителя_ПТО.html

Экран руководителя. Стадии проекта (план/факт), остаточные объёмы по работам, деньги по договору и деньги под риском (сколько стоит каждый спор с актом — из сводки выпуска), стоимость и качество ИИ, журнал действий, список решений. Каждая цифра — с адресом источника. Открывается в браузере, без внешних зависимостей

руководство, ПТО

03_Подбор_подрядчика.docx

Шорт-лист исполнителей: 15 команд по GitHub-следу (проверка 02.11.2026), скоринг по 8 критериям, 4 модели контракта, рекомендуемая гибридная конфигурация, красные флаги

закупки, ИТ

Шорт-лист_подрядчиков_ПТО.xlsx

Скоринг-матрица с формулами (веса редактируются), 25 вопросов RFP с «хорошими» и «плохими» ответами, чек-лист проверки GitHub-профиля с API-командами

закупки, ИТ

04_MVP_ИИ-агент_ПТО.docx

MVP собран своими силами: архитектура прототипа, 7 найденных расхождений, SBOM и лицензии, соответствие AC-TR/AC-LLM, ограничения, план этапа 2

ИТ, ПТО

02_Прозрачность_и_ИИ_по_API.docx

ТЗ, разделы 18–19: прозрачность, стадии, остатки, отчёт руководителю; подключение ИИ-моделей по API (маршрутизация, бюджеты, fallback, приёмка модели)

ИТ, ИБ, ПТО

config/llm_providers.yaml

5 провайдеров (2 локальных + 2 РФ-облака + внешний запрещённый), 5 правил маршрутизации по классу данных, бюджеты, fallback, привязка промптов, пороги приёмки новой модели

ИТ, ИБ

db/002_transparency_llm.sql

Миграция: стадии и контрольные точки, снимки остатков и прогресса, платежи, провайдеры и журнал вызовов моделей, бюджеты, отчёты; представления v_work_remainder, v_object_progress, v_finance_position, v_stage_status, v_llm_cost_daily, v_trace_chain; триггер запрета выноса данных

разработка

2. Промпты и контракты инструментов

Файл

Назначение

prompts/01_ks2_reconciliation.md

«Сметчик»: КС-2, 7 классов расхождений, JSON-схема ответа

prompts/02_aosr_generation.md

«Документатор»: АОСР, комплектность ИД, чек-лист замечаний

prompts/03_norm_control_rag.md

«Нормативщик»: ответ только с цитатой, правила конфликтов норм, регрессионные тесты

prompts/04_asbuilt_scheme_cad.md

«Чертёжник»: redline → типизированные CAD-операции, белый список, блокирующие валидации

prompts/tools_schema.json

36 инструментов с JSON-схемами, guardrails, политикой логирования и лимитами

2а. Видео и его исходники

Файл

Назначение

video/narration.json

Сценарий: текст каждой реплики + содержание слайда (единый источник правды)

video/build_slides.py

Рендер 10 слайдов 1920×1080 (Pillow, DejaVu, без внешних ресурсов)

video/make_video.py

Сборка mp4: слайд + озвучка → сегмент → склейка (ffmpeg из imageio-ffmpeg)

video/slides/*.png

Готовые кадры — можно использовать в PowerPoint или на печать

Пересобрать видео целиком:

python3 video/build_slides.py
python3 video/make_video.py

3. Данные и API

Файл

Назначение

db/schema.sql

PostgreSQL 16: 40+ таблиц — объекты, договоры, сметы, журналы, КС-2/КС-3, ИД и связи, комплектность, нормативы с редакциями, CAD-операции, задачи агентов, append-only журнал аудита с хэш-цепочкой, RLS, 3 представления. Проверено парсером PostgreSQL

api/openapi.yaml

OpenAPI 3.1, 33 пути: КС-2/КС-3, сверка, комплектность, нормы, CAD (dry_run/commit), выпуск схем, задачи, аудит. Проверено openapi-spec-validator. Теги reports (отчёт руководителю, остатки, финансы, стадии) и llm (провайдеры, стоимость, предпросмотр маршрутизации)

golden_set/templates/*.jsonl

Шаблоны разметки GS-01…GS-05

golden_set/templates/passport.csv

Паспорт выборки (инвентаризация)

golden_set/tools/validate_gs.py

Автопроверки разметки: JSON, обязательные поля, арифметика КС-2, допустимые типы ошибок, спаны, bbox

4. Как пользоваться

# пересобрать ТЗ или ТЗ на golden set после правок markdown
python3 docs/build_docx.py "ТЗ_ИИ-агент_ПТО_v1.2.md" "ТЗ_ИИ-агент_ПТО_v1.2.docx"
python3 docs/build_docx.py "docs/01_Golden_set_и_методика_разметки.md" "01_Golden_set_и_методика_разметки.docx"

# пересобрать презентацию
python3 docs/build_pptx.py

# пересобрать дашборд руководителя (числа считаются из одного массива данных)
python3 docs/build_dashboard.py

# проверить файлы разметки перед сдачей
python3 golden_set/tools/validate_gs.py golden_set/templates/

# CAD-модуль: чертёж → проверка шаблона → пометки → версия
python3 scripts/make_demo_dxf.py
python3 -m pto_agent cad validate --file drawings/korpus2_plan_v1.dxf
python3 -m pto_agent cad plan     --file drawings/korpus2_plan_v1.dxf --summary out/summary.json
python3 -m pto_agent cad apply    --file drawings/korpus2_plan_v1.dxf --plan out/cad/plan.json --mode dry_run
python3 -m pto_agent cad apply    --file drawings/korpus2_plan_v1.dxf --plan out/cad/plan.json \
        --mode commit --confirm-by "Иванов И.И."
python3 -m pto_agent mcp --transport http --port 8765     # MCP-инспектор и JSON-RPC на /mcp

# распознавание скана с пометками: скан → операции → проверка → commit с подписью
python3 scripts/make_demo_redline.py
python3 -m pto_agent cad scan --scan drawings/redline_scan.png \
        --file drawings/korpus2_plan_v1.dxf --engine vlm --json out/cad/scan.json
python3 -m pto_agent cad redline-from-scan --scan drawings/redline_scan.png \
        --file drawings/korpus2_plan_v1.dxf --engine offline \
        --texts data/demo/redline_texts.json --mode plan_only

# фото с телефона: 4 угла листа → выпрямление → пометки
python3 scripts/make_demo_photo.py
python3 -m pto_agent cad scan --scan drawings/redline_photo.jpg \
        --file drawings/korpus2_plan_v1.dxf --engine offline \
        --anchors data/demo/photo_anchors.json --rectified out/cad/photo_rectified.png

# выпуск целиком: 40 листов за сеанс, сводка в out/cad/batch/
python3 scripts/make_demo_batch.py
python3 -m pto_agent cad scan-batch --manifest data/demo/batch/manifest.json \
        --engine vlm --out out/cad/batch
python3 -m pto_agent cad impact --batch out/cad/batch/batch_summary.json \
        --summary out/summary.json --out out/cad/impact --with-background
python3 -m pto_agent cad impact --acts data/demo/acts/acts.json \
        --summary out/summary.json --out out/cad/portfolio
# итог проверки: что проверено, что осталось, где нужен человек (и можно ли подписывать)
python3 -m pto_agent review --summary out/summary.json --batch out/cad/batch/batch_summary.json \
        --impact out/cad/impact/impact.json --acts data/demo/acts/acts.json --out out/review
# исполнительная документация: схема из DXF, черновик АОСР, реестр ИД, комплектность
python3 -m pto_agent asbuilt scheme --file drawings/korpus2_plan_v1.dxf \
        --object-name "ЖК «Северный», корпус 2" --work "Фундаментная плита" \
        --code ИС-01-26 --act-ref "КС-2 №38" --executor "Иванов И.И." \
        --reviewer "Петров П.П." --out out/asbuilt
python3 -m pto_agent asbuilt aosr --spec data/demo/asbuilt/aosr_ks38.json --out out/asbuilt
python3 -m pto_agent asbuilt registry --spec data/demo/asbuilt/registry.json --out out/asbuilt
# электромонтаж: матрица требует протоколы изоляции, «фаза-нуль», УЗО, заземления
python3 -m pto_agent asbuilt registry --spec реестр_эл.json --work-type electrical
# спецификация акта из сметы (работы, виды работ, нормы с пунктами) и матрица требований
python3 -m pto_agent asbuilt spec --smeta data/demo/smeta_v1.xlsx --object-name "Объект"
python3 -m pto_agent asbuilt requirements --work-type electrical
# смета АРОС читается напрямую — что агент в ней увидел (разделы, работы, материалы)
python3 -m pto_agent asbuilt smeta --smeta <выгрузка_АРОС>.md
# отдельный акт на каждую группу скрытых работ (демонтаж и вывоз мусора — вне актов)
python3 -m pto_agent asbuilt acts --smeta <выгрузка_АРОС>.md \
        --act-prefix "АОСР-1166/Н" --write-specs --out out/asbuilt/acts
# проверка норм по нормативной базе (непроверенная ссылка так и называется)
python3 -m pto_agent asbuilt verify-norms --spec out/asbuilt/acts/specs/aosr_1.json
python3 -m pto_agent asbuilt forms      # какая форма АОСР действует на дату
# обмен с 1С/БИТ.Строительство: смета и акты из 1С → наши структуры
python3 -m pto_agent import-1c --smeta выгрузка_сметы.csv --acts реестр_кс2.csv --out out/1c
python3 -m pto_agent export-1c --summary out/summary.json --out out/1c/ks2_for_1c.csv
# то же по HTTP, без файлов: акты из 1С → портфель, проверенная КС-2 → обратно
python3 -m pto_agent sync-1c --config config/one_c.example.yaml --period 2026-09 \
        --summary out/summary.json --push --out out/1c
# внешний обмер по MCP (чужой сервер меряет, мы сверяем) — self-check на своём сервере
python3 -m pto_agent cad takeoff-external --config config/external_takeoff.example.yaml \
        --pdf drawings/korpus2_plan_v1.dxf --file drawings/korpus2_plan_v1.dxf --out out/cad/external
python3 scripts/make_demo_retro.py && python3 scripts/make_demo_acts.py   # ретро-выпуск

# полный цикл MVP агента (сверка → черновик КС-2 → отчёт → аудит)
python3 -m pto_agent run --data data/demo --out out
python3 -m pytest tests -q

Тесты, которым нужны тяжёлые демо-артефакты (сканы выпуска, ретро-выпуски, out/cad/batch*), помечены skipif и просто пропускаются, если артефактов нет: свежий клон даёт 0 падений (132 passed / 24 skipped после make_demo_redline.py), а джоб e2e в CI собирает весь набор и прогоняет все тесты на реальных отчётах.


# поднять БД (после установки расширений pgcrypto, vector, pg_trgm)
psql -d pto_agent -f db/schema.sql
psql -d pto_agent -f db/002_transparency_llm.sql

5. Прозрачность и ИИ по API — зафиксированные правила

  1. Две цифры вместо одной: «выполнено» (физический факт по журналам) и «закрыто» (подписанный акт). Работы без документов не списываются в остаток — они висят как «готово к предъявлению».

  2. Остаток = смета − закрыто подписанными КС-2 − выполнено, но не закрыто актом. Одна формула на всю систему, сумма по видам работ обязана сходиться с итогом до рубля.

  3. Каждая цифра отчёта имеет trace_ref — раскрывается до документа, листа и строки. Журнал append-only с хэш-цепочкой, изменение записей невозможно технически.

  4. Модель — сменный компонент. Подключение через единый OpenAI-совместимый шлюз; данные классов «коммерческая тайна» и «ПДн» обрабатываются только в контуре заказчика — блокировка на уровне шлюза и триггера БД.

  5. Бюджет ИИ с жёстким стопом: при 80 % лимита — предупреждение, при 100 % — внешние вызовы прекращаются, система продолжает работать на локальных моделях.

6. Пять решений, которые зафиксированы в ТЗ

  1. MVP = 4 сценария, а не 18. КС-2/КС-3, сверка объёмов, комплектность ИД, АОСР. Исполнительные схемы — этап «CAD + 2.0» (июнь–декабрь 2027).

  2. Арифметику делает код, а не модель (calc_totals + принцип детерминизма расчётов).

  3. Ответ без цитаты запрещён. cite_verify блокирует выдачу, если цитата не найдена в указанном пункте указанной редакции. Цель — ≤ 0,5 % выдуманных ссылок.

  4. CAD-модуль: headless-first (ezdxf + ODA), live-мост — опция. Плата — потеря объектов при конвертации, отсюда обязательное сравнение количества объектов до/после и запрет выпуска при расхождении.

  5. Собственная сборка, а не форк «готового каркаса». Аудит GitHub 02.11.2026: у construction-ai-core нет лицензии (только идеи), AutoGAD под AGPL-3.0 (не для закрытого продукта). Рабочая база: ai-pmo-skills (MIT), DDC_Skills (MIT), Autocad-MCP (MIT), cad-ai-agent (Apache-2.0), ezdxf (MIT).


7. Ближайшие шаги (этап 0, 10.11 – 05.12.2026)

  1. Согласовать ТЗ v1.2 и ТЗ на golden set, назначить владельца выборки.

  2. Собрать 50–100 пакетов документов + NDA/обезличивание (Приложение E ТЗ, п.2.2 ТЗ на golden set).

  3. Разметить: 30 актов КС-2, 20 пакетов ИД, 200 нормативных вопросов, 20 redline-кейсов, 60 документов на извлечение полей.

  4. Провести базовый хронометраж «как есть» — точка отсчёта для метрик и для критериев остановки.

  5. Параллельно — 2 демо вендорских решений на своих данных (страховка на случай «купить вместо делать»).

8. Что можно сделать следующим

  • Схема БД «как есть» → миграции Alembic/Flyway и seed-данные для демо-стенда.

  • Реализовать calc_totals + reconcile_volumes как отдельный сервис с тестами на golden set.

  • ТЗ на пилот: регламент работы инженера с агентом, инструкция пользователя, форма журнала замечаний.

  • Расчёт ROI под фактические цифры компании (ФОТ ПТО, объём ИД, штрафы за просрочку).

  • Прототип CAD-пайплайна на ezdxf: чтение DWG/DXF, список слоёв, применение 3 операций, diff-растр.

9. Смежные проекты и что мы у них берём

Проверенный список открытых проектов по сметам и обмерам — в docs/11_Смежные_проекты_и_лицензии.md, машиночитаемо — data/reference/analogue_projects.json (звёзды и лицензии сверены с GitHub API 2026-11-03).

Проект

Лицензия

Что берём

bidwright

AGPL-3.0

декомпозицию intake → takeoff → pricing → review → quote; только как идею

opentakeoff

AGPL-3.0

обмер как внешний MCP-сервер, который поднимает сам пользователь — наш код остаётся MIT

orama-core

MIT

RAG по расценкам с обязательной ссылкой на источник, схему «код → единица → объём → цена»

estimaite-mcp

MIT

схему инструментов upload → measure → price → export для наших MCP-описаний

DDC_Skills

MIT

роли QTO / Pricing / Validation и формат skill «когда вызывать, входы, выходы, критерий успеха»

OpenConstructionEstimate

NOASSERTION

базу ГЭСН/ФЕР/ТЕР для позиций, которых нет в смете — после ручной проверки условий

Правило простое: лицензия сильнее звёзд. В MIT-поставку не попадает ни строчки AGPL-кода и кода без лицензии; такие проекты либо остаются внешним процессом, либо дают только идею. Проверяется автоматически:

Шаг 1 дорожной карты сделан: адаптер pto_agent/cad/external_takeoff.py, CLI python3 -m pto_agent cad takeoff-external и 15-й MCP-инструмент external_takeoff — агент сам зовёт чужой обмер и сверяет его с нашим чертежом; чужой код остаётся за границей протокола.

python3 scripts/check_analogues.py --offline    # структура и политика, без сети (то же делает CI)
python3 scripts/check_analogues.py              # сверить звёзды и лицензии с GitHub API
python3 -m pytest tests/test_analogues.py -q     # 10 тестов политики

10. Как мы соотносимся с 1С/БИТ.Строительство

Подробно — docs/12_Сравнение_с_БИТ_Строительство.md (матрица из 26 задач инженера ПТО и три уровня стыковки).

БИТ.Строительство (1С)

pto-agent

Что это

отраслевая ERP: 16 модулей, Реестр российского ПО

AI-агент контроля и анализа, MIT

Сильная сторона

учёт объектов, смет, материалов, КС-2/КС-3/КС-6а/М-29, БДР/БДДС, Гантт, архив ИД, ЭП

сверка КС-2 (7 классов расхождений), «деньги под риском», распознавание сканов и фото, CAD-redline, MCP

Чего нет

распознавания рукописных пометок, «стоимости спора», правки DXF по пометкам

учёта, финансов, планирования, печатных форм, архива с ЭП

Стыковка

файловый CSV-обмен → HTTP-сервис 1С (оба реализованы) → программный робот по расписанию

import-1c / export-1c / sync-1c

Кому что

«что у нас есть и сколько потратили»

«правда ли то, что предъявляют, и сколько стоит спор»

Мы не заменяем ERP: контроль нечего проверять там, где нет учёта. Пилот поверх работающей 1С делается файловым обменом за неделю и не требует доступа к конфигурации.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Drive the OpenTakeoff construction takeoff engine from any MCP client: open plan PDFs, set and verify drawing scale, one-click room areas, measure lengths, and export takeoff quantities. Runs locally over stdio via npx -y opentakeoff-mcp.
    62
    768
    AGPL 3.0
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for full AutoCAD automation, AutoCAD LT automation, and headless DXF generation. It provides 8 consolidated tools for drawing, entity, layer, block, annotation, P&ID, view, and system operations via MCP stdio transport.
    12
    45
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server for hard decoration quoting: parses DXF floor plans, reconstructs room topology, computes material quantities, and generates deterministic itemized quotes with tiered pricing. Exposes tools parse_dxf, compute_quote, and generate_report via stdio.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Provides construction-supervision tools for small-to-medium building projects, including stage guidance, inspection checklists, progress tracking, next-stage recommendations, and quotation analysis. It enables local, standards-based MCP interaction over stdio without third-party MCP SDKs.
    5
    MIT