Skip to main content
Glama

is-it-ai-mcp

一个 MCP 服务器,用于读取图片中嵌入的 C2PA Content Credential,并报告 该文件对其自身来源的声明,以及该声明是否仍能对照你面前的字节通过验证。

📖 文档:mcp.johannsenlum.com/is-it-ai · 安装指南 · 工具参考

🔍 无需安装即可试用:ai.johannsenlum.com/is-it-ai 在浏览器中、在你的机器上运行同样的检查,不会上传任何内容。

PyPI Python 3.11+ License: MIT

它的作用

它打开一张图片,查找其中嵌入的 C2PA 清单(即 Content Credential),如果 存在,则报告两件独立的事情:该清单对图片制作方式的声明,以及该清单上的 加密签名是否仍与文件当前的字节匹配。它不查看像素,也不做猜测。如果没有 清单,或者清单存在但签名已损坏,它会直说,而不是编造一个答案。

参见 docs/pass-fail.md,了解为什么"签名已验证"和"声明 属实"是两个不同的问题,以及为什么本服务器只回答第一个问题。

Related MCP server: image-forensics-mcp

安装

运行服务器

is-it-ai-mcp 已发布在 PyPI 上。运行方式:

uvx is-it-ai-mcp

从源码安装(贡献者 / 未发布的 main 分支)。 不属于上述常规安装路径, 仅当你需要最新的未发布代码而非已发布的 PyPI 版本时才需要:

uvx --from git+https://github.com/JohannsenLum/is-it-ai-mcp is-it-ai-mcp

或者从本地克隆运行:

git clone https://github.com/JohannsenLum/is-it-ai-mcp
cd is-it-ai-mcp
uv sync

无需账户、API 密钥或环境变量。服务器只读取你指定的本地文件。

Claude Code 和 Claude Desktop

{
  "mcpServers": {
    "is-it-ai": {
      "command": "uvx",
      "args": ["is-it-ai-mcp"]
    }
  }
}

macOS:~/Library/Application Support/Claude/claude_desktop_config.json Windows:%APPDATA%\Claude\claude_desktop_config.json

通过 设置 → 开发者 → 编辑配置 复制以下 JSON:

{
  "mcpServers": {
    "is-it-ai": {
      "command": "uvx",
      "args": ["is-it-ai-mcp"]
    }
  }
}

工具

check_image_provenance

给它磁盘上的一张图片文件的路径。它返回:

  • verdict:以下三种状态之一(AI_DECLAREDNO_AI_DECLAREDUNKNOWN)。

  • reason:该判定结果的具体依据,例如 no-credentialcredential-invalidai-source-typecapture-source-typecredential-silent

  • what_this_does_not_mean:附加在每个判定结果上的通俗语言提示,确保 结果不会被悄悄升级为超出证据支持的更强断言。

  • signature:原始的 validation_state、一个 verified 布尔值,以及 签名检查产生的任何 failure_codes

  • declared:清单存在时它所声明的内容。signerclaim_generatorsigned_at 是直接从文件中提取的自由文本,因此在到达你之前,每一项都 按照下方"安全"一节进行了防护。source_types(IPTC digital-source-type URI,取自封闭词汇表)和 watermark_declared(一个 布尔值)无法携带攻击者撰写的文本,因此两者按原样返回,且从不加围栏。

无法读取的文件(路径错误、格式不支持)会以明确的错误结果返回,而不是伪造 的 UNKNOWN。它需要磁盘上的真实路径,而不是图片字节本身。参见 关于文件路径的说明

scan_directory

给它一个文件夹。它会遍历目录树,对找到的每张图片运行同样的检查, 并按判定结果和签名者返回汇总计数,外加携带凭证的文件的有上限的样本, 而不是逐文件输出一行。这个工具可以针对你指定的任何目录,复现本项目自身的 401 张图片扫描(见下文)。

三种判定结果

判定结果

含义

仅在以下情况下可达

AI_DECLARED

文件的清单断言 AI 或算法生成

清单存在、其签名验证通过,且携带标记 AI 参与的 IPTC digital-source-type

NO_AI_DECLARED

文件的清单断言真实世界拍摄

清单存在、其签名验证通过,且携带标记拍摄(相机、胶片、印刷、轻微编辑)的 IPTC digital-source-type

UNKNOWN

未建立任何可用信息

其他所有情况,包括无清单、签名损坏,或清单从未记录来源类型

UNKNOWN 是默认结果,也是绝大多数情况下的答案。 在对 401 张真实图片的 扫描中,只有 14 张携带 Content Credential,而且每一张都来自 OpenAI: 约 96.5% 的图片完全没有凭证。你检查的几乎所有内容都预期返回 UNKNOWN。 这不是本服务器的缺陷,而是当前图片溯源领域的现实状况。

