# groupdocs-metadata-mcp

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/groupdocs-metadata/GroupDocs.Metadata.Mcp  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/groupdocs-metadata-mcp

## Description
MCP server for GroupDocs.Metadata — read and remove document metadata via AI agents.

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "groupdocs-metadata-mcp": {
    "command": "npx",
    "args": ["-y","groupdocs-metadata-mcp"]
  }
}
```

## Documentation & README

# GroupDocs.Metadata MCP Server

MCP server that exposes [GroupDocs.Metadata](https://products.groupdocs.com/metadata) as AI-callable tools
for Claude, Cursor, GitHub Copilot, and other MCP agents.

[![NuGet](https://img.shields.io/nuget/v/GroupDocs.Metadata.Mcp?label=NuGet)](https://www.nuget.org/packages/GroupDocs.Metadata.Mcp)
[![NuGet downloads](https://img.shields.io/nuget/dt/GroupDocs.Metadata.Mcp?label=downloads)](https://www.nuget.org/packages/GroupDocs.Metadata.Mcp)
[![Docker pulls](https://img.shields.io/docker/pulls/groupdocs/metadata-net-mcp?label=docker%20pulls)](https://hub.docker.com/r/groupdocs/metadata-net-mcp)
[![MCP Registry](https://img.shields.io/badge/MCP_Registry-listed-6f42c1)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.groupdocs-metadata/groupdocs-metadata-mcp)
[![Integration tests](https://github.com/groupdocs-metadata/GroupDocs.Metadata.Mcp.Tests/actions/workflows/integration.yml/badge.svg)](https://github.com/groupdocs-metadata/GroupDocs.Metadata.Mcp.Tests/actions/workflows/integration.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

<!-- TODO(manual): record 30s demo per improvement-plan M1 -->
<!-- ![Demo](https://raw.githubusercontent.com/groupdocs-metadata/GroupDocs.Metadata.Mcp/HEAD/assets/demo.gif) -->

## Installation

<!-- install-buttons:start - generated by install/generate-install-links.ps1; do not edit by hand -->
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF)](https://vscode.dev/redirect/mcp/install?name=groupdocs-metadata&config=%7B%22command%22%3A%22dnx%22%2C%22args%22%3A%5B%22GroupDocs.Metadata.Mcp%22%2C%22--yes%22%5D%2C%22env%22%3A%7B%22GROUPDOCS_MCP_STORAGE_PATH%22%3A%22%2Fpath%2Fto%2Fdocuments%22%2C%22GROUPDOCS_MCP_OUTPUT_PATH%22%3A%22%2Fpath%2Fto%2Fdocuments%22%2C%22GROUPDOCS_LICENSE_PATH%22%3A%22%22%7D%7D) [![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5)](https://insiders.vscode.dev/redirect/mcp/install?name=groupdocs-metadata&config=%7B%22command%22%3A%22dnx%22%2C%22args%22%3A%5B%22GroupDocs.Metadata.Mcp%22%2C%22--yes%22%5D%2C%22env%22%3A%7B%22GROUPDOCS_MCP_STORAGE_PATH%22%3A%22%2Fpath%2Fto%2Fdocuments%22%2C%22GROUPDOCS_MCP_OUTPUT_PATH%22%3A%22%2Fpath%2Fto%2Fdocuments%22%2C%22GROUPDOCS_LICENSE_PATH%22%3A%22%22%7D%7D&quality=insiders) [![Add to Cursor](https://img.shields.io/badge/Cursor-Add_MCP-111111)](https://cursor.com/en/install-mcp?name=groupdocs-metadata&config=eyJjb21tYW5kIjoiZG54IiwiYXJncyI6WyJHcm91cERvY3MuTWV0YWRhdGEuTWNwIiwiLS15ZXMiXSwiZW52Ijp7IkdST1VQRE9DU19NQ1BfU1RPUkFHRV9QQVRIIjoiL3BhdGgvdG8vZG9jdW1lbnRzIiwiR1JPVVBET0NTX01DUF9PVVRQVVRfUEFUSCI6Ii9wYXRoL3RvL2RvY3VtZW50cyIsIkdST1VQRE9DU19MSUNFTlNFX1BBVEgiOiIifX0%3D) [![Codex CLI setup](https://img.shields.io/badge/Codex_CLI-Setup-e5541b)](install/generated/codex.md) [![Windsurf setup](https://img.shields.io/badge/Windsurf-Setup-0e8a7d)](install/generated/windsurf.md)

> One-click installs pre-fill every supported setting: edit the placeholder documents
> folder after install (output defaults to the same folder); an empty
> GROUPDOCS_LICENSE_PATH runs in evaluation mode - point it at your license to lift limits.
>
> **More clients** - ready-made configs for Claude Code, Codex CLI, Visual Studio 2022,
> Cursor, Windsurf, Cline, and JetBrains Rider live in [`install/generated/`](https://github.com/groupdocs-metadata/GroupDocs.Metadata.Mcp/blob/HEAD/install/generated/).
<!-- install-buttons:end -->

Requires [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0).

**Run directly with `dnx` (recommended — no install step):**

```bash
dnx GroupDocs.Metadata.Mcp --yes
```

Pulls the latest stable release on every invocation. To pin to a specific
version (recommended for shared configs and CI), append `@<version>`:

```bash
dnx GroupDocs.Metadata.Mcp@26.9.0 --yes
```

**Or install as a global dotnet tool:**

```bash
dotnet tool install -g GroupDocs.Metadata.Mcp
groupdocs-metadata-mcp
```

**Or run via Docker:**

```bash
docker run --rm -i \
  -v $(pwd)/documents:/data \
  ghcr.io/groupdocs-metadata/metadata-net-mcp:latest
