Is It AI MCP について
Is It AI MCPは、ローカル画像ファイル内のC2PA Content Credentialsを読み取るMCPサーバーです。認証情報に記された出所と署名の検証結果を報告し、画像のピクセル分析や主張の真偽判定は行いません。
主な機能
- 01埋め込みC2PA認証情報の読み取り
- 02ファイルバイト列に対する署名検証
- 03記載された出所と判定の報告
- 04ディレクトリのスキャンと集計
- 05ファイル由来の文字列を未信頼として区分
活用シーン
- 01画像の署名付き来歴記録を確認
- 02有効な認証情報と欠落・無効なものを区別
- 03画像フォルダー内の認証情報チェックを集計
MCP 対応
ローカル画像パスを調べる `check_image_provenance` と、一括確認用の `scan_directory` を提供します。MCPクライアントに認証情報の主張と署名検証結果を返し、ピクセルから出所を推測することはありません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
2掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| path | string | はい | 検査するローカル画像ファイルのパス。 |
詳細
is-it-ai-mcp
ファイル自身が自らについて述べている内容を読み取り、その主張が今も成り立つかを確認します。
画像には、どのように作成されたかを示す署名付きコンテンツクレデンシャルを含めることができます。
このサーバーはそれを読み取り、バイトデータと照合して署名を検証し、その両方を
それ自体ではどちらも確認できない AI アシスタントに渡します。
画像に埋め込まれた C2PA コンテンツクレデンシャルを読み取り、ファイル自身の由来に関する記述と、 その記述が目の前のバイトデータに対して今も検証できるかを報告する MCP サーバーです。
📖 ドキュメント:mcp.johannsenlum.com/is-it-ai · インストールガイド · ツールリファレンス
🔍 インストールせずに試す:ai.johannsenlum.com/is-it-ai 同じチェックをブラウザー上で、お使いのマシン内で実行します。何もアップロードされません。
機能
画像を開いて、埋め込まれた C2PA マニフェスト(コンテンツクレデンシャル)を探します。存在する場合は、 そのマニフェストが画像の作成方法について主張している内容と、マニフェストの暗号署名がファイルの現在の バイトデータと一致するかどうかを、それぞれ報告します。ピクセルを調べることも、推測することもありません。 マニフェストがない場合や、マニフェストは存在するものの署名が壊れている場合は、答えを作り出さず、 その旨を明確に伝えます。
「署名が検証されたこと」と「主張が真実であること」が別の問いであり、このサーバーが前者にしか答えない理由については、 docs/pass-fail.md をご覧ください。
インストール
サーバーの実行
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
Claude Code:~/.claude.json
{
"mcpServers": {
"is-it-ai": {
"command": "uvx",
"args": ["is-it-ai-mcp"]
}
}
}
Claude Desktop:claude_desktop_config.json
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
ディスク上にある画像ファイルを 1 つ指定します。次の情報が返されます。
verdict:次の 3 つの状態のいずれかです(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(限定された語彙から選ばれる IPTC デジタルソースタイプの URI)とwatermark_declared(ブール値)には攻撃者が作成したテキストを含められないため、どちらもそのまま返され、フェンス処理されることはありません。
ファイルを読み取れない場合(パスが無効、形式が未対応など)は、偽の UNKNOWN ではなく、個別のエラー結果が返されます。画像のバイト列そのものではなく、ディスク上の実際のパスが必要です。ファイルパスに関する注意を参照してください。
scan_directory
フォルダーを指定します。ディレクトリツリーを走査し、見つかったすべての画像に同じチェックを実行します。判定と署名者ごとの集計数に加え、認証情報を含むファイルのサンプルを上限付きで返します。ファイルごとに 1 行ずつ返すわけではありません。このツールを使うと、任意のディレクトリに対して、このプロジェクト独自の画像 401 枚のスキャン(以下を参照)を再現できます。
3 つの判定
| 判定 | 意味 | 判定される条件 |
|---|---|---|
AI_DECLARED | ファイルのマニフェストが、AI またはアルゴリズムによる生成を主張しています | マニフェストが存在し、署名が検証され、AI の関与を示す IPTC デジタルソースタイプのマーキングが含まれている |
NO_AI_DECLARED | ファイルのマニフェストが、現実世界での撮影を主張しています | マニフェストが存在し、署名が検証され、撮影(カメラ、フィルム、印刷、軽微な編集)を示す IPTC デジタルソースタイプのマーキングが含まれている |
UNKNOWN | 使用可能な情報が確認できませんでした | マニフェストがない、署名が壊れている、マニフェストにソースタイプが記録されていないなど、上記以外のすべて |
UNKNOWN がデフォルトであり、圧倒的に多い回答です。 実際の画像 401 枚をスキャンしたところ、Content Credential を含む画像はわずか 14 枚で、そのすべてが OpenAI のものでした。約 96.5% には認証情報がまったくありませんでした。チェックする画像のほとんどすべてで UNKNOWN が返されると考えてください。これはこのサーバーの不具合ではなく、現時点における実世界の画像プロベナンスの状況です。
これではわからないこと
- ピクセルから AI 生成を検出するものではありません。 ここでは画像解析を一切行わず、画像を見るモデルもありません。すべての判定は、暗号署名されたテキスト記録か、その記録がないことに基づいています。
- 認証情報がないことは、何の証拠にもなりません。 マーキングのない AI 画像と、マーキングのない写真をこのツールで見分けることはできません。スクリーンショットを撮る、保存し直す、ほとんどの画像編集ソフトを通すといった操作をすると、AI 生成かどうかにかかわらず認証情報が削除されます。
UNKNOWNは「利用可能な記録が残っていない」という意味であり、「AI が関与していない」という意味では決してありません。 - 署名が有効でも、署名者の主張が真実だとは限りません。 署名によって証明されるのは、署名後にマニフェストが改ざんされていないことと、誰が署名したかです。署名者が真実を述べたかどうかは証明されません。誰でも独自の証明書を作成し、自分のファイルに署名して、好きな由来を主張できます。その署名は完全に検証されても、内容は誤っている可能性があります。検証されるのは封印であり、手紙の内容ではありません。docs/pass-fail.mdを参照してください。
存在理由
画像をモデルに渡すと、モデルが画像を見る前に、画像はピクセルにデコードされ、再エンコードされます。C2PA マニフェストを含むコンテナーメタデータはモデルに届かず、モデルが見るのは RGB 配列だけです。ツールがなければ、マニフェストを読むことはできず、代わりに視覚的なアーティファクトから画像が AI 生成かどうかを推測しがちです。公表されているベンチマークでは、その推測の精度はおよそ 18〜31%で、ほぼ偶然と変わりません。このサーバーは、モデルが JPEG 圧縮アーティファクトのパターン照合をするのではなく、ディスク上の実際の署名済み記録を読めるようにするためのものです。
セキュリティ
このサーバーが返す人間可読文字列はすべて、検査対象のファイル内に由来します。署名者名、クレーム生成ツールの文字列、自由記述の理由やラベルなどが該当します。このテキストを書いたのはファイルの作成者であり、あなたではありません。また、あなた自身の指示と同じコンテキストウィンドウに入ります。「署名者」と表示されたフィールドには、検証済みの権威があるような印象がありますが、署名が対象とするのはアセットのバイト列であり、マニフェスト内の文字列の正直さではありません。誰でも自分の証明書でファイルに署名し、その中に好きなことを書き込めます。
このような文字列を返す前に、制御文字を除去し、長さを制限したうえで、指示ではなく信頼できないデータであることを明示するフェンス境界で囲みます。また、ファイルの作成者が事前に推測できないランダムなノンスも付加します。構造値、判定そのもの、検証状態、IPTC のソースタイプ URI は、このサーバーが管理する閉じた語彙から選ばれ、攻撃者が作成したテキストを含み得ないため、フェンスで囲みません。
実装は src/is_it_ai_mcp/safety.py を、脅威モデルの全容は同モジュールの docstring を参照してください。
ファイルパスに関する注意
このツールが受け取るのはファイルパスであり、画像のバイト列ではありません。Claude Code では、会話に貼り付けた画像はまずディスクに書き込まれるため、そのパスにアクセスでき、このまま動作します。他のクライアントでは、貼り付けまたは添付した画像がインラインデータとしてしか存在せず、サーバーがアクセスできるファイルシステム上にパスがない場合があります。その場合、このツールで開けるものはありません。ファイルが見つからないという結果が返ってきた場合は、まず画像をディスクに保存してから、そのパスをツールに指定してください。
開発
uv sync --extra dev
uv run pytest -v
--extra dev は重要です。これを指定しないと、pyproject.toml の asyncio_mode = "auto" に必要な pytest-asyncio がインストールされず、pytest は実行するたびに「Unknown config option: asyncio_mode」という警告を表示します。
テストは fixtures/ 内のフィクスチャを使って実行します。そこには、署名済みの実画像と、改ざん版およびメタデータ削除版が含まれており、それぞれの期待される結果は手作業で検証済みです。それぞれの生成方法と、実証することが期待される内容については、fixtures/GROUND-TRUTH.md を参照してください。
ライセンス
MIT © 2026 Johannsen Lum.
使用、変更、再配布、商用製品の構築は自由です。唯一の条件は、著作権表示とライセンス文を保持することです。いかなる種類の保証もありません。
コントリビューションも同じライセンスのもとで受け付けます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。