Skip to main content

langchain-dnsdoctor

LangChain tools for DNS Doctor: scan, diagnose and fix a domain's email authentication (SPF, DMARC, DKIM), check a DNS change from six locations on four continents, audit an SPF include chain, test how a real email authenticates, and read monitoring alerts. Every verdict is deterministic and every record comes from a validating engine, never from a language model.

Twenty-seven tools, the same set the hosted MCP server exposes. Tool names, descriptions and input schemas are generated from that server and shipped in tools.json; this package restates none of them.

Install

pip install langchain-dnsdoctor

Python 3.10+, langchain-core 1.x. No API key is needed for the nineteen anonymous tools.

Use

from langchain.agents import create_agent
from langchain_dnsdoctor import DnsDoctorToolkit

toolkit = DnsDoctorToolkit()
agent = create_agent(
    model="claude-sonnet-4-6",
    tools=toolkit.get_tools(),
    system_prompt=toolkit.instructions,
)
agent.invoke({"messages": [{"role": "user", "content": "Is example.com spoofable? Fix it."}]})

toolkit.instructions is the hosted server's own guidance and belongs in the system prompt: present records verbatim, a temperror status is transient and not a failure, not_registered: true is not health, SPF is diagnose-only, a human approves every DNS change. Two tool descriptions are longer than OpenAI's 1024-character limit for function descriptions; those are cut at a sentence boundary on the tool and carried in full in the instructions.

A subset, or a single tool:

from langchain_dnsdoctor import dnsdoctor_tools

scan, upgrade = dnsdoctor_tools(["scan_domain", "build_dmarc_upgrade"])
print(scan.invoke({"domain": "example.com"}))

Tools

Tool What it answers
scan_domain, get_report The full report: SPF, DKIM, DMARC, MX, DNS health, blacklists, domain and TLS expiry, with copy-paste fix records
build_dmarc_upgrade, generate_dmarc_record, validate_dmarc_record The next safe DMARC rung for a domain, a record from scratch, or a check of one you have
count_spf_lookups, audit_spf_includes The 10-lookup budget, and who can transitively send as the domain
check_dkim_selector, check_record, check_reverse_dns, check_propagation One selector, one record, one IP, or whether a change has gone global
parse_dmarc_report An aggregate report (XML, gzip or zip, base64-encoded) as a source table
build_parked_domain_records The three records that stop a non-sending domain being spoofed
lookup_registration Who a domain is registered with, when it expires, its nameservers and locks (RDAP)
check_lookalikes Which close look-alike names of a domain resolve or accept mail (DNS-only facts, never a verdict)
check_bimi Whether a domain can show its logo in the inbox (BIMI): eligibility per mailbox, never a promise, plus the engine's record for a candidate logo
start_email_test, get_email_test How one real message authenticated: a single-use address to send to, then the SPF, DKIM, DMARC and blacklist verdicts and an itemized score
start_monitoring_signup A signup link that carries the domain into paid monitoring, for a human to open
get_alerts, get_readiness, get_lookalikes Monitoring reads: alerts, enforcement readiness, watched lookalikes with a threat %; need DNSDOCTOR_API_TOKEN
add_monitored_domain, check_domain_verification, get_domain_records Add a domain to the account's monitoring and read the records it still needs; need DNSDOCTOR_API_TOKEN
list_email_tests The account's recent email tests, newest first; needs DNSDOCTOR_API_TOKEN
list_my_domains Every domain on the account with its state and next step; needs DNSDOCTOR_API_TOKEN

Environment

Variable Effect
DNSDOCTOR_API_TOKEN Optional bearer token. Raises the anonymous rate limit and unlocks the eight account tools. Never prompted for.
DNSDOCTOR_API_BASE Override the API origin (default https://dnsdoctor.dev).

Past the free per-caller allowance the API answers 402 with an x402 offer (USDC on Base). This package does not pay; the tool returns the offer text so an agent with an x402 client can retry with payment, or wait.

Rules the tools follow

  • A transport failure (rate limit, 402, 503, 5xx, network) is returned as text that says it is not a verdict about the domain. It never raises.
  • Responses are relayed byte-for-byte. The package composes no record and no URL.
  • SPF is diagnose-only. The one SPF record the API ever emits is the constant -all inside the parked-domain pack, for a domain the server verified sends no mail.

Development

pip install -e ".[test]"
pytest                      # unit tests, offline
pytest tests/integration_tests -m integration   # one live call against dnsdoctor.dev

Apache-2.0.

Metadata

Release files for langchain-dnsdoctor 0.5.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for langchain-dnsdoctor 0.5.1
File Size Uploaded Provenance Actions
langchain_dnsdoctor-0.5.1.tar.gz 30.6 kB Without provenance Details for langchain_dnsdoctor-0.5.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for langchain-dnsdoctor 0.5.1
File Interpreter ABI Platform Actions
langchain_dnsdoctor-0.5.1-py3-none-any.whl Python 3 none any Details for langchain_dnsdoctor-0.5.1-py3-none-any.whl

Total release size: 61.8 kB

Release files / langchain_dnsdoctor-0.5.1.tar.gz

Download URL langchain_dnsdoctor-0.5.1.tar.gz
Size 30.6 kB
Tags Source
SHA-256 checksum
How to use checksums
b69865d88f9f4ff9975d16dd9a81336638e719030cb0bd26189970a2891b06a5
BLAKE2b-256 checksum
How to use checksums
8093f3dbb544bd8213fc20937a41020bcb1f5d46d2212f514f8e2b146cc6edc2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.12

Release files / langchain_dnsdoctor-0.5.1-py3-none-any.whl

Download URL langchain_dnsdoctor-0.5.1-py3-none-any.whl
Size 31.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
667402e270d28356124400adc2206e70b5ad5ff787042ac86c8cce822f534147
BLAKE2b-256 checksum
How to use checksums
f01021f63c0345c202dc5424c5228c71941c1e5ac0b6a713cfbb7261b5cb40ea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.12

Security for langchain-dnsdoctor 0.5.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page