freshcrate
Skin:/
Home > MCP Servers > bv-mcp

bv-mcp

Open-source DNS & email security scanner. One MCP endpoint, 57 checks, zero install. Cloudflare Workers.

Why this rank:Recent releaseHealthy release cadenceStrong adoption

Description

Open-source DNS & email security scanner. One MCP endpoint, 57 checks, zero install. Cloudflare Workers.

README

BLACKVEIL DNS

Know where you stand.

Open-source DNS & email security scanner for Claude, Cursor, VS Code, and MCP clients across Streamable HTTP, stdio, and legacy HTTP+SSE.

GitHub starsnpm version npm downloads Tests Coverage BUSL-1.1 License MCP Cloudflare Workers TypeScript

DNS Security


Try it in 30 seconds

Claude Desktop (one-click install):

Download the Blackveil DNS extension and open it โ€” all 51 tools available instantly. Verify your download.

Claude Code (one command):

claude mcp add --transport http blackveil-dns https://dns-mcp.blackveilsecurity.com/mcp

Then ask: scan anthropic.com

Smithery (one command):

smithery mcp add MadaBurns/bv-mcp

Verify the endpoint is live:

curl https://dns-mcp.blackveilsecurity.com/health

No install. No API key. One URL for hosted HTTP:

Endpoint   https://dns-mcp.blackveilsecurity.com/mcp
Transport  Streamable HTTP ยท JSON-RPC 2.0
Auth       None required

Transport support:

  • Streamable HTTP: POST /mcp, GET /mcp, DELETE /mcp
  • Native stdio: blackveil-dns-mcp CLI from the blackveil-dns npm package
  • Legacy HTTP+SSE: GET /mcp/sse bootstrap stream plus POST /mcp/messages?sessionId=...

What you get

  • 80+ checks across 20 categories โ€” SPF, DMARC, DKIM, DNSSEC, SSL/TLS, MTA-STS, NS, CAA, MX, BIMI, TLS-RPT, subdomain takeover, lookalike domains, HTTP security headers, DANE, shadow domains, TXT hygiene, MX reputation, SRV, zone hygiene
  • Maturity staging โ€” Stage 0-4 classification (Unprotected to Hardened) with score-based capping to prevent inflated labels
  • Trust surface analysis โ€” detects shared SaaS platforms (Google, M365, SendGrid) and cross-references DMARC enforcement to determine real exposure
  • Guided remediation โ€” generate_fix_plan produces provider-aware prioritized actions; record generators output ready-to-publish records; validate_fix confirms whether a fix was applied successfully
  • Supply chain mapping โ€” map_supply_chain correlates DNS signals to build a full third-party dependency graph with trust levels and risk signals
  • Attack path simulation โ€” simulate_attack_paths enumerates specific paths (spoofing, takeover, hijack) with severity, steps, and mitigations
  • Compliance mapping โ€” map_compliance maps scan findings to NIST 800-177, PCI DSS 4.0, SOC 2, and CIS Controls
  • Self-tuning scoring โ€” adaptive weights adjust category importance based on patterns seen across scans via Durable Object telemetry
  • Per-tier analytics โ€” usage tracking by auth tier with operator API for tier summaries, key-level usage, and daily digests
  • Passive and read-only โ€” all checks use public Cloudflare DNS-over-HTTPS; no authorization required from the target

Tools

  51 MCP tools ยท 7 prompts ยท 6 resources

  Email Auth           Infrastructure        Brand & Threats       Meta
 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€         โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  check_spf            check_dnssec           check_bimi           scan_domain
  check_dmarc          check_ns               check_tlsrpt         batch_scan
  check_dkim           check_caa              check_lookalikes     compare_domains
  check_mta_sts        check_ssl              check_shadow_domains compare_baseline
  check_mx             check_http_security                         explain_finding
  check_mx_reputation  check_dane             Intelligence
  check_subdomailing   check_dane_https      โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€       Remediation
                       check_svcb_https       get_benchmark       โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  DNS Hygiene          check_srv              get_provider_        generate_fix_plan
 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€          check_zone_hygiene       insights           generate_spf_record
  check_txt_hygiene    check_resolver_        assess_spoofability  generate_dmarc_record
                         consistency          map_supply_chain     generate_dkim_config
                                              resolve_spf_chain    generate_mta_sts_policy
                                              discover_subdomains  generate_rollout_plan
                                              map_compliance       validate_fix
                                              simulate_attack_paths
                                              analyze_drift

  + check_subdomain_takeover (internal โ€” runs inside scan_domain)