```

## Native prerequisites

The underlying GroupDocs engine uses `System.Drawing` (GDI+) for some
operations. When you run the server **natively** (via `dnx` or the global
dotnet tool) on Linux or macOS, install the native `libgdiplus` library first:

| Platform | Setup |
|---|---|
| Windows | Nothing — GDI+ is built into the OS. |
| Linux | `sudo apt-get install -y libgdiplus libfontconfig1` |
| macOS | `brew install mono-libgdiplus` |
| Docker | Nothing — the image already bundles `libgdiplus`. |

Skipping this on Linux/macOS surfaces as `DllNotFoundException: libgdiplus` in
the tool response. The simplest zero-setup option on Linux/macOS is the
**Docker image**.

## Available MCP Tools

| Tool | Description |
|---|---|
| `ReadMetadata` | Reads all metadata properties (author, title, creation date, custom properties) and returns them as JSON |
| `SearchMetadata` | Searches within one document and returns only matching properties (filter by category, name, or value) — e.g. "show me the author", "does this have GPS?" |
| `WriteMetadata` | Sets, changes, or adds a property (Author, Title, Subject, Keywords, Comments, Copyright, Company, Manager) and saves the updated file |
| `RemoveMetadata` | Removes metadata and saves a cleaned file. Strips everything by default, or only specific `categories` (gps, author, comments, company, dates, software, copyright, keywords, personal) |
| `GetDocumentInfo` | Returns the file type, MIME type, page count, byte size, and encryption status as JSON — a lightweight structural check that does not enumerate metadata properties |

## Licensing

**The MCP server itself is MIT; the underlying GroupDocs.Metadata engine requires a license
for production use.** Without one the server runs in **evaluation mode**:

- A single server process can open at most **15 documents**; further calls fail with an evaluation-cap error until the server restarts.
- Saving metadata changes (write / remove) is blocked without a license.

There are two ways to license the server.

**License file** — point `GROUPDOCS_LICENSE_PATH` at your `GroupDocs.Total.lic`. Works offline.

**Metered (pay-per-use)** — set both `GROUPDOCS_METERED_PUBLIC_KEY` and
`GROUPDOCS_METERED_PRIVATE_KEY`. You are billed for what you actually process, which suits AI
agents well because their usage is bursty and hard to predict up front. If both a metered key pair
and a license file are configured, **metered wins** and the file is ignored.

> **Metered mode needs outbound connectivity.** Usage is reported to GroupDocs servers, so
> air-gapped or firewalled deployments must allow that egress — or use a license file instead.

Call the **`get_license_status`** tool at any time to see which mode is active, and — under
metered — the consumed quantity and remaining credit.

### Keeping the private key out of your config

The metered private key is a secret. MCP client configs are plain files on disk, and a
project-scoped `.mcp.json` is committed by convention, so prefer, in order:

1. **Set the variables in your OS environment and leave them out of the config entirely.** An
   stdio MCP server inherits its client's environment, so this works in every client.
   On macOS note that an app launched from Finder does not inherit shell exports — use
   `launchctl setenv`, or launch the client from a terminal.
2. **Reference them indirectly** if your client supports it (Claude Code expands `${VAR}`;
   VS Code uses `${env:VAR}` and `${input:...}`).
3. **A literal value in a user-scoped config** (for example `~/.claude.json`) is acceptable for a
   single developer.
4. **Never** commit a literal key in a project-scoped `.mcp.json`.

For Docker, forward the values without writing them into any file:

```bash
docker run --rm -i \
  -e GROUPDOCS_METERED_PUBLIC_KEY -e GROUPDOCS_METERED_PRIVATE_KEY \
  -v /path/to/documents:/data \
  ghcr.io/groupdocs-metadata/metadata-net-mcp:latest
