Skip to content

Releases: groupdocs-watermark/GroupDocs.Watermark.Mcp

26.7.2

Choose a tag to compare

@github-actions github-actions released this 25 Jul 19:07

26.7.2 — Full configuration surface in install snippets (docs/infra only)

What changed

No server code changes — the bump republishes so the refreshed README (install
buttons above the fold, Codex/Windsurf guides, fixed one-click links) reaches the
NuGet package page, Docker/GHCR, and the MCP Registry.

  • Every install snippet and one-click deeplink (VS Code / Cursor buttons, Claude
    Desktop/Code, VS Code, VS 2022, Cursor, Windsurf, Cline, Rider, Codex) now
    pre-fills all supported environment variables so users see the full
    configuration surface in the install dialog:
    • GROUPDOCS_MCP_STORAGE_PATH — placeholder documents folder
    • GROUPDOCS_MCP_OUTPUT_PATH — same folder as storage by default
    • GROUPDOCS_LICENSE_PATHempty by default (evaluation mode)
  • Verified in GroupDocs.Mcp.Core's LicenseManager: an empty license path is
    handled identically to an unset one (string.IsNullOrEmpty guard → evaluation
    mode with a log warning; a wrong path only logs; SetLicenseFromPath is wrapped
    in try/catch) — an empty value can never fail the server.

Migration / impact

Drop-in — the server binary is identical apart from the version stamp.

Full Changelog: 26.7.1...26.7.2

26.7.1

Choose a tag to compare

@github-actions github-actions released this 24 Jul 18:28

26.7.1 — Discoverability & one-click install uplift (docs/infra only)

What changed

Rollout of the org-wide MCP repo improvement plan (piloted on GroupDocs.Conversion.Mcp
26.7.1). No server code changes — the bump ships the new README to the NuGet package page.

  • README: badge row (NuGet version/downloads, Docker pulls, MCP Registry, Tests-repo CI,
    MIT), demo placeholder, one-click VS Code / Cursor install buttons, pointer to
    ready-made client configs (Claude Code, VS 2022, Cursor, Windsurf, Cline, Rider), and a
    Licensing section documenting the product's evaluation-mode limits with temporary
    license / purchase links.
  • install/config.json + install/generate-install-links.ps1: canonical install config;
    the generator emits install/generated/ (per-client snippets + deeplinks) and rewrites
    the README install-buttons block idempotently. CI drift guard added to
    build_packages.yml (-Check fails the build when generated content is stale).
  • Hygiene: SECURITY.md, CONTRIBUTING.md, issue templates, smithery.yaml,
    docker/README.hub.md, llms.txt licensing section, .vscode/mcp.json published-package
    entry, GitHub topics.

Why

AI-agent users find MCP servers through registries, GitHub topics, and READMEs; installers
copy the first snippet they see. One canonical config keeps every rendered snippet correct
permanently, and licensing up front removes the main evaluation-mode surprise.

Migration / impact

Drop-in — the server binary is identical to 26.7.0 apart from the version stamp.

Full Changelog: 26.7.0...26.7.1

26.7.0

Choose a tag to compare

@github-actions github-actions released this 20 Jul 22:12

Release 26.7.0 — engine bump to 26.6.0 + shared error helper

What changed

  • Bumped the MCP server version 26.5.026.7.0 (CalVer).
  • Bumped the underlying engine GroupDocs.Watermark 26.4.026.6.0.
  • Removed the manual SkiaSharp.NativeAssets.Linux.NoDependencies package
    reference
    (and the <SkiaSharp> version property). GroupDocs.Watermark
    26.6.0 now ships a dedicated net10.0 runtime sub-package
    (GroupDocs.Watermark.Net100) which — resolved under net10.0 — declares
    SkiaSharp 3.119.0 + SkiaSharp.NativeAssets.Linux.NoDependencies
    transitively. The native libSkiaSharp.so continues to ship in the nupkg via
    transitive resolution, verified in the packed runtimes/ tree. (Pitfall S.)
  • Extracted a shared Tools/ToolError.cs (ToolError.Format(op, file, ex, subjectSuffix)) and routed all five tools' catch blocks through it, replacing
    five duplicated private FormatException helpers. The user-visible failure text
    is byte-for-byte unchanged — every tool still emits its per-tool prefix
    (Watermarking failed for, Image watermarking failed for, Search failed for,
    Watermark removal failed for, Document-info lookup failed for).

