26.7.0
26.7.0 — engine 26.6.0 + shared descriptive-error contract across all tools
What changed
- Bumped the
GroupDocs.Conversionengine from 26.3.0 → 26.6.0. Engine 26.6.0 introduces a dedicatednet10.0runtime sub-package (GroupDocs.Conversion.Net100) that the MCP'snet10.0target now resolves directly (previouslynet10.0fell back to thenet8.0runtime). SkiaSharp pin is unchanged at 3.119.2 (the versionNet100transitively declares). - Bumped the MCP package version 26.5.2 → 26.7.0 (CalVer).
- Extracted a shared
Tools/ToolError.cs(ToolError.Format(op, file, ex, subjectSuffix = null)) and routed every tool's failure path through it.ConvertToolpreviously carried a privateFormatExceptionhelper;GetDocumentInfoToolandGetSupportedFormatsToolhad no exception handling at all — an engine failure in either (e.g. a missing native dependency on Linux, or a malformed document) bubbled up toModelContextProtocol.Server's genericAn error occurred invoking '<tool>'.wrapper, discarding the cause. - All three tools now catch engine exceptions and return a descriptive string that starts with
"<op> failed for '<file>'[ <suffix>]: <ExceptionType>: <message> | inner(0): …":Convert→Conversion failed for '<input>' -> <ext>: …GetDocumentInfo→Document-info lookup failed for '<input>': …GetSupportedFormats→Supported-formats lookup failed for '<input>': …
Why
ConvertTool already surfaced engine exceptions (26.5.2), but the two read-only inspection tools did not — a native-deps regression that broke get_document_info / get_supported_formats on Linux would have looked identical to any other failure from the client's perspective. Consolidating the formatter removes the duplicated helper and gives the whole tool surface one consistent, testable error prefix.
Migration / impact
- Tool callers:
isErrorisfalseeven on engine failure for all three tools now; the cause surfaces in the response text. Detectors should substring-match the per-tool prefix ("Conversion failed for","Document-info lookup failed for","Supported-formats lookup failed for"). - File-not-found behaviour is unchanged — the resolver runs before the try/catch, exactly as in
ConvertTool. - Successful calls: identical output to 26.5.2. No wire-name or schema changes; the tool surface is still the same three tools.
Full Changelog: 26.5.2...26.7.0