github TypeScript analyzed 250c437

lidless-labs/adguardctrl

github

One bad call can take down your DNS filtering. adguardctrl gates every AdGuard Home write behind confirm and destructive flags. CLI plus MCP adapter, no daemon.

maintainer
lidless-labs
license
MIT
first seen
2026-06-30
last seen
2026-08-16
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 33 tools
transport stdio counts 33 tools · 0 res · 0 prompts permission surface via README inference

tools

  • adguard_add_client

    Register a new named client with per-client settings (POST /control/clients/add).

  • adguard_add_filter_list

    Subscribe to a new blocklist or allowlist URL (POST /control/filtering/add_url).

  • adguard_add_user_rule

    Append a single user filter rule (POST /control/filtering/set_rules).

  • adguard_check_host

    Test what AGH would do with a hostname: filter decision, matched rules, CNAME chain, IPs (GET /control/filtering/check_host).

  • adguard_clear_query_log

    Wipe the DNS query log (POST /control/querylog_clear).

  • adguard_delete_client

    Remove a configured named client; per-client rules and stats are lost (POST /control/clients/delete).

  • adguard_get_blocked_services

    Global blocked-services list + weekly schedule (GET /control/blocked_services/get).

  • adguard_get_dns_config

    DNS upstreams, bootstrap, cache, parallel resolution, blocking mode (GET /control/dns_info).

  • adguard_get_safesearch_settings

    SafeSearch enabled state + per-engine flags (GET /control/safesearch/status).

  • adguard_list_blocked_services_catalog

    Available service IDs to block (GET /control/blocked_services/services).

  • adguard_list_clients

    Configured named clients (GET /control/clients).

  • adguard_list_filter_lists

    Subscribed blocklists + allowlists (GET /control/filtering/status).

  • adguard_list_user_rules

    Custom user rules (GET /control/filtering/status).

  • adguard_query_log

    DNS query log slice with filters (GET /control/querylog).

  • adguard_refresh_filter_lists

    Force refresh subscribed filter lists immediately (POST /control/filtering/refresh).

  • adguard_remove_filter_list

    Unsubscribe from a filter list by URL (POST /control/filtering/remove_url).

  • adguard_remove_user_rule

    Remove a single user filter rule by exact match (POST /control/filtering/set_rules).

  • adguard_replace_user_rules

    Wholesale replace the user rules block (POST /control/filtering/set_rules).

  • adguard_reset_stats

    Zero the stats window (POST /control/stats_reset).

  • adguard_set_blocked_services

    Set GLOBAL blocked services + optional weekly schedule; accepts HH:MM strings or ms (PUT /control/blocked_services/update).

  • adguard_set_client_blocked_services

    Set per-client blocked services + schedule (POST /control/clients/update).

  • adguard_stats

    Stats window: top queries, blocked counts, clients (GET /control/stats).

  • adguard_status

    Server status + protection state (GET /control/status).

  • adguard_sync_clear_logs

    Clear AdGuardHome Sync in-memory logs (POST /api/v1/clear-logs).

  • adguard_sync_health

    AdGuardHome Sync health check (HEAD /healthz).

  • adguard_sync_logs

    AdGuardHome Sync in-memory logs (GET /api/v1/logs).

  • adguard_sync_run

    Trigger AdGuardHome Sync immediately (POST /api/v1/sync).

  • adguard_sync_status

    AdGuardHome Sync origin/replica status (GET /api/v1/status).

  • adguard_toggle_filter_list

    Enable or disable a subscribed filter list (POST /control/filtering/set_url).

  • adguard_toggle_protection

    Enable or disable global filtering; off stops ALL blocking (POST /control/protection).

  • adguard_toggle_safebrowsing

    Enable or disable AGH SafeBrowsing (POST /control/safebrowsing/enable or /disable).

  • adguard_toggle_safesearch

    Enable or disable SafeSearch globally with per-engine flags (PUT /control/safesearch/settings).

  • adguard_update_client

    Full update for an existing named client; body is nested {name, data} (POST /control/clients/update).

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 250c437 · analyzer v33 · 2w ago

skills & prompt files 2

code evidence vv0.3.1 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 106

filesystem 2

  • fs lidless-labs-adguardctrl-250c437/cli.ts :1 import { realpathSync } from "node:fs";
  • fs lidless-labs-adguardctrl-250c437/mcp-server.ts :1 import { realpathSync } from "node:fs";

shell / exec 1

  • shell (weak) lidless-labs-adguardctrl-250c437/tests/cli-entrypoint.test.ts :1 import { execFileSync, spawnSync } from "node:child_process";

network 3

  • net lidless-labs-adguardctrl-250c437/src/adguard-client.ts :170 const response = await fetch(input.toString(), { ...init, headers });
  • net lidless-labs-adguardctrl-250c437/src/adguard-sync-client.ts :173 const response = await fetch(input.toString(), { ...init, headers });
  • net (weak) lidless-labs-adguardctrl-250c437/tests/fake-adguard.ts :1 import { createServer, Server, IncomingMessage, ServerResponse } from "node:http";

install hooks 1

  • prepublishOnly lidless-labs-adguardctrl-250c437/package.json :31 npm run typecheck && npm test && npm run build

declared dependencies 10

  • @modelcontextprotocol/sdk@^1.29.0
  • @lidless-labs/effect-operator-kit@github:lidless-labs/effect-operator-kit#be71030
  • @sinclair/typebox@^0.34.0
  • effect@^3.21.4
  • @types/node@^25.6.2
  • openclaw@^2026.4.22
  • tsup@^8.4.0
  • tsx@^4.19.0
  • typescript@^7.0.2
  • vitest@^4.1.5