IAdetector について
IAdetectorは、ユーザーやエージェント向けのローカル文章判定ツールで、コマンドラインとMCPサーバーから利用できます。統計的な指標とONNXモデルを組み合わせ、判定結果を説明しますが、結果は証明ではなく確率的な根拠です。
主な機能
- 01ローカルでの文章分析
- 02統計指標とONNXシグナル
- 03ファイルとディレクトリの一括検査
- 04シグナル別の判定説明
- 05コマンドラインとMCPインターフェース
活用シーン
- 01未公開原稿のローカル検査
- 02ディレクトリ内の文書を一括確認
- 03検出結果を支える指標の確認
MCP 対応
stdioのMCPサーバーは、テキスト・ローカルファイル・ディレクトリの分析、結果の説明、原文と書き換え文の比較を行うツールを公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
IAdetector
テキストがAIによって生成されたかを検出します。100%ローカルで動作し、有料の外部API(OpenAI、GPTZero、Originality.aiなど)を呼び出しません。純粋な統計的・文体論的シグナルと、ローカルで動作する2つの小型ONNXモデル(RoBERTa分類器とDistilGPT-2 perplexityモデル)を組み合わせ、実データ(HC3)を使ったロジスティック回帰でキャリブレーションしています。
同じエンジンを2つの方法で利用できます。
- MCP サーバー(
IAdetector.Mcp)— エージェント(Claude Code、VS Code Copilotなど)がテキストを分析するためのツールです。 - CLI(
IAdetector.Cli、コマンドiadetector)— ターミナルやスクリプトから直接利用できます。
どんなことを質問できますか
| 質問 | 回答するツール |
|---|---|
| 「このテキストはAIが書いたものですか?」 | detect_text |
| 「このファイルを分析してください」 | detect_file |
| 「このフォルダーにある500個のドキュメントを確認してください」 | batch_detect_directory |
| 「なぜその判定になったのですか?」 | explain_detection |
すべての処理はお使いのマシン上で行われます。 外部APIもキーも不要で、分析対象のテキストがデバイスの外に出ることはありません。これはGPTZero、Originality.aiなど、クラウド上の検出ツールとの本質的な違いです。未発表の原稿や機密文書を、誰にも渡さずに分析できます。
重要
結果は証拠であり、断定の根拠ではありません。 AI生成テキストの検出は確率的なもので、実際に誤検出が起こります。特に、自分の母語ではない言語で文章を書く人や、定型的な技術文書を書く人に、誤検出の影響が不均衡に及ぶことがあります。
学生や従業員を非難する際に、このツールだけを根拠にしないでください。人間の判断による確認の優先順位付けに活用するものであり、判断を代わりに下すものではありません。
アーキテクチャ
実用的なクリーンアーキテクチャを採用した、製品用の4プロジェクトです。
src/
IAdetector.Core/ Dominio + casos de uso. Cero dependencias externas.
IAdetector.Infrastructure/ Señales (estadísticas + ONNX), ensemble calibrado, descarga de modelos.
IAdetector.Mcp/ Servidor MCP (stdio), vía ModelContextProtocol C# SDK.
IAdetector.Cli/ CLI (comando `iadetector`), vía System.CommandLine.
tools/
IAdetector.Calibration/ Herramienta de desarrollo: extrae features para recalibrar el ensemble.
tests/ xUnit: Core, Infrastructure, e integración end-to-end (corpus HC3 held-out).
scripts/calibration/ Dataset de calibración + script Python (scikit-learn) que ajusta los pesos.
CalibratedEnsembleScorerで7つのシグナルを組み合わせます。burstiness、type-token ratio、語彙エントロピー、圧縮率、n-gramの反復、ONNX分類器(RoBERTa)、perplexity(DistilGPT-2)です。キャリブレーション済みの係数については、EnsembleWeights.jsonを参照してください。
必要条件
- .NET 10 SDK
- WindowsでNative AOTバイナリを公開する場合:C++ workloadを含むVisual Studio Build Tools(
vswhere.exeにアクセスできる必要があります。通常はC:\Program Files (x86)\Microsoft Visual Studio\Installer\にあります)。
インストール
CLI
オプションA — NuGetからdotnet toolでインストール(1つのコマンドで完了。.NETランタイムが必要です):
dotnet tool install --global IAdetector.Cli
iadetector detect ejemplo.txt
(NuGetではなくソースコードからインストールするには、dotnet pack src/IAdetector.Cli -c Release -o ./nupkgを実行してから、dotnet tool install --global --add-source ./nupkg IAdetector.Cliを実行します。)
オプションB — スタンドアロンのネイティブバイナリ(.NETのインストール不要):
dotnet publish src/IAdetector.Cli -c Release -r win-x64 -p:PublishAot=true -o ./publish/cli
./publish/cli/IAdetector.Cli.exe detect ejemplo.txt
プラットフォームに応じて、win-x64をlinux-x64に置き換えてください。
MCP サーバー
オプションA — dnxでNuGetパッケージを使用(リポジトリのクローンも、事前のインストールも不要):
MCPホスト(例:.vscode/mcp.json)を設定すると、dnxがNuGetからサーバーをダウンロードして実行します。
{
"servers": {
"IAdetector": {
"type": "stdio",
"command": "dnx",
"args": ["IAdetector.Mcp", "--version", "1.0.1", "--yes"]
}
}
}
オプションB — スタンドアロンのネイティブバイナリを直接指定:
dotnet publish src/IAdetector.Mcp -c Release -r win-x64 -p:PublishAot=true -o ./publish/mcp
{
"servers": {
"IAdetector": {
"type": "stdio",
"command": "C:/ruta/a/publish/mcp/IAdetector.Mcp.exe"
}
}
}
ONNXモデル
モデル(約126MBのRoBERTa分類器、約237MBのDistilGPT-2)は検出時に自動ダウンロードされません。初回に一度、明示的にダウンロードする必要があります。
iadetector models download --model roberta-openai-detector
iadetector models download --model distilgpt2-perplexity
iadetector models list
モデルは%LOCALAPPDATA%\IAdetector\models(Windows)にキャッシュされ、SHA-256による整合性検証が行われます。モデルがない場合、この2つのシグナルは中立(重みを削減)になり、アンサンブルの残りの部分は引き続き機能します。
CLIの使い方
iadetector detect archivo.txt [--json] [--verbose] [--no-color]
iadetector detect --text "texto a analizar" [--verbose]
cat archivo.txt | iadetector detect # también lee de stdin si no hay archivo ni --text
iadetector batch <directorio> [--pattern *.txt] [--recursive] [--max-files 1000] [--output resultados.csv]
iadetector models download --model <id> [--force]
iadetector models list
iadetector models verify [--model <id>]
Tools MCP
detect_text(text, verbose)— インラインテキスト(最大 20 000 文字)。detect_file(path, verbose)— ローカルファイル(最大 5MB。長いテキストは自動で分割し、非常に大きい場合はサンプリングします)。batch_detect_directory(path, pattern, recursive, maxFiles)— 複数のファイルを一度に処理します。explain_detection(text)— 改善方法を示す説明です。シグナルごとに、測定したかどうか、結果への影響(ロジットへの寄与)、参照用の人間が書いたテキストにおける一般的な範囲、範囲外の場合に変更すべき点を、優先度順のアクションとともに示します。compare_versions(originalText, rewrittenText)— 書き換えと元の文章を(状態を保持せずに)比較します。確率の変化とシグナルごとの変化を示し、意味を保持するためのセーフガードも備えています(書き換えで元の文章の内容語彙が失われた場合、確率が下がっていても結果はno_concluyenteになります)。docs/AGENT_LOOP.mdを参照してください。
これらの tools を利用するエージェント向け:完全な契約(フィールド、セマンティクス、ループプロトコル、言語ごとの信頼性と制限)は docs/AGENT_GUIDE.md に記載されています。
エージェント用スキル(Claude Code)
skills/(標準的なフラット構成 skills/<nombre>/SKILL.md。Vercel や Supabase など、自社のスキル配布に利用するプロジェクトと同じ構成)には、npx skills でインストールできる 2 つのスキルが含まれています。
iadetector-setup— CLI/MCP のインストール、公開、設定、ONNX モデルのダウンロード、サーバーの.mcp.jsonへの登録。iadetector-usage— 結果(判定、確率、信頼度)の解釈と、確実性を誇張しない伝え方。
注:スキルは skills/(git で追跡されます)にあり、.claude/skills/(無視されます。セッション/マシンごとのローカル状態です)にはありません。各ユーザーは、以下のインストールコマンドを実行して、使用するスキルを自身の .claude/skills/ に配置します。このコピーはコミットしません。
このリポジトリが GitHub に公開された後、別のプロジェクトにインストールするには:
npx skills add <usuario>/IAdetector-mcp --skill iadetector-setup --skill iadetector-usage
または、リポジトリのローカルコピーから直接インストールできます(GitHub は不要です)。
npx skills add /ruta/a/IAdetector-mcp --skill '*'
開発
dotnet build
dotnet test tests/IAdetector.Core.Tests
dotnet test tests/IAdetector.Infrastructure.Tests # requiere modelos descargados para las señales ONNX
dotnet test tests/IAdetector.Integration.Tests # requiere modelos + scripts/calibration/data/open_qa.jsonl
アンサンブルの再キャリブレーション
dotnet run --project tools/IAdetector.Calibration -- <dataset.jsonl formato HC3> scripts/calibration/data/features.csv
python scripts/calibration/fit_logistic_regression.py scripts/calibration/data/features.csv src/IAdetector.Infrastructure/Ensemble/EnsembleWeights.json
既知の制限事項
- 純粋な統計シグナル(フェーズ 1)のしきい値は初期のヒューリスティックです。正式にキャリブレーションされているのは、完全なアンサンブルのみです。
- RoBERTa 分類器は GPT-2(2019)の出力を検出するために訓練されたため、より新しい LLM のスタイルには完全には一般化されません。そのため、補完的なシグナルと組み合わせたアンサンブルを採用しています。
- perplexity シグナルは Fast-DetectGPT/Binoculars の考え方を単一モデルで簡略化したもので、2 つのモデル間の比率を完全に再現したものではありません。
- HC3 のサブセット(英語)を使ってキャリブレーションされています。スペイン語やその他の言語に対する個別の検証は行われていません。
エージェント向け CLI
マシンの外に出ることのない著者判定ツールです。テキストはどこにも送信されません。
この CLI は ARSENAL-SPEC.md に準拠しています。これは、このワークスペース内のすべてのリサーチツールが共有する契約であり、あるツールを操作できるエージェントは、どのツールも操作できます。
このファイルを読まずに使い方を確認する
iadetector describe --json # every command, argument, row field and example
iadetector describe <command> --json
マニフェストはパーサー自体から生成されるため、内容が古くなることはありません。
出力
-f, --format は table、json、jsonl、csv、md を受け付けます。-o FILE はファイルに書き込み、-q は注記を非表示にします。
データは stdout に、注記と進捗状況は stderr に出力されるため、jq にパイプしても常に解析可能な JSON が得られます。
--format json は標準エンベロープを返します。
{
"ok": true,
"command": "detect",
"source": "iadetector",
"fetched_at": "2026-08-21T14:03:11Z",
"cached": false,
"count": 10,
"meta": {},
"data": {},
"rows": []
}
count は常に len(rows) と一致します。結果が空でも、エラーではなく終了コード 0 を返します。失敗時は、error.code、error.message、対処方法を示す error.hint を含むエラーエンベロープを返します。パイプラインで検査できるよう、機械向けの形式では stdout に出力されます。
終了コード
| コード | 意味 |
|---|---|
| 0 | 成功です。結果が空の場合も含みます。 |
| 1 | 分析に失敗したか、予期しない結果が返されました(モデルの破損、内部エラー)。 |
| 2 | 使用方法のエラーです。不明なフラグ、無効な形式、互換性のない引数などが該当します。 |
| 3 | 指定されたファイル、ディレクトリ、またはモデルが見つかりませんでした。 |
| 4 | 該当しません。検出は100%ローカルで行われるため、API キーや認証情報は必要ありません。 |
| 5 | 該当しません。クォータのある外部サービスはありません。 |
| 6 | ネットワーク障害またはタイムアウトです。models downloadでのみ発生します。 |
キャッシュ
結果はディスクにキャッシュされ、実行間で保持されるため、同じクエリを再実行するとすぐに結果が返されます。--refreshは再取得して書き直し、--no-cacheはキャッシュを完全にスキップします。エンベロープにはcachedが報告されます。
iadetector cache stats -f json
iadetector cache clear
レシピ
iadetector detect informe.txt -f json
iadetector detect --text "un párrafo cualquiera" --verbose -f json
cat ensayo.md | iadetector detect -f json
iadetector batch corpus/ -f csv -o corpus.csv
iadetector batch corpus/ --verbose -f jsonl --max 500
ワークスペース全体のエントリーポイントからは、arsenal run iadetector <command> ...を実行できます。また、arsenal doctor iadetector --liveを実行すると、この CLI が引き続きコントラクトを遵守しているか確認できます。
トラブルシューティング
モデルがダウンロードされていません
ONNX モデルは同梱されていません。一度だけダウンロードしてください。
iadetector models downloadを実行します。サイズは数百 MB で、アプリケーションのキャッシュに保存されます。iadetector models listで確認できます。
最初の分析に、それ以降よりかなり時間がかかる ONNX モデルをメモリに読み込む初回処理が原因です。2回目以降は速くなり、分析済みのテキストは結果キャッシュからすぐに返されます。
コーパスを再分析すると、また同じくらい時間がかかる
--no-cacheまたは--refreshを指定していないか確認してください。iadetector cache statsを実行すると、保存済みの結果数を確認できます。キーにはモデルのバージョンが含まれます。モデルを更新すると、以前のキャッシュは意図的に古いものとして扱われます。
非常に短いテキストでは信頼度が低くなる 単語数が少ないと、統計的なシグナルを得るには情報が不足します。1段落に満たないテキストでは、結果は有益なものにならず、そのように報告されます。
ドキュメント
| ドキュメント | 内容 |
|---|---|
CHANGELOG.md | 各リリースでの変更内容 |
CONTRIBUTING.md | 開発環境のセットアップ、CLI コントラクト、テストの実行方法 |
SECURITY.md | このサーバーが送信するデータと送信先、脆弱性の報告方法 |
server.json | 公式 MCP レジストリのレジストリメタデータ |
../ARSENAL-SPEC.md | ここにあるすべての研究用サーバーで共有される CLI コントラクト |
ライセンス
MIT — LICENSEを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。