
DNS MCP Server
io.github.mclose由 GitHub 账号 mclose 发布v1.3.4更新于 Oct 24, 2026
Real-time DNS security analysis — DNSSEC, email auth, and RDAP. Built for SOC investigations.
概览
一个 DNS 安全分析服务器,让助手对域名执行 DNSSEC、邮件认证、信誉和注册信息查询。
- 可以做什么
- 通过 DoH 执行多种记录类型的 DNS 查询,可选客户端子网提示,并检测递归解析器是否被篡改。从 IANA 根开始验证 DNSSEC 信任链,分析 NSEC/NSEC3 不存在证明。审计邮件认证:SPF、DMARC、DKIM 选择器、DANE 与 TLSA 记录。对照 DNS 黑名单检查 IP 与域名信誉,查询 ASN 与 BGP 信息,识别 fast-flux 轮换。通过 RDAP 获取域名注册数据,并读取或重置会话内的工具调用统计。
- 适用场景
- 适合安全分析师和 SOC 调查,需要在对话中完成域名安全态势检查、钓鱼邮件研判或 DNSSEC 与邮件认证审计。也适合事件响应中的临时 DNS 侦察。
- 运行要求
- 以本地 Docker 容器通过 stdio 运行,但 README 描述的是 Streamable HTTP 部署,需要 Docker、Pocket ID 或其他 OIDC 提供方、TLS 反向代理和域名。需在 .env 中设置 POCKET_ID_BASE_URL、POCKET_ID_API_KEY 和 SERVER_URL。需要访问外部 DNS-over-HTTPS 与 RDAP 网络。
安装
在 SourceWeft 中
- 打开 控制台中的 DNS MCP Server,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
DNS MCP Server
Real-time DNS security analysis for AI assistants via MCP. Gives your assistant the ability to investigate domains the way a practitioner would — DNSSEC chain validation, email authentication posture, and registration intelligence — without leaving your chat session.
Built by a cybersecurity professional for SOC investigation workflows. Not a toy — the same queries you would run at the command line, accessible through any MCP-compatible assistant in real time.
Architecture (2.0.0)
dns-mcp is a Streamable HTTP MCP server with OAuth via Pocket
ID. Tool implementations are thin wrappers around the
dns_tool Python library, which
owns all DNS logic. The server itself is ~430 lines of code: auth bootstrap,
tool registration, and prompt loading.
Three benefits over the previous stdio-only architecture:
- Network-accessible — hosted MCP servers can serve any client, not just ones that can spawn a local subprocess.
- OAuth-protected — bearer JWTs verified against Pocket ID JWKS; per-user
identity available to tools via
whoami. - Library-first —
dns_toolis published independently and reusable. The same code powers a CLI, this MCP server, and (eventually) a REST API.
The old stdio architecture lives at server.py.legacy for porting reference.
The remote branch (mcp-shim Go bridge) is deprecated.
Tools
dns-mcp 2.0.0 currently exposes 19 tools. Ten additional tools from the
1.x stdio architecture are pending port into dns_tool — see
Open work.
Meta
DNS
Email security
Threat intelligence
Registration
Observability
Downstream consumers (e.g. ~/projects/yahoo batch forensics) call
session_stats as the final tool in each investigation to record which
DNS tools were consulted; an empty stats dict indicates a "cold read"
where the analyst LLM produced a verdict without DNS verification.
Tool descriptors
All 19 tools use Pydantic Field for parameter descriptors. The LLM sees:
- Per-parameter descriptions explaining what the parameter means
Literal[...]enums for record types and protocols (no string-guessing)- Regex patterns validating FQDN syntax, IPv4 dotted-quad, DKIM selector format
- Length and range constraints (port 1–65535, FQDN max 253 chars, etc.)
Constraints are advertised in the tool descriptor JSON Schema and enforced at
the MCP boundary by FastMCP — invalid input is rejected before dns_tool is
called. See src/dns_mcp/server.py for the type alias definitions.
Analyst Prompts
Four analyst prompt templates ship with the server. Any MCP-compatible client that supports prompts can list and invoke them.
Prompt invocation requires client-side UI support. Claude Code surfaces them
as /mcp__dns-mcp__<prompt_name>. Claude.ai web exposes prompts via the
slash-command picker. Use tools ad-hoc in clients that do not support prompts.
Example
Ask your assistant: "Check the email security posture of example.com"
The assistant calls check_spf, check_dmarc, check_dane in sequence and
returns a complete analysis:
No copy-pasting dig commands. No tab-switching. One question.
Quick Start
Prerequisites
- Docker
- A Pocket ID instance (or any OIDC provider supporting Dynamic Client Registration)
- A reverse proxy with TLS termination (Caddy, nginx, etc.)
- A domain name pointing at your reverse proxy
1. Pocket ID
Mint an admin API key in Pocket ID's UI: Settings → API Keys → Create new
key. Name it dns-mcp so you can revoke just this service if needed. Copy
the key value (it is shown once).
2. .env
3. Deploy
The image installs dns_tool as a versioned dependency (URL-pinned in
pyproject.toml); make build is also available for direct development.
4. Reverse proxy
The container listens on port 8000 (HTTP). Front it with TLS termination:
If you use mclose/gateway (the Caddy +
DNS-01 setup that serves dns-mcp.lab.deflationhollow.net), drop a
conf.d/dns-mcp.conf matching the existing pattern.
5. Connect
Add https://dns-mcp.example.com/mcp as a connector in your MCP client. The
OAuth flow runs once on first connect — Claude.ai redirects to Pocket ID, you
authenticate, the server creates a DCR client on your Pocket ID instance, and
returns a JWT. Subsequent tool calls send that JWT as a bearer token; the
server verifies against Pocket ID JWKS.
Open work
Eleven tools from the 1.x stdio architecture are not yet ported into
dns_tool and are therefore not registered in 2.0.0:
check_caa(with CNAME chain tracing and wildcard delegation detection)check_zone_transfer(AXFR enumeration)check_bimi,check_mta_sts,check_smtp_tlsrptcheck_ct_logs(Certificate Transparency log enumeration via crt.sh)timestamp_converter,reverse_dnsenumerate_dkim_selectors,dns_dig_style,dns_query_dot
Reference implementations live in server.py.legacy. Each port involves
moving the function into the appropriate dns_tool module
(dns_tool.email, dns_tool.intel, etc.), adding tests on the library
side, and registering a one-line wrapper in src/dns_mcp/server.py.
File structure
Day-to-day
Security
- No shell execution — all DNS via
dns_tool(dnspython internally), RDAP viarequests - OAuth bearer JWT verification against Pocket ID JWKS on every tool call
- Pydantic
Fieldconstraints enforced at MCP boundary — invalid input rejected before reachingdns_tool - Non-root container user (
claude, uid 1000) - SPF recursion limit enforced (RFC 7208)
- RDAP: 10s timeout, max 3 redirects
License
MIT
来源:README.md,提交 e6e6cde
工具
0版本历史
1- v1.3.4最新Sep 16, 2026
评分
已满足适用检查项的 40%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分
请在仓库或注册中心条目中声明许可证。