Releases: groupdocs-watermark/GroupDocs.Watermark.Mcp
Release list
26.7.2
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 folderGROUPDOCS_MCP_OUTPUT_PATH— same folder as storage by defaultGROUPDOCS_LICENSE_PATH— empty by default (evaluation mode)
- Verified in
GroupDocs.Mcp.Core'sLicenseManager: an empty license path is
handled identically to an unset one (string.IsNullOrEmptyguard → evaluation
mode with a log warning; a wrong path only logs;SetLicenseFromPathis 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
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 emitsinstall/generated/(per-client snippets + deeplinks) and rewrites
the README install-buttons block idempotently. CI drift guard added to
build_packages.yml(-Checkfails 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.jsonpublished-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
Release 26.7.0 — engine bump to 26.6.0 + shared error helper
What changed
- Bumped the MCP server version
26.5.0→26.7.0(CalVer). - Bumped the underlying engine
GroupDocs.Watermark26.4.0→26.6.0. - Removed the manual
SkiaSharp.NativeAssets.Linux.NoDependenciespackage
reference (and the<SkiaSharp>version property).GroupDocs.Watermark
26.6.0 now ships a dedicatednet10.0runtime sub-package
(GroupDocs.Watermark.Net100) which — resolved undernet10.0— declares
SkiaSharp3.119.0 +SkiaSharp.NativeAssets.Linux.NoDependencies
transitively. The nativelibSkiaSharp.socontinues to ship in the nupkg via
transitive resolution, verified in the packedruntimes/tree. (Pitfall S.) - Extracted a shared
Tools/ToolError.cs(ToolError.Format(op, file, ex, subjectSuffix)) and routed all five tools'catchblocks through it, replacing
five duplicated privateFormatExceptionhelpers. 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
Initial public release of GroupDocs.Watermark MCP Server
What changed
- NuGet package
GroupDocs.Watermark.Mcppublished withMcpServerpackage 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>. OptionaltextFilterargument 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) ordotnet tool install -g. - Docker image published to
ghcr.io/groupdocs-watermark/watermark-net-mcpanddocker.io/groupdocs/watermark-net-mcp. - Environment variables:
GROUPDOCS_MCP_STORAGE_PATH, optionalGROUPDOCS_MCP_OUTPUT_PATH,GROUPDOCS_LICENSE_PATH. - Linux native graphics deps wired up:
SkiaSharp.NativeAssets.Linux.NoDependencies(3.119.0) is referenced becauseGroupDocs.Watermark26.4.0 transitively requires SkiaSharp ≥ 3.119.0;libgdiplus+libfontconfig1+ttf-mscorefonts-installerare installed in the Docker image (and the Tests-repo integration workflow) because Watermark's PDF and Diagram content paths useSystem.Drawing.Font/Color/FontFamily/FontStyle; theSystem.Drawing.EnableUnixSupportruntime flag is set in the csproj for the same reason.
Pre-shipped pitfall remediations
- JSON-returning tools never pipe through
OutputHelper.TruncateText—SearchWatermarksToolreturns rawJsonSerializer.Serialize(...)directly. The framework subproject's original implementation routed throughTruncateText, 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
AddWatermarkToolandSearchWatermarksToolwrap their engine calls intry/catch (Exception ex)and return"Watermarking failed for '<file>': <ExceptionType>: <message> | inner(0): ..."(or"Search failed for '<file>': ...") instead of letting them bubble up toModelContextProtocol'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 publicly —
public sealed class Licenseingroupdocs-watermark-net/src/GroupDocs.Watermark/License.cs:38is exposed with apublic void SetLicense(string filePath)method.WatermarkLicenseManageruses 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