C2pa Watermark MCP logo

C2pa Watermark MCP

C2PA Watermark & Provenance MCP server. Built with c2pa-python.

Install C2pa Watermark MCP

Pick your client, then add it in one click or paste the config.

STDIOPython
~/Library/Application Support/Claude/claude_desktop_config.json
claude_desktop_config.json
{
  "mcpServers": {
    "c2pa-watermark-mcp": {
      "command": "uvx",
      "args": [
        "c2pa-watermark-mcp"
      ]
    }
  }
}

Settings β†’ Developer β†’ Edit Config, merge this into mcpServers, then fully quit and reopen Claude Desktop.

Install not yet sandbox-testedβ€” we haven't run this command through our automated sandbox yet. Not a red flag; we're working through the catalog.

Overview

Tools3

What C2pa Watermark MCP lets your agent do. Expand a tool for its parameters.

Self-reported~41 tokens of context

Security & health

What it can reach and how reliably it runs β€” from our own checks, not the maintainer’s claims.

ActiveLast checked 2d ago

Recent health check succeeded.

10/11 checks healthy over the last 70d

Supply-chain signal

No high-severity advisories surfaced by our automated scan.

Critical 0High 0Medium 0Low 0

Scanned 15d ago via OSV.dev Β· c2pa-watermark-mcp (PyPI)

Adoption & maintenance

Factual signals from GitHub, npm, and our automated checks β€” not a rating.

Last commit2mo agoMost recent push to the default branch.
Tools exposed3Callable tools this server registers over MCP.

From the project README

c2pa-watermark-mcp

C2PA Content Credentials MCP server β€” embed and verify machine-readable provenance for AI-generated assets, ahead of the EU AI Act Article 50 deadline (2 December 2026).

Why this exists

EU AI Act Article 50 (Regulation (EU) 2024/1689) requires that AI-generated content be machine-readable + detectable as AI-generated. The c2pa.ai_generated assertion is the C2PA spec's mandated way to do that.

The deadline is 2 December 2026 β€” about 6 months out. Companies that ship user-facing generative tools without C2PA support face fines up to €35M or 7% of global turnover.

This MCP wraps the official c2pa-python SDK (β‰₯0.9.0) as an MCP server so agents can attach C2PA manifests at generation time and verify provenance at runtime. A pure-stdlib HMAC fallback is included for environments where c2pa-python's native deps won't install (Vercel serverless, CI sandboxes, etc.).

Features

  • 3 MCP tools β€” sign_asset, verify_asset, status
  • EU AI Act Article 50 ready β€” auto-injects c2pa.ai_generated assertion
  • Pure-stdlib fallback β€” works without c2pa-python's native deps
  • HMAC-SHA256 signatures β€” tamper-evident manifests
  • Optional X.509 chain β€” via c2pa-python[evm] extra
  • Vercel-deployable β€” see c2pa-watermark-vercel sibling repo

Tools

ToolPurposeTier
sign_assetEmbed a C2PA manifest into an asset, HMAC-signedPro
verify_assetVerify a manifest against its asset bytesFree
statusReport server health + native SDK availabilityFree

install

bash
# Core (HMAC fallback, no native deps)
pip install c2pa-watermark-mcp

# With full c2pa-python (X.509 chain)
pip install 'c2pa-watermark-mcp[c2pa]'

# For local development
git clone https://github.com/CSOAI-ORG/c2pa-watermark-mcp
cd c2pa-watermark-mcp
pip install -e .[dev]

usage

Sign an asset (Pro tier)

server.ts
from c2pa_watermark_mcp import sign_asset, verify_asset, status

# Server health
print(status())
# β†’ {'server': 'c2pa-watermark-mcp', 'c2pa_python_available': False, ...}

# Sign an asset
with open("output.png", "rb") as f:
    asset = f.read()
key = b"my-hmac-key-32-bytes-long-aaaaaa"
result = sign_asset(
    asset_bytes=asset,
    asset_mime="image/png",
    claim_generator="MEOK-SDXL/1.0",
    signing_key=key,
    ai_generated=True,
    assertions=[
        {"label": "c2pa.training", "value": {"model": "sdxl-1.0", "dataset": "internal"}},
    ],
)
print(result["manifest_id"])

# Verify
verdict = verify_asset(asset, result["manifest"], key)
print(verdict)  # {'valid': True, 'reasons': [], ...}

Run as MCP server (stdio)

bash
c2pa-watermark-mcp
# or with full c2pa-python
pip install 'c2pa-watermark-mcp[c2pa]'
c2pa-watermark-mcp

Run via Docker

