Control4 MCP server (Python) - npm wrapper for easy setup/run
Control4 MCP server (Python) - npm wrapper for easy setup/run. The c4 mcp mcp server wraps that behind the Model Context Protocol, so an assistant can use it through 14 defined tools rather than through you.
Turn your Control4 system into a Model Context Protocol (MCP) toolset, so any MCP-capable client (Claude Desktop, custom agents, scripts) can query rooms/devices and safely run automations.
Everything the assistant can do here goes through one of these:
Safe-by — default controls**: optional write guardrails, read-only mode, and allow/deny lists for state-changing toolsOne — command validation**: an end-to-end runner exercises HTTP + STDIO so you can ship changes with confidenceExample — GET http://<NAS_IP>:3334/mcp/listName — c4-mcpCategory — Home Automation / Control4Repo — https://github.com/randybritsch/c4-mcpTransports — - STDIO (JSON-RPC): claude_stdio_server.py (for Claude Desktop and other stdio-based MCP clients)Recommended — set C4_CONFIG_PATH to a local config.json that contains host, username, password (keep this file gitignored)Optional — set C4_HOST (non-secret) to override host from config.jsonpython3 — m venv .venvFile — %APPDATA%\Claude\claude_desktop_config.jsonC4_CONFIG_PATH — point to a config.json stored elsewhereYou will need 8 environment variables: PYTHONUTF8, PYTHONIOENCODING, C4_STDIO_TOOL_MODE, C4_CONFIG_PATH, C4_WRITE_GUARDRAILS, C4_WRITES_ENABLED, C4_DIRECTOR_TIMEOUT_S, C4_GET_ALL_ITEMS_TIMEOUT_S. Keep credentials in your client's env block or a secrets manager rather than in a file you might commit.
The server ships on PyPI as c4-mcp, so your MCP client can launch it on demand — there is no separate build step. Add the server block to your client's configuration, restart it, and the tools register themselves.
Among the knowledge and memory options, the useful question is rarely "what can it do" but "what does it cost you to run" — permissions, credentials, and how much of your context its toolset consumes. C4 MCP's toolset — Safe-by, One, Example and 11 more — is a fair guide to whether it matches your workflow. It is maintained by randybritsch; worth a glance at recent repository activity before you build anything load-bearing on it.
This entry was verified against C4 MCP's own documentation before publication; SyncDev keeps the directory reviewed rather than auto-generated.
| Tool | What it does |
|---|---|
| Safe-by | default controls**: optional write guardrails, read-only mode, and allow/deny lists for state-changing tools. |
| One | command validation**: an end-to-end runner exercises HTTP + STDIO so you can ship changes with confidence. |
| Example | GET http://<NAS_IP>:3334/mcp/list |
| Name | c4-mcp |
| Category | Home Automation / Control4 |
| Repo | https://github.com/randybritsch/c4-mcp |
| Transports | - **STDIO (JSON-RPC)**: claude_stdio_server.py (for Claude Desktop and other stdio-based MCP clients) |
| Recommended | set C4_CONFIG_PATH to a local config.json that contains host, username, password (keep this file gitignored) |
| Optional | set C4_HOST (non-secret) to override host from config.json |
| python3 | m venv .venv |
| File | %APPDATA%\Claude\claude_desktop_config.json |
| C4_CONFIG_PATH | point to a config.json stored elsewhere |
| c4_list_rooms | c4_find_rooms / c4_resolve_room (search by name) |
| c4_shade_list | c4_shade_get_state (returns position 0-100 when available) |
{
"mcpServers": {
"c4-mcp": {
"command": "C:\\Users\\YOUR_USER\\c4-mcp\\.venv\\Scripts\\python.exe",
"args": ["-u", "C:\\Users\\YOUR_USER\\c4-mcp\\claude_stdio_server.py"],
"cwd": "C:\\Users\\YOUR_USER\\c4-mcp",
"env": {
"PYTHONUTF8": "1",
"PYTHONIOENCODING": "utf-8",
"C4_STDIO_TOOL_MODE": "compact",
"C4_CONFIG_PATH": "C:\\Users\\YOUR_USER\\c4-mcp\\config.json",
"C4_WRITE_GUARDRAILS": "true",
"C4_WRITES_ENABLED": "false",
"C4_DIRECTOR_TIMEOUT_S": "30",
"C4_GET_ALL_ITEMS_TIMEOUT_S": "75"
}
}
}
}Configuration as documented by the project. Restart the client after saving.
| Variable | Description | Required |
|---|---|---|
| PYTHONUTF8 | Configuration value read at startup. | Optional |
| PYTHONIOENCODING | Configuration value read at startup. | Optional |
| C4_STDIO_TOOL_MODE | Configuration value read at startup. | Optional |
| C4_CONFIG_PATH | Filesystem location the server is allowed to use. | Optional |
| C4_WRITE_GUARDRAILS | Configuration value read at startup. | Optional |
| C4_WRITES_ENABLED | Configuration value read at startup. | Optional |
| C4_DIRECTOR_TIMEOUT_S | Filesystem location the server is allowed to use. | Optional |
| C4_GET_ALL_ITEMS_TIMEOUT_S | Configuration value read at startup. | Optional |
A knowledge graph your assistant keeps between sessions — entities, relations and observations that persist.
Kill hallucinated APIs — version-accurate, up-to-date library documentation injected straight into context.
Your workspace, on speaking terms with AI — search, read and write Notion pages and databases.
A structured scratchpad for hard problems — stepwise reasoning with revisions, branches and visible logic.
Symbol-level code navigation, refactoring and memory for coding agents — the IDE brain your assistant has been missing.
Chat with your second brain — search, read and write vault notes through the Local REST API.