mcpField
K
Keep Me Secure

Keep Me Secure

リモート
keepmesecure.devその他0今日更新
リポジトリ公式サイト

Keep Me Secure について

Keep Me Secureは、公開セキュリティアドバイザリに基づいて依存関係を確認し、プラットフォームのインシデントも報告するオープンソースのMCPサーバーです。パッチ対応が必要なコーディングエージェントや開発者向けで、ローカル実行とホスト型エンドポイントに対応します。

主な機能

  1. 01対応する依存関係ロックファイルのスキャン
  2. 02公開アドバイザリによるパッケージ確認
  3. 03整理されたプラットフォームインシデントの報告
  4. 04判定とパッチ対応の案内
  5. 05ローカルまたはホスト型MCPでの実行

活用シーン

  1. 01セッション開始時の依存関係チェック
  2. 02パッケージの特定バージョンに関する確認
  3. 03検出されたプラットフォームのインシデント調査
  4. 04ホスト型MCPエンドポイントでのプロジェクト確認

MCP 対応

プロジェクト、パッケージのバージョン、プラットフォームのインシデントを確認するツールを提供します。ローカルMCPサーバーとして実行するか、ホスト型のリモートエンドポイントから利用できます。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://mcp.keepmesecure.dev/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
ocighcr.io/robertkeus/keep-me-secure-mcp:v1.4.0

ツール

詳細

keep-me-secure-mcp

コーディングエージェントに「自分のスタックは安全ですか?」と尋ねると、安全かどうかと、次に何をすべきかがわかります。

ターミナルの画面。誰かが「自分のスタックは安全ですか?」と尋ねます。PHP、npm、Go、Java の 111 個のパッケージをスキャンし、「いいえ」と回答します。18 個のパッケージにパッチが必要で、まず log4j-core と spring-beans から対応します。

ウェブサイト · コントリビューション · セキュリティ · MIT ライセンス

無料のオープンソース MCP サーバーです。ロックファイルに含まれるすべてのパッケージを、直接インストールしていないものも含めて、公開されているセキュリティアドバイザリと照合します。

クイックスタート

Claude Code に追加します。Node.js 22 以降が必要です。アカウントも Docker も必要ありません。

claude plugin install keep-me-secure --marketplace robertkeus/keep-me-secure-mcp

コーディングを始めると自動的にチェックされ、プロジェクトごとに 1 日 1 回実行されます。エージェントにいつでも尋ねることもできます。

Is my stack secure?

お客様の許可なく何かを変更することはありません。

利用方法

Claude Code プラグインDockerホスト URL
おすすめの用途Claude Code での日常的な利用その他のエージェント、分離環境お試し、小規模なプロジェクト
必要なものNode.js 22 以降Dockerなし
毎日のチェックはいはいいいえ。自分で依頼します
ロックファイルを読み取るものお使いのマシン上のプラグインお使いのマシン上のコンテナエージェント。リストを当社のサーバーに送信します
対象範囲すべてのパッケージすべてのパッケージエージェントが送信したもの
Docker

プロジェクトで次を実行します。

docker run --rm --user "$(id -u):$(id -g)" -v "$PWD:/workspace" ghcr.io/robertkeus/keep-me-secure-mcp:latest init

次の 3 つのファイルが追加または更新されます。

ファイル目的
.mcp.jsonMCP サーバーを登録します
.claude/settings.jsonセッション開始時にチェックを実行する Claude Code フック
AGENTS.mdセッション開始時にチェックを実行するよう、他のエージェントに指示します

設定ではイメージのバージョンを固定しているため、新しいリリースが予告なくプロジェクトに適用されることはありません。アップグレードするには、コマンドをもう一度実行します。

他のエージェントを使う場合は、AGENTS.md のルールを残してください。テストでは、そのルールがある場合にのみ Codex がツールを呼び出しました。

Codex

~/.codex/config.toml に次を設定します。

[mcp_servers.keep-me-secure]
command = "sh"
args = ["-c", "exec docker run -i --rm --read-only --cap-drop=ALL --security-opt=no-new-privileges -v \"$PWD:/workspace:ro\" -v kms-cache:/cache ghcr.io/robertkeus/keep-me-secure-mcp:latest"]
opencode

opencode.json に次を設定します。

{
  "mcp": {
    "keep-me-secure": {
      "type": "local",
      "command": ["sh", "-c", "exec docker run -i --rm --read-only --cap-drop=ALL --security-opt=no-new-privileges -v \"$PWD:/workspace:ro\" -v kms-cache:/cache ghcr.io/robertkeus/keep-me-secure-mcp:latest"],
      "enabled": true
    }
  }
}

