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_DECLARED, NO_AI_DECLARED, UNKNOWN).

  • reason: конкретное основание для этого вердикта, например no-credential, credential-invalid, ai-source-type, capture-source-type или credential-silent.

  • what_this_does_not_mean: пояснение на простом языке, прикреплённое к каждому вердикту, чтобы результат нельзя было незаметно превратить в более сильное утверждение, чем позволяют доказательства.

  • signature: сырое validation_state, логическое verified и любые failure_codes, которые выдала проверка подписи.

  • declared: что заявляет манифест, если он существует. signer, claim_generator и signed_at — это свободный текст, взятый прямо из файла, поэтому каждый из них защищён в соответствии с разделом «Безопасность» ниже, прежде чем попасть к вам. source_types (URI IPTC digital-source-type, взятые из закрытого словаря) и watermark_declared (логическое значение) не могут содержать текст, созданный злоумышленником, поэтому оба возвращаются как есть и никогда не заключаются в ограждение.

Файл, который не удаётся прочитать (неверный путь, неподдерживаемый формат), возвращается как отдельный результат ошибки, а не как поддельный UNKNOWN. Нужен реальный путь на диске, а не сами байты изображения. См. Примечание о путях к файлам.

scan_directory

Дайте ему папку. Он обходит дерево, прогоняет каждое найденное изображение через ту же проверку и возвращает агрегированные счётчики по вердиктам и по подписантам, а также ограниченную выборку файлов с учётными данными, а не строку на каждый файл. Это инструмент, который воспроизводит собственный обход 401 изображения этого проекта (см. ниже) для любой указанной вами директории.

Три вердикта

Вердикт

Значение

Доступен только когда

AI_DECLARED

Манифест файла утверждает ИИ или алгоритмическую генерацию

Манифест присутствует, его подпись проверяется, и он содержит IPTC digital-source-type, помечающий участие ИИ

NO_AI_DECLARED

Манифест файла утверждает реальную съёмку

Манифест присутствует, его подпись проверяется, и он содержит IPTC digital-source-type, помечающий съёмку (камера, плёнка, печать, незначительные правки)

UNKNOWN

Ничего полезного не установлено

Всё остальное, включая отсутствие манифеста, нарушенную подпись или манифест, который никогда не записывал тип источника

UNKNOWN — это значение по умолчанию и самый частый ответ. При сканировании 401 реального изображения только 14 вообще содержали Content Credential, и все они были от OpenAI: около 96,5% не имели никаких учётных данных. Ожидайте UNKNOWN почти для всего, что вы проверяете. Это не ошибка сервера, это текущее состояние происхождения изображений в реальном мире.

Что это не может вам сказать

  • Он не определяет ИИ по пикселям. Здесь вообще нет анализа изображений, нет модели, смотрящей на картинку. Каждый вердикт исходит из криптографически подписанной текстовой записи или из её отсутствия.

  • Отсутствие учётных данных не является доказательством чего-либо. Немаркированное ИИ-изображение и немаркированная фотография неразличимы для этого инструмента. Снимок экрана, повторное сохранение или пропускание изображения через почти любой редактор удаляет учётные данные, независимо от того, создано ли оно ИИ. UNKNOWN означает «не сохранилось никакой пригодной записи», а не «ИИ не участвовал».

  • Действительная подпись не делает утверждения подписанта истинными. Подпись доказывает, что манифест не был изменён с момента подписания, и подтверждает, кто его подписал. Она ничего не доказывает о том, сказал ли подписант правду. Любой может сгенерировать собственный сертификат, подписать свой файл и заявить любое происхождение, какое пожелает: подпись будет проверена идеально, но утверждение останется ложным. Проверка касается печати, а не письма. См. docs/pass-fail.md.

Зачем он существует

