Skip to main content
Glama
nomos-system

nomos MCP Bridge

Official
by nomos-system

nomos MCP Bridge

A local MCP proxy that connects AI clients to one or more nomos system controllers.

npm version License: MIT


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 C

The 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-bridge

Other MCP Clients

Any client supporting stdio-based MCP servers can use the bridge. The command is:

npx -y nomos-mcp-bridge

Adding 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_controllers

List all registered controllers

select_controller

Connect to a controller by name

add_controller

Register a new controller

remove_controller

Remove a registered controller

open_setup

Open the setup web page in the browser

connection_status

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=0 in 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 dev

License

MIT

Available Tools

6 tools
add_controllerAdd ControllerA

Registers a new nomos controller. If this is the first controller, it is automatically selected.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesA friendly name for the controller (e.g. "Wohnhaus", "Büro")
urlYesThe base URL of the controller (e.g. "https://192.168.1.100"). The /mcp path is appended automatically.
tokenYesThe MCP Bearer token from the nomos controller settings.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 StatusA
Read-onlyIdempotent

Shows the current connection status — which controller is connected and whether the connection is active.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 ControllersA
Read-onlyIdempotent

Lists all registered nomos controllers with their names, URLs, and which one is currently active.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 PageA
Read-onlyIdempotent

Opens the nomos MCP Bridge setup page in the default browser, where controllers can be added via a web form.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 ControllerA
Destructive

Removes a registered controller by name. If it is the currently connected controller, the connection is closed.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the controller to remove.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 ControllerA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the controller to connect to (as shown in list_controllers).

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 6 tool updatesv1.0.4
    • First observedadd_controller
    • First observedconnection_status
    • First observedlist_controllers
    • First observedopen_setup
    • First observedremove_controller
    • First observedselect_controller

TDQS

A4.1/5.0
Disambiguation5/5

Each tool has a distinct purpose: adding, removing, selecting, listing controllers, checking connection status, and opening setup. No two tools overlap in functionality.

Naming Consistency4/5

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.

Tool Count5/5

With 6 tools, the server is well-scoped for managing controller registrations and connections, covering essential operations without unnecessary bloat.

Completeness4/5

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

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A powerful MCP server that enables AI assistants to discover, commission, and control Matter-compatible smart home devices through a standardized interface.
    21
    8
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that enables AI assistants to control Home Assistant via natural language, including device control, automation management, and system configuration.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language control of Loxone smart home systems, including lighting, audio, climate, and environmental monitoring, through MCP-compatible clients.
    29
    2
    AGPL 3.0

Latest Blog Posts

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