Keep Me Secure

io.github.robertkeus由 GitHub 帳號 robertkeus 發布v1.5.0更新於 Nov 6, 2026

Tells your coding agent whether your installed packages need patching, with advice on what to do.

發布方自己的服務:Keep

已驗證Streamable HTTP可網頁執行開發者工具安全與監控

概覽

AI 產生的概覽

免費的 MCP 伺服器,用公開安全公告檢查專案已安裝的套件版本、Node.js 或 PHP 執行環境,以及託管平台。

可以做什麼
  • 比對公開安全公告檢查已安裝的套件版本,可單一套件或每次最多 500 個,回傳結論、急迫程度與升級建議。
  • 在本機讀取鎖定檔(外掛或 Docker),涵蓋 PHP、JavaScript、Python、Go、Rust、Ruby、Java/Kotlin 與 .NET 專案,包含間接相依套件。
  • 檢查確切的 Node.js 或 PHP 執行環境版本本身是否有已知缺陷。
  • 依名稱或完整清單查詢託管、部署與 AI 平台上經整理的已知安全事件。
適用情境
當你希望編碼助理回答專案相依套件是否需要修補,或提醒專案所用平台是否發生過已知外洩時使用。最適合在已有鎖定檔的程式碼儲存庫中做日常檢查。
執行需求
可使用託管端點 mcp.keepmesecure.dev(不需帳號或權杖,依 IP 限流),或透過 Claude Code 外掛或 Docker 映像在本機執行,需要 Node.js 22 以上或 Docker。助理必須從專案資料夾啟動,才能讀取鎖定檔。
安裝前請注意
託管端點依賴助理自行讀取並送出套件名稱與版本,因此涵蓋範圍不完整,且儘管有提示,私有套件名稱仍可能被送出;若名稱敏感請在本機執行。公開套件名稱與版本會送至 OSV.dev,CVE 編號會送至 FIRST EPSS。結果僅供參考:結論為 no 不代表技術棧安全,平台與執行環境清單為人工整理且不完整。它本身不會執行任何升級。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Keep Me Secure,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.robertkeus%2Fkeep-me-secure-mcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "keep-me-secure": {
      "type": "http",
      "url": "https://mcp.keepmesecure.dev/mcp"
    }
  }
}

README

keep-me-secure-mcp

Ask your coding agent "Is my stack secure?" and get a yes or no, with what to do next.

[A terminal. Someone asks: Is my stack secure? It scans 111 packages across PHP, npm, Go and Java, then answers no: 18 packages need patching, starting with log4j-core and spring-beans.]

Website · Changelog · Contributing · Security · MIT license

It's a free, open source MCP server. It checks every package in your lockfiles against public security advisories, including the ones you didn't install directly.

Why not just Dependabot?

Keep using it: it's great at opening fix pull requests, and this can set it up for you. Keep Me Secure adds flaws in Node.js and PHP themselves, support end dates, platform breaches and OS packages in Dockerfiles, and it answers in your coding session, on your working copy.

Quick start

Add it to Claude Code. You need Node.js 22 or newer, and no account or Docker.

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

Now it checks by itself when you start coding, once a day per project. You can also ask your agent at any time:

text
Is my stack secure?

It never changes anything without your OK.

Ways to use it

Claude Code pluginDockerHosted URL
Best forDaily use in Claude CodeOther agents, isolationTrying it, small projects
You needNode.js 22 or newerDockerNothing
Daily checkYesYesNo, you ask
Who reads your lockfilesThe plugin, on your machineThe container, on your machineYour agent, which sends the list to our server
CoverageEvery packageEvery packageWhat your agent sends

Docker

Run this in your project:

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

This adds or updates three files:

FilePurpose
.mcp.jsonRegisters the MCP server
.claude/settings.jsonClaude Code hook that runs the check when a session starts
AGENTS.mdTells other agents to run the check at the start of a session

The config pins the image version, so a new release never reaches your project unannounced. Run the command again to upgrade.

For other agents, keep the AGENTS.md rule: in testing, Codex only called the tool when that rule was present.

Codex

In ~/.codex/config.toml:

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

In opencode.json:

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    }  }}

Tested with Claude Code, Codex and opencode. Cursor and other MCP clients should work with the same command, but haven't been tested. The agent must start in your project folder, because $PWD is what gets scanned.

Hosted URL

