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.
Available components
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
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
claude mcp add ortamarco-domain-security-mcp-server -- npx -y domain-security-mcp-server
{
"mcpServers": {
"ortamarco-domain-security-mcp-server": {
"command": "npx",
"args": [
"-y",
"domain-security-mcp-server"
]
}
}
} {
"servers": {
"ortamarco-domain-security-mcp-server": {
"command": "npx",
"args": [
"-y",
"domain-security-mcp-server"
]
}
}
} codex mcp add ortamarco-domain-security-mcp-server -- npx -y domain-security-mcp-server
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"ortamarco-domain-security-mcp-server": {
"type": "local",
"command": [
"npx",
"-y",
"domain-security-mcp-server"
],
"enabled": true
}
}
} openclaw mcp add ortamarco-domain-security-mcp-server --command npx --arg -y --arg domain-security-mcp-server
mcp_servers:
ortamarco-domain-security-mcp-server:
command: "npx"
args: ["-y", "domain-security-mcp-server"] {
"McpServers": {
"ortamarco-domain-security-mcp-server": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"domain-security-mcp-server"
]
}
}
} assistant mcp add ortamarco-domain-security-mcp-server -t stdio -c npx -a -y domain-security-mcp-server
{
"mcpServers": {
"ortamarco-domain-security-mcp-server": {
"command": "npx",
"args": [
"-y",
"domain-security-mcp-server"
]
}
}
} 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.
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 →
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 →
analyze_email_headers Email Header Analyzer ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| headers | string | yes | The raw email headers to analyze (RFC 5322). |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| Name | Type | Req | Description |
|---|---|---|---|
| auth | object | yes | – |
| fields | object | yes | – |
| hops | array | yes | – |
| totalSec | number|null | yes | – |
No examples provided.
bimi_check 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").
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Domain to check, e.g. 'example.com'. |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | – |
| findings | array | yes | – |
| found | boolean | yes | – |
| record | string | – | – |
No examples provided.
blacklist_check DNSBL 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").
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | An IPv4 address or a domain to check against DNSBLs. |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| Name | Type | Req | Description |
|---|---|---|---|
| checked | number | yes | – |
| ips | array | yes | – |
| listedCount | number | yes | – |
| note | string | yes | – |
| query | string | yes | – |
| results | array | yes | – |
No examples provided.
caa_check CAA Record 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").
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Domain to query, e.g. 'example.com'. |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | – |
| found | boolean | yes | – |
| iodef | array | yes | – |
| issue | array | yes | – |
| issuewild | array | yes | – |
No examples provided.
dkim_check DKIM Record 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")
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Domain to check, e.g. 'example.com'. |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| selectors | array | – | DKIM selectors to check (e.g. ['google']). If omitted, common provider selectors are probed — absence is then inconclusive. |
| Name | Type | Req | Description |
|---|---|---|---|
| any_found | boolean | yes | – |
| domain | string | yes | – |
| findings | array | yes | – |
| probed_selectors | number | yes | – |
| selectors | array | yes | – |
No examples provided.
dmarc_check DMARC Record 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").
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Domain to check, e.g. 'example.com'. |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | – |
| findings | array | yes | – |
| found | boolean | yes | – |
| policy | string | – | – |
| record | string | – | – |
| tags | object | yes | – |
No examples provided.
dns_lookup 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.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Domain to query, e.g. 'example.com'. |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | – |
| records | object | yes | – |
No examples provided.
dns_propagation DNS Propagation Check ~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").
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Domain to check. |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| type | string | – | Record type (default 'A'). |
| Name | Type | Req | Description |
|---|---|---|---|
| consistent | boolean | yes | – |
| domain | string | yes | – |
| resolvers | array | yes | – |
| type | string | yes | – |
No examples provided.
dnssec_check 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").
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Domain to check, e.g. 'example.com'. |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| Name | Type | Req | Description |
|---|---|---|---|
| dnskey_records | number | yes | – |
| domain | string | yes | – |
| ds_records | number | yes | – |
| enabled | boolean | yes | – |
| findings | array | yes | – |
| validated | boolean | yes | – |
No examples provided.
email_auth_audit Email Authentication 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.
| Name | Type | Req | Description |
|---|---|---|---|
| dkim_selectors | array | – | Optional DKIM selectors to check (e.g. ['google','selector1']). If omitted, a list of common provider selectors is probed. |
| domain | string | yes | Domain to audit, e.g. 'example.com'. |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| Name | Type | Req | Description |
|---|---|---|---|
| dkim | object | yes | – |
| dmarc | object | yes | – |
| domain | string | yes | – |
| grade | string | yes | – |
| has_mx | boolean | yes | – |
| mx_hosts | array | yes | – |
| score | number | yes | – |
| spf | object | yes | – |
| top_recommendations | array | yes | – |
No examples provided.
http_security_headers 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.
| Name | Type | Req | Description |
|---|---|---|---|
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| url | string | yes | URL or host to check, e.g. 'https://example.com'. |
| Name | Type | Req | Description |
|---|---|---|---|
| checks | array | yes | – |
| final_url | string | yes | – |
| grade | string | yes | – |
| missing | array | yes | – |
| score | number | yes | – |
| status | number | yes | – |
| url | string | yes | – |
No examples provided.
ip_geolocation 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.
| Name | Type | Req | Description |
|---|---|---|---|
| ip | string | yes | IPv4 or IPv6 address, e.g. '1.1.1.1'. |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| Name | Type | Req | Description |
|---|---|---|---|
| city | string | – | – |
| country_iso | string | – | – |
| country_name | string | – | – |
| hostname | string | – | – |
| ip | string | yes | – |
| latitude | number | – | – |
| longitude | number | – | – |
| region | string | – | – |
| time_zone | string | – | – |
No examples provided.
mta_sts_check 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").
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Domain to check, e.g. 'example.com'. |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| Name | Type | Req | Description |
|---|---|---|---|
| dns_record_found | boolean | yes | – |
| domain | string | yes | – |
| findings | array | yes | – |
| mode | string | – | – |
| policy | object | – | – |
| policy_found | boolean | yes | – |
No examples provided.
mx_lookup 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").
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Domain to query, e.g. 'example.com'. |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | – |
| records | array | yes | – |
No examples provided.
reverse_dns Reverse DNS (PTR) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| ip | string | yes | IPv4 or IPv6 address, e.g. '1.1.1.1'. |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| Name | Type | Req | Description |
|---|---|---|---|
| hostnames | array | yes | – |
| ip | string | yes | – |
No examples provided.
spf_check SPF Record 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").
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Domain to check, e.g. 'example.com'. |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| Name | Type | Req | Description |
|---|---|---|---|
| all_qualifier | string | – | – |
| domain | string | yes | – |
| exceeds_lookup_limit | boolean | yes | – |
| findings | array | yes | – |
| found | boolean | yes | – |
| lookup_count | number | yes | – |
| multiple_records | boolean | yes | – |
| record | string | – | – |
No examples provided.
ssl_certificate SSL/TLS Certificate Inspector ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Domain (or host) to inspect, e.g. 'example.com'. |
| port | integer | – | TLS port (default 443). |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| Name | Type | Req | Description |
|---|---|---|---|
| authorization_error | string | – | – |
| days_until_expiry | number | – | – |
| expired | boolean | yes | – |
| expires_soon | boolean | yes | – |
| fingerprint_sha256 | string | – | – |
| host | string | yes | – |
| hostname_matches | boolean | yes | – |
| issuer_common_name | string | – | – |
| issuer_organization | string | – | – |
| port | number | yes | – |
| serial_number | string | – | – |
| subject_alt_names | array | yes | – |
| subject_common_name | string | – | – |
| trusted | boolean | yes | – |
| valid_from | string | – | – |
| valid_to | string | – | – |
No examples provided.
tls_rpt_check 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").
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Domain to check, e.g. 'example.com'. |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | – |
| findings | array | yes | – |
| found | boolean | yes | – |
| record | string | – | – |
No examples provided.
whois_lookup 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).
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Domain to look up, e.g. 'example.com'. |
| response_format | string | – | Output format: 'markdown' for a human-readable summary (default) or 'json' for the full structured payload. |
| Name | Type | Req | Description |
|---|---|---|---|
| created | string | – | – |
| domain | string | yes | – |
| expires | string | – | – |
| name_servers | array | yes | – |
| raw | string | yes | – |
| registrant_org | string | – | – |
| registrar | string | – | – |
| status | array | yes | – |
| updated | string | – | – |
| whois_server | string | – | – |
No examples provided.
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.