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.0

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.0
File Size Uploaded Provenance Actions
langchain_dnsdoctor-0.5.0.tar.gz 29.7 kB Without provenance Details for langchain_dnsdoctor-0.5.0.tar.gz

Built distribution (wheel)

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

Total release size: 59.9 kB

Release files / langchain_dnsdoctor-0.5.0.tar.gz

Download URL langchain_dnsdoctor-0.5.0.tar.gz
Size 29.7 kB
Tags Source
SHA-256 checksum
How to use checksums
45f141951226662a2f4894aee8319242884c69d36026a0c0ebc6cd6527f062ea
BLAKE2b-256 checksum
How to use checksums
2854ada1a8a3ba20a08bc56ace427a59934e5afeb9d931538461cde98ad6a3c4
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.0-py3-none-any.whl

Download URL langchain_dnsdoctor-0.5.0-py3-none-any.whl
Size 30.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
27142b1a2d11867a3103c3efab2a5658ea3e41d9843bbc8988d2e3e12c2dcb79
BLAKE2b-256 checksum
How to use checksums
976b0627c2731069add8990d333ab008697b437aebde58b9261923d50d491a9b
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.0

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