Когда вы прикрепляете изображение к модели, оно декодируется в пиксели и перекодируется до того, как модель его увидит. Метаданные контейнера, включая любой манифест C2PA, никогда не достигают модели: модель видит массив RGB, и ничего больше. Без инструмента она вообще не может прочитать манифест и вместо этого склонна угадывать, создано ли изображение ИИ, по визуальным артефактам. Опубликованные бенчмарки оценивают такое угадывание примерно в 18–31% точности, что немногим лучше случайности. Этот сервер существует, чтобы модель читала фактическую подписанную запись на диске, а не сопоставляла шаблоны артефактов JPEG-сжатия.

Безопасность

Каждая человекочитаемая строка, возвращаемая этим сервером, происходит изнутри проверяемого файла: имя подписанта, строка claim-generator и любой свободный текст причины или метки. Этот текст был написан тем, кто создал файл, а не вами, и он попадает в то же окно контекста, что и ваши собственные инструкции. Поле с меткой «signer» несёт оттенок проверенного авторитета, но подпись покрывает байты актива, а не честность любой строки внутри манифеста. Любой может подписать свой файл собственным сертификатом и написать в нём всё, что угодно.

Прежде чем любая такая строка будет возвращена, она очищается от управляющих символов, ограничивается по длине и оборачивается в ограждённую границу, которая явно помечает её как недоверенные данные, а не инструкции, со случайным nonce, который автор файла не мог предугадать. Структурные значения, сам вердикт, состояние проверки и URI IPTC source-type взяты из закрытых словарей, которыми управляет этот сервер, и никогда не ограждаются, поскольку они не могут содержать текст, созданный злоумышленником.

См. src/is_it_ai_mcp/safety.py для реализации и полной модели угроз в docstring модуля.

Примечание о путях к файлам

Этот инструмент принимает путь к файлу, а не байты изображения. В Claude Code изображение, которое вы вставляете в разговор, сначала записывается на диск, поэтому его путь доступен, и всё работает. В других клиентах вставленное или прикреплённое изображение может существовать только как встроенные данные без пути в файловой системе, доступного серверу; в этом случае инструменту нечего открывать. Если проверка возвращает ошибку «файл не найден», сначала сохраните изображение на диск и укажите инструменту этот путь.

Разработка

uv sync --extra dev
uv run pytest -v

--extra dev важен: без него pytest-asyncio (необходимый для asyncio_mode = "auto" в pyproject.toml) не устанавливается, и pytest выводит предупреждение "Unknown config option: asyncio_mode" при каждом запуске.

Тесты запускаются на фикстурах в fixtures/: реальное подписанное изображение, а также изменённые и лишённые подписи варианты с вручную проверенными ожидаемыми результатами. См. fixtures/GROUND-TRUTH.md о том, как каждый вариант был создан и что он должен доказать.

Лицензия

MIT © 2026 Johannsen Lum.

Используйте, изменяйте, распространяйте, стройте на нём коммерческие продукты: единственное условие — сохранить уведомление об авторских правах и текст лицензии. Он предоставляется без каких-либо гарантий.

Вклад принимается на условиях той же лицензии.

Available Tools

2 tools
check_image_provenanceCheck Image ProvenanceA
Read-onlyIdempotent

Read the C2PA Content Credential embedded in a single image file and report what it declares about the image's origin: whether it asserts AI generation or a real-world capture, and whether that assertion's cryptographic signature still verifies. This reads metadata the file already carries; it does not analyze pixels and cannot detect AI generation on its own. A missing or invalid credential is not evidence the image is human made, an AI image loses its credential the moment it is screenshotted or re-saved. Always read the result's 'what_this_does_not_mean' field before repeating its verdict.

