Unified MCP server that exposes the full GroupDocs.Total document-processing toolset — annotation, comparison, conversion, markdown, merging, metadata, parsing, redaction, signing, watermarking, plus cross-product document inspection and page preview — as AI-callable tools for Claude, Cursor, GitHub Copilot, and other MCP agents. Designed to be used standalone — attaching the individual product MCPs (GroupDocs.Annotation.Mcp, GroupDocs.Signature.Mcp, …) alongside is unnecessary and would duplicate tools.
One-click installs pre-fill every supported setting: edit the placeholder host path in the volume mount after install; an empty GROUPDOCS_LICENSE_PATH runs in evaluation mode.
More clients - ready-made configs for Claude Code, Codex CLI, Visual Studio 2022, Cursor, Windsurf, Cline, and JetBrains Rider live in
install/generated/.
This product ships via Docker (GHCR) only. GroupDocs.Total bundles every engine (including Parser's embedded ONNX models), so the packed tool far exceeds NuGet.org's 250 MB limit - so dnx and
dotnet tool install are not available for it. When upstream ships a
slimmer engine that packs under the limit, the standard NuGet flow returns
(see the revert notes in .github/workflows/publish_prod.yml).
docker run --rm -i \
-v $(pwd)/documents:/data \
ghcr.io/groupdocs-total/total-net-mcp:latestImages are multi-arch (linux/amd64 + linux/arm64), tagged latest plus an
immutable version tag per release (e.g. :26.7.3). To pin, replace :latest
with the version tag - recommended for shared configs and CI.
Tools follow {Product}{Verb}{Noun} PascalCase to disambiguate across domains. Cross-product tools stay short.
| Tool | Description |
|---|---|
GetDocumentInfo |
File type, page count, size as JSON for any document (170+ formats via Parser engine) |
GetDocumentPageImage |
Render up to 5 pages as inline PNG images (Viewer engine, 170+ formats) |
| Tool | Description |
|---|---|
AnnotationAddAnnotation |
Add textfield / area / point / arrow / highlight / underline / strikeout annotation |
AnnotationGetAnnotations |
List all annotations as JSON (id, type, message, page, box, user, replies) |
AnnotationUpdateAnnotation |
Modify an existing annotation's message and/or bounding box by id |
AnnotationRemoveAnnotations |
Remove annotations by id list, or all |
AnnotationAddReply |
Add a reply / comment thread to an existing annotation |
AnnotationRemoveReplies |
Remove replies by id, by user name, or all |
AnnotationImportAnnotations |
Import annotations from XML or another annotated document |
AnnotationExportAnnotations |
Extract annotations to XML (re-importable via Import) |
| Tool | Description |
|---|---|
SignatureSign |
Sign with text / qrcode / barcode / digital certificate signature |
SignatureVerify |
Verify signatures, return JSON validity report |
SignatureSearchTextSignatures |
Find embedded text signatures with optional substring filter |
SignatureSearchBarcodes |
Find barcode signatures with optional decoded-text filter |
SignatureSearchQrCodes |
Find QR code signatures with optional decoded-text filter |
SignatureSearchDigitalSignatures |
Find digital certificate signatures (signer, issuer, validity) |
SignatureSearchImageSignatures |
Find embedded image signatures, return as base64 PNGs |
| Tool | Description |
|---|---|
ComparisonCompare |
Compare two documents, produce annotated diff document |
ConversionConvert |
Convert between PDF, Office, image, HTML, and 50+ more formats |
ConversionGetSupportedFormats |
List every output format the document can be converted TO |
MarkdownConvertToMarkdown |
Convert PDF / Office / EPUB / MOBI to clean Markdown |
MarkdownComposeFromMarkdown |
Compose DOCX / PDF / HTML from Markdown source |
| Tool | Description |
|---|---|
MergerMerge |
Combine up to 4 documents into one (PDF / Office / HTML / images) |
MergerSplit |
Split a document into separate files by page numbers |
MetadataReadMetadata |
Read all metadata properties (author, title, EXIF, XMP, IPTC, custom) as JSON |
MetadataRemoveMetadata |
Strip all metadata and save a clean copy |
| Tool | Description |
|---|---|
ParserExtractText |
Extract plain text (page-by-page or whole document) |
ParserExtractImages |
Extract embedded images and save them to storage |
ParserExtractTables |
Extract tables as Markdown or JSON |
ParserExtractMetadata |
Extract metadata fields (separate from MetadataReadMetadata; Parser-format-aware) |
ParserExtractBarcodes |
Find and decode embedded barcodes in document pages |
RedactionRedactText |
Redact text matching a regex with a replacement string |
RedactionRedactImageArea |
Black out a rectangular region of a document page |
RedactionRedactAnnotations |
Redact or delete annotations matching a regex |
RedactionEraseMetadata |
Strip metadata via the Redaction engine (handles formats Metadata can't) |
WatermarkAddWatermark |
Add a text watermark with configurable font, rotation, opacity |
WatermarkSearchWatermarks |
List existing watermarks (type, text, position, page) as JSON |
WatermarkRemoveWatermarks |
Remove watermarks by text filter or all |
- "Convert contract.docx to PDF, then sign it with a QR code containing 'Signed by Alice', then watermark every page with 'CONFIDENTIAL'"
- "Compare old.pdf and new.pdf, list every annotation in the result, and preview page 1"
- "Extract all tables from report.xlsx as Markdown and redact every email address"
- "Read the metadata of every PDF in /uploads, then strip it, then preview the cleaned page 1 of each"
- "Find every barcode in invoice.pdf, then merge invoice.pdf + receipt.pdf into combined.pdf"
The MCP server itself is MIT; the underlying GroupDocs engines require a license for production use. Without one the server runs in evaluation mode:
- Each bundled engine applies its own evaluation limits: output watermarks / evaluation notices, page limits, and per-process document-open caps (1-15 documents depending on the engine).
To lift the limits, mount your GroupDocs.Total.lic into the container and point
GROUPDOCS_LICENSE_PATH at it (see the Claude Desktop example above):
| Variable | Description | Default |
|---|---|---|
GROUPDOCS_MCP_STORAGE_PATH |
Base folder for input and output files | current directory |
GROUPDOCS_MCP_OUTPUT_PATH |
(Optional) separate folder for output files | GROUPDOCS_MCP_STORAGE_PATH |
GROUPDOCS_LICENSE_PATH |
Path to GroupDocs license file | (evaluation mode) |
{
"mcpServers": {
"groupdocs-total": {
"command": "docker",
"args": ["run", "--rm", "-i", "-v", "/path/to/documents:/data", "ghcr.io/groupdocs-total/total-net-mcp:latest"]
}
}
}To use a license, add
"-v", "/path/to/license-folder:/license", "-e", "GROUPDOCS_LICENSE_PATH=/license/GroupDocs.Total.lic"before the image name. To pin a version, replace:latestwith the release tag.
Use the Install in VS Code button above, or add to .vscode/mcp.json
(also in install/generated/vscode-mcp.json):
{
"inputs": [
{
"type": "promptString",
"id": "storage_path",
"description": "Base folder for input and output files.",
"password": false
}
],
"servers": {
"groupdocs-total": {
"command": "docker",
"args": ["run", "--rm", "-i", "-v", "${input:storage_path}:/data", "ghcr.io/groupdocs-total/total-net-mcp:latest"]
}
}
}cd docker
docker compose upEdit docker/docker-compose.yml to point volumes at your local documents folder.
MIT — see LICENSE