Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
Tells your coding agent whether your installed packages need patching, with advice on what to do.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Works in Claude on the web, desktop and mobile:
https://mcp.keepmesecure.dev/mcpOpen Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"keep-me-secure": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/robertkeus/keep-me-secure-mcp:v1.7.0"
]
}
}
}Run this in your terminal
claude mcp add --transport http keep-me-secure https://mcp.keepmesecure.dev/mcpclaude mcp add keep-me-secure -- docker run -i --rm ghcr.io/robertkeus/keep-me-secure-mcp:v1.7.0Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"keep-me-secure": {
"url": "https://mcp.keepmesecure.dev/mcp"
}
}
}Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"keep-me-secure": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/robertkeus/keep-me-secure-mcp:v1.7.0"
]
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"keep-me-secure": {
"type": "http",
"url": "https://mcp.keepmesecure.dev/mcp"
}
}
}Paste into .vscode/mcp.json in your project
{
"servers": {
"keep-me-secure": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/robertkeus/keep-me-secure-mcp:v1.7.0"
]
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
ChatGPT connects only to servers on the internet:
https://mcp.keepmesecure.dev/mcpMenu names can differ slightly by plan and over time.
Your choice stays on this device in a cookie; no account needed.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Tool names and descriptions exactly as the server reported them on Nov 7, 2026. The maker wrote them, not us; we show them as plain text.
check_packagesUse 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.
check_platformLists 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.
check_runtimeChecks 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.
check_packageChecks one exact package version against public security advisories.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026
The registry name was verified with the GitHub account robertkeus, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
Responded in 160 ms (HTTP 200)
No sign-in needed
Read 4 tool descriptions and found no hidden instructions to the AI
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
The registry does not list a required key, though some servers ask you to sign in on first use.
Either way works: install it on your computer or connect to the cloud version.
The GitHub repo last changed –, and the latest version (1.7.0) reached the registry yesterday.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.
In the same category: Spec Driven Development, Remote Desktop Commander, Microsoft Exchange Online MCP
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Exchange Online admin for MSPs: forwarding audits, EWS posture and offboarding, no PowerShell
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
Ask your coding agent "Is my stack secure?" and get a yes or no, with what to do next.
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.
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.
Add it to Claude Code. You need Node.js 22 or newer, and no account or Docker.
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:
Is my stack secure?
It never changes anything without your OK.
| Claude Code plugin | Docker | Hosted URL | |
|---|---|---|---|
| Best for | Daily use in Claude Code | Other agents, isolation | Trying it, small projects |
| You need | Node.js 22 or newer | Docker | Nothing |
| Daily check | Yes | Yes | No, you ask |
| Who reads your lockfiles | The plugin, on your machine | The container, on your machine | Your agent, which sends the list to our server |
| Coverage | Every package | Every package | What your agent sends |
Run this in your project:
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:
| File | Purpose |
|---|---|
.mcp.json | Registers the MCP server |
.claude/settings.json | Claude Code hook that runs the check when a session starts |
AGENTS.md | Tells 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:
[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:
{
"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.
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.
| Language | Reads |
|---|---|
| PHP | composer.lock |
| JavaScript | package-lock.json, pnpm-lock.yaml, yarn.lock |
| Python | requirements*.txt, poetry.lock, uv.lock |
| Go | go.mod |
| Rust | Cargo.lock |
| Ruby | Gemfile.lock |
| Java, Kotlin | gradle.lockfile |
| .NET | packages.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.
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:
| Runtime | Reads |
|---|---|
| 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.check_runtime takes an exact version, for example from php --version.These don't change the yes or no, but they show up in check_project.
now show how to let that one fix through.check_project, which it may do when a session starts.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.
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.
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.
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?".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.
| Tool | Question it answers | Input |
|---|---|---|
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_package | Is this exact version safe? | ecosystem, name, version |
check_platform | Was this platform breached? | name, optional. Omit it to list all |
check_runtime | Is this Node.js or PHP version safe? | runtime, version |
suggest_dependabot (local) | Can you set up Dependabot? | None |
Example result, shortened:
{
"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: 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.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.
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.
Only the beginning is shown; read the rest in the repo