Skip to main content
Glama

Set AdGuard Home DNS settings

adguard_set_dns_config
Destructive

Update AdGuard Home DNS settings only after validating upstream servers, so changes to resolvers, cache, DNSSEC, rate limits, or blocking mode apply network-wide without writing broken configurations.

Instructions

Change selected AdGuard Home DNS settings after the new upstreams pass AdGuard's own test.

Reads dns_info, then — when upstream_dns, bootstrap_dns, fallback_dns or local_ptr_upstreams change — runs POST /control/test_upstream_dns on the resulting lists and writes nothing unless every server answers OK. Then sends only the given fields to POST /control/dns_config (AdGuard keeps the rest), and re-reads dns_info. Applies immediately to the whole network.

Use when: changing upstream/fallback/bootstrap/PTR resolvers, rate limit, cache, dnssec_enabled, blocking mode or upstream timeout. Not for: reading the current values — use adguard_get_config; filter lists — use adguard_add_filter, adguard_remove_filter or adguard_set_filter_enabled. Returns: {"applied": true, "addon_slug", "changed_fields", "before", "after", "upstream_test"}; before/after list the allowlisted fields. Errors: invalid_changes, no_changes, upstream_test_failed (with failed, nothing written), HTTP <status> with AdGuard's detail, and the add-on lookup errors of adguard_get_config. Limits: a domain-specific upstream reported as a WARNING also blocks the write.

Input Schema

NameRequiredDescriptionDefault
changesYesOnly the DNS settings to change, e.g. `{"upstream_dns": ["tls://dns.quad9.net"], "cache_optimistic": true}`. Unknown keys are rejected; omitted keys keep their value.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.28.0

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (destructive, non-idempotent, open-world), and the description adds behavior annotations cannot: a pre-flight upstream test on four fields, all-or-nothing writes ('writes nothing unless every server answers OK'), partial-update semantics, immediate network-wide effect, and a named error set including upstream_test_failed with nothing written.

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?

Front-loaded with the write-verify-write sequence, then segmented into Use when / Not for / Returns / Errors / Limits, which is well structured. It is longer than strictly needed — the raw endpoint names and the Returns block partially duplicate the output schema — but no line is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world mutation over a 20-field nested object, the description covers preconditions, atomicity, error taxonomy, and an edge-case limit (a WARNING on a domain-specific upstream also blocks the write). Return shape exists in the output schema, so it need not be elaborated further.

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 coverage is 100%, so the per-field docs are already there, but the description adds real meaning the schema cannot: exactly which four fields trigger the upstream test, that only the supplied keys are sent while AdGuard keeps the rest, and that before/after cover an allowlist. It does not, however, discuss constraints like the cache_enabled/cache_size coupling it could have restated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('change selected AdGuard Home DNS settings') plus the scope constraint that only allowlisted fields are written. It explicitly distinguishes itself from adguard_get_config (reading) and the filter tools, so an agent can route correctly without opening siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Has an explicit 'Use when' list (upstreams, rate limit, cache, dnssec, blocking mode, timeout) and a 'Not for' list naming three concrete alternatives with their own domains. The read-vs-write boundary and the filter-list boundary are both spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools