nomos MCP Bridge
OfficialClick 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., "@nomos MCP BridgeSwitch to controller Wohnhaus"
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.
nomos MCP Bridge
A local MCP proxy that connects AI clients to one or more nomos system controllers.
Instead of configuring each controller individually in your AI client, the bridge lets you register multiple controllers and switch between them via natural language.
Works with any MCP-compatible AI client — Claude Desktop, Cursor, Windsurf, ChatGPT Desktop, and more.
How It Works
MCP Client ──stdio──► nomos-mcp-bridge ──Streamable HTTP──► nomos Controller A
(local proxy) ──Streamable HTTP──► nomos Controller B
──Streamable HTTP──► nomos Controller CThe bridge runs as a local MCP server (via stdio) and connects to nomos controllers over the network using the MCP Streamable HTTP transport. All tools, resources, and prompts from the connected controller are dynamically proxied — the bridge stays lightweight and always exposes exactly the capabilities the controller supports.
Related MCP server: ha-mcp
Prerequisites
Node.js 18 or later
A nomos system controller with MCP enabled (Skills > MCP) and a configured token
Network access to the controller from your machine
MCP Client Configuration
The bridge works with any AI client that supports the Model Context Protocol. No manual installation needed — just add the config and your client will run the bridge automatically via npx.
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"nomos": {
"command": "npx",
"args": ["-y", "nomos-mcp-bridge"]
}
}
}Cursor
Add to your Cursor MCP settings (.cursor/mcp.json):
{
"mcpServers": {
"nomos": {
"command": "npx",
"args": ["-y", "nomos-mcp-bridge"]
}
}
}Windsurf
Add to your Windsurf MCP config (~/.codeium/windsurf/mcp_config.json):
{
"mcpServers": {
"nomos": {
"command": "npx",
"args": ["-y", "nomos-mcp-bridge"]
}
}
}Claude Code (CLI)
claude mcp add nomos -- npx -y nomos-mcp-bridgeOther MCP Clients
Any client supporting stdio-based MCP servers can use the bridge. The command is:
npx -y nomos-mcp-bridgeAdding Controllers
Option 1: Via the Setup Web Page
Tell your AI assistant to open the setup page:
"Open the nomos setup page"
This opens a local web UI in your browser where you can enter the controller name, URL, and MCP token.
Option 2: Via AI Chat
Tell your AI assistant to add a controller:
"Add my nomos controller 'Wohnhaus' at 192.168.1.100 with token abc123"
The assistant will use the add_controller tool to register it.
Option 3: Manually
Edit ~/.config/nomos-mcp/controllers.json:
{
"controllers": [
{
"id": "some-uuid",
"name": "Wohnhaus",
"url": "https://192.168.1.100/mcp",
"token": "your-mcp-token"
}
],
"activeControllerId": "some-uuid"
}Usage
Once controllers are registered, simply tell your AI assistant which one to use:
"Connect to controller Wohnhaus"
"Switch to Büro controller"
"Show me all my controllers"
After connecting, all nomos tools are available as if the client were directly connected to the controller. You can:
Control devices ("Turn off the living room lights")
Create scenes and automations
Check system status
Configure the smart home
Bridge Tools
The bridge provides these management tools:
Tool | Description |
| List all registered controllers |
| Connect to a controller by name |
| Register a new controller |
| Remove a registered controller |
| Open the setup web page in the browser |
| Show current connection status |
Configuration
Controller credentials are stored in ~/.config/nomos-mcp/controllers.json. The setup web server runs on http://localhost:18900 (auto-increments if the port is in use).
Security Notes
Tokens are stored in plain text in the config file. Ensure appropriate file permissions.
The setup web server only listens on
127.0.0.1(localhost) and is not accessible from the network.nomos controllers use HTTPS with self-signed certificates by default. Node.js may reject these — set
NODE_TLS_REJECT_UNAUTHORIZED=0in your MCP client config if needed:
{
"mcpServers": {
"nomos": {
"command": "npx",
"args": ["-y", "nomos-mcp-bridge"],
"env": {
"NODE_TLS_REJECT_UNAUTHORIZED": "0"
}
}
}
}Development
# Clone the repository
git clone https://github.com/nomos-system/nomos-mcp-bridge.git
cd nomos-mcp-bridge
# Install dependencies and build
npm install
npm run build
# Run
npm run start
# Or build and run in one step
npm run devLicense
MIT
Available Tools
6 toolsadd_controllerAdd ControllerA
Registers a new nomos controller. If this is the first controller, it is automatically selected.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | A friendly name for the controller (e.g. "Wohnhaus", "Büro") | |
| url | Yes | The base URL of the controller (e.g. "https://192.168.1.100"). The /mcp path is appended automatically. | |
| token | Yes | The MCP Bearer token from the nomos controller settings. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context (automatic selection for first controller) beyond what annotations provide. 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 sentences, no wasted words, front-loaded with the key action and special condition.
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?
Covers core behavior and auto-select condition. With 3 required params and no output schema, it could mention expected outcome or errors, but is still functional.
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%, so baseline is 3. The description adds no additional meaning beyond the schema's descriptions for name, url, and token.
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 (Registers) and the resource (nomos controller), and the condition about automatic selection distinguishes it from siblings like remove_controller or select_controller.
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 on when to use this tool versus alternatives like select_controller. No explicit when-not or context provided despite having sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connection_statusConnection StatusARead-onlyIdempotent
Shows the current connection status — which controller is connected and whether the connection is active.
| 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, destructiveHint=false, and idempotentHint=true, so the safety profile is clear. The description adds that the tool returns controller identity and active status, which is useful but does not significantly augment the annotations. No behavioral 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 sentence that is well-structured and front-loaded with the verb and resource. It is concise and every word adds value.
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 low complexity (0 parameters, simple read operation, annotations present), the description fully covers what the tool does and what it returns. No output schema is needed because the description explicitly states the output 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?
The tool has no parameters, so the input schema is fully covered (100%). According to the rubric, 0 parameters defaults to a baseline of 4. The description does not need to add parameter meaning.
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 'shows the current connection status' and specifies the output: which controller is connected and whether the connection is active. The verb and resource are precise, and the tool is distinctly different from siblings (add_controller, list_controllers, etc.) which manage controllers.
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 this tool is for reading the current connection status, but it does not explicitly state when to use it over siblings or provide exclusions. However, the sibling list itself clarifies that this is a read-only check, so the guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_controllersList ControllersARead-onlyIdempotent
Lists all registered nomos controllers with their names, URLs, and which one is currently active.
| 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, destructiveHint=false, idempotentHint=true. Description adds the output details (names, URLs, active status), which is consistent but not additional behavioral context like rate limits or access requirements.
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?
Single sentence, clear and complete. No unnecessary words; every part adds value.
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?
Description covers the core output (names, URLs, active status). No output schema exists, but the description reasonably explains what to expect. Could mention if the list is paginated or static, but given simplicity, it's nearly 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?
The tool has zero parameters and schema description coverage is 100%. With no parameters, the description does not need to add parameter-level meaning, so baseline score of 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?
Description clearly states the tool lists controllers with specific details (names, URLs, active status). The verb 'Lists' and resource 'nomos controllers' are precise, and the tool is distinct from sibling tools like add_controller or remove_controller.
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 on when to use this tool versus alternatives like connection_status or open_setup. The description does not mention any prerequisites, exclusions, or context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_setupOpen Setup PageARead-onlyIdempotent
Opens the nomos MCP Bridge setup page in the default browser, where controllers can be added via a web form.
| 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, destructiveHint=false, idempotentHint=true. The description adds valuable context: the action opens a page in the default browser and that controllers can be added there. This goes beyond annotations by specifying the browser interaction and the web form functionality.
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, direct sentence with no extraneous information. Every part is essential: the verb, the page name, the browser action, and the purpose (adding controllers via web form). It is perfectly concise and front-loaded.
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 simplicity (no parameters, no output schema, annotations cover safety), the description is complete. It tells what the tool does, how it works (opens browser), and its purpose (adding controllers). No additional context is needed for an agent to use it correctly.
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%, so the description does not need to add parameter details. The optional baseline for 0 parameters is 4, and the description correctly omits parameter info since none exist.
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 'Opens' and resource 'nomos MCP Bridge setup page', clearly stating the action. It also distinguishes from siblings like add_controller by mentioning that controllers can be added via a web form, clarifying its role as a gateway rather than the actual addition tool.
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 when the user wants to add controllers via a web form, but it does not explicitly state when to use this tool over alternatives like add_controller. No exclusions or comparisons are provided, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_controllerRemove ControllerADestructive
Removes a registered controller by name. If it is the currently connected controller, the connection is closed.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the controller to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavioral context beyond annotations: mentions connection closure for currently connected controller. Annotations already indicate destructiveness, so description adds value.
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 concise sentences, no fluff. Purpose is front-loaded in the first sentence.
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 removal tool with one parameter and no output schema, the description covers the main action and a key side effect. Complete enough for effective use.
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% for the single parameter 'name', and description does not add additional meaning beyond the schema. Baseline 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?
Clearly states the action (removes), resource (registered controller), and method (by name). Distinguishes from siblings like 'add_controller' and 'select_controller'.
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?
Implies usage when removal is needed, but no explicit when-not or alternatives. Context is clear given sibling names, so it's adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_controllerSelect ControllerAIdempotent
Connects to a nomos controller by name. Disconnects from any previously connected controller. After connecting, all tools, resources, and prompts from that controller become available.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the controller to connect to (as shown in list_controllers). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations: it states that connecting disconnects any previous controller and makes the new controller's tools available. This aligns with the idempotentHint and openWorldHint annotations 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?
Two sentences front-load the core action and immediately explain the consequence. Every word is necessary; no extraneous detail.
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 covers the tool's function, side effects (disconnect old, make new tools available), and outcome. It lacks mention of error handling (e.g., invalid name) or return value, but these are minor gaps for a simple selection tool with no output schema.
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 'name' is already well-documented in the input schema (coverage 100%). The tool description adds no additional semantic meaning for the parameter beyond what the schema provides, meeting the baseline expectation.
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 'connects' and resource 'nomos controller by name', clearly stating the action. It distinguishes itself from siblings like 'add_controller' or 'list_controllers' by focusing on activating an existing controller definition.
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 explains the effect (tools become available), which implies when to use it (after listing controllers). However, it does not explicitly mention prerequisites or alternatives like 'use list_controllers first to get valid names'.
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. Dates show when Glama detected each change.
6 tool updates
v1.0.4- First observed
add_controller - First observed
connection_status - First observed
list_controllers - First observed
open_setup - First observed
remove_controller - First observed
select_controller
TDQS
Each tool has a distinct purpose: adding, removing, selecting, listing controllers, checking connection status, and opening setup. No two tools overlap in functionality.
Most tools follow a clear verb_noun pattern (e.g., add_controller, list_controllers), but 'connection_status' is a noun_noun form, slightly deviating from the pattern.
With 6 tools, the server is well-scoped for managing controller registrations and connections, covering essential operations without unnecessary bloat.
The tool set covers core CRUD for controllers (add, remove, list, select) plus connection status and setup. A minor gap is the lack of an explicit disconnect tool, though select_controller handles it implicitly.
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
Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
AI agent registry — search, discover, register, and connect agents via MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA powerful MCP server that enables AI assistants to discover, commission, and control Matter-compatible smart home devices through a standardized interface.218MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI assistants to control Home Assistant via natural language, including device control, automation management, and system configuration.MIT
- AlicenseNot gradedqualityCmaintenanceEnables natural language control of Loxone smart home systems, including lighting, audio, climate, and environmental monitoring, through MCP-compatible clients.292AGPL 3.0
- FlicenseNot gradedqualityFmaintenanceEnables AI assistants to control and query smart home devices through Homey Pro via an HTTP-based MCP server.2-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nomos-system/nomos-mcp-bridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server