Add https://mcp.keepmesecure.dev/mcp as a remote MCP server in your agent. No account or token is needed, and each IP address gets 20 checks per minute.

  • Your agent reads your lockfiles and sends package names and versions, so coverage depends on your agent. In one test it sent only 19 of 39 packages. Use the plugin or Docker when coverage matters.
  • Your agent is told to leave out private packages, but that isn't enforced. If your package names are sensitive, run it locally.
  • The server doesn't log or store package lists, and Worker logging is turned off. Package names and versions are passed to OSV, and Cloudflare may keep its own standard request data.
  • Every package is treated as a direct dependency, so check the suggested command for transitive ones.

What it checks

LanguageReads
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

Lockfiles in test and example folders (such as test, spec, fixtures and examples) are skipped, because they usually don't ship. They're listed in coverage.ignored, and check_project still checks one if you name it with path.

Maven has no lockfile, so pom.xml projects return unknown. So do Gradle and .NET projects with locking turned off.

Node.js and PHP versions

Flaws in the runtime itself don't appear in your lockfile. In October 2026, Node.js and PHP both shipped fixes for flaws that CISA lists as exploited. So Keep Me Secure also reads the versions your project declares:

RuntimeReads
Node.js.nvmrc, .node-version, .tool-versions, volta and engines in package.json, FROM node: in a Dockerfile
PHP.php-version, .tool-versions, config.platform.php and require.php in composer.json, FROM php: in a Dockerfile
  • affected: that version has the flaw, or its release line got no fix. The session-start message mentions these.
  • unverified: the repo only shows a range or a floating tag such as php:8.5, so the patch version can't be read. These appear in check_project, not the session-start message.
  • Declared versions may not be what runs on your servers, so check those too. check_runtime takes an exact version, for example from php --version.
  • Advisories are a curated list from each project's own security pages, updated through a daily feed. They're reported separately and don't change the package verdict.

Staying ahead

These don't change the yes or no, but they show up in check_project.

  • Support dates: for each declared Node.js or PHP version, it shows when active support and security fixes end, and whether it's an LTS line. End of life and ending within 180 days also appear in the session-start message. Dates come from endoflife.date.
  • Release age: it checks whether npm, pnpm, Yarn and Composer wait before installing new releases, and shows the setting to add. Waiting about 2 days blocks many supply chain attacks, but it also delays security fixes, so results with urgency now show how to let that one fix through.
  • Old packages: it flags direct dependencies that are deprecated, abandoned, or have had no release for two years. Old doesn't mean unsafe, so this is only a prompt to look. It uses deps.dev and Packagist. The session-start hook skips it, but it runs whenever your agent calls check_project, which it may do when a session starts.

Dockerfiles

It reads each Dockerfile or Containerfile for the base image and its OS, end-of-life OS versions, floating tags such as latest, whether the image runs as root, and OS packages installed with apk or apt.

A Dockerfile doesn't show exact package versions or what's really running, so anything it finds is unverified. To be sure, scan the built image with a tool such as Trivy or Grype. System advisories are a curated list, starting with the OpenSSH password bypass on Alpine.

Dependabot

Ask your agent to set it up. suggest_dependabot returns a .github/dependabot.yml for your package managers and Dockerfiles, and your agent writes it with your OK. It uses a 2 day cooldown, which makes routine updates wait. GitHub doesn't apply cooldowns to security updates, so fixes aren't delayed.

Platform breaches

Packages aren't the only risk. In October 2026 alone, several developer and AI platforms disclosed incidents where customer secrets may have been exposed. If your project uses one, Keep Me Secure tells you what happened and what to do, with a link to the source.

  • Detection: it looks for files such as railway.toml, vercel.json, zbpack.json and trigger.config.ts, and for packages such as @trigger.dev/sdk. Platforms that leave no trace in a repo aren't detected, so ask your agent, for example "Was Northflank breached?".
  • The list: no public database of platform incidents exists, so we keep a curated list, taken from what each company has said. It isn't complete, so an empty result doesn't mean a platform is safe.
  • Updates: the plugin and Docker versions fetch the list once a day, which sends nothing about your project. The feed can only add incidents: the ones shipped with each release always stay, and every entry is validated. It isn't signed yet.
  • Reporting: the session-start message mentions incidents from the last 90 days. check_platform always shows all of them. Platform incidents are reported separately and don't change the package verdict.

To add an incident, open a pull request that edits src/platforms.ts and links the company's own statement.

Tools

ToolQuestion it answersInput
check_project (local)Is my stack secure? Do I need to patch anything?ecosystem, path and refresh, all optional
check_packages (hosted)Is my stack secure?packages, a list of up to 500
check_packageIs this exact version safe?ecosystem, name, version
check_platformWas this platform breached?name, optional. Omit it to list all
check_runtimeIs this Node.js or PHP version safe?runtime, version
suggest_dependabot (local)Can you set up Dependabot?None