NameRequiredDescriptionDefault
pathYesPath to the local image file to inspect.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral context beyond the annotations (readOnlyHint, idempotentHint) by explaining the tool reads metadata, the caveat about screenshots, and the meaning of missing credentials. It also instructs the agent to always read the 'what_this_does_not_mean' field, which is a useful transparency detail not available from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three well-structured sentences that front-load the main purpose and then efficiently covers caveats and an instruction. Every sentence adds necessary value with no fluff, making it appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with a single parameter and existing output schema, the description addresses the key pitfalls (false negatives, data loss on re-save, misinterpretation). It explains what the tool does and does not do, and points to a result field for further context, making it complete for its scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% as the single 'path' parameter has a description. The description text does not add extra parameter-level details, but given the high schema coverage, the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb ('Read') and detailed resource ('C2PA Content Credential embedded in a single image file'), clearly stating what the tool does and what it reports. It also distinguishes itself from being a generic image analyzer by explicitly saying it does not analyze pixels, which differentiates from sibling 'scan_directory'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on what the tool does and its limitations (e.g., 'cannot detect AI generation on its own', 'missing or invalid credential is not evidence'). It implicitly covers when-not-to-use by warning against overreliance on its output, though it doesn't name an alternative tool or provide an explicit 'use this when' statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scan_directoryScan DirectoryA
Read-onlyIdempotent

Walk a directory of images and report how many carry a C2PA Content Credential, broken down by verdict (AI_DECLARED, NO_AI_DECLARED, UNKNOWN) and by signer. This reproduces the sweep behind this project's own finding that roughly 96.5% of real images carry no credential at all. It reads only file metadata, never pixels, and touches no network. Returns counts and a capped sample of credentialed files, not a full file listing, so a large directory does not flood the response. If the directory has more images than 'limit', the scan is partial and the result says so explicitly rather than silently truncating.

NameRequiredDescriptionDefault
pathYesPath to the local directory to scan.
limitNoMaximum number of image files to scan. If exceeded, the scan is partial and the result says so.
recursiveNoRecurse into subdirectories.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even with annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false) already covering the safety profile, the description adds substantial behavior: 'It reads only file metadata, never pixels, and touches no network.' It also discloses the capped sample return and explicit partial-scan signaling, which go well beyond what annotations convey. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single well-structured paragraph that front-loads the core purpose, then adds useful details without fluff. Every sentence contributes either to what the tool does, its safety characteristics, or its output behavior. Length is justified by the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 params, recursive, limit), the description covers all key aspects: purpose, partial scanning, non-flooding behavior, and safety. Since an output schema exists, the description need not explain return values in detail. The description is comprehensive for an agent to decide and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add much beyond the schema for parameters; it reiterates the 'limit' behavior but that is already in the schema. It does not clarify additional nuances like how 'recursive' affects the scan or default behaviors beyond what's in the schema. Meets baseline but doesn't exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is highly specific: 'Walk a directory of images and report how many carry a C2PA Content Credential, broken down by verdict and by signer.' It clearly distinguishes from the sibling tool check_image_provenance by focusing on directory-level scanning rather than individual file checks, and explicitly notes it returns counts and a capped sample rather than a full file listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool—reproducing a sweep for C2PA credential statistics—and notes its partial-scan behavior when limits are exceeded. However, it does not explicitly state when not to use it or mention the sibling tool as an alternative for single-image checks, so it falls short of the highest bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.1.0
    • First observedcheck_image_provenance
    • First observedscan_directory

TDQS

A4.7/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: one checks a single image's provenance, while the other scans a directory. There is no overlap or ambiguity between them.

Naming Consistency5/5

Both tool names follow a consistent verb_noun pattern (check_image_provenance, scan_directory), making them predictable and easy to understand.

Tool Count5/5

With exactly two tools, the set is minimal and well-scoped for the task of inspecting image provenance, covering both individual and batch operations without excess.

Completeness5/5

The tool set covers the core workflow: verifying a single image and scanning a directory, which addresses the stated purpose comprehensively. No obvious gaps exist.

Maintenance

ActivityStale
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server for reading C2PA content provenance manifests from media files, enabling natural language queries about AI-generated content, signatures, and provenance.
    3
    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