Draugr
Security scanning for AI agents: SAST, SCA, secrets, IaC, DAST, ranked by real risk.
作者提供的说明(英文原文)
Provider-side MCP firewall: identity, threat-intel, barter, rate limits, DLP, audit.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"uta-shield": {
"command": "npx",
"args": [
"-y",
"uta-shield"
]
}
}
}在终端中运行这条命令
claude mcp add uta-shield -- npx -y uta-shield粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"uta-shield": {
"command": "npx",
"args": [
"-y",
"uta-shield"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"uta-shield": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"uta-shield"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月9日
注册名称已通过 GitHub 账户 eddyflores100-lang 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.3.0)于12天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有: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、图片和脚本已被移除。链接会离开本站。
Provider-side firewall for MCP servers + PhishGuard threat-intel MCP server — in one zero-dependency package.
Landing / docs: https://wall.utalabs.tech
Every gateway in the MCP security category (Lasso, Mintive, Obot, agentgateway, Cequence) protects the consumer — the company whose employees connect agents to third-party servers. Nothing protects the operator — the SaaS that publishes its MCP server and exposes its database to every anonymous agent on the internet.
uta-shield is the mirror side: you wrap YOUR MCP server and gain verified identity, per-tool authorization, threat-intel blocking (in AND out), two-tier rate limits, DLP masking, proxy hardening, per-call metering and a JSONL audit trail — without touching your server code.
Backed by a real, documented campaign: the taikotalent phishing case (fake-recruiter malware against open-source developers, domain taken down in ~12h, C2 infra tracked). The bundled feed ships its 23 verified IOCs.
# 1. Screen any indicator offline (exit code 1 on match → scriptable)
npx uta-shield check gaganata.ink # → MATCH (C2, campaign taikotalent-2026-10) npx uta-shield check example.com # → NO_MATCH
echo "verify at https://taikotalent.xyz/verify_m" | npx uta-shield screen
npx uta-shield mcp
cat > keys.json <<'EOF' { "recruiter-agent": "generate-a-long-random-secret", "auditor-agent": "another-secret" } EOF npx uta-shield wrap --upstream http://localhost:3001 --port 8787 --keys-file keys.json --admin-token "$(openssl rand -hex 24)"
node demo/run-demo.mjs
Identity is no longer declared-only. Agents present three headers:
x-agent-name: recruiter-agent
x-agent-timestamp: 1761196800000 (ms; ±5 min window) x-agent-signature: HMAC_SHA256(secret, ${agent}|${ts}|${sha256(rawBody)})
ALLOW_VERIFIED (per-agent rate buckets, ACL enforcement, metering).REJECT_ANON (401) unless the operator passes --allow-anonymous.verified:false — they earn no per-agent rate bucket.--acl-file): by default, agents absent from the map are unrestricted. For allow-list semantics, add --acl-deny-unlisted — unlisted agents get 403 REJECT_FORBIDDEN even with a valid signature. The CLI refuses --acl-deny-unlisted without an ACL file (with no map, deny-unlisted would reject every agent). /health discloses identity.acl_deny_unlisted.Signing a request (client side, any language):
import { createHmac, createHash } from "node:crypto";
const ts = Date.now(); const bodyHash = createHash("sha256").update(rawBody).digest("hex"); const sig = createHmac("sha256", secret).update(${agent}|${ts}|${bodyHash}).digest("hex");
| # | Layer | Status in v0.2.2 | ||
|---|---|---|---|---|
| 1 | Agent identity: HMAC-SHA256 verified (--keys-file, anti-replay window, fail-closed) + per-tool ACL (--acl-file) + declared/anonymous fallback | SHIPPED | ||
| 2 | Reputation score per agent | hook (identity verdicts recorded; scoring = roadmap) | ||
| 3 | Threat-intel in/out: inbound args blocked; outbound responses under explicit policy (`--outbound-policy block\ | redact\ | log, default redact`) | SHIPPED |
| 4 | Rate limiting: two-tier — per-IP bucket (always) + per-agent bucket (verified only); free/paid tiers | SHIPPED | ||
| 5 | Billing: per-call metering + x402-ready pricing manifest (settlement delegated to operator payment layer) | SHIPPED (metering) | ||
| 6 | DLP: emails (plain + obfuscated), JWTs, AWS/GCP keys, GitHub PATs, Stripe keys, bearer tokens, PEM blocks, hex secrets, credit cards (Luhn-validated), optional base64 blobs | SHIPPED | ||
| 7 | Reverse drift alerts (notify clients if schema changes) | roadmap | ||
| 8 | Audit: JSONL per decision (indicator + campaign for triage, never raw args or secrets) | SHIPPED |
Honesty policy: this README marks exactly what ships. Layers 2 and 7 are design hooks — no inflated claims.
| Control | Default | Flag | |
|---|---|---|---|
| Startup fail-closed | refuses to run without --keys-file or --allow-anonymous | — | |
| `/audit` authenticated | disabled (404) without a token; with one, requires `x-uta-admin` (timing-safe compare) — the trail holds IOCs and agent names, it is operator telemetry, never public | --admin-token SECRET / UTA_SHIELD_ADMIN (≥16 chars) | |
| Request body cap | 1 MiB (declared and streamed — header spoofing doesn't help) | --max-body-bytes N | |
| Upstream timeout | 30 s → 504, fixed message | --upstream-timeout-ms N | |
| MCP method allow-list | initialize, notifications/initialized, ping, tools/list, tools/call → everything else 403 METHOD_DENIED | `--allow-methods "a,b" \ | "*"` |
| Safe errors | upstream failures return fixed messages; detail goes to the audit log, never the client | — | |
| Exact outbound verdict | the x-uta-shield response flag is the core verdict (OUT_OK/OUT_MASKED/OUT_REDACTED/OUTBOUND_INTEL) — no recomputation, policy=log reports OUTBOUND_INTEL, never a clean-looking OUT_OK | — | |
| Raw-body forwarding | exact bytes upstream (signature integrity) | — | |
| Per-IP rate ceiling | 120 req/min, burst 60 | -- config via API | |
| Header timeouts | headers 10 s, request timeout = upstream + 5 s | automatic |
/.well-known/agent.json origin verification remains a supplementary hook.policy=log records outbound IOCs but passes them through — it exists for operators who explicitly opt in; redact (default) or block are the safe choices.dlp options).A security product with 47 transitive dependencies is an attack surface, not a defense. uta-shield is ~1,600 lines of auditable Node.js ≥18 (ESM), including a hand-rolled MCP stdio implementation (newline-delimited JSON-RPC 2.0). npm pack ≈ 108 kB unpacked / 54 kB tarball.
feed/iocs.json (schema pg/1) ships campaign taikotalent-2026-10: 23 IOCs across 9 types — phishing domain (down via registrar clientHold), live C2 domains behind Cloudflare, sender IP, fake recruiter email, stager URLs, sha256 of payloads, wildcard second-stage path (/var/tmp/.kdm.*), mutex name — with MITRE ATT&CK mapping (T1566.002, T1656, T1204.002, T1059.004, T1027, T1071.001, T1070.004, T1583.001) and per-IOC context. Every verdict carries this evidence so downstream agents can reason about WHY they were blocked.
Feed data CC-BY-4.0 from the public case repo. Update/extend it by adding a campaign object — schema validated by uta-shield verify-feed.
Agents get the intel as tools: lookup_ioc(value), check_url(url) (feed + advisory heuristics), screen_text(text), list_campaigns(), feed_info(). Every response is DATA — the server never fetches or executes anything.
| Offer | What | Price |
|---|---|---|
| Self-host (this package, license for use) | all shipped layers, bundled feed — run on your own infra, commercial use allowed | free |
| S7 — managed feed subscription | updated campaign feed + webhook alerts + YARA rules | $50/mes (free for first 100 ATC-holding agents) |
| S6 — Shield assessment + piloto | audit of your MCP server + deployed piloto (identity+intel+audit) + report | $1,000 setup + $100/mes/server |
Contact: AliceLabs LLC — contacto@alicelabs.site
node --test test/*.test.mjs # 85 tests: identity/HMAC, strict-ACL, outbound policies, DLP formats,
npm run verify-feed # feed schema validation npm run demo # end-to-end with signed traffic
Independent execution: .github/workflows/tests.yml runs the full suite on GitHub's own runners (Node 20/22/24) on every push — the results are public and don't depend on this file's claims.
Test results for v0.2.2: see EVIDENCE.md (command, Node version, full runner summary).
wrap without --keys-file/UTA_SHIELD_KEYS/--allow-anonymous refuses to start (fail-closed default).gateOut default behavior changed from pass-through to redact. Set outboundPolicy:"log" for v0.1.0 behavior.ALLOW_VERIFIED, REJECT_AUTH, REJECT_FORBIDDEN, OUT_REDACTED, OUT_BLOCKED, UPSTREAM_ERROR.--admin-token (or UTA_SHIELD_ADMIN) it answers 404; with a token it requires the x-uta-admin header. Dashboards that scraped /audit anonymously must present the operator token. The response flag x-uta-shield is now the exact core verdict — policy=log users will see OUTBOUND_INTEL instead of the previously mislabeled flag.--acl-deny-unlisted enables opt-in strict ACL (allow-list semantics); the CLI refuses to start with that flag but no --acl-file (fail-closed). New audit verdicts: BODY_TOO_LARGE (both 413 paths — v0.2.1 added AUDIT_DISABLED/AUDIT_DENIED). Public CI added — nothing else changes for existing operators.Licensed for use — see LICENSE (license for use / licencia de uso). © 2026 AliceLabs LLC. Commercial exceptions (white label, OEM, redistribution, managed service): contacto@alicelabs.site