Why

Routine dependency refresh onto the latest stable engine, plus the cross-product
convention of a single descriptive-error formatter (mirrors GroupDocs.Metadata
26.7.x). The 26.6.0 TFM split lets the MCP drop its manual Skia workaround.

Migration / impact

No API or behaviour change. Tool names, schemas, response shapes, and error
prefixes are identical. Consumers pinning @26.5.0 should move to @26.7.0.

Full Changelog: 26.5.0...26.7.0

26.5.0

Choose a tag to compare

@github-actions github-actions released this 15 May 12:38

Initial public release of GroupDocs.Watermark MCP Server

What changed

  • NuGet package GroupDocs.Watermark.Mcp published with McpServer package type.
  • Five MCP tools exposed:
    • AddWatermark — add a text watermark (Arial, configurable font size + rotation) to a document and save the watermarked copy to storage.
    • AddImageWatermark — add an image watermark (logo, signature scan, stamp) to a document. Configurable opacity + rotation. Returns a saved-path message and download URL.
    • SearchWatermarks — find existing watermarks (text and image) in a document and return their type, text, page, position, size, and rotation as JSON.
    • RemoveWatermarks — remove existing watermarks from a document and save the cleaned copy as <name>_unwatermarked.<ext>. Optional textFilter argument scopes removal to watermarks whose text contains a given substring.
    • GetDocumentInfo — return the file type, page count, size, and per-page dimensions of a document as JSON (without modifying it). Useful as a precondition check before AddWatermark / SearchWatermarks.
  • Installable via dnx GroupDocs.Watermark.Mcp@26.5.0 --yes (.NET 10 SDK required) or dotnet tool install -g.
  • Docker image published to ghcr.io/groupdocs-watermark/watermark-net-mcp and docker.io/groupdocs/watermark-net-mcp.
  • Environment variables: GROUPDOCS_MCP_STORAGE_PATH, optional GROUPDOCS_MCP_OUTPUT_PATH, GROUPDOCS_LICENSE_PATH.
  • Linux native graphics deps wired up: SkiaSharp.NativeAssets.Linux.NoDependencies (3.119.0) is referenced because GroupDocs.Watermark 26.4.0 transitively requires SkiaSharp ≥ 3.119.0; libgdiplus + libfontconfig1 + ttf-mscorefonts-installer are installed in the Docker image (and the Tests-repo integration workflow) because Watermark's PDF and Diagram content paths use System.Drawing.Font / Color / FontFamily / FontStyle; the System.Drawing.EnableUnixSupport runtime flag is set in the csproj for the same reason.

Pre-shipped pitfall remediations

  • JSON-returning tools never pipe through OutputHelper.TruncateTextSearchWatermarksTool returns raw JsonSerializer.Serialize(...) directly. The framework subproject's original implementation routed through TruncateText, which would have appended a non-JSON marker on responses > 5 KB and broken strict-JSON consumers. Fixed at clone time.
  • Engine exceptions surface diagnostically — both AddWatermarkTool and SearchWatermarksTool wrap their engine calls in try/catch (Exception ex) and return "Watermarking failed for '<file>': <ExceptionType>: <message> | inner(0): ..." (or "Search failed for '<file>': ...") instead of letting them bubble up to ModelContextProtocol's default handler, which replaces all exception detail with a canned "An error occurred invoking 'add_watermark'" string. Pattern lifted from Conversion 26.5.2 — makes native-deps regressions on Linux diagnosable from the first failing CI run.
  • License class is exposed publiclypublic sealed class License in groupdocs-watermark-net/src/GroupDocs.Watermark/License.cs:38 is exposed with a public void SetLicense(string filePath) method. WatermarkLicenseManager uses the Metadata pattern (new GroupDocs.Watermark.License().SetLicense(licensePath)) rather than an environment-variable fallback.

Why

Fourth product MCP server in the GroupDocs MCP framework (after Metadata, Conversion, Comparison, Viewer). Exposes GroupDocs.Watermark for .NET as AI-callable tools for Claude, Cursor, VS Code / GitHub Copilot, and other MCP-compatible agents.

Migration / impact

First release — no migration required.

Full Changelog: https://github.com/groupdocs-watermark/GroupDocs.Watermark.Mcp/commits/26.5.0