Skip to main content
Glama
shielddns

ShieldDNS MCP server

Official
by shielddns

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

check_domain(domain_or_url)

Is this domain or link safe to open? Returns a verdict (blocked, dnssec_invalid, does_not_exist, resolves…), a 0-100 risk score with human-readable reasons and an advice field: ok_to_open, caution or do_not_open.

resolve(name, record_type)

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.

service_status()

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.com with a Cyrillic "а");

    • random-looking names typical of malware domain generation algorithms (DGA);

    • very long or heavily hyphenated names.

  • does_not_exist is 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, fallback secure.shielddns.eu). service_status additionally downloads the public status files from shielddns.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-mcp

From a local copy:

uvx --from /path/to/shielddns-mcp shielddns-mcp

The 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-mcp

Cursor 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 --json

Or with the MCP Inspector: npx @modelcontextprotocol/inspector uvx --from . shielddns-mcp

Configuration (optional)

Variable

Default

Meaning

SHIELDDNS_DOH

https://secure2.shielddns.eu/dns-query,https://secure.shielddns.eu/dns-query

DoH endpoints, tried in order

SHIELDDNS_TIMEOUT

6

seconds per query

Limits

  • The score is a decision aid, not a guarantee. A clean result does not mean a site is trustworthy; a caution result 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]' pytest

License: 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, caution o do_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 tools
check_domainCheck a domain or linkA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
domain_or_urlYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 ShieldDNSA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
record_typeNoA

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 statusB
Read-onlyIdempotent

Public status of the two ShieldDNS nodes (each node checks the other every 5 minutes).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 3 tool updatesv0.1.3
    • First observedcheck_domain
    • First observedresolve
    • First observedservice_status

TDQS

A3.7/5.0

Scored across 3 tools

Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to check URL safety before fetching content, using Google Web Risk, URLhaus, PhishTank, and AI analysis to return SAFE/SUSPICIOUS/DANGEROUS verdicts.
    1
    11 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to perform cybersecurity analysis including RDAP lookup, DNS analysis, SSL inspection, security header detection, and more, returning structured security reports.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides 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
  • A
    license
    A
    quality
    B
    maintenance
    Enables 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.
    7
    33 npm
    MIT