controld-mcp
A local MCP server for inspecting, diagnosing, and safely changing Control D DNS profiles by conversation.
Validate the API token and account capabilities (
check_setup)List profiles and pause state, endpoints/devices, and proxy redirect locations
List a profile's custom rules and service policies/catalog (with search)
Read recent DNS activity and diagnose why a site was blocked, with the deciding filter/service/rule
Pause a profile for a bounded time, or resume it immediately
Create bypass, block, or redirect rules (exact domains or wildcards, optional expiry)
Delete custom rules by hostname
Set a named service's policy to off, block, bypass, or redirect through a proxy location
All live changes require
confirm: trueand are read back; no generic HTTP passthrough and tokens are never exposed
Allows managing DNS policies for YouTube, including redirecting the service to a chosen proxy location or applying service-level rules (e.g., bypass, block, redirect) without manually maintaining YouTube's changing hostnames.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@controld-mcp What was blocked in the last five minutes?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Control D MCP
A local Model Context Protocol server for safely managing Control D by conversation.
It can inspect profiles and endpoints, diagnose recent blocked DNS queries, pause a profile temporarily, create block/bypass/redirect rules, and delete rules. Every live policy change requires confirm: true and is followed by a read-back check.
Setup
Requires Node.js 20 or newer and a dedicated Control D write token. Restrict the token to trusted source IPs in Control D when possible.
npm install
npm run testPut the token in ~/.config/controld-mcp.env (never in this repository) and set the file mode to 0600:
CONTROL_D_API_TOKEN=your-dedicated-write-tokenExample Codex configuration:
[mcp_servers.controld]
command = "/absolute/path/to/node"
args = ["/absolute/path/to/controld-mcp/dist/index.js"]Restart the MCP host after adding the server. The MCP process can start without the token, but its tools will return a setup error until the token is present and the host is restarted.
Related MCP server: technitium-mcp-secure
Typical flow
“Show my Control D profiles.”
“I just tried example.com. What was blocked in the last five minutes?”
Review the query timestamps and the rule/filter that triggered each block.
“Would
cdn.example.netbe blocked?”check_domainanswers immediately, with the filter, service, or rule that decides it, without waiting for real traffic.“Create a temporary bypass for
cdn.example.neton Global for 30 minutes.”The assistant shows the exact proposed mutation and asks for approval before calling the confirmed write tool.
Existing custom rules can be switched off and back on with set_rules_enabled, which keeps their action and redirect target.
For routing: list proxy locations first, then redirect either exact domain rules or a named service with an exact location ID. A service such as YouTube can involve many changing domains, so set_service_policy is usually safer than trying to maintain its hostnames manually. list_profile_services takes a search term to find a service without returning the whole catalog.
Security design
No generic HTTP/API passthrough tool.
API and analytics hosts are constrained to Control D.
check_domainqueries the endpoint's own public resolver atdns.controld.comand sends no token.Tokens are loaded at runtime and never returned or logged.
Activity-log requests are bounded to 200 rows and are never cached.
Writes require exact profile resolution and
confirm: true.Prefer exact domains over wildcards. Inspect results before unblocking anything.
API stability
Control D warns that its API is unversioned. Activity-log and several management operations use current first-party dashboard contracts because they are not all present in the public API reference. See docs/api-contracts.md.
Acknowledgements
Endpoint behavior was cross-checked against Control D's official dashboard and the community Control D Manager Home Assistant integration. This project is an independent implementation.
License
MIT
Available Tools
15 toolscheck_setupCheck Control D connectionARead-onlyIdempotent
Validate the token and report account capabilities without revealing the token.
Inputs: no named parameters.
create_block_rulesBlock domainsADestructive
Create enabled custom block rules. Requires confirm=true.
Inputs: confirm (required), profile (required), hostnames (required), comment, +1 more.
create_bypass_rulesUnblock domainsADestructive
Create enabled custom bypass rules. Use exact domains first; wildcards are broader. Requires confirm=true.
Inputs: confirm (required), profile (required), hostnames (required), comment, +1 more.
create_redirect_rulesRedirect domainsADestructive
Redirect matching domains through a Control D proxy location. Use list_proxy_locations first. Requires confirm=true.
Inputs: confirm (required), profile (required), hostnames (required), proxyLocationId (required), +2 more.
delete_rulesDelete custom rulesADestructive
Delete rules by exact hostname. This is destructive and requires confirm=true.
Inputs: confirm (required), profile (required), hostnames (required).
diagnose_recent_blocksDiagnose a blocked websiteBRead-onlyIdempotent
Find DNS queries blocked in the recent browsing window. Supply the site you tried; dependent domains may appear separately in the results.
Inputs: site (required), limit, search, minutes, +1 more.
get_recent_activityGet recent DNS activityARead-onlyIdempotent
Read recent Control D activity. Activity logs require Full Analytics and are sensitive; results are not stored.
Inputs: limit, search, minutes, endpointId, +1 more.
list_endpointsList Control D endpointsARead-onlyIdempotent
List devices/endpoints with recent activity metadata.
Inputs: no named parameters.
list_profile_rulesList custom rulesARead-onlyIdempotent
List all custom rules for one profile.
Inputs: profile (required).
list_profilesList Control D profilesARead-onlyIdempotent
List profiles and their current pause state.
Inputs: no named parameters.
list_profile_servicesList service policiesARead-onlyIdempotent
List the current profile service states plus the service catalog. Use this to resolve names such as YouTube to exact IDs.
Inputs: profile (required).
list_proxy_locationsList redirect locationsARead-onlyIdempotent
List Control D proxy locations and IDs for redirect rules.
Inputs: no named parameters.
pause_profileTemporarily pause Control DADestructive
Pause all enforcement on a profile for a bounded time. This changes live DNS behavior and requires confirm=true.
Inputs: confirm (required), minutes (required), profile (required).
resume_profileResume Control DADestructive
Immediately resume a paused profile. Requires confirm=true.
Inputs: confirm (required), profile (required).
set_service_policySet service policyADestructive
Turn a named service off, block it, bypass it, or route it through a Control D proxy location. Service rules can cover changing domain sets and override filters. Requires confirm=true.
Inputs: mode (required), confirm (required), profile (required), service (required), +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 15 tools
Each tool has a distinct purpose: list tools target different entities (profiles, endpoints, locations, rules, services), create tools specify rule types, and activity/diagnose tools are clearly separated. No overlapping or ambiguous tools.
Most tools follow the verb_noun pattern (e.g., list_profiles, create_block_rules), but there is a mix of verbs like 'get', 'diagnose', and 'check' alongside 'list'. This is mildly inconsistent but still clear enough to avoid confusion.
With 15 tools, the server sits at the upper boundary of the recommended range but remains well-suited for a DNS control service. The tool count is neither excessive nor insufficient for the domain.
The tool set covers listing, creating, deleting, and modifying state (pause/resume/set), plus diagnostics and setup checks. No obvious missing operations for the Control D domain.
Maintenance
Related MCP Connectors
MCP server for DNSimple — domains, DNS zone records, availability, pricing and contacts.
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Secure and manage MCP servers through the Speakeasy AI Control Plane from your agent.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server for managing AdGuard Home instances and AdGuardHome Sync with 33 tools across read, safe-write, and destructive operations, featuring three-tier write gating.106 npm2MIT
- AlicenseAqualityDmaintenanceA security-hardened MCP server for managing Technitium DNS Server via its HTTP API, offering tools for DNS zones, records, blocking, cache, settings, and diagnostics.39MIT
- AlicenseDqualityBmaintenanceMCP server for Porkbun domains and DNS, enabling read-only and mutating operations with safety features like dry-run and write mode toggle.40468 npm3MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for AI agents to safely manage Cloudflare DNS, DMARC, SPF, BIMI, and Email Routing with dry-run-first and approval-based writes.9MIT