Unicode-LE について
Unicode-LE は、コードや設定を確認する開発者向けに、エディター、ターミナル、エージェントから Unicode のリスクを調べるツールです。双方向制御文字や不可視文字、混在スクリプトなどをコードポイントで報告し、ファイルは書き換えません。
主な機能
- 01双方向制御文字と不可視文字の検出
- 02類似文字と混在スクリプトの検出
- 03非 NFC テキストと特殊な空白の確認
- 04ファイル、フォルダー、ワークスペースのスキャン
- 05内容を書き換えずコードポイントで報告
活用シーン
- 01コードの Trojan Source リスクの確認
- 02類似文字を使った名前の偽装調査
- 03文字列照合やハッシュの差異の調査
- 04CI でのコードツリーのスキャン
MCP 対応
MCP サーバーは `detect_unicode_risks` ツールを公開し、テキストを受け取って検出結果を返します。ファイル読み込みやネットワーク要求は行わず、返信内の非 ASCII 文字はエスケープされます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| kinds | array | いいえ | これらの種類のみを報告します。省略するとすべての種類が対象となります。空の結果が問題なしを意味するのは、この設定の場合のみです。 |
| format | enum | いいえ | ドキュメントの形式です。各検出結果に、該当箇所を示すキーのパスを含められます。省略すると、検出結果には行番号と列番号のみが含まれます。認識できない名前を指定するとキーのパスは得られませんが、検出結果には影響しません。json | yaml | csv | tsv | toml | ini | env | text |
| content | string | はい | スキャンするドキュメントのテキスト。 |
| scripts | array | いいえ | このドキュメントで使われる想定の非ラテン文字体系を、Unicode 名または ISO 15924 タグで指定します(例:Han、Cyrillic)。指定すると、翻訳後のドキュメントに対して異体字形の検査を実行できます。 |
| filename | string | いいえ | `format` の代わりに指定するドキュメント名です。拡張子のみを読み取り、ファイルは開きません。 |
| maxResults | integer | いいえ | 返される指摘数の上限(デフォルトは 500)。meta.truncated は省略された結果があるかどうかを示します。 |
詳細
Unicode-LE:見た目とは異なる文字
現在のファイルまたはワークスペース全体に潜む、意味を隠す Unicode を検出します
双方向テキスト制御文字、不可視文字、同形異字、スクリプトの混在、非 NFC テキスト、通常のスペースではない空白
役に立ちましたか? スターや評価を付けると、ほかの開発者にも見つけてもらいやすくなります — ★ GitHub · ★ Open VSX · ★ Marketplace
できること
ファイルを開いて Unicode-LE: Detect Unicode Risks を実行すると、見た目とは異なる文字がすべてエディターの横にレポートとして表示されます。CVE-2021-42574 の原因となった双方向テキスト制御文字、ゼロ幅文字などの不可視文字、同形異字、単一のスクリプトでは説明できない単語、正規化形式 C ではない行、U+0020 ではない空白、そして意味について合意がないコードポイントを検出します。Scan Workspace を実行すると、ディスク上のすべてのファイルが同様にスキャンされます。VS Code と、Cursor や VSCodium などの VS Code ベースのエディターで動作します(Open VSX からインストールできます)。
- トロイのソースを探すためにプルリクエストをレビュー — 右から左への上書きにより、レビュー担当者が読むコードと実行されるコードが異なる状態を検出します
- 偽装された名前を検査 — すべてラテン文字の
pаypalにキリル文字のаが含まれていれば検出されますが、キリル文字だけで書かれた単語は検出されません - 一致しない文字列の原因を調べる — ゼロ幅スペースや分解された
éが、ハッシュでは異なる値と見なされる一方、人間には同じに見える 2 つの値の間に含まれている場合、その原因を説明します
レポートに検出した文字そのものが含まれることはありません。 検出結果はすべて文字そのものではなく U+202E のように記され、文書内のファイルパスやキーのパスは にエスケープされます。文字をそのまま貼り付けたレポートは、読む人の画面上の表示順を変えてしまいます。それでは、このツールが検出する脅威を運ぶ手段になってしまいます。内容を書き換えることはありません。正規化も、空白の削除も行いません。
インストール
| 場所 | 得られるもの | インストール |
|---|---|---|
| VS Code | エディター内で、キー操作ひとつで画面を表示 | Marketplace |
| Cursor, VSCodium, Windsurf | 同じ拡張機能 | Open VSX |
| ターミナルまたは CI のステップ | 終了コード付きで、ツリー全体に同じ画面を表示 | cargo install unicode-le · crates.io |
| Node 経由のターミナル | Rust 版とバイト単位で一致する同じコマンドライン | npx unicode-le · npm |
| Node 経由の任意の MCP エージェント | 標準入出力経由の detect_unicode_risks | npx unicode-le-mcp · npm |
AI エージェントから使う
同じエンジンがMCPサーバーとして動作するため、コマンドを実行する代わりに、エージェントから直接呼び出せます。ここではほとんどのツールよりも重要です。ドキュメントを自身の推論に貼り付けたモデルは、すでにその中の双方向制御文字を受け取っています。一方、このサーバーから返されるのは U+XXXX と英語なので、回答にそれらが入り込んでコミットメッセージやレビューコメントに含まれることはありません。
| エディター | 方法 |
|---|---|
| VS Code 1.101+ | インストール不要 — 拡張機能がエージェントモードに detect_unicode_risks を登録します |
| Claude Code | claude mcp add unicode-le -- npx -y unicode-le-mcp |
| Cursor, Windsurf, その他 | npx unicode-le-mcp を指定します |
detect_unicode_risks(content, kinds?, scripts?, format?, filename?, maxResults?)
各検出結果について、種類、重大度、1始まりの行と列(エディターのカウントと同じ UTF-16)、バイトオフセット、コードポイント、スクリプト、形式が対応している場合はその検出箇所を含むキーのパスを返します。また、拒否があった場合は構造化データと警告の両方で返すため、検出結果が空でも、ドキュメントに問題がないと誤解されることはありません。返信に含まれる非 ASCII 文字はすべて \uXXXX に変換されます。デフォルトでは 500 件に制限され、meta.truncated で示されます。
サーバーはコンテンツを受け取ってデータを返します。ファイルを読み込まず、独自にネットワークリクエストを送信することもありません。npm では unicode-le-mcp として、MCP レジストリでは io.github.nolindnaidoo/unicode-le として公開されています。Rust CLI のサーバーとまったく同じように動作します。同一のコーパスを両方に対して実行し、差分テストでは生成した数千件のドキュメントを両方に渡し、どちらもクレートが書き出した同じ Unicode テーブルを読み込みます。ホストの JavaScript エンジンが持つバージョンには依存しません。
手動での設定 — MCP 設定ファイルがある任意のホスト
{
"mcpServers": {
"unicode-le": {
"command": "npx",
"args": ["-y", "unicode-le-mcp"]
}
}
}
または、npm install -g unicode-le-mcp で一度インストールし、unicode-le-mcp を指定します。環境変数、API キー、独自の設定は必要ありません。動作を確認するには、次のようにします。
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npx -y unicode-le-mcp
検出内容
| 種類 | 重大度 | 内容 |
|---|---|---|
bidi-control | high | U+202A–U+202E、U+2066–U+2069、U+061C — Trojan Source に該当する文字です。行の残りの部分の表示順を並べ替えます。 |
confusable | high | 別のスクリプトの単語に含まれる同形異字、または ASCII 文字の互換文字(全角の F、数学用の 𝐚、ケルビン記号)と、それが似ているコードポイント |
mixed-script | high | 単一のスクリプトでは表せない単語 |
invisible | medium | ゼロ幅文字、ソフトハイフン、および先頭バイト以外にある U+FEFF |
unassigned-or-private-use | medium | 割り当てられた意味を持たないコードポイント:私用領域、未割り当て、非文字 |
non-nfc | low | NFC(正規化形式 C)ではない行。報告のみで、書き換えは行いません |
unusual-whitespace | low | U+0020 ではない空白文字:ノーブレークスペース、表意文字スペース、エンスペース、エムスペース |
翻訳されたコードでも、検出結果に埋もれることはありません
単純な紛らわしい文字のチェックでは、ワークスペース内のロシア語や中国語の文字列のすべての文字が検出されます。チェックを最も必要とするコードベースで何千件もの検出結果が出るため、チェックが無効にされ、Trojan Source の検出も一緒に無効になってしまいます。
- 判定するのは単語であり、ファイルではありません。
Приветは完全にキリル文字で書かれており、ロシア語です。日本語では1つの単語の中で漢字、ひらがな、カタカナが常に混在し、UTS #39 はそれが日本語であることを認識します。 - 別の文字体系で明らかに書かれたファイルは、ホモグリフの検査対象になりません。そのことはレポートにも示されます。つまり、どの文字体系も宣言されていない状態で、その文字体系の文字が少なくとも10%を占めている場合です。それ以外の検査はすべて引き続き実行されます。
- 文字体系を宣言すると、検査は有効になります。無効にはなりません。 ワークスペースで使う文字体系を
unicode-le.detection.scriptsに指定してください。Han、Cyrillic、Hiraなどを指定すると、中国語の文字列内にあるラテン文字の製品名は翻訳として扱われますが、同じファイル内のラテン文字の単語にあるキリル文字は引き続き検出されます。
ファイル内の位置だけでなく、ドキュメント内の位置も示します
JSON、YAML、TOML、INI、.properties、.env、CSV、TSV では、検出結果にキーのパスも含まれます。5,000行のカタログの412行目ではなく、metrics.headline.eyebrow のように示されます。検出結果があるかどうかを形式が決めることはありません。形式を解析できないファイルも引き続きスキャンされ、その中のすべての内容が報告されます。
推測せず、読み込みを拒否します
ワークスペースのスキャンでは、すべてのファイルをバイト列として読み込みます。UTF-16またはUTF-32のファイル、バイナリファイル、UTF-8として無効なファイルは、別の形式にデコードするのではなく、ファイル名を示して読み込みを拒否します。誤ったデコードは検出結果を捏造してしまうためです。UTF-16をUTF-8として読み込むと、2バイトごとにファイル内には存在しない不可視文字が発生します。
フォルダーまたはワークスペース全体をスキャンする
検出機能は、開いているドキュメントを読み取ります。スキャンはディスク上の多数のファイルを読み取り、1 つのレポートを生成します。
- ワークスペース全体:コマンドパレットから
Unicode-LE: Scan Workspace for Unicode Risksを実行します。 - 1 つのフォルダー:エクスプローラーでフォルダーを右クリックして
Scan Folder for Unicode Risksを選ぶか、Unicode-LE: Scan Folder for Unicode Risksを実行してフォルダーを選択します。
レポートには、検出結果があった各ファイルと、判定できなかった各ファイルのセクションが含まれます。
# Unicode-LE report
3 finding(s) in 4 file(s) scanned; 2 file(s) not fully judged.
## `latin1.txt`
- **Not judged** (`binary_or_undecodable`): not valid UTF-8 at byte 3: the encoding is unknown and is not guessed
## `notes.txt`
- **Not judged** (`encoding_unknown`): a UTF-16LE byte-order mark: this reads UTF-8 only, and decoding UTF-16LE as UTF-8 would invent invisible and unassigned characters that are not in the file
## `src/login.ts`
- **1:7** · mixed-script · high · U+0430
- **1:8** · confusable · high · U+0430 (resembles U+0061)
- **1:17** · bidi-control · high · U+202E
各検出結果には、その重要性を説明する文も含まれますが、ここでは省略しています。
スキャンで読み取られるもの。 ファイルはディスクから読み取られるため、保存されていない編集内容は反映されません。安全上のサイズ制限を超えるファイルは読み取られません。UTF-8 以外のテキストファイルは、理由とともにレポートに記載されます。文字コードを推測したり、黙って読み飛ばしたりすることはありません。スキャンは 5,000 ファイルまたは 10,000 件の検出結果に達すると停止します。レポートの末尾には、読み飛ばした項目ごとに 1 行ずつ記載されます。
スキップされたスキャンは問題がないことの証明にはなりません。 デフォルトでは、依存関係のフォルダー、プロジェクトの .gitignore で除外されるファイル、バイナリファイルは読み取られません。これらの中に隠れた文字は報告されません。すべてを検査するには、3 つのスイッチをオフにしてください。
スキップ対象と変更方法。 3 つのスイッチはデフォルトでオンになっており、それぞれを設定から個別にオフにできます。
| スイッチ | スキップするもの |
|---|---|
scanUseDefaultExcludes | 依存関係のフォルダー、ビルド出力、ツールのキャッシュ、ロックファイル。完全な一覧は以下を参照してください |
scanRespectGitignore | プロジェクトの .gitignore ファイルでスキップされるもの |
scanSkipBinaryFiles | 画像、フォント、アーカイブなどのテキストではないファイル |
スイッチをオフにせずに結果を調整できるリストが 2 つあります。さらにスキップするには、scanExcludes にパターンを追加します。スイッチによってスキップされるものを読み取るには、scanAlwaysInclude に追加します。
{
// Also skip the test fixtures.
"unicode-le.workspace.scanExcludes": ["**/fixtures/**"],
// Read the vendored code, though the built-in list skips it.
"unicode-le.workspace.scanAlwaysInclude": ["**/vendor/**"]
}
Unicode-LE: Open Settings を実行すると、これらすべてが設定エディターに表示されます。
組み込みの一覧
場所を問わず対象となるフォルダー:
.git、.hg、.svn、node_modules、bower_components、jspm_packages、.pnpm-store、.yarn、vendor、site-packages、Pods、Carthage、dist、build、out、target、_build、_site、dist-newstyle、zig-out、storybook-static、cdk.out、DerivedData、CMakeFiles、.next、.nuxt、.output、.svelte-kit、.angular、.astro、.docusaurus、.vuepress、.expo、.turbo、.parcel-cache、.cache、.sass-cache、.jekyll-cache、.dart_tool、.pub-cache、.gradle、.kotlin、.cxx、.externalNativeBuild、captures、ephemeral、.symlinks、.swiftpm、.build、.bundle、.stack-work、.zig-cache、.godot、elm-stuff、.vercel、.netlify、.serverless、.aws-sam、.terraform、.venv、venv、__pycache__、.tox、.nox、.mypy_cache、.pytest_cache、.ruff_cache、.ipynb_checkpoints、.eggs、coverage、htmlcov、.nyc_output、.vscode-test、.idea、.vs、xcuserdata、*.egg-info
場所を問わず対象となるファイル:
*.min.js、*.min.css、*.map、*.snap、*.lock、package-lock.json、pnpm-lock.yaml、npm-shrinkwrap.json、go.sum、*.pbxproj、*.iml、local.properties、output-metadata.json、.flutter-plugins、.flutter-plugins-dependencies、.packages、Generated.xcconfig、flutter_export_environment.sh、GeneratedPluginRegistrant.*、fastlane/report.xml、fastlane/test_output/**、doc/api/**
多くのプロジェクトで通常のフォルダーとして使われるため、一覧に含まれていないもの:bin、obj、tmp、logs、public、generated。これらを生成するプロジェクトでは、Git で無視されるよう設定されているため、スキャンは .gitignore を読み取ります。
問題パネルでの表示。 unicode-le.workspace.scanProblemsEnabled をオンにすると、各検出結果が該当行の警告としても表示されます。スキャンを実行するたびに、前回の結果は置き換えられます。メッセージには文字そのものではなく、コードポイントが表示されます。
スキャンに適用する設定については、設定を参照してください。
CLI
同じ画面をターミナルや CI のステップから実行できます。拡張機能と同じコーパス crate/ を共有する Rust 製 CLI です。コーパスは crate/fixtures/ にあり、両者が同じ文書を異なる方法で読み取ることはありません。同じコマンドラインは、Node があり Rust がないマシン向けに unicode-le として npm からも提供されており、CI では 3 つのオペレーティングシステム上でクレートとバイト単位で一致することを確認しています。
npm からインストール(unicode-le)するか、crates.io からインストール(unicode-le)してください。どちらからインストールしても、同じ unicode-le コマンドが使えます。
npm install -g unicode-le # or run it once: npx unicode-le
cargo install unicode-le
unicode-le . # every finding in the tree; JSON on stdout when piped
unicode-le --fail-on bidi . # in CI, for the CVE and nothing else
unicode-le --script Han,Cyrillic src/ # a translated tree, judged rather than refused
unicode-le mcp # the same screen over MCP on stdio
終了コードが API です — 0 は問題なし、1 は --fail-on が対象とする検出結果あり、2 は質問の形式が不正(または拒否が 1 件でもある状態での --strict)を表します。
コマンド
| コマンド | 説明 |
|---|---|
Unicode-LE: Detect Unicode Risks | エディター上の状態のまま、アクティブな文書をスキャンします |
Unicode-LE: Scan Workspace for Unicode Risks | ワークスペース内のすべてのファイルを、ディスクから UTF-8 として読み取ってスキャンします |
Unicode-LE: Scan Folder for Unicode Risks | 1 つのフォルダーを同様にスキャンします。エクスプローラー内のフォルダーからも実行できます |
Unicode-LE: Open Settings | Unicode-LE の設定を開きます |
Unicode-LE: Help & Troubleshooting | 組み込みドキュメントを開きます |
既定では、どのコマンドにもキーは割り当てられていません。エディターの キーボードショートカット で、任意のコマンドにキーを割り当ててください。
設定
| 設定 | デフォルト | 説明 |
|---|---|---|
unicode-le.detection.kinds | [] | これらの種類のみを報告します。空の場合はすべての種類が対象となり、空のレポートが問題なしを意味するのはこの設定だけです |
unicode-le.detection.scripts | [] | ファイルで使用する非ラテン文字の用字系を、Unicode 名または ISO 15924 タグで指定します |
unicode-le.openResultsSideBySide | true | 現在のエディターの横にレポートを開きます |
unicode-le.showPositions | true | 各検出結果の行と列を表示します |
unicode-le.copyToClipboardEnabled | false | レポートをクリップボードにもコピーします |
unicode-le.clipboardIncludesPositions | true | コピーに行と列を含めます |
unicode-le.workspace.scanPatterns | ["**/*"] | フォルダーまたはワークスペースのスキャンで読み込むファイル |
unicode-le.workspace.scanUseDefaultExcludes | true | 依存関係フォルダー、ビルド出力、キャッシュ、ロックファイルをスキップします |
unicode-le.workspace.scanRespectGitignore | true | プロジェクトの .gitignore ファイルで除外されるものをスキップします |
unicode-le.workspace.scanSkipBinaryFiles | true | 画像、フォント、アーカイブなどのテキストではないファイルをスキップします |
unicode-le.workspace.scanExcludes | [] | グロブパターンで、スキップするファイルを追加します |
unicode-le.workspace.scanAlwaysInclude | [] | 上記3つの設定でスキップされる場合でも読み込むファイル |
unicode-le.workspace.scanMaxFiles | 5000 | 1回のスキャンで読み込むファイルの上限 |
unicode-le.workspace.scanMaxResults | 10000 | 読み込みを停止する前に一覧表示する、1回のスキャンでの検出結果の上限 |
unicode-le.workspace.scanProblemsEnabled | false | スキャンの検出結果を「問題」パネルにも表示します |
unicode-le.notificationsLevel | silent | all = すべての通知、important = 警告 + エラー、silent = エラーのみ |
unicode-le.safety.enabled | true | 大きなファイルに対する安全策 |
unicode-le.safety.fileSizeWarnBytes | 1000000 | サイズがこれを超えるアクティブなドキュメントに警告し、ワークスペース内のより大きなファイルは読み込みません |
unicode-le.statusBar.enabled | true | ステータスバー項目を表示します |
unicode-le.telemetryEnabled | false | ローカルのみのイベントログ(プライバシーを参照) |
言語
英語以外の12言語に対応しています。
ドイツ語・スペイン語・フランス語・インドネシア語・イタリア語・日本語・韓国語・ ポルトガル語(ブラジル)・ロシア語・ウクライナ語・ベトナム語・中国語(簡体字)
両方の部分に対応しています。マニフェスト(コマンドのタイトル、設定名と説明)と、拡張機能の実行中に表示されるすべての内容(通知、ステータスバー、レポートの見出し)です。各検出結果の詳細はエンジンの英語表記で、CLI および MCP サーバーのものと同一です。
プライバシーとセキュリティ
- ネットワークアクセスはありません。 拡張機能がデータを外部に送信することはありません。
telemetryEnabled設定は、確認可能なローカルの出力チャネル(Unicode-LE)にイベントを書き込むだけです。 - MCP サーバーも同じ方針です。 引数としてコンテンツを受け取り、データを返します。ファイルシステムへのアクセス、ネットワーク呼び出し、テレメトリはありません。
check:mcp-bundleは、サーバーが ASCII 以外の文字を stdout に書き込む場合、ビルドを失敗させます。 - エラー通知では、ホームディレクトリと認証情報のような形式の文字列を伏せます。
- 評価を促すプロンプトは、最大2回だけ表示されます。 3回目の正常な使用時に、評価してもらえるかを拡張機能が一度尋ねます。Later を選択した場合、またはプロンプトを閉じた場合は、20回目にもう一度表示されます。Don't Ask Again を選ぶと、以降は表示されません。
notificationsLevelを自分でimportantまたはsilentに設定すると、プロンプトは無効になります。回数は VS Code の拡張機能ストレージに保存され、外部に送信されることはありません。Rate を選ぶと、インストール元の掲載ページ(VS Code Marketplace または Open VSX)がブラウザーで開きます。
ドキュメント
| 内容 | 場所 |
|---|---|
| ツールが発言してよい内容 — スコープ、出力仕様、拒否、対象外事項 | crate/SPEC.md |
| 拡張機能の構築と仕組み — アーキテクチャ、不変条件、ツールチェーン、リリース | AGENTS.md |
| CLI の構築と仕組み | crate/AGENTS.md |
| 変更内容 | CHANGELOG.md · crate/CHANGELOG.md |
| このツールのページと、ほかの 15 個 | letools.dev/tools/unicode-le |
パフォーマンス
| 入力 | サイズ | 検出数 | 時間 | 速度 | スキャン速度 |
|---|---|---|---|---|---|
| 危険要素を含むソース | 1.16 MB | 1,800 | 160.71 ms | 11,200/sec | 7.2 MB/s |
| JSON カタログ | 1.46 MB | 20,000 | 195.09 ms | 102,518/sec | 7.5 MB/s |
| 最小化された 1 行のテキスト | 0.63 MB | 40,000 | 78.7 ms | 508,247/sec | 8 MB/s |
Apple M5 Pro、24 GB RAM、Node 24.3.0 でウォームアップ後に 7 回実行した中央値です。入力は
script/benchmark.ts によって生成され、リポジトリには含まれていないため、上記のサイズは
実測値そのものです。bun run benchmark で再現できます。
これらはマシン固有の値であり、CI では保証されません。ビルドを左右するベンチマークで分かるのは、 ランナーがどれだけビジーだったかだけです。
テスト
| 指標 | カバレッジ |
|---|---|
| ステートメント | 79.26% |
| 分岐 | 71.22% |
| 関数 | 82.30% |
| 行 | 81.80% |
19 ファイルにわたる 224 件のテストケースに加え、実際の VS Code 拡張機能ホストで実行する
統合テストスイートと、ビルド済みの .vsix をクリーンなプロファイルにインストールする
エンドツーエンドテストがあります。
実際の実行結果である coverage/coverage-summary.json と
coverage/test-results.json から scripts/coverage-readme.js によって生成されます。このセクションに
ずれがあると CI は失敗します。bun run test:coverage で再現できます。ケース数は vitest が出力する
値です。
LE ファミリーのその他のツール
あらゆるモデルが直面する作業に対応する、単機能ツールが16個あります。それぞれに Rust CLI と MCP サーバーが付属します。詳細はこちら:letools.dev
取り出す
- String-LE — コードベース内のすべての文字列を抽出し、人が読めるようにします
- Numbers-LE — コードベース内のすべてのハードコードされた数値を抽出し、人が確認できるようにします
- Units-LE — 単位付きの数量をすべて抽出して正規化し、曖昧なものは名前を示して対象外にします
- Dates-LE — すべての日付とタイムスタンプ、およびそれぞれが解決される正確な時点を抽出します
- IDs-LE — UUID、ULID、NanoID、ObjectId、Snowflakeをすべて抽出し、内部に含まれる時刻をデコードします
- IPs-LE — IPアドレス、CIDRブロック、MACアドレスをすべて抽出し、正規化してスコープ別に分類します
- URLs-LE — コードベース内のすべてのURLを、プロトコルと正確な位置情報とともに抽出します
- Paths-LE — コードベース内のすべてのファイルパスを抽出し、現在も何かを指しているかどうかを示します
- Colors-LE — コードベース内のすべての色を抽出し、パレットにない色を示します
チェックする
- Regex-LE — コードベース内のすべての正規表現を検出し、壊滅的なバックトラッキングを引き起こす可能性があるものを報告します
- Versions-LE — リポジトリ内のマニフェスト間で、同じ依存関係のバージョン制約が異なる箇所を検出します
- i18n-LE — プロジェクトで使用している i18n ライブラリを特定し、そのライブラリのルールに基づいてカタログを監査します
- Scrape-LE — スクレイパーを書く前にページをスクレイピングできるか確認し、判定できない場合はその旨を示します
保護する
- Secrets-LE — コードベース内のハードコードされた認証情報を検出し、レポートに表示することはありません
- EnvSync-LE — ディレクトリツリー内の dotenv ファイルを比較し、どのファイルにどのキーがないかを示します
- Unicode-LE — 意味を隠す Unicode を検出します。双方向制御文字、不可視文字、ホモグリフ、混在スクリプトが対象です
それぞれが独立しています。共有クレートも、公開されたコアもありません。2つのツールが同じ答えにたどり着くとすれば、それはその答えが2度正しかったからです。
お問い合わせ — nolindnaidoo.com · GitHub · LinkedIn
nolindnaidoo によるその他のプロジェクト
Rust — pixelcoords と pixelactions は一連のループを構成します。pixelcoords が 場所 に答え、pixelactions がそこで 操作 します。それぞれ独自のツールと独自の方針を持ち、LE ファミリーには属しません。
- pixelcoords — 画面を固定し、領域を指定して、ピクセル単位で正確な座標と切り抜きを取得します pixelcoords.dev · crates.io · docs.rs
- pixelactions — 人が検証した座標を受け取り、操作を実行して、反映されたことを確認します pixelactions.dev · crates.io · docs.rs
ライセンス
MIT © nolindnaidoo
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。