MCP server for reading C2PA content provenance manifests from media files (MP3, JPG, PNG, MP4, etc.)
Seven tools with clear, domain-specific naming (c2pa_read, c2pa_summary, etc.) and comprehensive descriptions (100 - 250 chars each). All tools have input schemas with type definitions and parameter descriptions. However, output schemas are not documented, responses are JSON strings without declared structure. Error handling returns JSON with 'error' field but lacks recovery guidance or categorization. No tool annotations (readOnlyHint, etc.) despite all being read-only operations. Parameter descriptions are adequate but could specify constraints (e.g., file path format, directory recursion behavior). Composition is sound: each tool has one responsibility, and naming clearly distinguishes similar operations (read vs. summary vs. verify).
List all assertions from the active manifest of a media file. Assertions are the building blocks of a C2PA claim: actions performed, metadata, hashes, training/data-mining declarations, soft bindings (watermarks), and more. Each carries a `label` (e.g. `c2pa.actions.v2`) and a `data` payload.
Return c2pa-python library version and supported formats. Use this to confirm the MCP server can read C2PA manifests and to check which MIME types / extensions the underlying library supports.
List ingredients (source assets used) from the active manifest. Ingredients describe the inputs that went into producing this asset — e.g. a parent image edited in Photoshop, or training-data references. Each ingredient has a title, format, relationship (parent/component), and may carry its own nested manifest.
Read the full C2PA manifest store from a media file. Returns the raw manifest store as produced by the C2PA reader, including all manifests, assertions, ingredients, validation state, and signature info. Use c2pa_summary for a friendlier overview.
Scan a directory for media files and report C2PA manifest status. For every supported file, reports whether a C2PA manifest is present, the claim generator, and whether the asset is flagged as AI-generated. Useful for auditing a downloads folder, a music library, or a content archive for provenance coverage.
Output schemas not documented. Tools return JSON strings but LLMs cannot infer response structure (fields, types, nesting). This forces LLMs to parse unstructured output, increasing errors and token waste.
Error responses lack recovery guidance. Errors return JSON with 'error' field but do not tell LLM what to do next (retry, ask user, or fail). No error categorization (retryable vs. user-fixable vs. fatal).
No tool annotations despite all tools being read-only. FastMCP supports readOnlyHint; applying it would signal to clients that these tools are safe to call without confirmation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Get a human-friendly summary of a file's C2PA manifest. Highlights the most useful fields: claim generator (e.g. "Google C2PA Core Generator Library"), whether the asset is AI-generated, what actions were performed (c2pa.created, c2pa.edited), digital source types, ingredients used, watermarks (e.g. Google SynthID), signature issuer, and validation state.
Verify the signature and validation state of a file's C2PA manifest. Returns the issuer (e.g. Google, Adobe), the C2PA validation state, and any validation failures or successes. Use this to check whether a manifest has been tampered with or whether the signing certificate is trusted.
Parameter constraints not formalized. 'file_path' and 'directory' descriptions mention 'absolute path' but do not specify format, validation rules, or what happens if relative paths are passed. 'recursive' boolean lacks default behavior clarity.
c2pa_scan result limits not documented. Tool scans directories recursively but does not specify max results, pagination, or behavior on large directories. Could exhaust context window.