Skip to content

26.9.0

Latest

Choose a tag to compare

@github-actions github-actions released this 03 Sep 06:54

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 in build/dependencies.props,
    and the MCP package version 26.8.0 → 26.9.0 (including both version fields in
    .mcp/server.json, the README/llms.txt pins, and the regenerated install/generated/
    snippets). The engine pin (GroupDocsComparison 26.8.0) is unchanged.
  • ComparisonLicenseManager implements the two new Core members:
    SetMeteredKeyCore (new GroupDocs.Comparison.Metered().SetMeteredKey(...)) and
    ReadConsumptionCore (Metered.GetConsumptionQuantity() / GetConsumptionCredit()).
  • It also declares EngineMarkerType => typeof(GroupDocs.Comparison.Comparer) 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 'get_document_info' — while the tool descriptions told callers to
    pass exactly that.
  • 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.

Why

The external audit of all 12 MCP servers (2026-08-16) rated Comparison the cleanest product in
the family and found no product-library defects here — its only issues were the three shared
Mcp.Core ones, which this release picks up wholesale. See
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.

Verification

Run against the built server over stdio (see the evidence in the Core 26.9.0 changelog for the
protocol-level detail):

Check Result
tools/list compare, analyze_changes, get_license_status, get_document_info
get_document_info via fileName resolves — previously an opaque error
get_document_info via filePath unchanged
missing file full Available files: listing, isError: true
missing required parameter message surfaced, isError: true
analyze_changes 2 changes detected on a known pair
get_license_status (no config) mode: evaluation, engine GroupDocs.Comparison 26.8
get_license_status (invalid metered keys) falls back to evaluation and says the keys were rejected rather than claiming none were configured

Metered mode itself is not yet verified against real keys — the engine authenticates the pair
inside SetMeteredKey, so a placeholder is rejected by design. The fallback path is verified; the
success path needs a real key pair.

Full Changelog: 26.8.0...26.9.0