# unmarking > Free web tool, HTTP API and MCP server that remove the C2PA content credential (Content Credentials) from AI-generated images, video and audio. The site runs entirely in the browser with WebAssembly; nothing is uploaded. AI tools such as Claude, ChatGPT and Adobe Firefly attach a signed C2PA manifest to the media they generate. The manifest records which tool produced the file and what was done to it. unmarking cuts that manifest out of the file container. Pixels, frames, audio samples and other metadata such as EXIF are left byte for byte intact. unmarking does not remove invisible watermarks such as SynthID, or watermarks in generated text. Files that only link to a manifest hosted at a remote URL are reported as "remote" and left unchanged. Supported formats in the browser: JPEG, PNG, GIF, WebP, TIFF, DNG, HEIC, HEIF, AVIF, SVG, MP4, MOV, AVI, M4A, MP3 and WAV. The API and MCP server additionally accept JXL and FLAC. Files up to 256 MB each. PDF is not supported. The engine wraps c2pa-rs (the reference C2PA implementation in Rust) compiled to WebAssembly. Every result is inspected again before it is offered for download, and each cleaned file links to an independent checker: Anthropic's file checker (https://claude.com/check-files) for files signed by Claude, and Content Credentials Verify (https://contentcredentials.org/verify) for other signers. ## Website - [unmark.ing](https://unmark.ing/): Drop files in the browser, download the cleaned copies. No account, no analytics, no uploads. - [MCP server and API](https://unmark.ing/developers/): Documentation for the hosted MCP server and the HTTP API. - [FAQ](https://unmark.ing/faq/): What content credentials are, which formats work, whether anything is uploaded, and how to verify a cleaned file. ## MCP server Model Context Protocol server over Streamable HTTP at https://api.unmark.ing/mcp. Stateless, no authentication. - Claude Code: `claude mcp add --transport http unmarking https://api.unmark.ing/mcp` - Other clients: `{"mcpServers":{"unmarking":{"type":"http","url":"https://api.unmark.ing/mcp"}}}` - Tool `inspect_file(url)`: Reports the content credential embedded in the file at a public URL, including whether it was made with Claude. - Tool `strip_file(url)`: Removes it and returns a download link for the cleaned copy. Nothing is stored. For files on the user's machine, use the local stdio server instead: `claude mcp add unmarking -- npx -y unmarking-mcp` (npm package `unmarking-mcp`, same tools taking `path` or `url`, writes the cleaned copy next to the original with a `-clean` suffix). ## HTTP API Free, no key or account. Base URL: https://api.unmark.ing - [POST /api/inspect](https://unmark.ing/developers/#api): Multipart field `file` or JSON body `{"url": "..."}`. Returns `{"kind":"none"}`, `{"kind":"remote","url":"..."}` or `{"kind":"embedded","state":"Trusted"|"Valid"|"Invalid","claude":true|false,"issuer":"...","commonName":"...","generator":"..."}`. `state` is `Trusted` only for files signed by Claude. - [POST /api/strip](https://unmark.ing/developers/#api): Same input. Returns the file without its content credential; the removed credential is in the `X-Content-Credential` response header. Files without a credential come back unchanged. - [GET /api/strip?url=...](https://unmark.ing/developers/#api): Same as POST /api/strip for a file at a public URL. Errors are JSON with an `error` field. Uploads are capped at 256 MB. URLs must be publicly reachable and are fetched with a 30 second timeout. Example: ``` curl -F file=@image.png https://api.unmark.ing/api/inspect curl -F file=@image.png https://api.unmark.ing/api/strip -o image-clean.png ```