controld-mcp
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 "Install 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-mcpWhat 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.
“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.
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.
Security design
No generic HTTP/API passthrough tool.
API and analytics hosts are constrained to Control D.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a safe, idempotent read operation. The description adds value by explicitly guaranteeing the token is not revealed and by indicating the tool reports account capabilities. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that communicates action, result, and a key limitation. Every word adds value; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a simple token-validation/connection-check tool with no inputs and no output schema, the description adequately covers purpose and top-level result. A little more specificity about what 'account capabilities' includes or error behavior on invalid tokens would make it even stronger.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the description is not required to explain parameter semantics. The description compensates by clarifying what the tool does with the implicitly provided token and what it returns conceptually.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('validate the token') and a distinct outcome ('report account capabilities'), making it easy to distinguish from sibling tools that list, create, or modify resources. The added 'without revealing the token' also sets a clear boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description communicates a clear context of use: validate authentication and inspect account capabilities before or while working with other tools. It does not explicitly name alternatives or exclusions, but none are necessary given the unique purpose of a setup/connection check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_block_rulesBlock domainsADestructive
Create enabled custom block rules. Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Created through controld-mcp | |
| confirm | Yes | Must be exactly true after reviewing the requested change | |
| profile | Yes | Exact profile name or profile ID | |
| hostnames | Yes | Exact domains or *.domain wildcard patterns | |
| expiresInMinutes | No | Optional expiry, up to 30 days |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description adds value by disclosing the confirmation requirement ('Requires confirm=true') and the enabled state of created rules. This is useful behavioral context beyond the annotations, though it does not detail the destructive impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no fluff. The core action and a critical requirement are placed upfront, making it highly scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema and annotations, the description covers the essential invocation details. It lacks usage context and return behavior, but for a straightforward create tool with high schema coverage, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema carries most parameter meaning. The description's mention of 'confirm=true' reinforces the confirmation parameter but adds little new semantic detail beyond what is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create enabled custom block rules.' The title 'Block domains' further clarifies the resource, and it naturally distinguishes from sibling tools like create_bypass_rules and create_redirect_rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus the alternatives (e.g., bypass rules, redirect rules). There are no exclusions or context cues about scenarios where blocking is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_bypass_rulesUnblock domainsADestructive
Create enabled custom bypass rules. Use exact domains first; wildcards are broader. Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Created through controld-mcp | |
| confirm | Yes | Must be exactly true after reviewing the requested change | |
| profile | Yes | Exact profile name or profile ID | |
| hostnames | Yes | Exact domains or *.domain wildcard patterns | |
| expiresInMinutes | No | Optional expiry, up to 30 days |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, and the description adds meaningful behavioral context by noting the rules are enabled and that confirm=true is required. This reinforces the mutation/destructive nature without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action and immediately followed by key usage guidance. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's mutation risk and destructive annotation, the description provides the essential confirmation requirement and domain-format guidance. It lacks explicit mention of return values or side effects beyond creation, but the schema and annotations cover most other operational details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (80%), so the baseline is 3. The description adds value beyond the schema by explaining hostname semantics ('exact domains first; wildcards are broader') and emphasizing the confirm=true requirement, which enriches parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource construction ('Create enabled custom bypass rules') and the title 'Unblock domains' reinforces the purpose. This clearly differentiates the tool from siblings like create_block_rules and create_redirect_rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context ('Create enabled custom bypass rules') and practical guidance ('Use exact domains first; wildcards are broader'), plus the confirmation requirement. It does not explicitly name alternatives or state when not to use it, but the scope is clear from the tool name and sibling context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_redirect_rulesRedirect domainsADestructive
Redirect matching domains through a Control D proxy location. Use list_proxy_locations first. Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Created through controld-mcp | |
| confirm | Yes | Must be exactly true after reviewing the requested change | |
| profile | Yes | Exact profile name or profile ID | |
| hostnames | Yes | Exact domains or *.domain wildcard patterns | |
| proxyLocationId | Yes | ||
| expiresInMinutes | No | Optional expiry, up to 30 days |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation risk is known. The description adds the confirm=true requirement, but does not disclose additional side effects such as whether existing redirect rules are replaced or appended. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core purpose, followed by the prerequisite and confirmation requirement. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with 6 parameters, the description covers purpose, prerequisite, and confirmation gate. It does not describe the return value or the effect on existing rules, but annotations and schema fill in safety and parameter details. Slightly more outcome detail would make it a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description adds useful meaning by telling the agent to call list_proxy_locations first, which explains how to obtain proxyLocationId. The phrase 'matching domains' also clarifies the hostnames parameter. It does not add detail for comment or expiresInMinutes, but those are either defaulted or described in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Redirect matching domains through a Control D proxy location,' which is a specific verb, resource, and mechanism. This clearly distinguishes it from sibling tools like create_block_rules and create_bypass_rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs 'Use list_proxy_locations first,' providing a clear prerequisite for choosing the proxyLocationId. It does not explicitly contrast with alternatives or state when not to use the tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_rulesDelete custom rulesADestructive
Delete rules by exact hostname. This is destructive and requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be exactly true after reviewing the requested change | |
| profile | Yes | Exact profile name or profile ID | |
| hostnames | Yes | Exact domains or *.domain wildcard patterns |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description's 'this is destructive' is redundant with structured data. The confirm requirement is also already encoded as const true in the schema. The 'exact hostname' phrase adds some behavioral context, though the schema already clarifies exact domains/wildcards. No annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with the purpose front-loaded. 'This is destructive and requires confirm=true.' is concise and directly relevant, with no filler or unnecessary wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple deletion tool with full schema coverage and destructive annotations, the description covers the essential points: what it deletes, the matching key, and the confirmation requirement. It could be slightly more explicit about wildcard support or which rule types are deleted, but the title and schema largely cover those gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents profile, hostnames, and confirm. The description only restates 'by exact hostname' and the confirm requirement, adding minimal semantic value beyond what the input schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Delete rules') and adds a key qualifier ('by exact hostname'). The title 'Delete custom rules' reinforces the scope, and this clearly distinguishes the tool from sibling tools like create_bypass_rules, create_block_rules, and list_profile_rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool: when you need to delete custom rules. It also adds a caution about destructiveness and confirmation, but it does not explicitly mention alternatives or exclusions such as pause_profile or create_* rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes | ||
| limit | No | ||
| search | No | Domain or activity-log search text | |
| minutes | No | ||
| endpointId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, so the description does not need to repeat that. It adds useful context about the recent window and that dependent domains may appear separately, but it does not describe result formatting or what happens when nothing is found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and the second sentence adds a meaningful usage nuance. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple read-only diagnostic tool, especially with strong annotations. However, with five parameters, low schema coverage, and no output schema, it leaves some gaps around return values and optional parameter behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 20% schema description coverage, the description should compensate by explaining more parameters. It clarifies that 'site' is the site the user tried and implies a recency window, but it leaves limit, endpointId, and search semantics mostly unaddressed beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds DNS queries blocked in the recent browsing window, using a specific verb and resource. It is distinguishable from siblings like get_recent_activity because it focuses on blocked DNS queries, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: supply the site you tried and use the recent browsing window. However, it does not explicitly explain when to prefer this tool over related tools or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_activityGet recent DNS activityARead-onlyIdempotent
Read recent Control D activity. Activity logs require Full Analytics and are sensitive; results are not stored.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| search | No | Domain or activity-log search text | |
| minutes | No | ||
| endpointId | No | ||
| blockedOnly | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds meaningful context beyond those flags: the need for Full Analytics, the sensitive nature of the data, and the fact that 'results are not stored' – all useful behavioral details not visible in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences front-load the core purpose and then add a high-value caveat about permissions and data persistence. Every word earns its place; there is no redundant filler, repetition of the title, or schema boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five optional parameters, no output schema, and no parameter-level guidance in the description, the tool is only partially complete for autonomous invocation. The annotations and the two-line description adequately cover safety and prerequisites, but an agent would need to infer the semantics of limit, minutes, endpointId, and blockedOnly from names alone, which is a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20% (only 'search' has a description), yet the tool description does not compensate by explaining any of the five parameters. The names limit, minutes, endpointId, blockedOnly are partially self-explanatory, but the description adds no meaning for them, leaving semantic gaps for an agent trying to construct correct calls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Read recent Control D activity' – a specific verb targeting a specific resource with a clear scope ('recent'), distinguishing it from sibling list tools like list_profiles or list_endpoints. The second sentence adds a critical qualifier about Full Analytics, further clarifying which kind of activity logs are involved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that 'Activity logs require Full Analytics and are sensitive', implying this tool should only be used when the user has that entitlement. However, it gives no explicit when-to-use or when-not-to-use guidance versus sibling tools such as diagnose_recent_blocks or list_endpoints, leaving the agent to infer that this is the raw activity-log reader.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_endpointsList Control D endpointsARead-onlyIdempotent
List devices/endpoints with recent activity metadata.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds the behavioral detail that returned data includes 'recent activity metadata', which is not captured by the annotations. This adds context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words. It efficiently communicates the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list operation with no output schema, the description is mostly complete. It explains the entity (devices/endpoints) and the kind of data (recent activity metadata). Could clarify whether it returns all endpoints or only those with activity, but this is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and no input schema properties, the description needs to explain parameter semantics. The description implies the tool takes no arguments and returns a list, which is consistent. Per the guideline, 0 params yields a baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and resource 'devices/endpoints', adding 'with recent activity metadata' to clarify the data returned. It clearly distinguishes from sibling tools like 'list_profiles' and 'get_recent_activity'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention exclusions, preconditions, or scenarios where another tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_profile_rulesList custom rulesARead-onlyIdempotent
List all custom rules for one profile.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | Exact profile name or profile ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is fully covered. The description adds the scope constraint ('for one profile') but doesn't describe any additional behavior like pagination, return format, or error handling. Since annotations carry the safety burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence, front-loaded with action and resource. Every word adds value; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with one required parameter and no output schema, the description fully covers what the tool does. It names the resource, scope, and implies the parameter. Complete for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% – the schema describes 'profile' as 'Exact profile name or profile ID'. The description adds 'for one profile' which reinforces that it's a single profile. No extra semantic value beyond schema, but baseline is 3 when schema is fully descriptive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all custom rules for one profile' clearly states the action (list), the resource (custom rules), and the scope (for one profile). It distinguishes from siblings like list_profiles (which lists profiles) and create_*_rules (which creates rules). No ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use: to fetch custom rules for a specific profile. Given the sibling names (create_*_rules, delete_rules), the context is clear. It doesn't explicitly state when not to use, but the read-only nature is obvious. Could mention that profile must be exact from list_profiles, but that's implicit in schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_profilesList Control D profilesARead-onlyIdempotent
List profiles and their current pause state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds meaningful context by revealing that the output includes each profile's pause state, which is a behavioral trait not captured in the schema or annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence: 'List profiles and their current pause state.' Every word contributes meaning and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only listing tool, the description is sufficient: it identifies the resource and the notable output field. A richer return-value description might help, but the absence of an output schema and the low complexity keep the need modest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and schema coverage is 100%, so the schema fully documents the input surface. With no parameters, the description has little to add, and the baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('profiles') plus a distinctive detail ('their current pause state') that is not in the sibling tools. It clearly distinguishes this tool from list_profile_rules and list_profile_services.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage: call this to retrieve profiles and their pause states. However, it does not explicitly state when to prefer this over sibling list tools or mention any exclusions, so guidance is only implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | Exact profile name or profile ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, openWorldHint, idempotentHint, and non-destructive, so the description does not need to repeat safety. It adds that the tool lists both service states and the service catalog, which is useful but not deep behavioral context. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, clear, and front-loaded with the main purpose. The second sentence adds a practical use case. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (single parameter, no output schema) and the description covers the purpose and a key use case. Given the annotations cover safety, and the schema covers parameters, the description is sufficient. It could mention the output format, but it's not essential for a listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'profile' is fully described in the schema (coverage 100%), so the description adds no additional parameter info. The description implicitly indicates the profile is used to resolve names to IDs, but the schema already states 'Exact profile name or profile ID'. The baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'list_profile_services' lists profile service states and the service catalog, and mentions a use case (resolving names to IDs). It is specific about the result (states + catalog) and differentiates from siblings like list_profiles and list_profile_rules. However, it could be more explicit about the distinction from 'set_service_policy'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear when-to-use: 'Use this to resolve names such as YouTube to exact IDs.' It does not explicitly say when not to use it or name alternatives, but the context implies it is for reading state and catalog, as opposed to modifying (e.g., set_service_policy) or listing other entities. This is sufficient for a read-only listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_proxy_locationsList redirect locationsARead-onlyIdempotent
List Control D proxy locations and IDs for redirect rules.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds that it lists locations and IDs, but does not disclose additional behavioral traits like pagination or output format. With annotations covering safety, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It is front-loaded with the verb 'List' and clearly states the resource and purpose. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no output schema, and simple purpose, the description is complete enough. It explains what the tool returns (locations and IDs) and their use case (redirect rules). The sibling tools are mostly about rules and profiles, so this tool's role is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema coverage is 100% (empty schema). The description adds meaning by specifying what is listed (proxy locations and IDs) and their purpose (for redirect rules), which is useful context beyond the empty schema. Baseline 4 for zero params is justified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists Control D proxy locations and IDs for redirect rules, which is a specific verb+resource. It distinguishes from siblings like list_profiles and list_endpoints by focusing on proxy locations for redirect rules, though it could be more explicit about the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for redirect rules but does not explicitly state when to use this tool versus alternatives. It lacks guidance on when not to use it or mention of alternatives, but the context of redirect rules provides some clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_profileTemporarily pause Control DADestructive
Pause all enforcement on a profile for a bounded time. This changes live DNS behavior and requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be exactly true after reviewing the requested change | |
| minutes | Yes | ||
| profile | Yes | Exact profile name or profile ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond annotations, such as the impact on live DNS and the confirmation requirement. This enhances transparency about the tool's effects and prerequisites, complementing the destructiveHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two sentences: the first states the core purpose, and the second adds critical constraints. It is front-loaded and efficient, with no unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides enough context for a destructive, non-idempotent action, including the need for confirmation and the live impact. It lacks details on return values or reversibility, but the absence of an output schema and the presence of a resume tool make it adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has partial descriptions for confirm and profile, but the minutes parameter lacks a description. The tool description mentions 'bounded time' but does not explicitly link it to the minutes parameter, so it only partially compensates for the missing schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool pauses all enforcement on a profile for a bounded time, which is specific and distinct from sibling tools like resume_profile. It effectively communicates the primary action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions it changes live DNS behavior and requires confirm=true, giving usage context. It implies this is a temporary pause but does not explicitly contrast with resume_profile or other alternatives, though the name and sibling list make it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_profileResume Control DADestructive
Immediately resume a paused profile. Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be exactly true after reviewing the requested change | |
| profile | Yes | Exact profile name or profile ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=false, destructiveHint=true, and idempotentHint=false, so the mutating nature is known. The description adds the adverb 'Immediately' (indicating speed) and reiterates the confirm requirement, but it does not explain any side effects or consequences of resuming, which is a notable gap given the destructive hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the core action, and every word contributes meaning. No filler or redundancy, making it exemplary in conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter control action with no output schema, the description is adequate but minimal. It states the action and confirmation requirement, yet leaves out preconditions (e.g., what happens if the profile is not paused) and any expected outcome, which could be beneficial for the agent's decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both 'profile' and 'confirm' well-described. The description adds no new parameter semantics beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (resume), the target resource (profile), and a condition (paused). It inherently distinguishes from the sibling tool pause_profile by being its inverse, and the specificity of 'paused profile' leaves no ambiguity about purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a profile is paused but does not explicitly state when to use it versus alternatives or mention exclusions. It does not reference sibling tools like pause_profile or list_profiles, leaving the usage context somewhat implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| confirm | Yes | Must be exactly true after reviewing the requested change | |
| profile | Yes | Exact profile name or profile ID | |
| service | Yes | Exact service name or service ID from list_profile_services | |
| proxyLocationId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/non-idempotent behavior, and the description adds meaningful context beyond annotations: the specific operational modes, the ability to override filters, and the required confirm flag. This is sufficient behavioral disclosure for a mutation tool, though it doesn't detail side effects on existing rules.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the essential behavior. No filler or redundancy; every sentence contributes useful information. It efficiently conveys the core modes and a critical safety requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent tool with no output schema, the description covers the key selection and invocation concerns: what policy is changed, what modes are available, and the confirmation requirement. Minor gaps remain, such as conditional proxyLocationId usage and exact return/result behavior, but schema and annotations fill in most blanks.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers profile, service, mode, confirm, and proxyLocationId, though proxyLocationId has no description. The description adds plain-language meaning to the mode values (off, block, bypass, route through Control D) and makes confirm=true prominent, but it does not clarify the conditional relationship between redirect mode and proxyLocationId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action and resource: turning a named service off, blocking, bypassing, or redirecting it through a Control D proxy. It distinguishes this from sibling rule-creation tools by focusing on service-level policy changes and the explicit mode vocabulary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool—when you need to change a named service's policy mode—but does not explicitly state when not to use it or name alternatives. It does mention that service rules can override filters, which hints at precedence, but it lacks clear when-to-use vs. other rule tools guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
v0.1.0- First observed
check_setup - First observed
create_block_rules - First observed
create_bypass_rules - First observed
create_redirect_rules - First observed
delete_rules - First observed
diagnose_recent_blocks - First observed
get_recent_activity - First observed
list_endpoints - First observed
list_profile_rules - First observed
list_profile_services - First observed
list_profiles - First observed
list_proxy_locations - First observed
pause_profile - First observed
resume_profile - First observed
set_service_policy
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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.
Public MCP server for summaries, DNS lookup, catalog, replies, and JSON checks.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceMCP server for managing AdGuard Home instances and AdGuardHome Sync with 33 tools across read, safe-write, and destructive operations, featuring three-tier write gating.172MIT
- 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
- AlicenseDqualityDmaintenanceMCP server for Porkbun domains and DNS, enabling read-only and mutating operations with safety features like dry-run and write mode toggle.40653MIT
- FlicenseNot gradedqualityAmaintenanceMCP server for AI agents to safely manage Cloudflare DNS, DMARC, SPF, BIMI, and Email Routing with dry-run-first and approval-based writes.9-