CSOAI-ORG

c2pa-watermark-mcp

Community CSOAI-ORG
Updated

C2PA Content Credentials MCP — EU AI Act Article 50 watermarking + provenance. Pure-stdlib HMAC fallback + optional c2pa-python. MIT.

c2pa-watermark-mcp

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

Why this exists

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

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

This MCP wraps the official c2pa-pythonSDK (≥0.9.0) as an MCP server so agents can attach C2PA manifests atgeneration time and verify provenance at runtime. A pure-stdlib HMACfallback is included for environments where c2pa-python's native depswon'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

Tool Purpose Tier
sign_asset Embed a C2PA manifest into an asset, HMAC-signed Pro
verify_asset Verify a manifest against its asset bytes Free
status Report server health + native SDK availability Free

install

# 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)

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)

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

Run via Docker

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-vercelfor a serverless wrapper exposing /sign, /verify, /status routes.

Architecture

┌─────────────────────────────────────────────────────────────┐
│                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-generatedcontent. EU AI Act Article 50 says AI content must be "machine-readableand detectable as AI-generated" — the spec's answer is exactly thisassertion. Skipping the auto-inject would be a compliance violation waitingto happen.

FAQ

Q: Does this need c2pa-python?A: No. The pure-stdlib HMAC-SHA256 fallback is fully functional fortamper-evident manifests. Install c2pa-python only if you need the fullX.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 overthe 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-signall manifests with NEW_KEY, then drop OLD_KEY after expiry. Thispackage 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 + cryptographicnon-repudiation, install c2pa-python ≥ 0.9.0.

License

MIT © MEOK AI Labs / CSOAI-ORG

MCP Server · Populars

MCP Server · New

    n24q02m

    email

    IMAP/SMTP email for AI agents -- read, send, organize folders, and manage attachments across multiple accounts, with auto-discovery.

    Community n24q02m
    reticlehq

    reticle

    AI agents can generate code, but still struggle to understand what they build. Reticle brings Jev-style machine-native runtime perception to web & desktop applications.

    Community reticlehq
    tubeagentkit

    YouTube MCP Server: Transcripts, Search, Channels & Playlists

    YouTube MCP server: get YouTube video transcripts, search YouTube, browse channels and playlists from Claude, ChatGPT, Cursor and VS Code. Remote, free tier.

    Community tubeagentkit
    lrvx

    lrvx

    Framework for building trading systems

    Community lrvx
    koda-ai-studio

    agent-bom

    Open security scanner and self-hosted control plane for AI, MCP, and cloud. One evidence model — run scans in your environment, centralize findings, govern in your VPC.

    Community koda-ai-studio