Example result, shortened:

json
{  "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": [] }}

Verdicts

  • yes: at least one installed version has a known advisory.
  • no: every package was checked and none has a known advisory.
  • unknown: the check was incomplete, for example a missing lockfile, an unsupported ecosystem or a failed lookup. coverage.unchecked says why. Don't read this as safe.

Urgency

  • now: a malicious package, or a vulnerability in the CISA KEV list of actively exploited issues.
  • today: critical, high or unrated severity.
  • this_week: everything else.

For malicious packages, upgrading isn't enough. The advice is to remove the package, rotate secrets and check for changes it may have made.

Data and privacy

The full statement is at keepmesecure.dev/privacy. This project is provided as is and used at your own risk, as set out in the terms.

  • Names of direct dependencies are sent to deps.dev and Packagist whenever your agent calls check_project, which it may do when a session starts.
  • Names and versions of public packages are sent to OSV.dev. When something is affected, CVE ids go to FIRST EPSS. The CISA KEV feed is downloaded.
  • Packages from private registries, git or local paths are not sent anywhere. They're listed in coverage.private and aren't checked.
  • Go, Java, .NET, requirements.txt, most pnpm and some Yarn lockfiles don't show which registry a package came from, so private package names in those can be sent to OSV, deps.dev and Packagist. Local replace paths in go.mod are the exception.
  • Results are cached per day, in ~/.cache/keep-me-secure for the plugin and the kms-cache volume for Docker. A lockfile change triggers a new check.

Security

  • The Docker container gets your project read-only, runs as a non-root user with a read-only filesystem and no capabilities.
  • It never installs or upgrades anything. The agent proposes a command and you approve it.
  • Images are published with provenance and an SBOM.
  • Anything that reaches your agent is treated as untrusted. Package names, versions and advisory ids must match strict patterns, file paths and lockfile text are reduced to safe characters, and advisory text is shortened, flattened and labelled summary_untrusted. That last field is still third-party text, so agents are told to treat it as data.

To report a vulnerability, see SECURITY.md.

Limits

  • It covers third-party packages, plus curated lists of runtime flaws, platform incidents and OS package flaws in Dockerfiles. It doesn't scan built images, your servers, software on your computer, or your own code. A no doesn't mean your whole stack is secure.
  • A no means no known issue at checked_at. OSV can lag behind an incident by a few hours.
  • It doesn't check whether your code actually reaches the vulnerable function.
  • For a transitive dependency, the fix may have to come from upgrading its parent package.

Self-hosting

You can run the HTTP server yourself:

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

The endpoint is /mcp, and /health is for health checks. Rate limits are kept in memory, per instance. Set PORT to change the port. Set KMS_TRUST_PROXY=1 only behind a proxy that adds X-Forwarded-For, so rate limits apply to the real client.

Contributing

See CONTRIBUTING.md. This project is MIT licensed.

Development

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

To try it on a vulnerable project:

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

To run the Cloudflare Worker locally:

bash
npx wrangler dev

Pushing a v* tag publishes the image to GHCR.

來源:README.md,提交 d03a420

工具

4

check_packages

Is my stack secure?

Use for questions like 'is my stack secure?' or 'do we have vulnerable packages?'. Checks a list of exact installed package versions against public security advisories. Read them from the project's lockfiles, including transitive packages. Up to 500 per call; call again for more. verdict is yes, no or unknown; unknown means the check was incomplete, so never report it as safe. Does not cover OS packages, Docker base images or your own code. Use check_runtime for Node.js and PHP versions.

輸入參數packages必填

check_platform

Has this platform been breached?

Lists known security incidents at hosting, deployment and AI platforms, with what to do and a link to the source. Use when the user asks about a platform or breach. Omit name to list all. The list is curated and not complete, so no result doesn't mean a platform is safe.

輸入參數name

check_runtime

Is this Node.js or PHP version safe?

Checks a Node.js or PHP version against known security flaws in the runtime itself. Use with the exact version, for example from `node --version` or `php --version`. The list is curated, so no findings doesn't prove a version is safe.

輸入參數runtime必填version必填

check_package

Is this package version safe?

Checks one exact package version against public security advisories.

輸入參數name必填version必填ecosystem必填

版本歷史

5
  1. v1.7.0Nov 7, 2026
  2. v1.5.0最新Nov 6, 2026
  3. v1.4.0Nov 6, 2026
  4. v1.3.2Nov 5, 2026
  5. v1.1.1Nov 5, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Keep 整合