Skip to main content
Glama

Remove AdGuard Home filter list

adguard_remove_filter
DestructiveIdempotent

Removes a single AdGuard Home filter list by exact URL, from blocklists or allowlists, so you can drop a list you no longer need.

Instructions

Remove one filter list from AdGuard Home by its exact URL.

Reads filtering/status; only when the URL is on the chosen list sends POST /control/filtering/remove_url {url, whitelist} (AdGuard answers OK even for an unknown URL, so the check runs first). AdGuard drops the list from its config and renames the downloaded file to .old. Then re-reads filtering/status.

Use when: dropping a blocklist or allowlist. Not for: pausing a list you may want back — use adguard_set_filter_enabled; adding one — use adguard_add_filter. Returns: {"removed": true, "addon_slug", "list", "removed_filter", "filters": [{name, url, enabled, rules_count}], "total_rules"} for the list kind after the change; total_rules sums its enabled lists. Errors: invalid_url (no I/O), not_found (with found_in when the URL is on the other list kind, nothing sent), HTTP <status> with AdGuard's detail, and the add-on lookup errors of adguard_get_config.

Input Schema

NameRequiredDescriptionDefault
urlYesExact URL of the list as shown by `adguard_get_config`, e.g. `https://adguardteam.github.io/HostlistsRegistry/assets/filter_1.txt` (http:// or https://).
allowlistNoTrue removes it from the allowlists (AdGuard `whitelist`); false (default) from the blocklists.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.28.0

TDQS

A4.6/5.0
Behavior4/5

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

With destructiveHint=true and idempotentHint=true already in annotations, the description still adds real value: it discloses the read-then-write sequence, the quirk that AdGuard returns OK for unknown URLs (hence the pre-check), and the side effect of renaming the downloaded file to `.old`. It doesn't cover permissions or whether `.old` files accumulate, but the disclosed behavior is well beyond the annotation bar.

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 operation, then behavior internals, then routing, returns, and errors in clearly delimited blocks. Dense but each block (behavior, use/not-for, returns, errors) carries information an agent needs; slightly long relative to a two-parameter tool.

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?

Even though an output schema exists, the description enumerates the return payload, plus concrete error cases (`invalid_url` with no I/O, `not_found` with `found_in`, `HTTP <status>`) and the internal request sequence. Nothing an agent needs to call this destructive tool correctly is missing.

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 URL and allowlist semantics are already documented. The description nonetheless adds 'by its exact URL' and ties the list kind to the 'chosen list' and the `found_in` error, reinforcing how the allowlist flag changes the outcome beyond what the schema states.

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?

The first sentence names a specific verb and resource ('Remove one filter list from AdGuard Home by its exact URL') and immediately scopes the target. It distinguishes itself from the two closest siblings by name in the 'Not for' clause, so an agent can route without opening a schema.

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?

Explicit 'Use when: dropping a blocklist or allowlist' plus 'Not for: pausing a list you may want back — use adguard_set_filter_enabled; adding one — use adguard_add_filter.' Both the trigger condition and the disambiguating alternatives are stated outright.

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