Quality & Reliability

The server is continuously validated using a comprehensive chaos test suite that covers all 9 detected MCP client types:

  • Interactive clients: claude_code, cursor, vscode, claude_desktop, windsurf (auto-format: compact)
  • Non-interactive clients: mcp_remote, blackveil_dns_action, bv_claude_dns_proxy, unknown (auto-format: full)

The test suite ensures session stability, authentication precedence, and transport-specific edge cases across Streamable HTTP and Legacy SSE.

Run the chaos tests locally: python3 scripts/chaos/chaos-test-clients.py


Architecture

  MCP Client
      โ”‚
      โ”‚  POST /mcp (JSON-RPC 2.0)
      โ”‚
  โ”Œโ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚  Cloudflare Worker       โ”‚
  โ”‚                          โ”‚
  โ”‚  Hono โ”€โ–บ Origin check    โ”‚
  โ”‚       โ”€โ–บ Auth            โ”‚
  โ”‚       โ”€โ–บ Rate limiting   โ”‚
  โ”‚       โ”€โ–บ Session mgmt    โ”‚
  โ””โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
      โ”‚
  โ”Œโ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚  Tool Handlers           โ”‚
  โ”‚  16 checks in parallel   โ”‚
  โ””โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
      โ”‚
  โ”Œโ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚  Generic Scoring Engine  โ”‚
  โ”‚  Three-tier model        โ”‚
  โ””โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
      โ”‚
  โ”Œโ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚  Cloudflare DoH          โ”‚
  โ”‚  DNS-over-HTTPS          โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
  • Generic Scoring Engine: Runtime-agnostic, string-keyed three-tier scoring with configurable weights
  • WASM Policy Engine: High-performance permission and token checks via bv-wasm-core
  • Reliable Sessions: Hardened tombstone logic prevents race-condition revival of terminated sessions
  • Adaptive Scoring: Durable Object telemetry adjusts weights based on real-world distributions
  • Client Awareness: Automatic response formatting (compact vs full) based on client User-Agent

Client setup

