Хтось передає вам шаблон Word і дедлайн. Які дані він потребує? Звичайна відповідь — відкрити його, прокрутити, вгадати, запустити, прочитати помилку і запустити знову. За допомогою GroupDocs.Assembly.Mcp, що працює локально (dnx GroupDocs.Assembly.Mcp --yes), Claude Desktop, Cursor або Copilot запитують шаблон безпосередньо: get_template_fields повертає всі теги, назви даних, які він використовує, і JSON‑скелет для заповнення, без запуску движка, а коли запуск не вдається, помилка підказує, що змінити:
Які дані потрібні файлу order-lines.docx? Якщо він не генерується, скажи, чому, і як виправити шаблон.
Покрокова версія з налаштуваннями та усуненням проблем знаходиться в документації: Як дізнатися, які дані потрібні шаблону і чому він не спрацював.
Чому варто перевіряти перед заповненням?
Тому що проби і помилки — дорогий спосіб вивчити схему. Агент, який вгадує назви полів за видимим текстом документа, вгадає CustomerName, коли шаблон містить customer.Name, і кожна помилкова здогадка коштує додаткового запиту та заплутаної помилки. Шаблон — це не проза; це програма з контрактом даних, і цей контракт можна прочитати.
Ось усе, що робить get_template_fields. Він аналізує теги <<…>>, визначає назви та створює скелет:
-> get_template_fields {"template":{"filePath":"order-lines.docx"}}
<- { "tagCount": 3,
"dataSourceNames": [ "lines" ],
"fields": [ "lines[].Title", "lines[].Quantity" ],
"dataSkeleton": { "lines": [ { "Title": "", "Quantity": "" } ] },
"notes": [ "fields and dataSkeleton are inferred from the tags,
not from the engine; values computed by Select/GroupBy
projections are not followed." ] }
Примітка чесно описує метод: це статична інспекція. Поле, створене всередині проекції Select, не відстежується. Для звичайного контракту, листа чи шаблону рахунку скелет точно відповідає тому, що потрібно заповнити.
Скелет також змінює діалог з вами. Замість «Я спробував згенерувати замовлення, і воно не вдалось», агент може сказати «цей шаблон потребує список рядків, кожен з назвою та кількістю; я знайшов три у вашому листі, ось вони», і лише потім генерувати. Інспекція недорога, не потребує даних і не змінює нічого, тому це правильний перший крок для будь‑якого шаблону, який агент ще не бачив, і правильний крок знову, коли хтось відредагував шаблон.
Три помилки, три відповіді
проблема шаблону що каже сервер виправлення
------------------------ ---------------------------- -------------------
{{name}} заповнювачі "2 '{{...}}' заповнювач(і). write <<[name]>>
... не обробляє цей синтаксис"
<<foreach>> не закрито "Unexpected end of template. add <</foreach>>
Тег блоку не закрито"
дані не містять поля "The template reads 'Email', add it, or
which the data does not have" allowMissingMembers
Неправильний синтаксис. Багато шаблонів у реальному світі написані для інших движків і використовують {{name}}. GroupDocs.Assembly залишає їх як текст, і інспекція повідомляє про це, перш ніж хтось витратить запуск:
-> get_template_fields {"template":{"filePath":"shipping-notice.docx"}}
<- { "tagCount": 0, "notes": [ "No <<…>> tags were found: ...",
"The template contains 2 '{{…}}' placeholder(s). GroupDocs.Assembly
does not process that syntax and leaves it as text; write
<<[name]>> instead." ] }
Незакритий блок. Наш order-lines.docx відкриває <<foreach>> і ніколи його не закриває. Інспекція з радістю перераховує теги; генерація — ні:
-> assemble_document {"template":{"filePath":"order-lines.docx"},
"dataJson":"{\"lines\":[{\"Title\":\"Cable\",\"Quantity\":2}]}"}
<- Document assembly failed for 'order-lines.docx': ...
Unexpected end of template. A block tag is not closed: every
<<foreach>> needs <</foreach>> and every <<if>> needs <</if>>.
Відсутнє поле. Коли дані не містять того, що читає шаблон, помилка називає поле, зазначає, що імена чутливі до регістру, і пропонує перемикач: allowMissingMembers: true не виводить нічого для відсутніх членів і порожні списки замість помилки.
Коли шаблон сповнений помилок
Деякі шаблони мають кілька помилок, і виправляти їх по одній невдалій спробі за раз повільно. inlineErrors: true перетворює шаблон у власний звіт про помилки: документ генерується, і кожен неправильний тег отримує повідомлення, записане поруч. На прикладі шаблону з прикладів GroupDocs.Assembly:
-> assemble_document {"template":{"filePath":"inline-error.docx"},
"dataJson":"{\"name\":\"x\"}","inlineErrors":true}
<- Assembled 'inline-error.docx' ... The template has errors: each one
is written into the output next to its tag, starting with 'Error!'
Вивід містить << var [name] Error! An assignment operator is expected. >> у місці документа, де розташований тег. Відкрийте файл, виправте кожен позначений тег, запустіть знову без прапорця.
Чого інспекція не бачить
Бінарні шаблони Outlook — виняток. Теги файлу .msg не можна прочитати без його генерації, і сервер повідомляє про це, а не повертає порожній список, який виглядає як «немає полів»:
-> get_template_fields {"template":{"filePath":"contracts-table.msg"}}
<- { "readable": false, "notes": [ "Tags cannot be read from a .msg
template without generating it. Save the template as DOCX, XLSX,
PPTX or EML to inspect it, or generate it with assemble_document
and inlineErrors=true to see which fields fail." ] }
Ще одна пастка, яку ми виявили: список, який порожній у даних, не має типів елементів. Наш шаблон контракту множить item.Quantity * item.UnitPrice; при "items": [] і allowMissingMembers: true генерація все одно завершилася помилкою “Can not apply operator ‘’ to operands of type ‘System.Object’ and ‘System.Object’”*. Нехай агент перевіряє, що список не порожній перед генерацією, і запитає вас, яким має виглядати порожній контракт.
Чесні обмеження
- Інспекція статична: проекції
SelectтаGroupByне відстежуються, і шаблони.msgне можна прочитати. - Шаблони — довірений вхід; теги зображень та документів завантажують шляхи та URL‑и, які повертають їх вирази.
- Режим оцінки: кожен вихід починається з “Evaluation Only. Created with GroupDocs.Assembly 26.7…”.
- Дати: передайте
2026-11-12T00:00:00і форматуйте у шаблоні за допомогою:"d MMMM yyyy"; рядок лише з датою зміщувався на день на машині UTC+2, і"12.11.2026"читалося як 11 грудня.
Питання та відповіді
Як я можу дізнатися, які поля потрібні шаблону Word?
Попросіть агента викликати get_template_fields для нього. Ви отримаєте теги, назви даних та JSON‑скелет локально, без генерації.
Чому мій шаблон виводить {{name}} замість значення?
Тому що теги GroupDocs.Assembly — це <<[name]>>. Інспекція сервера позначає заповнювачі {{…}} і підказує, що написати замість них.
Чи може Markdown бути шаблоном?
Так. Наш product-readme.md з тегами <<[product]>> та <<[description]>> був інспектований як файл Word і згенерований безпосередньо у DOCX.
Поглиблене вивчення
- Документація, канонічний посібник: Як дізнатися, які дані потрібні шаблону і чому він не спрацював
- Центр документації: GroupDocs.Assembly MCP Server
- Почніть тут: Let the model fill in the data, not write the document
- Пов’язано: A hundred personalised PDFs from one prompt: mail merge with an AI agent
- Пов’язано: The chart comes from the template, the numbers come from the data
- Пов’язано: Your repo already has the data; let the agent make the PDF
- On‑premise і модель безпеки: 3 architectures for AI document processing, and the one that keeps files inside your network
- Питання: GroupDocs Assembly forum
- Джерело: GroupDocs.Assembly.Mcp on GitHub