Skip to content

document-worker ​

Сервис работы с офисными документами: инструменты, устройство, зависимости и ограничения.

Сервис переписан

Сервис переведён с Python на Node.js и TypeScript. Прежняя версия только читала документы и предоставляла один инструмент. Текущая читает Word, Excel и PowerPoint, а Word и Excel ещё и изменяет. Ниже описана текущая версия.

Назначение ​

Читает, изменяет и создаёт офисные документы в файлах чата. Результат записывает в чат.

В платформе источник называется Doc Worker, адрес http://eap-document-worker-mcp_eva:8001/mcp, транспорт Streamable HTTP.

Инструменты ​

69 инструментов, модель видит 68. Делятся на три семейства по префиксу имени.

ПрефиксФорматЧтениеИзменение
doc_Wordдада
xls_Excelдада
ppt_PowerPointданет

Плюс скрытый от модели init_eva_session.

Word: чтение ​

doc_read_document, doc_get_document_info, doc_search_text, doc_list_images, doc_read_comments, doc_get_page_layout, doc_read_header_footer, doc_read_footnotes.

Чтение возвращает содержимое с номерами блоков и подсказками об оформлении. Номера блоков затем используются инструментами правки.

Word: изменение ​

doc_replace_texts, doc_edit_paragraphs, doc_insert_paragraphs, doc_delete_paragraphs, doc_format_text, doc_set_paragraph_formats, doc_highlight_text, doc_set_headings, doc_insert_table, doc_edit_table_cells, doc_set_page_layout, doc_apply_document_preset.

Word: комментарии и правки ​

doc_add_comment, doc_add_comments, doc_reply_to_comment, doc_delete_comment, doc_accept_all_changes, doc_reject_all_changes.

Word: создание ​

doc_create_document создаёт пустой документ. doc_create_from_markdown создаёт документ из разметки Markdown, либо из строки, либо из файла разметки в чате.

Разделение назначения задано в описаниях самих инструментов

Создание из разметки предназначено для новых документов. В описании прямо сказано не использовать его для правки существующего документа: для этого есть инструменты изменения.

Excel ​

Чтение: xls_get_workbook_info, xls_read_sheet, xls_read_cell, xls_search_cells, xls_get_sheet_properties, xls_list_named_ranges, xls_list_data_validations, xls_list_images.

Запись данных: xls_write_cell, xls_write_cells, xls_write_row, xls_write_rows, xls_clear_cells, xls_create_workbook.

Оформление: xls_format_cells, xls_format_cells_bulk, xls_set_column_width, xls_set_column_widths, xls_set_row_height, xls_set_row_heights, xls_merge_cells, xls_unmerge_cells.

Структура: xls_insert_rows, xls_delete_rows, xls_insert_columns, xls_delete_columns, xls_add_sheet, xls_rename_sheet, xls_delete_sheet, xls_copy_sheet.

Прочее: xls_set_freeze_panes, xls_set_auto_filter, xls_remove_auto_filter, xls_add_data_validation, xls_remove_data_validation, xls_add_named_range, xls_delete_named_range.

PowerPoint ​

ppt_get_info, ppt_read_slide, ppt_list_shapes. Обзор презентации, содержимое одного слайда по номеру с нуля, список фигур. Байты изображений не возвращаются.

Как передаётся файл ​

Все инструменты работы с документами принимают параметр artifact_key: имя файла в чате, например report.docx, либо полный ключ этого чата. Идентификатор файла передавать не нужно.

Правки записываются по тому же ключу, то есть перезаписывают исходный файл. После первого чтения сервис держит рабочую копию файла у себя, чтобы серия правок не приводила к повторным загрузкам.

Следствие для документации

Если имя результата совпадает с именем источника, исходный файл заменяется. Поэтому в пользовательской документации написано, что имя результата стоит задавать явно.

Ответы приходят в общем формате: признак успеха, результат, предупреждения, ошибки, подсказки модели, код ошибки.

Что за ним стоит ​

СоставляющаяЗначение
Среда исполненияNode.js и TypeScript
WordБиблиотека @knorq/docx-mcp-server
ExcelБиблиотека @knorq/xlsx-mcp-server
PowerPointБиблиотека ts-pptx, только чтение
Модели машинного обученияНе используются
Внешние сервисыТолько доступ к файлам чата

Доступ к файлам чата обязателен, режима работы без него нет. Секреты приходят только через привязку сессии.

Ограничения ​

ОграничениеЗначениеПеременная
Размер документа50 МиБDW_MAX_DOC_BYTES
Таймаут обращения к хранилищу20 секундDW_HTTP_TIMEOUT
Рабочих копий файлов одновременно8DW_MAX_WORKING_FILES
Суммарный размер рабочих копий100 МиБDW_MAX_WORKING_BYTES

PDF не поддерживается: для него используется сервис OCR. Форматы doc, xls и ppt не поддерживаются, только новые форматы.

Устройство ​

src/
  main.ts        выбор транспорта, http или stdio
  config.ts      настройки из файла и переменных DW_*
  logging.ts     скрытие ключей доступа в логах
  shared/        общий формат ответа и ошибки
  session/       привязка сессии и кэш рабочих копий
  storage/       правила имён, клиент и работа с файлами чата
  engines/       движки Word, Excel, PowerPoint
  tools/         привязка сессии и семейства doc_, xls_, ppt_

Развёртывание ​

ПараметрЗначение
ТранспортStreamable HTTP, поддерживается и stdio
Порт8001
Адресhttp://<хост>:8001/mcp
Запускpnpm build и pnpm start, либо pnpm dev
DockerЕсть файл для compose

Переменные окружения: DW_TRANSPORT, DW_HOST, DW_PORT, DW_HTTP_TIMEOUT, DW_MAX_DOC_BYTES, DW_MAX_WORKING_FILES, DW_MAX_WORKING_BYTES, DW_EDIT_AUTHOR, DW_LOG_LEVEL, DW_NAME, DW_SETTINGS.

Несекретные настройки лежат в файле настроек сервиса, указания для модели там же. Отдельный документ docs/AGENT_PLAYBOOK.md описывает, как модели правильно работать с документами и таблицами.

Документация платформы EVA