Repository navigation
Initial release of GroupDocs.Assembly.Mcp
What changed
- New MCP server for GroupDocs.Assembly for .NET 26.7.0 on GroupDocs.Mcp.Core 26.9.0, cloned in
shape from GroupDocs.Editor.Mcp 26.10.0 (workflows,install/generator, Docker, build and release scripts,
ToolError/TempWorkspacehelpers). - Five tools, plus Core's
get_license_status:assemble_document— fills a template with data and saves the result in the template's format, another
format of its family, or PDF. Data inline (dataJson) or as a.json,.xml,.csv/.tsvfile or a
spreadsheet/Word/presentation table (data,dataTable,hasHeaders,csvDelimiter); options
allowMissingMembers,removeEmptyParagraphs,updateFields,inlineErrors. HTML output stores its
<name>_files/image folder beside the page.assemble_per_record— one document per element of a JSON array (recordsPathfor an array inside an
object), files named by number or by a record field (fileNameField, dotted paths allowed), at most
maxDocuments(default 100, up to 1000); failed records are listed and do not stop the others.get_template_fields— every tag, the data names, the fields read and a JSON skeleton of the data, read
from the template without the engine (OOXML, ODF, TXT, Markdown, HTML, RTF, EML). Flags{{…}}placeholders.get_document_info— a file as a template (family, tag count, data names, save targets) and as data (JSON
keys and lengths, CSV header and row count, the tables of a document with their columns).get_supported_formats— template formats and save targets per family (measured), data formats.
- The data source name is worked out from the template's tags: a JSON object's keys are the names; an array,
XML, CSV or table takes the one collection name the template uses. JSON is read Strict ("007" stays text),
except data with Json.NET$id/$ref, which only Loose reads. - Tools return
CallToolResult: every failure setsisErrorand starts with the tool's prefix
(Document assembly failed for '<file>': …). Engine errors get a plain-words hint: the missing field or data
name, an unclosed block, the libgdiplus fix, the Docker--userfix. Temp paths are scrubbed. - Licensing:
AssemblyLicenseManagerimplements licence file, metered key and consumption reading, and
declares the engine forget_license_status. - Package: nuget-first,
McpServerpackage type, native PDBs stripped.
Decisions
- Native dependencies: the presentation engine calls System.Drawing.Common 6.0.0, which on Linux throws
PlatformNotSupportedExceptionunlessSystem.Drawing.EnableUnixSupportis set — 6.0.0 still honours it —
andlibgdiplusis installed (measured in thedotnet/runtime:10.0image: Word, spreadsheet and e-mail
templates work without either). The csproj sets the switch; the Docker image installslibgdiplus,
libfontconfig1,fontconfigandttf-mscorefonts-installer. No manual SkiaSharp pin: the engine declares
SkiaSharp.NativeAssets.Linux.NoDependenciesitself. - Security pin:
System.Security.Cryptography.Pkcs10.0.13 overrides the engine's transitive 9.0.0
(GHSA-846f-f764-76mx, GHSA-2fmv-rv2c-59x7). - Spreadsheet data types are always on, so numbers and dates land in cells as numbers and dates.
- Docker on Linux: README and Docker Hub README document
--user "$(id -u):$(id -g)"; a denied write fails
with that fix in the message.
Why
Document generation from templates is the job agents are most often asked to script by hand ("fill this
contract", "a letter per customer"). GroupDocs.Assembly does it with a real template engine; the server adds
what an agent needs on top — learning a template's data shape, inline JSON, and naming that just works.
Verification
- Unit tests: 125/125 (
dotnet test src/GroupDocs.Assembly.Mcp.sln). - Integration suite (GroupDocs.Assembly.Mcp.Tests, 64 tests) in evaluation mode: 64/64 against this build via
MCP_SERVER_DLLon Windows, and 64/64 against the locally built image viaMCP_SERVER_IMAGE(Linux container,
presentation templates included). - Installer verifier (
verify-groupdocs-mcp.ps1, handshake + auto) against the local image; a sequenced dnx
session against the packed.nupkg(6 tools, a realassemble_documentto PDF). build.ps1: server.json lockstep holds; nupkg 99.0 MB;install/generate-install-links.ps1 -Checkclean.
Migration / impact
None — first release.
Full Changelog: https://github.com/groupdocs-assembly/GroupDocs.Assembly.Mcp/commits/26.11.0