Install
Install the Is It AI MCP server with uvx. No account, API key, or environment variable needed.
Prerequisites
- Python 3.11+: the server is a Python package, run via
uvx. uvoruvxinstalled on your machine. See the uv install docs if you don't have it yet.
That's the whole list. Unlike Canvas LMS and LinkedIn, is-it-ai-mcp needs no
account, no API key, and no environment variable to set. It never makes a network
call at all: it only opens an image file already on your disk and checks a
signature already embedded in it. There is nothing to configure beyond pointing
your client at the command below.
Manual configuration
Add is-it-ai-mcp to your MCP client's config, using uvx so nothing needs a
separate install step. There's no env block to fill in.
Easiest via the CLI, which writes the config for you:
claude mcp add is-it-ai -- uvx is-it-ai-mcpOr edit the config directly: project-shared config lives in <project>/.mcp.json;
user and local (private, per-project) config both live inside ~/.claude.json:
{
"mcpServers": {
"is-it-ai": {
"command": "uvx",
"args": ["is-it-ai-mcp"]
}
}
}Published on PyPI
is-it-ai-mcp is published on PyPI.
Every config on this page runs uvx is-it-ai-mcp directly: uvx fetches the
package from PyPI and runs it, with no separate install step.
Install from source (development only)
Testing an unreleased change on main? Point uvx at the repo instead of PyPI:
uvx --from git+https://github.com/JohannsenLum/is-it-ai-mcp is-it-ai-mcp. This is
a development-only path, regular installs above should always use the plain
uvx is-it-ai-mcp form.
Verify it works
Restart your MCP client so it picks up the new server, then give it a real image
file to check, something like "check the provenance of ~/Downloads/photo.jpg."
That calls check_image_provenance, which returns a verdict of AI_DECLARED,
NO_AI_DECLARED, or UNKNOWN.
UNKNOWN is the normal, expected answer for almost every image you try. In a
scan of 401 real images, only 14 carried a Content Credential at all, all of them
from OpenAI: about 96.5% carried none. For a typical file, the four fields that
answer "was this AI" look something like this (trimmed here; the full result also
carries signature and declared breakdowns, see the tool reference):
{
"verdict": "UNKNOWN",
"reason": "no-credential",
"headline": "No Content Credential was found in this file.",
"what_this_does_not_mean": "This is NOT evidence the image is human made. Roughly 96.5% of real images carry no Content Credential, and an AI image loses its credential the moment anyone screenshots or re-saves it. An unmarked AI image and an unmarked photograph are indistinguishable here. Do not report this as 'no AI found' or as any kind of negative result."
}That's a completed, successful check, not a failure. If you want to see the counts
add up across a whole folder, or reproduce the 401-image figure above yourself,
point scan_directory at a directory of images and read the verdict_counts and
by_signer breakdown it returns.
A note on file paths
Both tools take a path on disk, not the image's raw bytes. In Claude Code, an image you paste into the conversation is written to disk first, so its path is reachable and this just works. In other MCP clients, a pasted or attached image may exist only as inline data with no path on the filesystem the server can reach, in which case there is nothing for the tool to open. If a check comes back unable to find the file, save the image to disk first and point the tool at that real path instead of pasting it.
Troubleshooting
It reports UNKNOWN, or "no credential found," for every image I try. This is
expected, not a bug. Content Credentials are still rare: only about 3.5% of a
401-image sample carried one at all. This server never inspects pixels, it can only
report what a file's own manifest says, and most files simply don't have one. An
unmarked AI image and an unmarked photograph look identical to it. Try
scan_directory against a folder of a few thousand real images if you want to see
just how rare a hit actually is.
"Unsupported format" or "unreadable file" isn't the same thing as UNKNOWN. A
completed check always returns a verdict field, even when that verdict is
UNKNOWN. If the file couldn't be opened at all, for example a corrupt file or a
format the server doesn't support, the result comes back with a distinct error
field instead and no verdict key at all. That means no check ran, not that a check
ran and found nothing. Point the tool at a real, openable image file and try again.
Python version too old. The server requires Python 3.11+. uvx normally
resolves an appropriate interpreter on its own, but if it fails, check your
installed Python version and upgrade if it's below 3.11.
Server doesn't appear in the client. Confirm you fully restarted the client (for Claude Desktop, quit with Cmd+Q or the tray icon's Exit, closing the window is not enough) and that the config file is valid JSON in the exact shape shown above, with no stray trailing comma.