The free tier requires no authentication. Authenticated requests bypass per-IP rate limits and follow your tier's daily quota. Three authentication methods are supported:

  • Header: Authorization: Bearer <KEY>
  • Query Param: ?api_key=<KEY> (for clients that can't send custom headers โ€” Smithery, Claude Code)
  • OAuth 2.1: authorization-code flow with PKCE, discovered via /.well-known/oauth-authorization-server โ€” used by the Claude mobile custom connector.

For full hosted setup examples, stdio usage, OAuth setup, and legacy fallback endpoints, see docs/client-setup.md.


Pricing

Free Pro Enterprise
Price $0 $39/mo Contact us
Scans/day 75 500 10,000+
Checks/day 200 5,000 Unlimited
Rate limit 50 req/min None None
API access Yes Yes Yes
MCP access Yes Yes Yes

Example prompts

These demonstrate core functionality โ€” paste any of them into Claude with the Blackveil DNS connector enabled:

Prompt What it does
Scan blackveilsecurity.com and tell me what needs fixing Full security audit โ€” score, grade, prioritized findings
Compare the email security of google.com and microsoft.com Side-by-side comparison of two domains' postures
Generate a DMARC record for example.com with reject policy Produces a ready-to-publish DNS record
What attack paths exist for example.com? Enumerates spoofing, takeover, and hijack vectors
Map example.com's compliance against NIST 800-177 Maps findings to compliance framework controls

Support


Responsible use

This tool is intended for authorized security assessments of domains you own or have explicit permission to test. Do not use it for unauthorized reconnaissance, harassment, or any activity that violates applicable laws. Findings from attack simulation, spoofability, and subdomain discovery tools should be used to improve your own security posture, not to exploit others.

If you discover a vulnerability in a third-party domain, please follow coordinated disclosure practices.


Built and maintained by BLACKVEIL โ€” NZ-owned cybersecurity consultancy.

Privacy Policy ยท License (BUSL-1.1 โ†’ MIT on 2030-03-17)

Release History

VersionChangesUrgencyDate
v3.103.1 ### Fixed - bv-ct-index: compaction cleanup no longer scans the whole runs catalog to check whether an R2 object is still referenced. Migration `0004_runs_r2_key.sql` adds an index on `runs.r2_key`; cleanup selection and the R2 deletion policy are unchanged (#1303). The migration is applied to the remote D1 database separately, before the sidecar deploy. ### Changed - Release tooling: `.claude/skills/bv-mcp-release/scripts/verify-release.sh <X.Y.Z>` replaces the hand-written post-deploy probHigh10/25/2026
v3.101.1 ### Changed - Dependencies: `@typesafe-ai/sdk` 0.6.0 โ†’ 0.7.0 (#1287); codeql-action pins bumped (#1288). No scoring, detection or tool-surface change.High10/23/2026
v3.100.1 Patch release: one wording fix in the OSINT report (#1270). `@blackveil/dns-checks` 1.60.2 and scoring model 1.40.0 are unchanged. ### Fixed - The `osint_investigation_report` detail sentence now says "at least N name(s)" for a floor-basis CT count. It printed "=N" in v3.100.0 because the output sanitiser replaces `>` with a space.High10/20/2026
v3.99.0 ### Changed - `discover_subdomains` and the SAN correlator report the owned CT index (`bv-ct-index`, answering behind the `certstream` binding) honestly. A response carrying `coverage.source === 'bv-ct-index'` maps the `certstream` source to the new `historyWindow: 'forward-from'`, with `indexStartedAt` and `freshThrough` on the per-source coverage record and in the caveat ("owned CT index, names observed since <date>"). A legacy upstream with no `coverage` keeps `historyWindow: 'unknown'`. DiHigh10/18/2026
v3.98.3 ### Fixed - Legacy SSE requests reject unavailable streams before dispatch and return completed responses if delivery fails after dispatch. - Tool result citations use the public scanner URL for domains outside the published report corpus (#1228). - Development dependencies resolve sharp 0.35.5 and patched Miniflare while preserving the nested Wrangler installs required by CF deployment tooling.High10/11/2026
dns-checks-v1.60.1Immutable scoring artifact. Consumers must verify the attached SHA-256 before installation.High10/9/2026
v3.98.1 Release-gate fix. v3.98.0 was tagged but never deployed: its own `check:release-integrity` blocked the pinned deploy. v3.98.1 ships everything listed under 3.98.0 plus this fix. dns-checks 1.60.0 (unchanged; `dns-checks-v1.60.0` stays on the 3.98.0 commit); scoring model 1.40.0 (unchanged). ### Fixed - `check:release-integrity` read HEAD's tag with `git describe --tags --exact-match`, which returns only one tag; on a release commit that also carries the `dns-checks-v<version>` tag required byHigh10/5/2026
dns-checks-v1.59.0Immutable scoring artifact. Consumers must verify the attached SHA-256 before installation.High10/4/2026
v3.94.0 ### Fixed - **The NXDOMAIN gate (#1128/#1152) now covers the composites and three more checks (SQ-268).** `assess_spoofability` and `simulate_attack_paths` ran SPF/DMARC/DKIM directly and reported a measured critical (spoofability about 100, feasible high/critical paths) for a name that does not exist. Both now probe the apex NS first, with the same predicate as `scan_domain` and the `check_*` tools: on a clean NXDOMAIN `assess_spoofability` returns its existing `evidenceInsufficient` shape (nHigh10/3/2026
v3.93.0 ### Fixed - **`sendFuzzingAlert` no longer drops an unparseable `ALERT_WEBHOOK_URL` silently (SQ-205).** It now logs one `webhook_url_invalid` warning (URL length and scheme only, never the value), matching `sendAlert`. - **A `SESSION_STORE` (KV) or Durable Object coordinator outage on a valid bearer token now returns a retryable 503 on `/mcp`, not a 401 (SQ-234).** The JWT branch of `resolveTier` swallowed `StrongStateUnavailableError` and fell through to an unauthenticated result,High9/29/2026
v3.90.0 ### Fixed - **An unrecognized cron trigger no longer runs the tenant sweep.** `routeCron` had no `'unknown'` route: any cron string that didn't match a named branch โ€” garbage, a typo in `wrangler.jsonc`, or a new trigger added before its dispatch branch โ€” fell into the same `'periodic'` fallback as the legitimate 15-minute sweep and silently ran `handleTenantCycleAlerts` plus the other periodic handlers, with no distinct log line (chaos SQ-193 H4). `routeCron` now maps only the actHigh9/24/2026
v3.87.0 ### Added - **`check_authoritative_dns_infra` and `check_root_server_set` now issue real DNS-over-TCP queries** against a target's own nameservers (authoritative lane) and a rotating 3-of-13 sample of the root servers (root-server-set lane), instead of returning reference data or a provisioning stub. Measured when contact is proven by an AA=1 answer: UDP/TCP-53 reachability, the authoritative AA flag and recursion exposure, SOA-serial consistency, direct DNSKEY/RRSIG presence, EDNS0/High9/23/2026
v3.86.1 ### Fixed - **`check_authoritative_dns_infra` published 100 / passed for root-server hostnames that nothing had probed.** The `bv-infra-probe` sidecar's raw DNS lane issues no query, yet for a root hostname it returned `matchesOfficialHints: true`, `ipv4Ipv6Parity: true` and `ptrRecords: [hostname]` โ€” its static hints table compared with itself, and the input echoed back as its own PTR โ€” beside `live_raw_dns_probe_not_configured`. Three capabilities counted as passed, so the #696 `meHigh9/21/2026
v3.85.0 ### Fixed - **`check_dnssec` no longer reports a DNSSEC defect it never measured.** When the primary resolver reports `AD=false` on a signed zone, the check asks Google DoH for a second opinion, because the AD flag is known to flap between resolver edge nodes. That confirmation helper returned a bare boolean, so "Google answered `AD=false`" and "Google never answered" (a non-2xx, a transport error, a timeout, or a body over the cap) were the same value. The caller cleared the findingHigh9/20/2026
v3.84.0 ### Added - **The DoH response code (RCODE) is now available to callers of the DNS record helpers.** A DoH endpoint answers HTTP 200 for SERVFAIL and REFUSED exactly as it does for NOERROR, carrying the difference only in the JSON `Status` field โ€” so `queryDnsRecords`' `string[]` projection rendered "the resolver could not answer" byte-identically to "this name publishes no such record". A `_dmarc` SERVFAIL therefore reached the DMARC classifier as a measured absence, zeroing a Core High9/20/2026
v3.82.0 Adds a seventh SGE control and the fail-soft TypeSafe/Jev client foundation, plus a round of attribution and brand-discovery correctness fixes. Scoring model stays at **1.34.0** and `@blackveil/dns-checks` at **1.49.0** (`PARITY_CORPUS_VERSION` in lockstep), so **bv-web-prod does not need to re-vendor for this release**. No weight, tier or grade band changed. ### Added - **A seventh SGE control: full sub-domain coverage** (#996, #1047). Extends `sge_quickscan`'s control set beyond the previHigh9/18/2026
dns-checks-v1.49.0Immutable scoring artifact. Consumers must verify the attached SHA-256 before installation.High9/15/2026
v3.79.0 Scoring model 1.29.0, `@blackveil/dns-checks` **1.44.0** (`PARITY_CORPUS_VERSION` in lockstep) โ€” bv-web-prod re-vendor required (it pins 1.36.0 today). No category weights or grade bands change, and no `SEVERITY_PENALTIES` entry moves. **Two changes in this block ARE score-bearing**, each with its own entry below: dns-checks **1.38.0** (#971, scoring model 1.26.0 โ€” DMARC partial enforcement) and dns-checks **1.43.0** (#989 โ€” the SPF `all`-term extraction reaching the finding path). One finding'High9/13/2026
v3.78.0 Scoring model 1.25.0, `@blackveil/dns-checks` 1.37.0 (parity corpus 1.37.0). No category weights, grade bands or severity penalties change. ### Changed - **Vendor-neutral names for the registrar product-gap tooling and the brand-audit registrar view.** The registrar product-gap tools (`map_registrar_products`, internal-only, and `prioritize_portfolio_leads`) and the registrar-complement brand-audit view (`view='registrar_complement'`, wire version **2**, report IDs prefixed `reg_rpt_`; previoHigh9/9/2026
v3.70.0 Evidence-fidelity release: every fix here stops a check from stating something it never measured. Supersedes 3.68.0/3.69.0/3.69.1, which were tagged but never deployed โ€” prod last served 3.67.0. ### Fixed - **check_ssl no longer reports "HTTPS and HSTS properly configured" for an apex it never measured.** An HTTPSโ†’HTTPS redirect skipped HSTS analysis entirely, and the resulting empty finding set printed as a clean pass. HSTS on the redirect hop is now analyzed directly; when the hop carries nHigh8/30/2026
v3.52.0 **No scoring-model change.** `SCORING_MODEL_VERSION` stays 1.10.0 and `@blackveil/dns-checks` stays 1.17.0 โ€” no weight, tier, grade band, severity penalty or profile rule moved. **Scores can move on non-apex hosts** because scan profile selection changed (see below). ### Fixed - `scan_domain`: non-apex hosts with no MX that inherit their zone (e.g. `www.example.com`) are now scored with the `web_only` profile instead of being penalized for absent SPF/DMARC/DKIM/MTA-STS the apex already governHigh8/17/2026
v3.42.0**Scoring model 1.6.0 โ†’ 1.7.0. `@blackveil/dns-checks` 1.10.0 โ†’ 1.11.0** (package check behaviour changed, so `PARITY_CORPUS_VERSION` moves in lockstep and the bv-web-prod tarball needs re-vendoring). ### Changed - **Mailjet is now recognised in the core SPF trust-surface catalog.** The worker layer learned Mailjet in 3.36.x (#566 / #570), but the parity-locked core catalog did not โ€” so every DIRECT consumer of the published package under-counted the trust surface, reporting e.g. "2 shared plaHigh8/4/2026
v3.34.0## [3.34.0] - 2026-07-24 Bugfix + scoring release: **non-apex scan targets no longer emit false "missing record" findings**. A subdomain that owns no zone of its own (normal DNS behaviour for undelegated labels โ€” e.g. a Mailgun/SendGrid sending host like `mg.ii.inc`) now inherits its zone apex's DNS posture instead of firing a spurious CRITICAL. Apex-domain scores are byte-identical. Scoring model bumped to **1.3.0**. ### Fixed - **NS false-positive on non-apex hostnames.** A scanned subdomaiHigh7/23/2026
v3.29.9 Patch release: **honest scanner identity + real robots.txt enforcement** across all target-facing checks. ### Fixed - **`@blackveil/dns-checks` (1.5.0): all target-facing checks (SSL, HTTP security, BIMI, MTA-STS, subdomain takeover) now send one consistent, real User-Agent (`BlackVeil-Security-Scanner/1.0`) and honor a target's `robots.txt` before fetching โ€” see `/bot-policy` on blackveilsecurity.com.** Previously the published bot-policy page described a scanner identity and opt-out mechaniHigh7/10/2026
v3.26.0 Minor release: the customer-facing letter grade on `scan_domain`, `batch_scan`, and `compare_domains` now uses the **NIST-aligned 6-band scale** (A+โ‰ฅ95, Aโ‰ฅ90, Bโ‰ฅ80, Cโ‰ฅ70, Dโ‰ฅ60, F<60), matching the BlackVeil web product so a domain shows ONE letter everywhere. **Scores are unchanged** โ€” only which letter a customer-facing scan surface displays. `SCORING_MODEL_VERSION` unchanged, tool count unchanged (79). `@blackveil/dns-checks` bumped to 1.4.0 (additive export). ### Changed - **Scan-output toHigh6/29/2026
v3.18.1 Maintenance release: dependency bumps only. No scoring/scan change; `SCORING_MODEL_VERSION` unchanged; tool count unchanged (75). ### Changed - **Dependencies:** bump `tldts` 7.4.2 โ†’ 7.4.3 (runtime โ€” public-suffix data refresh used by `src/lib/public-suffix.ts`). Dev tooling: Cloudflare group (`wrangler` 4.99 โ†’ 4.101, `miniflare`/`workerd` to `20260616`), `vitest` 4.1.8 โ†’ 4.1.9, `eslint` 10.4.1 โ†’ 10.5.0, `typescript-eslint` 8.61.0 โ†’ 8.61.1, `playwright` 1.60.0 โ†’ 1.61.0 (#406โ€“#411).High6/17/2026
v3.18.0 ### Security - **Internal:** add `agent-chat` caller principal (`X-BV-Caller: agent-chat`) with a server-side 13-tool read-only allowlist on `/internal/tools/{call,batch}`. Defense-in-depth for the bv-web agent feature โ€” non-allowlisted tools (mutating/offensive/identity) are rejected with `403 { "error": "agent_tool_not_allowed" }` even if the consuming gateway is bypassed. Alias-normalized before the check; audit-pinned (`agent-tool-allowlist.audit.test.ts`).High6/10/2026
v3.15.1 Patch release: six bug fixes from an adversarial bug-hunt sweep, each gated behind a failing-before / passing-after test (#376). No tools added or removed (still 79); `SCORING_MODEL_VERSION` stays `1.2.0`. One scoring change is RFC-correctness (first item) with narrow, documented impact. ### Fixed - **SPF `redirect=` now counts toward the RFC 7208 ยง4.6.4 10-lookup budget** (`packages/dns-checks` `analyzeSpfLookupBudget`). It was excluded (citing ยง6.1's modifier classification), undercounting High6/6/2026
v3.5.0 Scoring-contract recalibration aligning email-authentication and DNS-integrity severities with NIST SP 800-81r3, plus a new impersonation-aware DMARC escalation. Scores and finding severities shift for some domains โ€” see notes below. ### Changed - **DMARC and SPF severities recalibrated down to reflect standalone risk.** "No DMARC record found" is now **high** (was critical) and "DMARC policy set to none" is now **medium** (was high); SPF "Too many DNS lookups" (>10 lookups โ†’ `PermError`) is High5/30/2026
v2.27.0 ### Added - **Per-IP rate limit on `POST /oauth/register`** (#193) โ€” DCR was publicly reachable (`ENABLE_OAUTH=true`) with no per-IP gate. 10 registrations/min, 30/hr per `cf-connecting-ip`; returns HTTP 429 + `retry-after` header (OAuth 2.1 convention โ€” not MCP JSON-RPC `-32029`). KV fixed-window pattern mirrors `tokenRateExceeded` in `src/oauth/token.ts`. Legitimate first-time DCR usage is single-digit per IP per day, so 10/min absorbs retries without enabling enumeration. Resolves `TODO(phaHigh5/23/2026
v2.21.4 ### Security - Removed tracked internal tenant and commercial planning documents from the public repository. - Scrubbed customer-placeholder references from docs, comments, and chaos output. - Tightened gitleaks coverage for customer-name placeholders while allowing timestamp-shaped SQL seed values. ### Changed - Restricted the root npm package publish surface to `dist`, `LICENSE`, and `README.md` so npm releases do not include repo internals, tests, scripts, workflows, docs, or build caches. High5/16/2026
v2.13.0Release 2.13.0High5/12/2026
v2.10.2 ### Fixed - **OAuth consent endpoint critical bug** โ€” endpoint required authentication before rendering consent page, causing 100% registration failure (302 redirects to `/sign-in` instead of showing consent form). Fixed by switching from `requireUserWithTenants` (throwing) to optional `getAuthenticatedUser` (non-throwing), allowing public access with two-state UI rendering. Verified live: HTTP 200, all 9 MCP clients passing, chaos test 58/58 (100%). Expected registration success improvement: 0High5/6/2026
v2.10.1 ### Fixed - **CI: Security workflow** โ€” replaced `gitleaks/gitleaks-action@v2` with a self-installed pinned binary (`gitleaks 8.30.1`). The repo's Actions allowlist (`patterns_allowed: ["MadaBurns/*"]`) had been silently rejecting the third-party action since 2026-04-22, causing every Security run to `startup_failure` with 0 jobs created. Replicates the action's incremental scan behavior โ€” PRs scan `base..head`, pushes scan `before..sha` (fallback `HEAD~1..HEAD` for fresh branches). ### SecuriHigh4/25/2026
v2.9.2Release 2.9.2High4/21/2026
v2.9.1 ### Changed - **Dev dependencies**: bumped `wrangler` to `^4.83.0`. - **Repo tooling**: added `.intent/` workspace config and new harness scripts (`scripts/context-usage-test.py`, `scripts/conversation-sim.py`, `scripts/output-usage-test.py`) plus tranco scan-result snapshots under `scripts/`. Dev-only; no runtime or published-package impact. - **`.gitignore`**: removed duplicate `.mcp.json` entry.High4/19/2026
v2.9.0Release v2.9.0High4/19/2026
v2.8.1 ### Added - **Issue tracker triage automation** (`.github/workflows/triage-issues.yml`): on `issues: [opened, edited]`, matches six promotional-pattern regexes against title + body; applies `possibly-promotional` label and posts a single automated comment on initial open. Labels only โ€” never auto-closes โ€” so genuine feature requests aren't silently dropped. Workflow reads untrusted event payload fields via `env:` (no expression-injection risk). - **Issue template config** (`.github/ISSUE_TEMPLAHigh4/18/2026
v2.8.0 ### Added - **`DohOutcome` discriminated type** (`src/lib/dns-types.ts`, `src/lib/dns-transport.ts`): DoH transport now returns a discriminated `{ kind: 'ok'; response } | { kind: 'error'; reason: 'timeout' | 'network' | 'parse' | 'http' }` outcome. Callers can distinguish transport failures from "no records" results. Legacy `DohResponse | null` shape still available via `toNullable()`. - **Unconfirmed secondary-resolver sentinel** (`src/lib/dns-transport.ts`): `confirmWithSecondaryResolvers` rHigh4/18/2026
v2.7.1 ### Fixed - **`check_svcb_https` wire-format parsing** (`packages/dns-checks/src/checks/check-svcb-https.ts`): Cloudflare DoH JSON returns HTTPS (type 65) records in RFC 3597 wire format (`\# <length> <hex>`) rather than the human-readable presentation form. The previous regex-based parsers (`parseAlpn`, `hasEch`, `parsePriority`) only recognised presentation format, so every domain whose HTTPS record was resolved via Cloudflare DoH was incorrectly flagged with `HTTPS record missing ALPN parameMedium4/13/2026
v2.7.0 ### Added - **7 new intelligence tools** inspired by [mclose/dns-mcp](https://github.com/mclose/dns-mcp), adapted for Cloudflare Workers: - `check_rbl` โ€” Check MX server IP reputation against 8 DNS-based Real-time Blocklists (Spamhaus ZEN, SpamCop, UCEProtect L1/L2, Mailspike, Barracuda, PSBL, SORBS) - `check_dbl` โ€” Check domain reputation against Spamhaus DBL, URIBL, and SURBL with bitmask return code decoding - `cymru_asn` โ€” Map domain IPs to Autonomous System Numbers via Team Cymru DNSMedium4/13/2026
v2.6.7 ### Added - **Score Stability layers** โ€” three targeted mitigations for transient upstream variance that was causing repeat scans of the same domain to occasionally return different scores: - **DNSSEC AD flag confirmation probe** (`src/tools/check-dnssec.ts`): when the primary Cloudflare resolver reports "DNSSEC validation failing" (AD=false with DNSKEY+DS records present), a confirmation query is fired to Google DoH. If Google confirms AD=true, the check re-runs with the corrected flag. ResoMedium4/10/2026
v2.6.5Release 2.6.5Medium4/9/2026
v2.3.5 ### Fixed - **Lint error** โ€” removed unused `interactive` variable in tool handler introduced in v2.3.4. - **vite 8.0.4 โ†’ 8.0.5** โ€” patched 3 high-severity CVEs (path traversal, fs.deny bypass, WebSocket file read).Medium4/6/2026
v2.3.2 ### Added - **Expanded test coverage** โ€” new test files for tool handler dispatch, MCP execute flow, output sanitization, tool execution logging, and security audit assertions (+4,000 lines). - **Tranco benchmark scripts** โ€” `scripts/tranco-scan.mjs` (top-1000 scan) and `scripts/tranco-deep-scan.mjs` (29-tool deep analysis) for production performance benchmarking. ### Fixed - **Hardcoded API key removed** โ€” Tranco scripts now read `BV_API_KEY` from environment variable instead of embedding creMedium4/6/2026
v2.2.1Release 2.2.1Medium4/5/2026
v2.1.28Release 2.1.28Medium4/4/2026
v2.1.27Release 2.1.27Medium4/4/2026
v2.1.25Release 2.1.25Medium4/3/2026
v2.1.24Release 2.1.24Medium4/3/2026
v2.1.23Release 2.1.23Medium4/3/2026
v2.1.22Release 2.1.22Medium4/1/2026
v2.1.18Release v2.1.18Medium4/1/2026
v2.1.17 ### Changed - CLAUDE.md: documented `?api_key=` query param auth, SPF `~all` soft-fail downgrade rule, and Smithery listing/configSchema integration.Medium4/1/2026
v2.1.16 ### Changed - Documentation: updated Claude Code API key setup to use `?api_key=` query parameter as primary method; added Smithery connection instructions; updated test count.Medium4/1/2026
v2.1.15Release 2.1.15Medium4/1/2026
v2.1.14Release 2.1.14Medium4/1/2026
v2.1.13Release 2.1.13Medium3/31/2026
v2.1.12Release 2.1.12Medium3/31/2026
v2.1.11Release 2.1.11Medium3/31/2026
v2.1.10Release 2.1.10Medium3/30/2026
v2.1.0## What's New 8 new tools bringing the total to **41 MCP tools**. Major focus on intelligence, remediation, and compliance. ### New Intelligence Tools - **`resolve_spf_chain`** โ€” Recursive SPF include tree with DNS lookup counting against RFC 7208 10-lookup limit - **`discover_subdomains`** โ€” CT log subdomain discovery via `bv-certstream-worker` service binding (cached, no rate limiting) with crt.sh fallback - **`map_supply_chain`** โ€” Third-party dependency graph correlating SPF, NS, TXT verifMedium3/30/2026
v2.0.7## Security Fixes All findings from the v2.0.6 security audit have been resolved. ### HIGH - **Method name reflection** (`dispatch.ts`) โ€” User-controlled JSON-RPC method names were reflected verbatim in error responses, creating an injection vector for downstream clients. Now uses static `'Method not found'` message. - **ReDoS in post-processing** (`post-processing.ts`) โ€” The regex `/(no\s+.+\s+record|...)/ ` in `isMissingRecordFinding()` contained a catastrophic backtracking pattern that couMedium3/26/2026
v2.0.6## Highlights - **Session hardening** โ€” Memory leak fix, ID format validation, re-initialize invalidation, legacy SSE stream cap - **Cache improvements** โ€” `force_refresh` + `cacheTtlSeconds` propagate to per-check caches, deferred scan cache writes - **Structured logging** โ€” All KV/DO fallback paths use `logError()` instead of `console.warn()`, visible to alerting pipeline - **Scoring accuracy** โ€” Maturity stage score-capping, DANE finding deduplication, BIMI non-mail domain text - **Security Medium3/26/2026
v1.4.3## Highlights This release adds **intelligence features**, **guided remediation**, **interaction scoring**, and **context-optimized schemas** โ€” building on the v1.2.0 transport foundation. ### Intelligence Layer (Phase 2-3) - **`get_benchmark`** โ€” percentile rankings and 7-day trend analysis from anonymized scan telemetry - **`get_provider_insights`** โ€” provider cohort score comparisons - **`assess_spoofability`** โ€” composite 0-100 email spoofability score from SPF trust surface, DMARC enforceLow3/21/2026
v1.2.0## What's New **Universal MCP transport support** โ€” three first-party transports, all driven by a single shared executor. ### Transport Matrix | Transport | Endpoint | Use Case | |-----------|----------|----------| | **Streamable HTTP** | `POST /mcp` | Modern MCP clients (VS Code, Cursor, Claude Code) | | **Native stdio** | `blackveil-dns-mcp` CLI | Local-only clients (Claude Desktop) | | **Legacy HTTP+SSE** | `GET /mcp/sse` + `POST /mcp/messages` | Older MCP clients | ### Highlights - **ShLow3/13/2026
v1.0.0## Blackveil DNS v1.0.0 Open-source DNS & email security scanner running on Cloudflare Workers. ### Features - **11 MCP tools**: SPF, DMARC, DKIM, DNSSEC, SSL/TLS, MTA-STS, NS, CAA, MX checks + full domain scan - **Subdomain takeover detection** with confidence-based verification - **0-100 security scoring** with letter grades (A+ through F) - **Plain-English explanations** using everyday analogies โ€” guest lists, wax seals, padlocks - **55+ detail-aware explanations** that match specific findiLow3/8/2026

Dependencies & License Audit

Loading dependencies...

Similar Packages

mcp-ts-coreAgent-native TypeScript framework for building MCP servers. Build tools, not infrastructure.v0.13.16
ckan-mcp-serverMCP server for querying CKAN open data portals (package search, DataStore SQL, organizations, groups, tags)v0.4.131
deep-code-reasoning-mcpA Model Context Protocol (MCP) server that provides advanced code analysis and reasoning capabilities powered by Google's Gemini AImain@2026-10-21
photonDefine intent once. Photon turns a single TypeScript file into CLI tools, MCP servers, and web interfaces.v1.38.1
toolsdk-mcp-registryMCPSDK.dev(ToolSDK.ai)'s Awesome MCP Servers and Packages Registry and Database with Structured JSON configurations. Supports OAuth2.1, DCR...main@2026-10-16

More in MCP Servers

litellmPython SDK, Proxy Server (AI Gateway) to call 100+ LLM APIs in OpenAI (or native) format, with cost tracking, guardrails, loadbalancing and logging. [Bedrock, Azure, OpenAI, VertexAI, Cohere, Anthropi
claude-plugins-officialOfficial, Anthropic-managed directory of high quality Claude Code Plugins.
casdoorAn open-source Agent-first Identity and Access Management (IAM) /LLM MCP & agent gateway and auth server with web UI supporting OpenClaw, MCP, OAuth, OIDC, SAML, CAS, LDAP, SCIM, WebAuthn, TOTP, MFA,
hyperframesWrite HTML. Render video. Built for agents.