controld-mcp
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.
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