Draugr
Security scanning for AI agents: SAST, SCA, secrets, IaC, DAST, ranked by real risk.
作者提供的说明(英文原文)
Local credential broker: agents call APIs, SSH and DBs via scoped presets; secrets stay in keychain.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
链接指向作者自己的文件;我们不托管也不重新打包它。打开文件后,Claude Desktop 会进行安装。
在终端中运行这条命令
claude mcp add warden -- npx -y @mcp-warden/cli mcp粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"warden": {
"command": "npx",
"args": [
"-y",
"@mcp-warden/cli",
"mcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"warden": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@mcp-warden/cli",
"mcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月9日
注册名称已通过 GitHub 账户 ermoluk 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.6.0)于5天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Rust, Node.js, MCPB。
同一分类中有:Draugr, Harbor, Microsoft Windows Security Updates (MSRC CVRF) — buy per-query in-session (msrc…
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Security scanning for AI agents: SAST, SCA, secrets, IaC, DAST, ranked by real risk.
Read-only access to Harbor: projects, artifacts, vulnerabilities, robots, replication, agent skills.
MSRC Windows updates: CVE rollups, Patch Tuesday. Be born in one call — free testnet funds.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
A local-first credential broker for the Model Context Protocol — lets any AI coding agent (Claude Code, Cursor, Cline, Codex, Continue, Zed) take real actions without ever seeing your secrets.
The agent calls high-level tools (proxy_http); mcp-warden injects the secret server-side, executes the action, and returns only the result. Your context window stays clean. A leaked transcript leaks nothing useful.
mcp-warden CLI.github-read, stripe-charges).mcp-warden as an MCP server (stdio).proxy_http with a preset name and a path/method.mcp-warden validates the request against the preset's allow-list, injects the credential, executes, and returns only the response./lock also works as a kill switch from your phone. Opt in to time-boxed approvals per preset so one OK can cover a short burst of follow-up calls without re-prompt spam.mcp-warden audit verify) — including a windowed decision for calls authorised by an active approval window, a refused decision (with the raw requested path or command) for calls the allow-list turned away, and a failed decision when the approval prompt could not be shown.The agent's context window contains zero secrets.
Every option installs the same single binary — no background service, no auto-updater, no telemetry. To update, run the same tool again.
macOS and Linux — Homebrew
brew install ermoluk/tap/mcp-warden
Windows — Scoop
scoop bucket add ermoluk https://github.com/ermoluk/scoop-bucket
scoop install ermoluk/mcp-warden
A winget package (ermoluk.mcp-warden) and an AUR package (mcp-warden-bin) are coming but not listed yet. Until they are, use Scoop on Windows, and Homebrew or the install script below on Arch Linux; on Linux the script installs the static musl build.
Nix (builds from source)
nix profile install github:ermoluk/mcp-warden
npm — for MCP clients configured with npx. The package is scoped: the unscoped mcp-warden on npm is an unrelated project.
{ "mcpServers": { "mcp-warden": { "command": "npx", "args": ["-y", "@mcp-warden/cli", "mcp"] } } }
The binary for your platform comes from an optional dependency; nothing is downloaded at install or run time. npx @mcp-warden/cli init and the other subcommands work the same way.
Rust — prebuilt with cargo-binstall, or from source (Rust 1.94.1+):
cargo binstall mcp-warden
cargo install --locked mcp-warden
Install script — downloads the release archive for your machine, refuses it unless it matches the release's SHA256SUMS, and puts the binary in ~/.local/bin (Windows: %LOCALAPPDATA%\Programs\mcp-warden\bin). No sudo, and it changes neither your PATH nor your shell profile. Read it first if you like: install.sh, install.ps1.
curl -fsSL https://github.com/ermoluk/mcp-warden/releases/latest/download/install.sh | sh
irm https://github.com/ermoluk/mcp-warden/releases/latest/download/install.ps1 | iex
Claude Desktop — download the .mcpb bundle for your platform from the latest release and open it. The bundle contains only the server; install the CLI with one of the options above to create presets and store secrets.
By hand — every GitHub release has archives for macOS (arm64, x86_64), Linux (x86_64, aarch64; static musl builds, plus an x86_64 glibc build) and Windows (x86_64), a combined SHA256SUMS, and a build-provenance attestation for each archive:
gh attestation verify mcp-warden-aarch64-apple-darwin.tar.gz --repo ermoluk/mcp-warden
The macOS binaries are not notarized. Homebrew, npm, cargo and the install script don't mark them as downloaded, but an archive or bundle saved from a browser may be blocked by Gatekeeper until you run xattr -d com.apple.quarantine on it.
There is no Docker image, on purpose: the OS keychain — macOS Keychain, Windows Credential Manager, the Linux kernel keyring — isn't reachable from inside a container, and mcp-warden never falls back to keeping secrets in a file.
mcp-warden init
mcp-warden secret add gh_pat # paste your GitHub PAT when prompted mcp-warden preset add github-read \ --type http \ --base-url https://api.github.com \ --auth-bearer gh_pat \ --allowed-methods GET \ --allowed-paths /user/repos \ --approval auto --confirm-auto
The preset auto-approves only GET /user/repos; any other path is refused before the token is touched. To let the agent read more, widen the allow-list (e.g. --allowed-paths '/user/repos,/repos/OWNER/[^/]+') and prefer a fine-grained PAT limited to specific repos. Patterns match the whole path, as exact strings or regexes anchored as ^(?:…)$, never as prefixes; [^/]+ is safer than .* for one segment. They see the percent-decoded path, so %2F is a separator: a GitLab-style id like /projects/group%2Fproject needs /projects/[^/]+/[^/]+. An HTTP preset with no allowed_paths allows every path under base_url — preset add and doctor warn about it, and the built-in github-read / gitea-read / stripe-read templates ship with approval = "prompt" for that reason.
Wire mcp-warden into your agent — see docs/claude-code-setup.md or docs/cursor-setup.md.
In your agent: ask "list my GitHub repos via mcp-warden". Watch the agent call list_presets, then proxy_http — and watch your PAT stay out of the prompt.
mcp-warden audit --last 5 # see what the agent did
Keys pasted into MCP client configs sit on disk in plaintext, where the agent, a synced dotfile or a screenshot can pick them up. Three commands fix that:
mcp-warden scan # where are plaintext keys? (shows type + length, never values)
mcp-warden import # move them into the keychain and rewire the client entries mcp-warden run github # what the rewired entry runs: the server, with its key injected
scan reads Claude Code, Claude Desktop, Cursor, Windsurf, VS Code and Codex configs plus .mcp.json / .env files in the current directory (--path DIR for more). import handles keys in a stdio server's env; for keys in arguments, headers, URLs or .env files, scan says what to do instead. To wrap a server by hand: mcp-warden server add github --env GITHUB_PERSONAL_ACCESS_TOKEN -- npx -y @modelcontextprotocol/server-github (the value is read from stdin). Details: docs/scan-and-import.md.
| Command | Description | |
|---|---|---|
mcp-warden init | Create the config directory and a template config | |
mcp-warden secret add | Store a secret (value read from stdin, never argv) | |
mcp-warden secret list | List secret names (never values) | |
mcp-warden secret remove | Delete a secret from the keychain | |
mcp-warden preset add ... | Define a preset (--confirm-auto required for auto, then an approval prompt confirms it) | |
mcp-warden preset confirm [name]... | Confirm auto presets through the approval prompt; an edited auto preset asks until confirmed again | |
mcp-warden preset list | Show all presets | |
mcp-warden preset test | Validate a preset against the current keychain | |
mcp-warden preset test GET /path | Policy simulator: would this call be allowed, and why? Sends nothing (--command, --get/--put, --query for other tools) | |
mcp-warden preset grant --for 1h | Time-limited access: calls are refused after the window (--permanent clears it) | |
mcp-warden preset revoke | End access to a preset now (next server start; lock for immediately) | |
mcp-warden lock [--reason …] | Kill switch: every MCP server refuses every call from its next one on (or send /lock to the Telegram bot) | |
mcp-warden approval telegram-test | Check the Telegram setup: token, chat, a test prompt you answer | |
mcp-warden unlock | Remove the lock after a human approves it in the dialog / Telegram | |
mcp-warden scan | Find plaintext keys in MCP client configs and .env files (never prints values) | |
mcp-warden import | Move the keys scan found into the keychain and point the client at mcp-warden run | |
mcp-warden server add --env VAR -- | Wrap another MCP server; its key is read from stdin into the keychain | |
mcp-warden run | Launch a wrapped MCP server with its keys injected (use as the client's command) | |
mcp-warden preset scaffold *(v0.3.0)* | Generate a preset from a built-in template (--list to discover) | |
mcp-warden preset from-openapi *(v0.3.0)* | Bootstrap a preset from an OpenAPI 3.x spec (URL or file) | |
mcp-warden approval [--window N] | Set approval policy; --window N (sec) enables time-boxed approvals for prompt | |
| `mcp-warden audit [--last N \ | --since T] [--decision D]…` | Read-only view of the audit log (append-only by design), with what the agent asked for — including refused calls — and which MCP client and session made each call. --decision refused --decision failed shows only those decisions; --window N shows approval #N and every call that ran inside the window it opened |
mcp-warden audit verify [--format json] | Check the audit log's hash chain and every event against it, and the log against its anchor in the keychain; names what was changed, deleted, cut short or rewritten. Exit code 1 if anything does not hold | |
mcp-warden doctor [--deep] *(v0.3.0 for --deep)* | Diagnostic summary; --deep runs safe read-only HTTP probes per preset | |
mcp-warden web [--port N] *(v0.3.0)* | Local read-only web UI (binds 127.0.0.1 only) | |
mcp-warden mcp | Run the MCP server over stdio (consumed by the AI agent) |
只显示了开头部分;其余内容请在仓库中阅读