Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
DNS record enumeration, misconfiguration and dangling-subdomain detection
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"dns-intelligence": {
"command": "npx",
"args": [
"-y",
"@guardbee/mcp-dns-intelligence"
]
}
}
}在终端中运行这条命令
claude mcp add dns-intelligence -- npx -y @guardbee/mcp-dns-intelligence粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"dns-intelligence": {
"command": "npx",
"args": [
"-y",
"@guardbee/mcp-dns-intelligence"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"dns-intelligence": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@guardbee/mcp-dns-intelligence"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日
注册名称已通过 GitHub 账户 GuardBee 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.10.1)于7天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Apify MCP Server
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
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.
Extract data from any website with thousands of scrapers, crawlers, and automations on Apify Store ⚡
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
🇬🇧 English | 🇹🇷 Türkçe | 🇨🇳 中文 | 🇯🇵 日本語 | 🇰🇷 한국어 | 🇧🇷 Português | 🇪🇸 Español | 🇩🇪 Deutsch
An MCP server that enumerates DNS records, detects SPF / DMARC / DKIM misconfigurations, and finds subdomains (Certificate Transparency + wordlist) that can be taken over. Uses Node.js's built-in dns/promises — no external dependencies.
Telemetry is off by default. With
GUARDBEE_TELEMETRY=1it sends the server, tool, success, duration and short parameter values such as a file path; longer strings and fields likecontent,tokenorpasswordare replaced with a placeholder. See@guardbee/mcp-telemetry.
+all, ?all, duplicate records, and the RFC 7208 limits counted the way receivers do: DNS lookups across nested include/redirect (max 10), void lookups (max 2), include loops and missing includesnone/quarantine/reject), pct, missing rua addressdefault, google, selector1, mail, etc.)npm install -g @guardbee/mcp-dns-intelligence
Add to claude_desktop_config.json:
{
"mcpServers": { "guardbee-dns-intelligence": { "command": "npx", "args": ["-y", "@guardbee/mcp-dns-intelligence"] } } }
| Tool | Description |
|---|---|
enumerate_dns | Full DNS check with an A–F grade: records, SPF/DMARC/DKIM, MTA-STS, DNSSEC, CAA, nameservers |
audit_domains | Audits up to 20 domains and compares their grades and top findings |
enumerate_subdomains | Probes common subdomains (wildcard-aware); detects subdomain takeovers |
check_takeover | Checks given hostnames for subdomain takeover |
check_email_security | Combined SPF + DMARC + DKIM audit with fix recommendations |
lookup_dns | Targeted DNS lookup for a specific record type (A/MX/TXT/etc.) |
You can ask Claude:
"Is there a problem with example.com's DNS configuration?"
"Audit example.com's email security — SPF, DMARC, and DKIM"
"List example.com's subdomains, flag any dangling ones"
"What are example.com's MX records?"
Email Security Check: example.com
──────────────────────────────────────────────────
── SPF ───────────────────────────────────────── ✓ v=spf1 include:_spf.google.com -all
── DMARC ─────────────────────────────────────── ✗ No DMARC record found at _dmarc.example.com Add: v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com
── DKIM ──────────────────────────────────────── ✓ Found DKIM selectors: google
| Code | Severity | Description |
|---|---|---|
SPF_MISSING | 🟡 Medium | No SPF record found |
SPF_PERMISSIVE_ALL | 🔴 Critical | +all — allows any server |
SPF_NEUTRAL_ALL | 🟠 High | ?all — doesn't reject unauthorized senders |
SPF_NO_ALL | 🟡 Medium | No all mechanism |
SPF_TOO_MANY_LOOKUPS | 🟠 High | > 10 DNS lookups — causes SPF to fail |
SPF_DUPLICATE | 🟠 High | Multiple SPF records |
SPF_AT_LOOKUP_LIMIT | 🔵 Low | Exactly 10 lookups — one more include breaks SPF |
SPF_TOO_MANY_VOID_LOOKUPS | 🟠 High | More than 2 includes return no record |
SPF_INCLUDE_MISSING | 🟠 High | An include/redirect target has no SPF record (permerror) |
SPF_INCLUDE_DUPLICATE | 🟠 High | An included domain publishes several SPF records |
SPF_INCLUDE_LOOP | 🟠 High | Includes loop back to a record being evaluated |
SPF_PTR | 🔵 Low | Uses the deprecated ptr mechanism |
| Code | Severity | Description |
|---|---|---|
DMARC_MISSING | 🟠 High | No DMARC record |
DMARC_NO_POLICY | 🟠 High | Missing p= policy |
DMARC_POLICY_NONE | 🟡 Medium | p=none — monitoring mode, no enforcement |
DMARC_PCT_LOW | 🔵 Low | pct < 100 — partial enforcement |
DMARC_NO_RUA | 🔵 Low | No aggregate report address (rua) |
DMARC_MULTIPLE | 🟠 High | Several DMARC records — receivers ignore all of them |
DMARC_INVALID_POLICY | 🟠 High | p= is not none, quarantine or reject |
DMARC_SUBDOMAINS_NONE | 🟡 Medium | sp=none leaves subdomains spoofable |
DOMAIN_NOT_FOUND | 🟠 High | The domain does not exist (NXDOMAIN) |
Subdomains without their own DMARC record inherit the parent domain's (sp= policy), as receivers do. Subdomain enumeration detects wildcard DNS and leaves out names answered only by the wildcard.
| Code | Severity | Description |
|---|---|---|
DKIM_NOT_FOUND | 🟡 Medium | No DKIM key under ~35 common selectors (pass yours via dkimSelectors) |
DKIM_KEY_WEAK | 🟠 High | RSA key under 1024 bits |
DKIM_KEY_1024 | 🟡 Medium | 1024-bit RSA key — rotate to 2048 (RFC 8301) |
DKIM_KEY_INVALID | 🟡 Medium | Published key cannot be parsed |
DKIM_TESTING | 🔵 Low | t=y test mode |
MX_UNRESOLVABLE | 🟠 High | An MX host has no A/AAAA record |
MTA_STS_MISSING | 🔵 Low | No MTA-STS: inbound mail can be downgraded to plaintext |
MTA_STS_MX_MISMATCH | 🟠 High | Enforce policy omits a live MX — compliant senders refuse to deliver |
MTA_STS_POLICY_UNREACHABLE / _INVALID | 🟡 Medium | Policy file missing, redirected or malformed — senders ignore MTA-STS |
MTA_STS_TESTING / _MODE_NONE / _MAX_AGE_SHORT | 🔵 Low | Not enforcing, withdrawn, or max_age under a day |
TLSRPT_MISSING / _INVALID | 🔵 Low | No usable TLS-RPT next to MTA-STS |
SPF_MISSING is 🟠 High when the domain has MX records (with a starting record, e.g. v=spf1 include:_spf.google.com ~all for Google Workspace) and 🟡 Medium otherwise (suggests v=spf1 -all).
Each nameserver of a zone is queried directly over DNS (UDP/TCP 53): an SOA query without recursion, an AXFR request (only the first messages are read — the zone is never downloaded), and a recursive query for a name it does not host. Skip with --no-ns-probe / nameserverProbe: false.
| Code | Severity | Description |
|---|---|---|
NS_AXFR_ALLOWED | 🟠 High | Anyone can download the whole zone (zone transfer) |
NS_LAME | 🟠 High | A listed nameserver does not answer authoritatively (REFUSED, SERVFAIL, no AA, or no answer) |
NS_UNRESOLVABLE | 🟠 High | A nameserver's own name has no address |
NS_OPEN_RESOLVER | 🟡 Medium | The nameserver answers recursive queries for anyone (amplification, cache poisoning) |
NS_SOA_SERIAL_MISMATCH | 🔵 Low | Servers of the same primary return different serials (multi-provider setups are compared per primary) |
| Code | Severity | Description |
|---|---|---|
DNSSEC_BROKEN | 🔴 Critical | Validation fails — validating resolvers (Google, Cloudflare, most ISPs) cannot resolve the domain |
DNSSEC_NO_DS | 🟡 Medium | Zone is signed but the parent has no DS, so nothing is validated |
DNSSEC_WEAK_ALGORITHM | 🟡 Medium | Deprecated signing algorithm (RSASHA1, RSAMD5, DSA, GOST; RFC 8624) |
DNSSEC_DS_SHA1 | 🔵 Low | The only DS digest is SHA-1 |
DNSSEC_DISABLED | 🔵 Low | Zone is not signed |
CAA_BLOCKS_CURRENT_CA | 🟡 Medium | CAA does not allow the CA that issued the live certificate — its renewal will fail |
CAA_UNKNOWN_CRITICAL | 🟠 High | A critical CAA tag CAs do not understand — every CA must refuse |
CAA_MISSING | 🔵 Low | No CAA anywhere up the tree: any CA may issue |
DNSSEC is read through DNS-over-HTTPS (dns.google), comparing a validating query with a cd=1 (checking disabled) one, because Node's resolver cannot see DS/DNSKEY records or the AD flag. CAA follows RFC 8659 (nearest ancestor), and the issuer of the certificate served on :443 is compared against it. Both checks are skipped with http: false.
Each live subdomain with a CNAME is checked, following the CNAME chain (up to 5 hops). The wildcard record is checked too: a dangling *.domain makes every unlisted name claimable.
| Risk | When | Providers |
|---|---|---|
| ⚠️ takeover possible | The provider lets anyone claim the name | AWS S3 (NoSuchBucket page), Microsoft Azure and AWS Elastic Beanstalk (CNAME target NXDOMAIN), Surge.sh (project not found), and any CNAME into a domain that is not registered |
| ⚠️ verify manually | The resource is gone, but the provider can require domain verification | GitHub Pages, Heroku, Netlify, Vercel, Ghost, Pantheon, WordPress.com, Help Scout, Tumblr, ngrok |
| 🧹 stale | The target is gone but sits under a registered domain only its owner controls — delete the record; not a takeover, does not fail CI | any other provider |
Each page fingerprint was checked against a random unclaimed name on the provider. Providers whose "not found" page no longer carries a stable marker are not listed. HTTP checks send one GET / to the subdomain (HTTPS, then HTTP); turn them off with --no-http / httpProbe: false. Use check_takeover / takeover for hostnames you already know.
In addition to MCP server mode, this can also be used directly as a CLI:
# Full DNS + email security check
npx @guardbee/mcp-dns-intelligence check example.com
npx @guardbee/mcp-dns-intelligence check example.com --fail-on=high
npx @guardbee/mcp-dns-intelligence subdomains example.com
npx @guardbee/mcp-dns-intelligence subdomains example.com --concurrency=50
npx @guardbee/mcp-dns-intelligence check example.com --format=json
npx @guardbee/mcp-dns-intelligence check example.com example.de example.co.uk npx @guardbee/mcp-dns-intelligence check --format=sarif > dns.sarif
Grades: each finding deducts points (critical 40, high 20, medium 8, low 2) and the worst finding caps the grade — any critical is F, any high at most C, any medium at most B.
Exit codes: 0 = no issues · 1 = findings above threshold / dangling subdomain · 2 = error
只显示了开头部分;其余内容请在仓库中阅读