Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Domain Security

NPM · DOMAIN-SECURITY-MCP-SERVER · SCANNED SEP 24

Audit a domain's email and web security: SPF, DKIM, DMARC, MTA-STS, DNSSEC, TLS, WHOIS. No API keys.

+3 this week 85 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 24 of 78 dependencies flagged as unhealthy (1 deprecated). View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to OrtaMarco/domain-security-mcp-server). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 9 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability70
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 4346 tokens (~228/item across 19 items; 19 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management43
  • Stability observed for 13 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 19 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 20 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the Domain Security MCP server?

Domain Security runs locally as an npm package, launched with npx -y domain-security-mcp-server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · domain-security-mcp-server

# add to Claude Code
claude mcp add ortamarco-domain-security-mcp-server -- npx -y domain-security-mcp-server
// .cursor/mcp.json
{
  "mcpServers": {
    "ortamarco-domain-security-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "domain-security-mcp-server"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "ortamarco-domain-security-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "domain-security-mcp-server"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add ortamarco-domain-security-mcp-server -- npx -y domain-security-mcp-server
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ortamarco-domain-security-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "domain-security-mcp-server"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ortamarco-domain-security-mcp-server --command npx --arg -y --arg domain-security-mcp-server
# ~/.hermes/config.yaml
mcp_servers:
  ortamarco-domain-security-mcp-server:
    command: "npx"
    args: ["-y", "domain-security-mcp-server"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "ortamarco-domain-security-mcp-server": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "domain-security-mcp-server"
      ]
    }
  }
}
# add to Vellum
assistant mcp add ortamarco-domain-security-mcp-server -t stdio -c npx -a -y domain-security-mcp-server
// mcp.json
{
  "mcpServers": {
    "ortamarco-domain-security-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "domain-security-mcp-server"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 22 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

  • 18 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

  • 16 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

  • 15 Sept 26 +15
    • Malware scan: unverified → pass security
  • 14 Sept 26 0
    • Malware scan: pass → unverified security
    • CVE-2026-69192 no longer affects this package security
    • CVE-2026-42338 no longer affects this package security
    • Known CVEs: fail → pass security
    • Provenance: fail → pass security
    • The attested source repository moved: OrtaMarco/domain-security-mcp-server security
    • Stability: unverified → 0.10 functional
    • Package version: 1.2.0 → 1.2.1 functional
  • 13 Sept 26 +15
    • Malware scan: unverified → pass security
  • 11 Sept 26 51

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 24 Sept 2026 · Analysed npm/domain-security-mcp-server@1.2.1

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo OrtaMarco/domain-security-mcp-server
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/OrtaMarco/domain-security-mcp-server/.github/workflows/publish.yml@refs/tags/v1.2.1
Rekor log index 2825099753
Predicate type https://slsa.dev/provenance/v1
Subject digest sha512:41a4f5eaa41a28955808f1f6a666696a3dc604926229fe42a916dec6e6fa33a11718197570752c7cf0de127f07aad537504672d0b5d7db140cbf25ceb

Background: How many MCP packages publish verified provenance →

Dependencies 78 packages
Packages resolved 78
Deprecated 1
Stale 23
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 19 exposed · ~4,073 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
analyze_email_headers ~194

Parse raw email headers and report the SPF/DKIM/DMARC verdicts (from Authentication-Results), key fields (From, Subject, Date, Message-ID, Return-Path) and the Received hop chain with per-hop delays and total transit time. Args: - headers (string): the raw email headers. - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: { auth{spf,dkim,dmarc}, fields{}, hops[{index,from,by,date,delaySec}], totalSec }. Example: paste the headers from "Show original" in Gmail to trace a message's path and authentication.

NameTypeReqDescription
headersstringyesThe raw email headers to analyze (RFC 5322).
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
NameTypeReqDescription
authobjectyes
fieldsobjectyes
hopsarrayyes
totalSecnumber|nullyes

No examples provided.

bimi_check ~168

Check a domain's BIMI record (default._bimi.<domain> TXT), which points to the brand logo (and optional VMC) displayed next to authenticated mail. BIMI requires an enforced DMARC policy to take effect. Args: - domain (string): the domain to check. - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: { found, record, findings[] }. Example: "Does cnn.com have BIMI set up?" -> bimi_check(domain="cnn.com").

NameTypeReqDescription
domainstringyesDomain to check, e.g. 'example.com'.
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
NameTypeReqDescription
domainstringyes
findingsarrayyes
foundbooleanyes
recordstring

No examples provided.

blacklist_check ~232

Check whether an IPv4 address (or a domain's A records) appears on email DNS blocklists (DNSBLs). Only open-access lists are queried (SpamCop, UCEPROTECT-1, DroneBL, s5h); Spamhaus and Barracuda refuse public-resolver queries and are excluded. Args: - query (string): an IPv4 address or a domain. - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: { ips[], listedCount, checked, results[{ip, hits[{list, listed, reason, error}]}], note }. A list that did not answer carries an `error` and is not counted as clean. Example: "Is 203.0.113.5 blacklisted?" -> blacklist_check(query="203.0.113.5").

NameTypeReqDescription
querystringyesAn IPv4 address or a domain to check against DNSBLs.
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
NameTypeReqDescription
checkednumberyes
ipsarrayyes
listedCountnumberyes
notestringyes
querystringyes
resultsarrayyes

No examples provided.

caa_check ~161

Check a domain's CAA (Certification Authority Authorization) records — which CAs are allowed to issue TLS certificates for it. Absence means any CA may issue. Args: - domain (string): the domain to check. - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: { found, issue[], issuewild[], iodef[] }. Example: "Which CAs can issue certs for google.com?" -> caa_check(domain="google.com").

NameTypeReqDescription
domainstringyesDomain to query, e.g. 'example.com'.
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
NameTypeReqDescription
domainstringyes
foundbooleanyes
iodefarrayyes
issuearrayyes
issuewildarrayyes

No examples provided.

dkim_check ~280

Look up DKIM public keys at <selector>._domainkey.<domain>. Because DKIM selectors are arbitrary and undiscoverable, you should pass the selector(s) your mail provider uses for a definitive answer; otherwise a curated list of common selectors is probed and a miss is inconclusive. Args: - domain (string): the domain to check. - selectors (string[], optional): DKIM selectors to probe. - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: { any_found, probed_selectors, selectors[{selector, found, record, key_type}], findings[] }. Examples: - "Does acme.com publish a DKIM key for selector 'google'?" -> dkim_check(domain="acme.com", selectors=["google"]) - "Find any DKIM keys for acme.com" -> dkim_check(domain="acme.com")

NameTypeReqDescription
domainstringyesDomain to check, e.g. 'example.com'.
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
selectorsarrayDKIM selectors to check (e.g. ['google']). If omitted, common provider selectors are probed — absence is then inconclusive.
NameTypeReqDescription
any_foundbooleanyes
domainstringyes
findingsarrayyes
probed_selectorsnumberyes
selectorsarrayyes

No examples provided.

dmarc_check ~182

Fetch and parse a domain's DMARC record (_dmarc.<domain>). Reports the policy (p=), subdomain policy (sp=), reporting addresses (rua/ruf), pct and alignment (aspf/adkim), and warns on monitor-only or partial deployments. Args: - domain (string): the domain to check. - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: { found, record, policy, tags{}, findings[] }. Example: "What is paypal.com's DMARC policy?" -> dmarc_check(domain="paypal.com").

NameTypeReqDescription
domainstringyesDomain to check, e.g. 'example.com'.
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
NameTypeReqDescription
domainstringyes
findingsarrayyes
foundbooleanyes
policystring
recordstring
tagsobjectyes

No examples provided.

dns_lookup ~221

Resolve all common DNS record types (A, AAAA, CNAME, MX, NS, TXT, SOA) for a domain in one call, using public resolvers (Cloudflare/Google/Quad9). Args: - domain (string): the domain to query, e.g. "example.com". - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: a map of record type -> list of records. Each record has { type, host, value, priority? }. Examples: - "What are the MX records for stripe.com?" -> dns_lookup(domain="stripe.com") - Use ssl_certificate for TLS details, whois_lookup for registration data. Errors: returns an error if the domain is malformed or has no resolvable records.

NameTypeReqDescription
domainstringyesDomain to query, e.g. 'example.com'.
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
NameTypeReqDescription
domainstringyes
recordsobjectyes

No examples provided.

dns_propagation ~202

Compare a domain's DNS records across multiple public resolvers worldwide (Cloudflare, Google, Quad9, OpenDNS, AdGuard) to see whether a change has propagated. Args: - domain (string): the domain to check. - type ('A'|'AAAA'|'CNAME'|'MX'|'NS'|'TXT'): record type (default 'A'). - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: { type, consistent, resolvers[{name, server, values[], error}] }. Example: "Has the A record for example.com propagated?" -> dns_propagation(domain="example.com").

NameTypeReqDescription
domainstringyesDomain to check.
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
typestringRecord type (default 'A').
NameTypeReqDescription
consistentbooleanyes
domainstringyes
resolversarrayyes
typestringyes

No examples provided.

dnssec_check ~170

Check whether a domain is protected by DNSSEC. Queries DS and DNSKEY records over DNS-over-HTTPS and reads the resolver's Authenticated Data (AD) flag to confirm the chain of trust validates. Args: - domain (string): the domain to check. - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: { enabled, validated, ds_records, dnskey_records, findings[] }. Example: "Is cloudflare.com DNSSEC-signed?" -> dnssec_check(domain="cloudflare.com").

NameTypeReqDescription
domainstringyesDomain to check, e.g. 'example.com'.
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
NameTypeReqDescription
dnskey_recordsnumberyes
domainstringyes
ds_recordsnumberyes
enabledbooleanyes
findingsarrayyes
validatedbooleanyes

No examples provided.

email_auth_audit ~441

Headline tool. Audits a domain's email-authentication posture in one call — SPF, DKIM, DMARC and MX — then returns a 0–100 score, an A–F grade and a prioritised list of fixes. Use this first; reach for the per-record tools (spf_check, dmarc_check, dkim_check) only when you need the full detail of one mechanism. Args: - domain (string): the domain to audit. - dkim_selectors (string[], optional): DKIM selectors to probe. If omitted, common provider selectors are tried (absence is then inconclusive). - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns (JSON): { "domain": string, "grade": "A".."F", "score": number, // 0-100 "has_mx": boolean, "mx_hosts": string[], "spf": { found, record, all_qualifier, lookup_count, exceeds_lookup_limit, findings[] }, "dmarc":{ found, policy, tags, findings[] }, "dkim": { any_found, selectors[], findings[] }, "top_recommendations": string[] } Examples: - "Is example.com protected against email spoofing?" -> email_auth_audit(domain="example.com") - "Audit acme.com, our DKIM selector is 'k1'" -> email_auth_audit(domain="acme.com", dkim_selectors=["k1"]) Errors: returns an error only if the domain is malformed; missing records are reported as findings, not errors.

NameTypeReqDescription
dkim_selectorsarrayOptional DKIM selectors to check (e.g. ['google','selector1']). If omitted, a list of common provider selectors is probed.
domainstringyesDomain to audit, e.g. 'example.com'.
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
NameTypeReqDescription
dkimobjectyes
dmarcobjectyes
domainstringyes
gradestringyes
has_mxbooleanyes
mx_hostsarrayyes
scorenumberyes
spfobjectyes
top_recommendationsarrayyes

No examples provided.

http_security_headers ~239

Fetch a URL and grade its HTTP security headers (HSTS, Content-Security-Policy, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy, COOP). Returns a 0–100 score, an A–F grade, and per-header notes. Args: - url (string): URL or host to check (scheme defaults to https://). - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: { url, final_url, status, grade, score, checks[{header, present, value, note}], missing[] }. Example: "Grade the security headers on https://news.ycombinator.com" -> http_security_headers(url="https://news.ycombinator.com"). Errors: returns an error if the URL is invalid or the host is unreachable.

NameTypeReqDescription
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
urlstringyesURL or host to check, e.g. 'https://example.com'.
NameTypeReqDescription
checksarrayyes
final_urlstringyes
gradestringyes
missingarrayyes
scorenumberyes
statusnumberyes
urlstringyes

No examples provided.

ip_geolocation ~248

Geolocate an IP address (country, region, city, coordinates, time zone) using the offline DB-IP Lite database, plus its reverse-DNS hostname. No external API. Args: - ip (string): IPv4 or IPv6 address. - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: { ip, country_iso, country_name, region, city, latitude, longitude, time_zone, hostname }. Example: "Where is 151.101.1.69 located?" -> ip_geolocation(ip="151.101.1.69"). Note: geolocation is approximate (city-level at best) and offline data may lag reality. The time zone is estimated from the coordinates. Data: IP Geolocation by DB-IP (https://db-ip.com), licensed CC BY 4.0 — credit it when showing these results.

NameTypeReqDescription
ipstringyesIPv4 or IPv6 address, e.g. '1.1.1.1'.
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
NameTypeReqDescription
citystring
country_isostring
country_namestring
hostnamestring
ipstringyes
latitudenumber
longitudenumber
regionstring
time_zonestring

No examples provided.

mta_sts_check ~204

Check a domain's MTA-STS deployment: the _mta-sts TXT record AND the policy file at https://mta-sts.<domain>/.well-known/mta-sts.txt. Reports the enforcement mode (enforce/testing/none) and the listed MX hosts. MTA-STS forces TLS for inbound SMTP and blocks downgrade attacks. Args: - domain (string): the domain to check. - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: { dns_record_found, policy_found, mode, policy{}, findings[] }. Example: "Does gmail.com enforce MTA-STS?" -> mta_sts_check(domain="gmail.com").

NameTypeReqDescription
domainstringyesDomain to check, e.g. 'example.com'.
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
NameTypeReqDescription
dns_record_foundbooleanyes
domainstringyes
findingsarrayyes
modestring
policyobject
policy_foundbooleanyes

No examples provided.

mx_lookup ~142

Look up a domain's mail servers (MX records) with priority and the IPs they resolve to. Args: - domain (string): the domain to query. - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: array of { exchange, priority, ips[] }. Example: "What are the mail servers for github.com?" -> mx_lookup(domain="github.com").

NameTypeReqDescription
domainstringyesDomain to query, e.g. 'example.com'.
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
NameTypeReqDescription
domainstringyes
recordsarrayyes

No examples provided.

reverse_dns ~179

Resolve the PTR (reverse DNS) records for an IP address — the hostname(s) the IP maps back to. Args: - ip (string): IPv4 or IPv6 address. - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: { ip, hostnames: string[] }. Example: "What hostname does 8.8.8.8 reverse to?" -> reverse_dns(ip="8.8.8.8"). Errors: returns an error if the IP is invalid or has no PTR record.

NameTypeReqDescription
ipstringyesIPv4 or IPv6 address, e.g. '1.1.1.1'.
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
NameTypeReqDescription
hostnamesarrayyes
ipstringyes

No examples provided.

spf_check ~192

Fetch and analyse a domain's SPF record. Detects: missing/multiple records, the trailing 'all' qualifier (+all/?all/~all/-all), and counts DNS-querying terms recursively against the RFC 7208 limit of 10. Args: - domain (string): the domain to check. - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: { found, record, multiple_records, all_qualifier, lookup_count, exceeds_lookup_limit, findings[] }. Example: "Does sendgrid.net's SPF exceed the 10-lookup limit?" -> spf_check(domain="sendgrid.net").

NameTypeReqDescription
domainstringyesDomain to check, e.g. 'example.com'.
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
NameTypeReqDescription
all_qualifierstring
domainstringyes
exceeds_lookup_limitbooleanyes
findingsarrayyes
foundbooleanyes
lookup_countnumberyes
multiple_recordsbooleanyes
recordstring

No examples provided.

ssl_certificate ~242

Inspect the TLS certificate served by a host: issuer, subject, validity window, days-until-expiry, SANs, serial and SHA-256 fingerprint. Flags expired or soon-to-expire certificates. Args: - domain (string): host to connect to. - port (number): TLS port (default 443). - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: certificate fields plus { days_until_expiry, expired, expires_soon, trusted, hostname_matches, authorization_error }. An untrusted certificate (self-signed, unknown root, wrong host) is still inspected and reported, never silently passed. Example: "When does github.com's certificate expire?" -> ssl_certificate(domain="github.com"). Errors: returns an error if the host is unreachable or serves no certificate.

NameTypeReqDescription
domainstringyesDomain (or host) to inspect, e.g. 'example.com'.
portintegerTLS port (default 443).
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
NameTypeReqDescription
authorization_errorstring
days_until_expirynumber
expiredbooleanyes
expires_soonbooleanyes
fingerprint_sha256string
hoststringyes
hostname_matchesbooleanyes
issuer_common_namestring
issuer_organizationstring
portnumberyes
serial_numberstring
subject_alt_namesarrayyes
subject_common_namestring
trustedbooleanyes
valid_fromstring
valid_tostring

No examples provided.

tls_rpt_check ~155

Check a domain's TLS-RPT record (_smtp._tls.<domain> TXT). TLS-RPT lets you receive reports about TLS delivery failures to your domain. Args: - domain (string): the domain to check. - response_format ('markdown' | 'json'): output format (default 'markdown'). Returns: { found, record, findings[] }. Example: "Does microsoft.com publish TLS-RPT?" -> tls_rpt_check(domain="microsoft.com").

NameTypeReqDescription
domainstringyesDomain to check, e.g. 'example.com'.
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
NameTypeReqDescription
domainstringyes
findingsarrayyes
foundbooleanyes
recordstring

No examples provided.

whois_lookup ~221

Look up domain registration data over the raw WHOIS protocol (port 43): registrar, creation/update/expiry dates, name servers and domain status. Resolves the correct WHOIS server via IANA and follows registrar referrals. No API key. Args: - domain (string): the domain to look up. - response_format ('markdown' | 'json'): output format (default 'markdown'). JSON includes the raw WHOIS text. Returns: { domain, registrar, created, updated, expires, name_servers[], status[], whois_server }. Example: "Who is the registrar for openai.com and when does it expire?" -> whois_lookup(domain="openai.com"). Errors: returns an error if no WHOIS server answers (some ccTLDs restrict or rate-limit WHOIS).

NameTypeReqDescription
domainstringyesDomain to look up, e.g. 'example.com'.
response_formatstringOutput format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload.
NameTypeReqDescription
createdstring
domainstringyes
expiresstring
name_serversarrayyes
rawstringyes
registrant_orgstring
registrarstring
statusarrayyes
updatedstring
whois_serverstring

No examples provided.

Common questions

What is the Domain Security MCP server?

Domain Security is an MCP server listed in the public MCP registry as io.github.OrtaMarco/domain-security-mcp-server. Audit a domain's email and web security: SPF, DKIM, DMARC, MTA-STS, DNSSEC, TLS, WHOIS. No API keys. This page covers its npm package (domain-security-mcp-server).

Is the Domain Security MCP server safe to use?

Domain Security scores 85 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 24 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Domain Security MCP server expose?

Domain Security exposes 19 tools: email_auth_audit, spf_check, dmarc_check, dkim_check, mta_sts_check, and 14 more. Their descriptions and schemas cost roughly 4,073 tokens of context every time the server is loaded.

Is the Domain Security MCP server still maintained?

Domain Security is still listed as active in the MCP registry. We last reached this channel on 24 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Domain Security MCP server under?

Domain Security declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.