```

To lift the limits with a license file:

- [Get a free 30-day temporary license](https://purchase.groupdocs.com/temporary-license/)
- [Purchase a license](https://purchase.groupdocs.com/pricing/metadata/net) | [Product page](https://products.groupdocs.com/metadata/net/)

## Configuration

| 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) |
| `GROUPDOCS_METERED_PUBLIC_KEY` | Metered public key. Requires the private key too; takes precedence over the license file | (unset) |
| `GROUPDOCS_METERED_PRIVATE_KEY` | Metered private key. **Secret** - see [Licensing](#licensing) | (unset) |

## Usage with Claude Desktop

```json
{
  "mcpServers": {
    "groupdocs-metadata": {
      "type": "stdio",
      "command": "dnx",
      "args": ["GroupDocs.Metadata.Mcp", "--yes"],
      "env": {
        "GROUPDOCS_MCP_STORAGE_PATH": "/path/to/documents"
      }
    }
  }
}
```

> To pin to a specific version, replace `"GroupDocs.Metadata.Mcp"` with
> `"GroupDocs.Metadata.Mcp@26.9.0"` in `args`. Pinning is recommended for
> shared / committed configs to avoid surprise upgrades.

## Usage with VS Code / GitHub Copilot

NuGet.org generates a ready-to-use `mcp.json` snippet on the [package page](https://www.nuget.org/packages/GroupDocs.Metadata.Mcp).
Copy it directly into your `.vscode/mcp.json`.

Alternatively, add manually to `.vscode/mcp.json`:

```json
{
  "inputs": [
    {
      "type": "promptString",
      "id": "storage_path",
      "description": "Base folder for input and output files.",
      "password": false
    }
  ],
  "servers": {
    "groupdocs-metadata": {
      "type": "stdio",
      "command": "dnx",
      "args": ["GroupDocs.Metadata.Mcp", "--yes"],
      "env": {
        "GROUPDOCS_MCP_STORAGE_PATH": "${input:storage_path}"
      }
    }
  }
}
```

> Same pinning rule as above — swap `"GroupDocs.Metadata.Mcp"` for
> `"GroupDocs.Metadata.Mcp@26.9.0"` to lock to a specific release.

## Usage with Docker Compose

```bash
cd docker
docker compose up
```

Edit `docker/docker-compose.yml` to point volumes at your local documents folder.

## Documentation & guides

Step-by-step deployment guides and a published-package integration test suite
live in the companion repo
[**GroupDocs.Metadata.Mcp.Tests**](https://github.com/groupdocs-metadata/GroupDocs.Metadata.Mcp.Tests):

- [Install from NuGet](https://github.com/groupdocs-metadata/GroupDocs.Metadata.Mcp.Tests/blob/master/how-to/01-install-from-nuget.md) — `dnx`, global tool, pinned vs always-latest
- [Run via Docker](https://github.com/groupdocs-metadata/GroupDocs.Metadata.Mcp.Tests/blob/master/how-to/02-run-via-docker.md)
- [Verify on the MCP registry](https://github.com/groupdocs-metadata/GroupDocs.Metadata.Mcp.Tests/blob/master/how-to/03-verify-mcp-registry.md)
- [Use with Claude Desktop](https://github.com/groupdocs-metadata/GroupDocs.Metadata.Mcp.Tests/blob/master/how-to/04-use-with-claude-desktop.md)
- [Use with VS Code / GitHub Copilot](https://github.com/groupdocs-metadata/GroupDocs.Metadata.Mcp.Tests/blob/master/how-to/05-use-with-vscode-copilot.md)
- [Use with Cursor](https://github.com/groupdocs-metadata/GroupDocs.Metadata.Mcp.Tests/blob/master/how-to/07-use-with-cursor.md)
- [Run the integration tests](https://github.com/groupdocs-metadata/GroupDocs.Metadata.Mcp.Tests/blob/master/how-to/06-run-integration-tests.md)

That repo also exercises every advertised tool against the **published** NuGet
artifact on Linux, macOS, and Windows in CI — so the snippets above are
verified end-to-end on every release.

## License

MIT — see [LICENSE](https://github.com/groupdocs-metadata/GroupDocs.Metadata.Mcp/blob/HEAD/LICENSE)

<!-- mcp-name: io.github.groupdocs-metadata/groupdocs-metadata-mcp -->