Terminal
docker build -t c2pa-watermark-mcp .
docker compose up -d
# status endpoint on http://localhost:8000

Deployment to Vercel

See the companion repo c2pa-watermark-vercel for a serverless wrapper exposing /sign, /verify, /status routes.

Architecture

Code
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                c2pa-watermark-mcp                            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”‚
β”‚  β”‚ sign_asset  β”‚  β”‚verify_asset β”‚  β”‚   status    β”‚         β”‚
β”‚  β”‚  (HMAC +    β”‚  β”‚  (HMAC +    β”‚  β”‚ (health +   β”‚         β”‚
β”‚  β”‚   c2pa.io)  β”‚  β”‚   tamper)   β”‚  β”‚  capability)β”‚         β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚
β”‚         β”‚                β”‚                β”‚                  β”‚
β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                  β”‚
β”‚                          β”‚                                   β”‚
β”‚                   β”Œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”                           β”‚
β”‚                   β”‚ HMAC-SHA256 β”‚  (always available)       β”‚
β”‚                   β”‚ + c2pa.io  β”‚   (if c2pa-python installed)β”‚
β”‚                   β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜                           β”‚
β”‚                          β”‚                                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”‚
β”‚  β”‚  manifest   β”‚  β”‚  signing   β”‚  β”‚  AI-Act     β”‚         β”‚
β”‚  β”‚  generator  β”‚  β”‚   keys     β”‚  β”‚ assertions  β”‚         β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Why we auto-inject c2pa.ai_generated

The C2PA spec defines this as the standard way to disclose AI-generated content. EU AI Act Article 50 says AI content must be "machine-readable and detectable as AI-generated" β€” the spec's answer is exactly this assertion. Skipping the auto-inject would be a compliance violation waiting to happen.

FAQ

Q: Does this need c2pa-python? A: No. The pure-stdlib HMAC-SHA256 fallback is fully functional for tamper-evident manifests. Install c2pa-python only if you need the full X.509 chain.

Q: Can I sign an asset that's not a PNG/JPEG? A: Yes. The asset_mime parameter is just metadata; the HMAC is over the bytes themselves. Works for video, audio, PDFs, etc.

Q: How do I rotate the signing key? A: Generate a new key, deploy with both OLD_KEY and NEW_KEY, re-sign all manifests with NEW_KEY, then drop OLD_KEY after expiry. This package supports key rotation via the signing_key constructor arg.

Q: Is this production-ready? A: Yes for tamper-evidence (HMAC). For full X.509 C2PA chain + cryptographic non-repudiation, install c2pa-python β‰₯ 0.9.0.

License

MIT Β© MEOK AI Labs / CSOAI-ORG

Reviews

No reviews yet β€” be the first to share how it worked for you.

Frequently Asked Questions about C2pa Watermark MCP

c2pa-watermark-mcp is an MCP server that embeds and verifies machine-readable C2PA provenance for AI-generated assets. Built with c2pa-python, it provides sign_asset, verify_asset, and status tools, automatically adds the c2pa.ai_generated assertion, and supports HMAC-SHA256 signing with a pure-stdlib fallback when native dependencies are unavailable.

c2pa-watermark-mcp provides three MCP tools: sign_asset embeds a C2PA manifest and signs it, verify_asset verifies a manifest against asset bytes, and status reports server health and native SDK availability.

Install the core package with pip install c2pa-watermark-mcp. For full c2pa-python support and an X.509 chain, install pip install 'c2pa-watermark-mcp[c2pa]'.

Yes, c2pa-watermark-mcp includes a pure-stdlib HMAC-SHA256 fallback for environments where c2pa-python native dependencies cannot be installed, including Vercel serverless and CI sandbox environments.

c2pa-watermark-mcp automatically injects the c2pa.ai_generated assertion when signing assets, providing a machine-readable C2PA indication that content is AI-generated.

Related MCP servers

Add a badge to your READMEShow it’s listed β€” live SVG, Markdown or HTML.

AllMCPs Directory Badge

Full Badge Customizer

Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.

Badge Style:
Live Dynamic SVG PreviewC2pa Watermark MCP AllMCPs Directory Badge
Markdown (GitHub README)
[![AllMCPs](https://allmcps.com/api/badge/c2pa-watermark-mcp?style=directory)](https://allmcps.com/mcp/c2pa-watermark-mcp)
HTML Embed
<a href="https://allmcps.com/mcp/c2pa-watermark-mcp"><img src="https://allmcps.com/api/badge/c2pa-watermark-mcp?style=directory" alt="C2pa Watermark MCP on AllMCPs" /></a>