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 · 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.

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.

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

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 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 and most pnpm lockfiles don't show which registry a package came from, so private package names in those can be sent to OSV. 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 and platform incidents. It doesn't cover your servers, OS packages, Docker base images 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,提交 c10b05c

工具

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 集成