Claude Code、Codex、opencode でテスト済みです。Cursor やその他の MCP クライアントでも同じコマンドで動作するはずですが、テストはしていません。スキャン対象は $PWD なので、エージェントはプロジェクトフォルダーから起動する必要があります。

ホスト URL

エージェントに https://mcp.keepmesecure.dev/mcp をリモート MCP サーバーとして追加します。アカウントやトークンは不要で、各 IP アドレスにつき 1 分間に 20 回チェックできます。

  • エージェントがロックファイルを読み取り、パッケージ名とバージョンを送信するため、対象範囲はエージェントによって異なります。あるテストでは、39 個中 19 個のパッケージしか送信されませんでした。対象範囲が重要な場合は、プラグインまたは Docker を使用してください。
  • エージェントには非公開パッケージを除外するよう指示されますが、強制はされません。パッケージ名が機密情報の場合は、ローカルで実行してください。
  • サーバーはパッケージリストを記録・保存せず、Worker のログ記録も無効になっています。パッケージ名とバージョンは OSV に渡され、Cloudflare は標準的なリクエストデータを独自に保持する場合があります。
  • すべてのパッケージは直接依存関係として扱われるため、推移的依存関係については、提案されたコマンドを確認してください。

チェック対象

言語読み取るファイル
PHPcomposer.lock
JavaScriptpackage-lock.json、pnpm-lock.yaml、yarn.lock
Pythonrequirements*.txt、poetry.lock、uv.lock
Gogo.mod
RustCargo.lock
RubyGemfile.lock
Java、Kotlingradle.lockfile
.NETpackages.lock.json

テスト用およびサンプル用フォルダー(test、spec、fixtures、examples など)にあるロックファイルは、通常は製品に含まれないためスキップされます。これらは coverage.ignored に一覧表示されます。path に指定すれば、check_project で引き続きチェックできます。

Maven にはロックファイルがないため、pom.xml のプロジェクトでは結果が unknown になります。ロック機能が無効になっている Gradle および .NET のプロジェクトも同様です。

プラットフォームの侵害

パッケージだけがリスクではありません。2026 年 10 月だけでも、顧客のシークレットが漏えいした可能性があるインシデントを、複数の開発者向けプラットフォームや AI プラットフォームが公表しました。プロジェクトでいずれかを使用している場合、Keep Me Secure は何が起きたのか、どう対応すべきかを、情報源へのリンクとともにお知らせします。

  • 検出: railway.toml、vercel.json、zbpack.json、trigger.config.ts などのファイルと、@trigger.dev/sdk などのパッケージを探します。リポジトリに痕跡を残さないプラットフォームは検出されないため、たとえばエージェントに「Northflank は侵害されましたか?」と尋ねてください。
  • リスト: プラットフォームのインシデントに関する公開データベースは存在しないため、各社の発表をもとに厳選したリストを管理しています。網羅的ではないため、結果が空でもプラットフォームが安全だとは限りません。
  • 更新: プラグイン版と Docker 版は、プロジェクトに関する情報を一切送信せず、リストを 1 日に 1 回取得します。フィードではインシデントを追加することしかできません。各リリースに含まれる項目は常に保持され、すべての項目が検証されます。まだ署名には対応していません。
  • 報告: セッション開始時のメッセージでは、過去 90 日間のインシデントに触れます。check_platform は常にすべてのインシデントを表示します。プラットフォームのインシデントは個別に報告され、パッケージの判定には影響しません。

インシデントを追加するには、src/platforms.ts を編集し、企業自身の声明へのリンクを記載したプルリクエストを作成してください。

ツール

ツール回答する質問入力
check_project(ローカル)使用しているスタックは安全ですか?パッチの適用が必要ですか?ecosystem、path、refresh。すべて省略可能
check_packages(ホスト型)使用しているスタックは安全ですか?packages。最大 500 件のリスト
check_packageこの特定のバージョンは安全ですか?ecosystem、name、version
check_platformこのプラットフォームは侵害されましたか?name。省略可能。省略するとすべてを一覧表示

結果の例(省略版):

