altium-kp
by luxsordel
README.md
# altium-kp — MCP-сервер для Altium Designer
**MCP server that lets an AI assistant (Claude Code, Claude Desktop, Cursor, any MCP client) drive Altium Designer
on Windows without screen automation**: schematic entry, ГОСТ/ЕСКД-style drawings, ECO, board outline, design rules,
placement, autorouting, DRC, board statistics, DXF export for AutoCAD and BOM generation.
Built for student PCB projects (курсовой «Разработка печатного узла средствами САПР»), useful for any Altium work.
Сервер управляет **запущенным Altium Designer** через его встроенный DelphiScript: генерирует скрипт, запускает его
командой `X2.EXE -RScriptingSystem:RunScript` и получает результат в JSON. Мышь и экран не используются.
Модальные окна Altium перехватываются: снимок окна возвращается ассистенту, окно закрывается, скрипт,
остановленный в отладчике, снимается. Altium не остаётся заблокированным.
Проверено на **Altium Designer 25.5** (Windows 11). Должно работать на AD 20+.
## Что умеет (47 инструментов, полный список — [TOOLS.md](TOOLS.md))
| Этап | Инструменты |
|---|---|
| Проект и библиотеки | `project_create` (PrjPcb + SchDoc + PcbDoc, IntLib распаковывается в проект), `project_open/close/add_documents/save_all`, `lib_list_components`, `lib_extract_intlib` |
| **УГО по ГОСТ** | `lib_create_gost_symbols`: резисторы, конденсаторы (в т.ч. оксидные), диоды, стабилитроны, светодиоды, транзисторы n-p-n/p-n-p (и зеркальные), батареи, катушки, кварц, кнопки, соединители, микросхемы по ГОСТ 2.743; `lib_create_symbols` — любой символ из примитивов |
| Схема | `sch_place_components` (возвращает точки подключения выводов), `sch_wire` (ортогональные линии связи вывод→вывод, Т-ответвления с точками), `sch_connect` (метки цепей / порты питания), `sch_draw`, `sch_update_components`, `sch_delete`, `sch_get_components` |
| **Оформление по ЕСКД** | `sch_gost_sheet` (формат A4…A1, рамка 20/5 мм, основная надпись по форме 1 ГОСТ 2.104), `sch_gost_style` (шрифт ISOCPEUR, размеры по ГОСТ 2.304, горизонтальные позиционные обозначения у корпуса, чёрный цвет) |
| ERC и список связей | `project_compile` (ошибки, цепи, отчёт `.md` для приложений) |
| Плата | `pcb_import_changes` (ECO), `pcb_set_board` (контур, начало координат, keep-out, крепёжные отверстия), `pcb_set_rules`, `pcb_get_components`, `pcb_place_components` (`by_center`), `pcb_auto_place_grid`, `pcb_autoroute` (Situs), `pcb_unroute`, `pcb_remove_rooms` |
| Проверка и оценка | `pcb_run_drc` (нарушения с объектами, отчёт), `pcb_statistics` (коэффициент заполнения, длины проводников по слоям и цепям, ширины, переходные, таблица отверстий, неразведённые связи) |
| Выпуск документации | `pcb_export_dxf` (1:1, мм: контур, медь, площадки, отверстия с условными знаками, таблица сверления — для чертежа ПП в AutoCAD), `bom_export` (перечень элементов по ГОСТ 2.701 в `.docx/.xlsx/.csv`) |
| Расчёты | `calc_pcb_mounting` (ширина проводников по току и падению напряжения, зазоры, отверстия, контактные площадки, переходные — ГОСТ 23751), `calc_board_size` (МЭК 297-3 / ГОСТ 10317), `calc_power` |
| Всё остальное | `altium_run_script` (любой DelphiScript с помощниками), `altium_run_process`, `altium_dialogs`, `altium_click_button`, `altium_screenshot`, `altium_status` |
Пример результата: [examples/blinker](examples/blinker) — мультивибратор от пустой папки до схемы Э3 на листе A3 с основной
надписью, разведённой платы, DRC, DXF и перечня элементов, одним скриптом.
## Установка
Нужны Windows, Altium Designer, Python 3.10+.
```powershell
git clone https://github.com/luxsordel/altium-kp-mcp.git
cd altium-kp-mcp
python -m venv .venv
.venv\Scripts\pip install -e .
```
Claude Code:
```powershell
claude mcp add --scope user altium-kp -- "<path>\altium-kp-mcp\.venv\Scripts\python.exe" -m altium_kp
```
Claude Desktop / другие клиенты (`claude_desktop_config.json`):
```json
{
"mcpServers": {
"altium-kp": {
"command": "C:\\path\\altium-kp-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "altium_kp"]
}
}
}
```
Сервер сам находит `C:\Program Files\Altium\AD*\X2.EXE` (новейшую версию) и запускает Altium, если тот закрыт.
Переменные окружения: `ALTIUM_X2` — путь к X2.EXE, `ALTIUM_KP_EXCHANGE` — папка обмена (по умолчанию `C:\Users\Public\altium_kp`).
Для текстов по ГОСТ нужен шрифт **ISOCPEUR** (ставится с AutoCAD; можно указать другой в `sch_gost_style`/`sch_gost_sheet`).
## Типичный сценарий (что просить у ассистента)
1. «Создай проект в папке X с библиотекой Miscellaneous Devices.IntLib и сгенерируй библиотеку ГОСТ-УГО с посадочными местами…»
2. «Нарисуй схему по этому списку цепей на листе A2 по ГОСТ, основная надпись: …» → `sch_place_components` + `sch_wire` + `sch_gost_sheet` + `sch_gost_style`
3. «Проверь ERC и перенеси на плату» → `project_compile`, `pcb_import_changes`
4. «Рассчитай печатный монтаж для класса точности 3, плата 100×80, выставь правила, расставь компоненты, разведи» → `calc_*`, `pcb_set_board`, `pcb_set_rules`, `pcb_place_components`, `pcb_autoroute`
5. «DRC, коэффициент заполнения, DXF для AutoCAD и перечень элементов» → `pcb_run_drc`, `pcb_statistics`, `pcb_export_dxf`, `bom_export`
## Ограничения (честно)
- Только Windows и только с установленным Altium Designer (используется его скриптовый движок).
- Зеркалирование размещённых компонентов из скрипта не работает — для транзисторов есть зеркальные УГО (`VT_NPN_M`, `VT_PNP_M`).
- Приоритет правил из скрипта не задаётся — `pcb_set_rules` делает области правил ширины непересекающимися.
- Толщина/материал платы — в Layer Stack Manager (скриптовое API стека в AD25 только для чтения).
- Коэффициенты в `calc_pcb_mounting` (j_доп = 20 А/мм², позиционные допуски) типовые — сверяйте с вашей методичкой.
- Если в Altium открыт другой проект с документами тех же имён, компилятор Altium их путает — `project_compile` предупреждает, закройте лишний проект (`project_close`).
- Автотрассировщик и `pcb_auto_place_grid` — отправные точки; качественная расстановка задаётся координатами (`by_center`).
- Сервер не подписан и запускает Altium с параметрами командной строки; проверяйте результат скриншотами (`altium_screenshot`).
## Как это устроено
- `altium_kp/bridge.py` — запуск DelphiScript в Altium, ожидание результата, перехват окон, межпроцессная блокировка.
- `altium_kp/prelude.pas`, `lib.pas` — помощники DelphiScript (JSON-вывод, поиск проектов/документов, схема, плата).
- `altium_kp/server*.py` — инструменты MCP; `gost.py` — геометрия УГО и основной надписи; `calc.py`, `export.py` — расчёты, DXF, перечень.
Подводные камни DelphiScript, найденные по ходу (могут пригодиться): обратный слэш в строковых литералах — escape (используйте `Chr(92)`);
`if True or (...)` не разбирается; объекты платы, сложенные в `TList`, нельзя удалить (ищите и удаляйте по одному);
`Rule.Priority` не присваивается; процессы ECO/компиляции работают с «текущим» проектом (`DM_SetAsCurrentProject`);
компилятор кэширует единицы и размер листа при открытии документа.
## Благодарности
Идея связки Python ↔ DelphiScript и шаблон скриптового проекта `KP_Exec.PrjScr` — по мотивам
[coffeenmusic/altium-mcp](https://github.com/coffeenmusic/altium-mcp) (MIT). Хорошо дополняет этот сервер:
[embedded-society/altium-designer-mcp](https://github.com/embedded-society/altium-designer-mcp) — чтение/запись `.SchLib/.PcbLib` без Altium.
## Лицензия
MIT
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessOutdated data