typosquat について
typosquat はプロジェクトの package.json にある依存関係を、同梱された人気 npm パッケージ名の一覧と照合し、類似名を検出します。依存名のタイポスクワッティング候補を調べる、オフラインで決定性のある CLI と MCP サーバーです。
主な機能
- 01package.json の4種類の依存関係を読み取り
- 02人気 npm パッケージ名と照合
- 03区切り文字と編集距離による一致を検出
- 04候補となったパッケージ名を証拠として表示
- 05ソート済みのテキストまたは JSON レポート
- 06完全オフラインでのチェック
活用シーン
- 01プロジェクトのインストール前に依存関係を確認
- 02人気パッケージに似た依存名を調査
- 03CI で再現可能な依存名チェックを実行
MCP 対応
MCP サーバーは `path` 引数を取る `check_typosquat` を公開し、判定、件数、検出結果、概要を含む CLI の JSON 出力と同じレポートを返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| path | string | はい | 確認する対象パス |
詳細
typosquat
依存関係リスト向けのタイポスクワッティング検査ツールです。プロジェクトの package.json を読み込み、dependencies、devDependencies、peerDependencies、optionalDependencies からすべての依存関係名を収集し、同梱されている人気 npm パッケージ名のリストと比較します。人気パッケージそのものではなく、いずれかの名前に酷似している依存関係は、類似する人気パッケージを根拠として示しながら、タイポスクワッティングの可能性があるものとしてフラグ付けされます。
検査は完全にオフラインで決定的に実行されます。ネットワークへの呼び出しは行わず、タイムスタンプも付与せず、検出結果は依存関係名でソートされます。
インストール
npx @reneturcios/typosquat check .
または、グローバルにインストールします。
npm install -g @reneturcios/typosquat
typosquat check .
CLI
typosquat check [path] [--json]
typosquat mcp
typosquat --version
check [path]:pathにあるプロジェクトを検査します(package.jsonを含むディレクトリ、またはpackage.jsonファイルへの直接パス)。既定では現在のディレクトリが対象です。機械可読形式のレポートを出力するには、--jsonを追加します。mcp:stdio 経由で MCP サーバーを実行します。--version:バージョンを出力します。
終了コード:判定が CLEAR の場合は 0、SUSPECT の場合は 1、使用方法のエラー、および package.json がないか無効な場合は 2 です。
人が読みやすい形式での出力例:
typosquat 0.1.0
Target: .
Verdict: SUSPECT
Dependencies checked: 5
Flagged: 1
Summary: Checked 5 dependencies; 1 flagged as possible typosquats.
Findings:
- [HIGH] DISTANCE-1: Dependency "axioss" resembles popular package "axios" (edit distance 1) (evidence: axios)
MCP
MCP サーバーは、次のツールを1つ公開します。
check_typosquat:path引数を受け取ります。CLI の--json出力と同じレポートを返します。内容は、ツール名、バージョン、対象、判定、件数(depsChecked、flagged)、検出結果、概要です。
照合ルール
比較の前に名前を小文字に正規化します。人気パッケージリストに含まれる依存関係そのものは、フラグ付けされません。それ以外の各依存関係には、最も一致度の高いルールが適用されます。
SEPARATOR-SQUAT(重大度:高):両方の名前からハイフン、アンダースコア、ドットを取り除くと依存関係名が人気パッケージ名と一致するものの、元の名前は異なります。例:node_fetchとnode-fetch。DISTANCE-1(重大度:高):人気パッケージ名とのレーベンシュタイン編集距離が1です。例:axiossとaxios。DISTANCE-2(重大度:中):長さが9文字以上の人気パッケージ名とのレーベンシュタイン編集距離が2です。編集距離2では、短い名前同士は、互いに2文字以内の無関係な名前が多すぎるため対象外です。例:typescrpitとtypescript。
スコープの混同は検査されません。スコープ付きの人気パッケージ名のスコープなし部分だけと一致するスコープなしの依存関係(例:client と @prisma/client)は、フラグ付けするには根拠が弱すぎます。
判定
CLEAR:人気パッケージ名に類似する依存関係はありませんでした。SUSPECT:少なくとも1つの依存関係がフラグ付けされました。
制限事項
- 人気パッケージリストは、npm エコシステムに関する知識を基に作成された、2026-10-25 時点のスナップショットです。新しいパッケージが人気になり、古いパッケージの人気が薄れるため、リストは実態からずれていきます。スナップショットではこうした変化を追跡できません。
- 編集距離で検出できるのはタイプミスであり、あらゆるスクワッティングの手法ではありません。コンボスクワッティング(人気の名前と追加の単語を組み合わせたもの。例:
axios-helper)、同形異字文字やビットスクワッティング、また上記の区切り文字ルールを超えるスコープの悪用は検出できません。 - 検査するのは名前のみです。パッケージの内容、メンテナー、ダウンロード数、公開履歴は調べないため、悪意があるかどうかは判断できません。
- フラグ付けは類似性を示すものであり、非難を意味するものではありません。正当なパッケージが人気パッケージ名と編集距離1以内にある場合もあります。検出結果は不正行為の証拠ではなく、確認するきっかけとして扱ってください。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。