{
  "verdict": "yes",
  "urgency": "today",
  "findings": [{
    "package": "guzzlehttp/guzzle",
    "installed": "7.4.0",
    "fixed_in": "7.15.2",
    "direct": true,
    "severity": "HIGH",
    "exploited": false,
    "advice": "Upgrade guzzlehttp/guzzle to 7.15.2 or later.",
    "command": "composer update guzzlehttp/guzzle --with-dependencies"
  }],
  "coverage": { "scanned": 2, "by_ecosystem": { "Packagist": 2 }, "private": ["acme/internal"], "unchecked": [] }
}
判定
  • yes:インストール済みバージョンのうち、既知のアドバイザリがあるものが少なくとも 1 つあります。
  • no:すべてのパッケージを確認し、既知のアドバイザリはありませんでした。
  • unknown:ロックファイルがない、未対応のエコシステムである、検索に失敗したなどの理由で確認が完了していません。理由は coverage.unchecked に示されます。安全だと解釈しないでください。
緊急度
  • now:悪意のあるパッケージ、または積極的に悪用されている脆弱性のCISA KEVリストに含まれる脆弱性。
  • today:深刻度がクリティカル、高、または未評価のもの。
  • this_week:その他すべて。

悪意のあるパッケージの場合、アップグレードだけでは不十分です。パッケージを削除し、シークレットをローテーションして、そのパッケージが加えた可能性のある変更を確認するよう推奨します。

データとプライバシー

  • 公開パッケージの名前とバージョンはOSV.devに送信されます。影響を受けるものがある場合、CVE ID はFIRST EPSSに送信されます。CISA KEV フィードはダウンロードされます。
  • プライベートレジストリ、Git、ローカルパスからのパッケージは、どこにも送信されません。これらは coverage.private に一覧表示され、確認対象外となります。
  • Go、Java、.NET、およびほとんどの pnpm ロックファイルでは、パッケージの取得元レジストリが示されないため、それらに含まれるプライベートパッケージの名前が OSV に送信される場合があります。例外は go.mod のローカル replace パスです。
  • 結果は 1 日単位でキャッシュされます。プラグインでは ~/.cache/keep-me-secure に、Docker では kms-cache ボリュームに保存されます。ロックファイルに変更があると、新たに確認が実行されます。

セキュリティ

  • Docker コンテナにはプロジェクトへの読み取り専用アクセス権のみが付与され、root 以外のユーザーとして、読み取り専用ファイルシステムかつケイパビリティなしで実行されます。
  • インストールやアップグレードは一切行いません。エージェントがコマンドを提案し、あなたが承認します。
  • イメージはプロベナンス情報と SBOM を付けて公開されます。
  • エージェントに届くものはすべて、信頼できないものとして扱われます。パッケージ名、バージョン、アドバイザリー ID は厳格なパターンに一致する必要があり、ファイルパスとロックファイルのテキストは安全な文字のみに制限されます。また、アドバイザリーのテキストは短縮され、平坦化されて summary_untrusted とラベル付けされます。この最後のフィールドもサードパーティーのテキストであるため、エージェントにはデータとして扱うよう指示されています。

脆弱性の報告については、SECURITY.md をご覧ください。

制限事項

  • 対象はサードパーティーのパッケージと厳選されたプラットフォームインシデントのリストです。言語ランタイム、OS パッケージ、Docker ベースイメージ、独自コードは対象外です。no は、スタック全体が安全であることを意味しません。
  • no は、checked_at 時点で既知の問題がないことを意味します。OSV へのインシデント情報の反映は、数時間遅れることがあります。
  • コードが実際に脆弱な関数に到達するかどうかは確認しません。
  • 推移的依存関係の場合、修正には親パッケージのアップグレードが必要になることがあります。

セルフホスト

HTTP サーバーを自分で実行できます。

docker run --rm -p 8080:8080 --read-only --cap-drop=ALL -v kms-cache:/cache ghcr.io/robertkeus/keep-me-secure-mcp:latest serve

エンドポイントは /mcp で、/health はヘルスチェック用です。レート制限はインスタンスごとにメモリ上に保持されます。ポートを変更するには PORT を設定してください。KMS_TRUST_PROXY=1 を設定するのは、レート制限が実際のクライアントに適用されるよう、X-Forwarded-For を追加するプロキシの背後にある場合に限ってください。

コントリビューション

CONTRIBUTING.md をご覧ください。このプロジェクトは MIT ライセンスです。

開発

docker compose build
docker compose run --rm test
docker compose run --rm -e LIVE=1 test

脆弱なプロジェクトで試すには:

PROJECT_DIR=./test/fixtures/php docker compose run --rm -T mcp check

Cloudflare Worker をローカルで実行するには:

npx wrangler dev

v* タグをプッシュすると、イメージが GHCR に公開されます。

コメント

MCP は初めてですか?

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

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