Skip to content

26.9.0

Latest

Choose a tag to compare

@github-actions github-actions released this 06 Sep 01:33

Metered licensing, get_license_status, and the shared error contract from Core 26.9.0

What changed

  • Bumped GroupDocsMcpCore 26.4.1 -> 26.9.0 and the MCP package version previous -> 26.9.0
    (both version fields in .mcp/server.json, the README/llms.txt pins, and the regenerated
    install/generated/ snippets). The engine pin is unchanged.
  • SignatureLicenseManager implements the two new Core members: SetMeteredKeyCore
    (new GroupDocs.Signature.Metered().SetMeteredKey(...)) and ReadConsumptionCore
    (Metered.GetConsumptionQuantity() / GetConsumptionCredit()), and declares
    EngineMarkerType so get_license_status reports the real engine version rather than the
    server's own.
  • .mcp/server.json gained GROUPDOCS_METERED_PUBLIC_KEY and GROUPDOCS_METERED_PRIVATE_KEY,
    the latter marked isSecret: true.
  • README: a rewritten Licensing section covering both licensing routes, the metered egress
    requirement, and how to keep the private key out of client configs; two new rows in the
    Configuration table.

Inherited from Core 26.9.0 with no code change here:

  • fileName now resolves. It previously threw, and the client saw only
    An error occurred invoking '<tool>' - while the tool descriptions told callers to pass
    exactly that form.
  • Missing files return the available-files listing instead of the opaque invoke error, and
    the listing is no longer silently cut off at 20 entries.
  • A missing required parameter is reported rather than swallowed.
  • isError: true is set on real failures, not just crashes.
  • New get_license_status tool, shipped by Core and registered automatically - no
    Program.cs change.

Why

The external audit of all 12 MCP servers (2026-08-16) confirmed three defects living in
GroupDocs.Mcp.Core and therefore present on every product: fileName crashed every tool, the
available-files listing never reached the client, and isError meant "we crashed" rather than
"the operation failed". This release picks up all three. Product-specific findings are tracked
separately in docs/backlog-and-issues.md.

Metered licensing suits agent workloads, which are bursty and hard to size up front, and one key
pair works across every platform's server.

Migration / impact

No breaking change for callers. Existing filePath calls behave exactly as before; fileName
now works where it previously failed.

Clients that inferred success from the absence of isError will now correctly see
isError: true on engine failures that previously came back success-shaped. That is the intended
fix, but it is a behaviour change worth noting for anything that was string-matching on error
prose instead.

The metered path was verified end to end on GroupDocs.Comparison with a live key pair: mode
reported correctly, no evaluation markers in output, consumption moving, and the private key
absent from all output. The same Core code path serves every product.

Full Changelog: 26.7.2...26.9.0