1c-formsserver
MCP-сервер для генерации, валидации, конвертации и поиска управляемых форм 1С:Предприятие.
Поддерживает три формата: Конфигуратор (logform), Managed (managed) и EDT (edt).
Быстрый старт
Docker (рекомендуется)
docker compose up -d
Сервер доступен на http://localhost:8011/mcp.
Локально
pip install -e .
python -m mcp_forms
Подключение к Claude Code
В settings.json:
{
"mcpServers": {
"1c-forms": {
"url": "http://localhost:8011/mcp"
}
}
}
Форматы форм
Сервер работает с тремя форматами Form.xml / Form.form:
Конфигуратор (logform) |
Managed (managed) |
EDT (edt) |
|
|---|---|---|---|
| Файл | Form.xml |
Form.xml |
Form.form |
| Root | <Form xmlns="...xcf/logform"> |
<ManagedForm xmlns="...xcf/managed"> |
<form:Form xmlns:form="...dt/form"> |
| Элементы | <InputField name="X" id="1"> |
<InputField><Name>X</Name><Id>1</Id> |
<items xsi:type="form:FormField"><name>X</name><id>1</id><type>InputField</type> |
| DataPath | <DataPath>Объект.Поле</DataPath> |
<DataPath>Объект.Поле</DataPath> |
<dataPath xsi:type="form:DataPath"><segments>Объект.Поле</segments></dataPath> |
| Типы | <v8:Type>cfg:CatalogObject.X</v8:Type> |
<Type>CatalogObject.X</Type> |
<valueType><types>CatalogObject.X</types></valueType> |
| Companion | <ContextMenu> + <ExtendedTooltip> |
нет | <contextMenu> + <extendedTooltip> |
| ExtInfo | нет | нет | <extInfo xsi:type="form:InputFieldExtInfo"> |
Формат определяется автоматически по namespace корневого элемента. Конвертация между всеми тремя форматами с сохранением семантики.
MCP-инструменты (18)
Генерация форм
generate_form_template — быстрая генерация типовой формы по шаблону. Лучший выбор для начала.
Параметры:
template: "catalog_element" | "document" | "data_processor"
object_name: имя объекта ("Номенклатура", "ЗаказКлиента")
fields: список полей (["Наименование", "Артикул"])
format: "logform" (по умолчанию) | "managed" | "edt"
Для document:
header_fields: поля шапки (["Дата", "Номер", "Контрагент"])
table_name: имя ТЧ ("Товары")
table_columns: колонки ТЧ (["Номенклатура", "Количество", "Сумма"])
generate_form — генерация по произвольной JSON-спецификации. Для нестандартных форм.
Параметры:
spec: {
format: "logform" | "managed" | "edt",
object_type: "Catalog" | "Document" | "DataProcessor",
object_name: "Номенклатура",
title: "Заголовок формы",
attributes: [
{name: "Объект", type_name: "CatalogObject.Номенклатура", is_main: true, save_data: true}
],
elements: [
{name: "Поле", data_path: "Объект.Поле", field_type: "InputField"},
{name: "Группа", group_type: "UsualGroup", title: "Заголовок", direction: "Vertical",
children: [{name: "Поле2", data_path: "Объект.Поле2"}]},
{name: "Таблица", data_path: "Объект.Товары",
columns: [{name: "Номенклатура", data_path: "Объект.Товары.Номенклатура"}]}
]
}
generate_form_from_metadata — автогенерация на основе метаданных из EDT. Самый быстрый способ при наличии EDT.
Параметры:
object_type: "Catalog" | "Document" | "DataProcessor"
object_name: имя объекта
format: "logform" | "managed" | "edt"
include_table_parts: true | false (включать ТЧ, по умолчанию true)
list_form_templates — список доступных шаблонов с описанием параметров.
Валидация
validate_form — проверка Form.xml / Form.form на ошибки. Вызывать после каждой генерации.
Параметры:
xml_content: содержимое файла формы
Проверки:
- logform: уникальность id, companion-элементы (ContextMenu, ExtendedTooltip),
имена атрибутов, привязка DataPath → Attribute
- edt: xsi:type у items, уникальность id (раздельно для items/attributes/commands),
dataPath/segments, структура attributes
- managed: базовая проверка структуры
get_form_info — быстрый обзор формы: формат, количество элементов, атрибутов, структура.
validate_form_edt — расширенная валидация: встроенные проверки + проверки EDT (если EDT доступен).
Параметры:
xml_content: содержимое формы
form_fqn: FQN формы в EDT (напр. "Catalog.Номенклатура.Form.ФормаЭлемента"), опционально
Конвертация
convert_form — конвертация между форматами.
Параметры:
xml_content: исходный XML
target_format: "logform" | "managed" | "edt"
Маршруты:
logform ↔ managed — напрямую
logform ↔ edt — напрямую
managed ↔ edt — через промежуточный logform
При конвертации:
- Companion-элементы добавляются/преобразуются автоматически
- DataPath конвертируется между форматами (точечная нотация ↔ segments)
- Типы:
cfg:prefix добавляется/удаляется автоматически - Структура элементов: теги ↔ items/xsi:type
Схема и справка
get_form_prompt — полная база знаний по Form.xml: теги, атрибуты, допустимые значения. Обязательно вызвать перед первой генерацией в сессии — без этого LLM не знает допустимые теги.
get_form_schema — JSON-справочник элементов формы с описанием свойств.
get_xcore_model_info — метамодель EDT из Xcore: классы (FormField, FormGroup, Table, Button, Decoration), перечисления, свойства.
Поиск примеров
search_form_examples — поиск форм в базе знаний по тексту (FTS) или вектору (embeddings).
Параметры:
query: поисковый запрос ("форма справочника с таблицей")
object_type: фильтр по типу ("Catalog", "Document")
limit: количество результатов (по умолчанию 5)
index_forms — индексация Form.xml из директории конфигурации в базу поиска.
Параметры:
directory: путь к конфигурации (напр. "/path/to/src")
pattern: глоб-паттерн (по умолчанию "**/Form.xml")
get_form_example — загрузить полный XML примера по id из результатов поиска.
EDT интеграция
Требует запущенный EDT MCP сервер (EDT_ENABLED=true).
edt_status — проверить доступность EDT. Вызвать перед другими EDT-инструментами.
get_object_metadata — получить реквизиты и табличные части объекта из проекта EDT.
Параметры:
object_type: "Catalog" | "Document" | "DataProcessor" и др.
object_name: "Номенклатура"
form_screenshot — PNG-скриншот формы из WYSIWYG-редактора EDT.
Параметры:
form_fqn: "Catalog.Номенклатура.Form.ФормаЭлемента"
Информация
get_server_info — версия сервера, список инструментов, поддерживаемые форматы.
Типовые сценарии
Создать форму для EDT-проекта
1. get_form_prompt → загрузить базу знаний
2. generate_form_template → template="catalog_element", object_name="Товары",
fields=["Наименование","Артикул","Цена"], format="edt"
3. validate_form → проверить результат
4. Сохранить как Form.form в EDT-проект
Создать форму из метаданных EDT
1. edt_status → проверить доступность
2. get_object_metadata → object_type="Document", object_name="ЗаказКлиента"
3. generate_form_from_metadata → format="edt", include_table_parts=true
4. validate_form_edt → расширенная валидация
Конвертировать форму Конфигуратора в EDT
1. convert_form → xml_content=<Form...>, target_format="edt"
2. validate_form → проверить результат
3. Сохранить как Form.form
Найти пример и создать похожую форму
1. search_form_examples → query="документ с табличной частью товары"
2. get_form_example → form_id из результатов
3. Использовать пример как образец для generate_form
Конфигурация
Через переменные окружения или .env файл:
| Переменная | По умолчанию | Описание |
|---|---|---|
PORT |
8011 |
Порт сервера |
TRANSPORT |
streamable-http |
Транспорт MCP (streamable-http, sse) |
DATABASES_PATH |
./databases |
Путь к базам данных поиска |
DATA_PATH |
./data |
Путь к данным (схемы, промпт) |
EDT_ENABLED |
false |
Включить интеграцию с EDT MCP |
EDT_MCP_URL |
http://localhost:9999/sse |
URL EDT MCP сервера |
EDT_TIMEOUT |
10 |
Таймаут запросов к EDT (сек) |
Полный список — в .env.example.
Структура проекта
src/mcp_forms/
├── server.py # FastMCP сервер (18 инструментов)
├── config.py # Конфигурация из env vars
├── edt_client.py # Клиент EDT MCP (https://github.com/DitriXNew/EDT-MCP)
├── schema/ # Парсер Xcore, Pydantic-модель, валидатор
├── forms/ # Загрузчик, генератор, конвертер, шаблоны
│ ├── loader.py # Автоопределение формата, загрузка XML
│ ├── generator.py # Генерация logform / managed / edt
│ ├── converter.py # Конвертация между форматами
│ └── templates.py # Шаблоны (catalog, document, data_processor)
├── search/ # Индексатор, эмбеддинги, FTS + vector поиск
└── tools/ # MCP-инструменты (validate, generate, convert, search, edt)
Зависимости
Core: fastmcp, lxml, pydantic, python-dotenv, uvicorn
Search (опционально):
pip install -e ".[search]"
Добавляет sentence-transformers для векторного поиска примеров форм.
Тесты
pip install -e ".[dev]"
pytest tests/ -v
91 тест: валидация (logform, managed, edt), конвертация (roundtrip между всеми форматами), генерация, шаблоны, поиск, EDT интеграция.
Лицензия
MIT
Metadata
Release files for 1c-formsserver 0.20260729
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| 1c_formsserver-0.20260729.tar.gz | 68.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 1c_formsserver-0.20260729-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 135.1 kB
Release files / 1c_formsserver-0.20260729.tar.gz
| Download URL | 1c_formsserver-0.20260729.tar.gz |
|---|---|
| Size | 68.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
93a57ceded7ab47148a04d2f55e3ee05cb2d7bf07c758e196da4658fdbdb961b
|
|
BLAKE2b-256 checksum How to use checksums |
599d7a32e0ab2dec6c8c0fc84f173d3446e6a6df6f49b683f07d249a5837063f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|
Release files / 1c_formsserver-0.20260729-py3-none-any.whl
| Download URL | 1c_formsserver-0.20260729-py3-none-any.whl |
|---|---|
| Size | 67.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4e6fc721dfc8e06e79b23c9b30820e443922706cd8c146285a5e193597ae2e80
|
|
BLAKE2b-256 checksum How to use checksums |
424f88c6414052d63b87baba017f132b08a2dcb0dfdae197548a79423ffec3c1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|
Security for 1c-formsserver 0.20260729
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.