这无法告诉你什么

  • 它不通过像素检测 AI。 这里完全没有图像分析,没有模型在看图片。 每个判定结果都来自一份加密签名的文本记录,或来自记录的缺失。

  • 缺少凭证不构成任何证据。 一张未标记的 AI 图片和一张未标记的照片, 对这个工具来说无法区分。截图、重新保存,或让图片经过几乎任何编辑器, 都会剥离凭证——无论是否为 AI 制作。UNKNOWN 意味着"没有可用的记录留存", 绝不意味着"没有 AI 参与"。

  • 有效的签名并不使签名者的声明为真。 签名证明清单自签名以来未被篡改, 并确认签名者是谁。它完全不证明签名者是否说了真话。任何人都可以生成自己的 证书,签署自己的文件,并断言任何他们想要的来源:它会完美地通过验证, 但仍然可能是假的。验证关乎封印,而非信函内容。 参见 docs/pass-fail.md

它为什么存在

当你把图片附加给模型时,图片会被解码为像素并在模型看到之前重新编码。 容器元数据(包括任何 C2PA 清单)永远不会到达模型:模型看到的只是一个 RGB 数组,仅此而已。没有工具,它根本无法读取清单,而且它往往会根据视觉 伪影来猜测图片是否为 AI 生成。已发表的基准测试将这种猜测的准确率定在 大约 18% 到 31%,比碰运气好不了多少。本服务器的存在,就是为了让模型读取 磁盘上真实的签名记录,而不是对 JPEG 压缩伪影做模式匹配。

安全

本服务器返回的每一条人类可读字符串都源自被检查的文件内部:签名者名称、 claim-generator 字符串,以及任何自由文本的理由或标签。这些文本由文件的 制作者(而非你)撰写,并且会进入与你自己的指令相同的上下文窗口。一个标有 "signer"(签名者)的字段带有一种已验证权威的气息,但签名覆盖的是资产的 字节,而不是清单中任何字符串的诚实性。任何人都可以用自己的证书签署自己的 文件,并在其中写入任何内容。

在返回任何此类字符串之前,它会被清除控制字符、限制长度,并包裹在一个 围栏边界中,明确标记为不可信数据而非指令,并附带一个文件作者无法预先 猜到的随机 nonce。结构性值、判定结果本身、验证状态以及 IPTC source-type URI 取自本服务器控制的封闭词汇表,且从不加围栏,因为它们无法携带攻击者 撰写的文本。

实现及完整威胁模型见 src/is_it_ai_mcp/safety.py 的模块文档字符串。

关于文件路径的说明

此工具接受文件路径,而非图片字节。在 Claude Code 中,你粘贴到对话中的 图片会先写入磁盘,因此其路径是可访问的,直接可用。在其他客户端中,粘贴或 附加的图片可能仅以内联数据形式存在,在服务器可访问的文件系统上没有路径, 此时此工具便无文件可打开。如果检查返回找不到文件,请先将图片保存到磁盘, 再将工具指向该路径。

开发

uv sync --extra dev
uv run pytest -v

--extra dev 很重要:没有它,pytest-asynciopyproject.toml 中的 asyncio_mode = "auto" 需要它)不会被安装,pytest 会在每次运行时打印 "Unknown config option: asyncio_mode" 警告。

测试针对 fixtures/ 中的夹具运行,包括一张真实签名图片, 以及经过篡改和剥离的变体,并带有手工验证的预期结果。参见 fixtures/GROUND-TRUTH.md,了解每个夹具的 制作方式以及每个夹具预期证明什么。

许可证

MIT © 2026 Johannsen Lum。

可以自由使用、修改、再分发、在此基础上构建商业产品:唯一条件是保留版权 声明和许可证文本。它不附带任何形式的担保。

贡献在相同许可证下接受。

Install Server
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for reading C2PA content provenance manifests from media files, enabling natural language queries about AI-generated content, signatures, and provenance.
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables AI assistants to analyze images for AI-generated content using noise maps, error level analysis, frequency analysis, spectral decay, color analysis, and metadata inspection.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A hosted remote MCP server for C2PA disclosure policy, enabling AI governance teams to check disclosure policies, validate C2PA status, issue AI media receipts, explain region rules, and export disclosure logs.
    MIT

View all related MCP servers

Related MCP Connectors

  • Remote MCP for C2PA intake verifier MCP, structured receipts, audit logs, and reviewer-ready evidenc

  • Remote MCP for C2PA disclosure policy MCP, structured receipts, audit logs, and reviewer-ready evide

  • Scans MCP servers for tool poisoning, prompt injection and supply chain risks.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JohannsenLum/is-it-ai-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server