npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

mcp-yoshi

v1.2.1

Published

MCP communication security filter for Claude Code — ちゃんと見てヨシッ!

Readme

mcp-yoshi

MCPの通信、ちゃんと見てヨシッ!

MCP (Model Context Protocol) ツール通信のリアルタイムセキュリティフィルター。 Claude Code の hook として動作し、MCPツールの送受信データを検査して安全性を判定します。

なぜ必要か

  • MCPツールの説明文は97%が不十分、13%が実装と不一致(研究論文
  • 既存ツール(mcp-scan, mcp-drift-detector)は静的チェック・事前検査のみ
  • リアルタイムの通信フィルターが存在しなかった

mcp-yoshi は通信の瞬間にデータを検査し、問題があれば即座にブロックまたは警告します。

機能

アウトバウンドチェック(送信データ → MCPサーバー)

| ID | チェック | 検出対象 | |----|---------|---------| | OUT-001 | API Key Pattern | AWS, OpenAI, GitHub, Slack, Google, Stripe 等のAPIキー | | OUT-002 | Private Key | RSA/EC/DSA/OPENSSH秘密鍵 | | OUT-003 | High Entropy String | 32文字以上の高ランダム文字列 | | OUT-004 | Env Value Pattern | PASSWORD, SECRET, TOKEN 等の環境変数値 | | OUT-005 | PII Pattern | メールアドレス、電話番号、クレジットカード番号 | | OUT-006 | Large Payload | リクエストペイロードが50KB超(大量データ送信) | | OUT-007 | Path Traversal | /etc/passwd, ~/.ssh/, C:\Windows\ 等のセンシティブパス |

インバウンドチェック(MCPサーバー → 受信データ)

| ID | チェック | 検出対象 | |----|---------|---------| | IN-001 | Prompt Injection | "ignore previous instructions" 等の指示上書き | | IN-002 | Shell Command Embedding | $(...), ; rm, \| bash 等のコマンド注入 | | IN-003 | Suspicious URL / SSRF | javascript:, 短縮URL, 内部ネットワーク, クラウドメタデータ(169.254.169.254等) | | IN-004 | Script Injection | <script>, eval(), document.cookie 等 | | IN-005 | Tool Definition Tampering | ツール説明文に埋め込まれた隠し指示(12パターン) | | IN-006 | ASCII Smuggling | 不可視Unicode文字(U+E0000台Tags Block, Zero-Width文字) | | IN-007 | Base64 Encoded Payload | Base64デコード後に既存パターンで再検出 | | IN-008 | Response Size Limit | レスポンスが200KB超(コンテキストウィンドウ毒盛対策) | | IN-009 | Hidden Fields | _hidden, $meta 等の未宣言フィールド | | IN-010 | Elicitation Abuse | 認証情報要求・コマンド実行誘導をBLOCK |

レート制限(通信パターン)

| ID | チェック | 検出対象 | |----|---------|---------| | RATE-001 | Rapid Fire Detection | 同一ツールが60秒以内に10回以上呼び出された場合にWARN |

Rug Pull検出(ツール定義の改竄検知)

| ID | チェック | 検出対象 | |----|---------|---------| | RUG-001 | Tool Definition Changed | ツール定義のSHA-256ハッシュ変更を検知 |

初回呼び出し時にツール定義のハッシュを記録し、以降の呼び出しで変更があればWARNを発生させます。ハッシュは ~/.mcp-yoshi/tool-hashes.json に永続化されるため、セッションを跨いだ検出が可能です。

NFKC正規化(難読化対策)

全てのインバウンド/アウトバウンドチェックの前段でNFKC正規化を適用します。全角文字(ignore → ignore)やUnicode互換文字による難読化を透過的に検出します。

3段階判定

| 判定 | 動作 | |------|------| | PASS | 問題なし。そのまま実行 | | WARN | 警告をClaudeのコンテキストに追加。実行は継続 | | BLOCK | ツール実行を阻止(送信時)/ 警告表示(受信時) |

インストール

npm install -g mcp-yoshi

セットアップ

# Claude Code の settings.json に hook 設定を自動追加
mcp-yoshi init

# プロジェクト単位で設定する場合
mcp-yoshi init --project

これにより、以下の hook が自動設定されます:

  • PreToolUse: mcp__.* にマッチ → アウトバウンドチェック
  • PostToolUse: mcp__.* にマッチ → インバウンドチェック

使い方

セットアップ後は自動的に動作します。MCPツールが呼ばれるたびにチェックが実行されます。

ログ確認

# 直近20件のログを表示
mcp-yoshi logs

# 直近50件のWARN以上のみ表示
mcp-yoshi logs --tail 50 --level warn

# BLOCK のみ表示
mcp-yoshi logs --level block

統計レポート

# 過去7日間の検出統計を表示
mcp-yoshi stats

# 過去30日間
mcp-yoshi stats --days 30

設定確認

mcp-yoshi config

Allowlist(信頼済みサーバー)

特定のMCPサーバーを信頼済みとして登録し、チェックをスキップできます。 ユーザー責任での運用となりますが、ログ記録は継続されます(severity: SKIPPED)。

# サーバーを allowlist に追加(理由必須推奨)
mcp-yoshi allow memory --reason "社内ナレッジグラフ、信頼済み"

# allowlist 一覧
mcp-yoshi allow --list

# allowlist から削除
mcp-yoshi allow --remove memory

~/.mcp-yoshi/config.json で直接設定することもできます:

{
  "allowlist": [
    { "server": "memory", "reason": "社内ナレッジグラフ", "addedAt": "2026-03-12T00:00:00.000Z" }
  ]
}

設定カスタマイズ

~/.mcp-yoshi/config.json を作成して設定を上書きできます。

{
  "logLevel": "warn",
  "checks": {
    "outbound": {
      "highEntropy": false
    }
  },
  "servers": {
    "*": { "enabled": true },
    "memory": { "enabled": true },
    "trusted-server": { "enabled": false }
  },
  "severity": {
    "WARN": ["highEntropy", "pii", "suspiciousUrls", "base64Payload", "largePayload", "responseSizeLimit", "hiddenFields", "rapidFire"],
    "BLOCK": ["apiKeys", "privateKeys", "promptInjection", "shellCommands", "scriptInjection", "toolTampering", "envValues", "asciiSmuggling", "pathTraversal", "elicitationAbuse"]
  }
}

MCPサーバー別の設定

servers セクションでMCPサーバーごとにフィルターのON/OFFとチェック項目を制御できます。

{
  "servers": {
    "*": { "enabled": true },
    "trusted-internal": { "enabled": false },
    "external-api": {
      "enabled": true,
      "checks": {
        "outbound": { "pii": false },
        "inbound": { "promptInjection": true }
      }
    }
  }
}

| キー | 説明 | |------|------| | "*" | デフォルト設定(未定義のサーバーに適用) | | "<server名>" | mcp__<server名>__* のツールに適用 |

  • enabled: false → そのサーバーのチェックを完全スキップ
  • checks → グローバル設定をサーバー単位でオーバーライド

設定項目

| 項目 | デフォルト | 説明 | |------|-----------|------| | logDir | ~/.mcp-yoshi/logs | ログ出力先 | | logLevel | info | info: 全記録, warn: WARN以上, none: 記録なし | | checks.outbound.* | true | 各アウトバウンドチェックの有効/無効 | | checks.inbound.* | true | 各インバウンドチェックの有効/無効 | | servers | {"*": {"enabled": true}} | サーバー別ON/OFF | | severity.WARN | ["highEntropy", "pii", "suspiciousUrls", "base64Payload"] | WARN判定するチェックID | | severity.BLOCK | ["apiKeys", "privateKeys", "promptInjection", ..., "asciiSmuggling"] | BLOCK判定するチェックID |

アンインストール

# hook 設定を削除
mcp-yoshi uninstall

# パッケージ削除
npm uninstall -g mcp-yoshi

既存ツールとの違い

| ツール | タイミング | 対象 | |--------|----------|------| | mcp-scan | 事前(静的チェック) | ツール定義の安全性 | | mcp-drift-detector | 定期(変更検出) | ツール定義の改竄 | | mcp-yoshi | リアルタイム(通信時) | 送受信データの安全性 |

注意事項

  • パフォーマンス: 全てのMCPツール呼び出しでhookが実行されるため、MCP操作に若干の遅延(数十ms程度)が発生します。気になる場合は logLevel: "warn" に変更するか、信頼済みサーバーを enabled: false に設定してください
  • 誤検出(False Positive): 高エントロピー文字列やPIIパターンは正規のデータにもマッチすることがあります。頻繁に誤検出する場合は該当チェックを無効にするか、severity設定でWARNに下げてください
  • 検出限界: 正規表現ベースのパターンマッチとNFKC正規化による検出です。高度に難読化された攻撃や未知のパターンは検出できない場合があります。他のセキュリティツール(mcp-scan等)との併用を推奨します
  • Rug Pull検出: ツール定義ハッシュは ~/.mcp-yoshi/tool-hashes.json に永続化されます。ファイルが破損した場合は自動的に空の状態から再開します

ライセンス

MIT