ShieldDNS MCP server
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ShieldDNS MCP serveris paypal-secure-login.com safe to open?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ShieldDNS MCP server
Let AI agents check a link before opening it.
shielddns-mcp is a small, open-source Model Context Protocol server that gives AI assistants and agents (Claude, Cursor, any MCP client) safe DNS tools backed by ShieldDNS, a free European public resolver with malware / phishing / tracking protection, DNSSEC validation and a zero-log policy.
Italiano più sotto.
Tools
Tool | What it does |
| Is this domain or link safe to open? Returns a verdict ( |
| Resolve a name through ShieldDNS (DNS-over-HTTPS): records, rcode, DNSSEC validation, whether ShieldDNS blocked it, Extended DNS Errors (RFC 8914). Types: A, AAAA, CNAME, MX, TXT, NS, SOA, CAA, HTTPS, SVCB, TLSA, DS, DNSKEY, PTR, SRV. |
| Public status of the two ShieldDNS nodes (each node checks the other every 5 minutes). |
The server also gives the agent short instructions: check unfamiliar domains before visiting them and follow the advice field.
What the risk score looks at (v0.1)
ShieldDNS blocklist: about 955,000 domains from 8 threat-intelligence, ads and tracking sources. ShieldDNS marks blocked answers with Extended DNS Error 15 "Blocked"; on nodes without EDE the server recognises the block from the answer itself (NXDOMAIN without SOA).
DNSSEC: validated, unsigned, or invalid signature (possible tampering, EDE 6-12).
Name-only signals, computed locally:
look-alikes of frequently impersonated brands (
paypa1.com,arnazon.com,paypal-secure-login.com,paypal.com.verify-account.net);mixed scripts and IDN tricks (
аpple.comwith a Cyrillic "а");random-looking names typical of malware domain generation algorithms (DGA);
very long or heavily hyphenated names.
does_not_existis reported separately: for an agent it often means a mistyped or hallucinated link.
Example:
{
"domain": "paypal-secure-login.com",
"verdict": "resolves",
"risk_score": 40,
"risk_level": "medium",
"advice": "caution",
"reasons": [
{"code": "brand_with_lure_words", "weight": 40,
"detail": "the name evokes the brand \"paypal\" but is not one of its official domains (paypal.com, paypal.me)"}
],
"dnssec": "not validated (unsigned or unavailable)"
}Related MCP server: CyberMCP
Privacy
The server runs on your machine. It sends only DNS queries, only to ShieldDNS, over HTTPS (
secure2.shielddns.eu, fallbacksecure.shielddns.eu).service_statusadditionally downloads the public status files fromshielddns.eu.ShieldDNS does not log queries or client IP addresses.
No telemetry, no accounts, no API keys.
Install
Requires uv (brew install uv on macOS, or curl -LsSf https://astral.sh/uv/install.sh | sh).
From GitHub:
uvx --from git+https://github.com/shielddns/shielddns-mcp shielddns-mcpFrom a local copy:
uvx --from /path/to/shielddns-mcp shielddns-mcpThe server speaks MCP over stdio: run it from an MCP client, not by hand.
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"shielddns": {
"command": "uvx",
"args": ["--from", "git+https://github.com/shielddns/shielddns-mcp", "shielddns-mcp"]
}
}
}Claude Code
claude mcp add shielddns -- uvx --from git+https://github.com/shielddns/shielddns-mcp shielddns-mcpCursor and other clients
Use the same command / args as above in the client's MCP configuration.
Test without an MCP client
cd shielddns-mcp
uv run --with . python examples/smoke_test.py
uv run --with . python examples/smoke_test.py some-domain.example --jsonOr with the MCP Inspector: npx @modelcontextprotocol/inspector uvx --from . shielddns-mcp
Configuration (optional)
Variable | Default | Meaning |
|
| DoH endpoints, tried in order |
|
| seconds per query |
Limits
The score is a decision aid, not a guarantee. A clean result does not mean a site is trustworthy; a
cautionresult can be a false positive (e.g. a legitimate site that mentions a brand).The brand list is small and curated (
signals.py); contributions welcome.Coming next: a server-side ShieldDNS risk API (domain age, threat source categories, more brands), used automatically by this server when available.
Development
uv run --with '.[test]' pytestLicense: MIT.
Italiano
ShieldDNS MCP server permette agli assistenti e agli agenti AI di controllare un link prima di aprirlo, usando ShieldDNS, il resolver pubblico europeo gratuito con protezione da malware, phishing e tracciamento, validazione DNSSEC e politica zero-log.
check_domain: dice se un dominio o un URL è sicuro, con un verdetto, un punteggio di rischio da 0 a 100 con le motivazioni e un consiglio:ok_to_open,cautionodo_not_open.resolve: risolve un nome tramite ShieldDNS (DNS-over-HTTPS, DNSSEC, blocco delle minacce).service_status: stato pubblico dei due nodi.
Il punteggio considera: la blocklist di ShieldDNS (circa 955.000 domini, segnalati con l'errore DNS esteso 15 "Blocked"), la validità della firma DNSSEC, le imitazioni di marchi noti, i nomi con alfabeti mescolati e i nomi generati a caso dal malware. "Il dominio non esiste" viene segnalato a parte: per un agente spesso significa un link sbagliato o inventato.
Privacy: il server gira sul tuo computer e invia solo query DNS a ShieldDNS, via HTTPS. ShieldDNS non registra le query né gli indirizzi IP. Nessuna telemetria, nessun account, nessuna chiave.
Installazione: vedi sopra (Claude Desktop, Claude Code, Cursor). Serve uv.
Available Tools
3 toolscheck_domainCheck a domain or linkARead-onlyIdempotent
Check whether a domain or URL is safe to open, using the ShieldDNS protective resolver. Returns a verdict (blocked, dnssec_invalid, does_not_exist, resolves...), a 0-100 risk score with human-readable reasons (blocklist match, DNSSEC, look-alike of known brands, mixed scripts, random-looking names) and an advice field (ok_to_open, caution, do_not_open). Accepts a bare domain or a full URL.
| Name | Required | Description | Default |
|---|---|---|---|
| domain_or_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety is covered; the description adds genuinely new behavioral context by enumerating the verdict values, the risk signals evaluated, and the advice field. It stops short of stating rate limits, latency, or behavior on malformed input.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the purpose and followed by the return contract; the parenthetical lists are dense but each item is informative. Slightly list-heavy, but no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, describing the verdict, risk score, reasons and advice field is exactly the missing information, and the accepted input form is covered too. Only minor gaps remain, such as error handling and whether results are cached.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single property has no title-level detail, so the description carries the burden — and it does, explicitly stating it accepts either a bare domain or a full URL. That is the key ambiguity an agent would otherwise face, though input normalization rules (e.g. schemes, ports, trailing paths) remain unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Check whether a domain or URL is safe to open') and names the underlying resolver, which distinguishes it from the plain 'resolve' sibling. It is clear what the tool produces, though it never explicitly contrasts itself with 'resolve' or 'service_status'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'safe to open' suggests a pre-visit safety screen rather than raw resolution, which hints at the boundary with 'resolve'. There is no explicit when-to-use/when-not statement and no named alternative, leaving the agent to infer routing between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolveResolve a DNS name through ShieldDNSARead-onlyIdempotent
Resolve a DNS name through ShieldDNS (DNS-over-HTTPS, DNSSEC validation, threat blocking). record_type is one of: A, AAAA, CNAME, MX, TXT, NS, SOA, CAA, HTTPS, SVCB, TLSA, DS, DNSKEY, PTR, SRV. Returns records, rcode, whether the answer was DNSSEC-validated, whether ShieldDNS blocked the name, and any Extended DNS Errors (RFC 8914).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| record_type | No | A |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds real value by disclosing the return payload (records, rcode, DNSSEC validation status, blocking status, RFC 8914 Extended DNS Errors), which is important because no output schema exists. It does not cover failure modes such as NXDOMAIN handling or rate limits, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the operation and its trust properties before the parameter enumeration and return shape. The record-type list is long but earns its place given zero enum coverage in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no parameter descriptions and no enums, the description supplies the two things the structured data omits: the valid record types and the shape of the result including DNSSEC and blocking signals. What remains missing is guidance on distinguishing this from check_domain and what happens on resolution failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema has no enum, so the description carries the full burden and does it: it enumerates all 15 legal record_type values, which the schema does not. The name parameter is left uncharacterized beyond the tool name implying a DNS name, and the A default is only in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (resolve) and resource (DNS name) and scopes it to ShieldDNS with DoH, DNSSEC and threat-blocking, which is far more than the title restated. It does not explicitly contrast with the sibling check_domain, so an agent must infer which one it wants when the task is 'look up a domain'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the tool resolves a name and takes a record type, so an agent can guess it is the query primitive. There is no statement of when to prefer it over check_domain or service_status, and no mention of preconditions such as a required record_type default.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
service_statusShieldDNS service statusBRead-onlyIdempotent
Public status of the two ShieldDNS nodes (each node checks the other every 5 minutes).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds genuinely useful context — two nodes with mutual 5-minute checks — which tells the agent data may be up to five minutes stale. It does not describe what the status response contains, so with annotations doing much of the work a 3 is fair.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the parenthetical about the 5-minute mutual check carries real information rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param read-only tool the description is nearly sufficient, but with no output schema it never indicates what the status result looks like (per-node state, fields, overall health). That is the one piece an agent still has to discover by calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters there is no parameter semantics to explain, so the baseline of 4 applies. The description correctly adds no parameter chatter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('Public status of the two ShieldDNS nodes') and its scope, distinguishing it from siblings like check_domain and resolve which perform lookups rather than health reporting. The verb is implicit in 'Public status of', but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit statement of when to call this tool versus alternatives, nor any prerequisites. Usage is only implied by the word 'status'; an agent must infer that this is the health-check endpoint rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.3- First observed
check_domain - First observed
resolve - First observed
service_status
TDQS
Scored across 3 tools
check_domain and resolve are mostly distinct: one gives a safety verdict and advice, the other returns DNS records and resolution metadata. There is some overlap because resolve also reports threat blocking and DNSSEC status, so an agent may occasionally hesitate between them.
The names mix conventions: check_domain is verb_noun, resolve is a bare verb, and service_status is noun_noun. They remain readable and understandable, but the set does not follow a predictable pattern.
Three tools fit the server's focused scope of domain safety checking, DNS resolution, and node status. The surface is small but each tool has a clear role, though it sits at the lower bound of a comfortable set.
The core lifecycle is covered: safety verdicts, raw DNS resolution with DNSSEC and blocking info, and node status. Minor gaps exist, such as no bulk domain check or blocklist/configuration inspection, but the main workflows are supported.
Maintenance
Related MCP Connectors
Threat-intelligence verdicts on a URL, domain or IP before a coding agent connects to it.
Free, no-API-key network lookups for AI agents — IP geolocation, DNS, WHOIS, HTTP and SSL/TLS certificate checks, and full domain health reports.
Vet a domain (WHOIS age, DNS, SPF/DMARC, TLS) or read a web page as Markdown. Run by an AI agent.
AI URL safety validator: SAFE/SUSPICIOUS/DANGEROUS verdict, trust score, threat intel.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI agents to check URL safety before fetching content, using Google Web Risk, URLhaus, PhishTank, and AI analysis to return SAFE/SUSPICIOUS/DANGEROUS verdicts.111 npm1MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to perform cybersecurity analysis including RDAP lookup, DNS analysis, SSL inspection, security header detection, and more, returning structured security reports.-
- AlicenseNot gradedqualityCmaintenanceProvides AI agents with zero-cost, zero-dependency trust evaluation for domains, URLs, wallets, APIs, and IPs, returning a 0-100 score with SSL, DNS, WHOIS, security header, and content sub-scores, plus batch comparison to rank multiple targets.MIT
- AlicenseAqualityBmaintenanceEnables AI agents to perform passive security scans on domains, checking email spoofing (DMARC/SPF/DKIM), TLS weaknesses, security headers, exposed files, and subdomain-takeover risk without needing an API key.733 npmMIT