nr-mcp
Allows AI assistants to interact with Node-RED for flow management, including reading flows, searching nodes, editing function code, deploying changes safely, and managing modules via the Node-RED Admin API.
Click on "Deploy 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., "@nr-mcpShow me the summary of all flows"
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.
nr-mcp
A Model Context Protocol (MCP) server that lets AI assistants interact with Node-RED — read flows, search nodes, edit function code, deploy changes safely, and manage modules.
Built to solve real problems: the existing Node-RED MCP implementations use PUT /flow/:id which reorders your tabs. nr-mcp uses the correct GET → POST /flows pattern with optimistic locking, so your tab order is always preserved.
Features
13 tools for complete Node-RED flow management:
Tool | Description |
| Overview of all tabs with node counts and groups |
| Get a single tab with all nodes — by name or ID |
| Search nodes by name, type, or JavaScript code content |
| Extract full JS code from function nodes (incl. init/finalize) |
| Full config with computed upstream/downstream connections |
| Read flow-level context variables |
| Deploy changes with optimistic locking — never reorders tabs |
| Batch-create nodes/groups in a single deploy |
| Batch-delete with automatic wire and group cleanup |
| Trigger inject nodes remotely to test flows |
| List installed modules and available node types |
| Install npm packages from the Node-RED registry |
| Read debug/error data from flow context |
Why not just use the existing MCP servers?
Tab reorder bug: Other implementations use
PUT /flow/:idwhich silently reorders your tabs in Node-RED. nr-mcp uses the correctGET → POST /flowsfull-deploy pattern.Optimistic locking: Every deploy checks the
revfield. If someone else deployed between your read and write, you get a clear conflict error instead of silent data loss.Smart search: Search across node names, types, function code, templates, and actions in one call.
Production-tested: Built and used daily for managing complex Node-RED installations (home automation, IoT, energy management).
Related MCP server: node-red-contrib-mcp-server
Installation
Prerequisites
Install from PyPI
pip install nr-mcpInstall with uv (recommended)
uv tool install nr-mcpOr from source:
git clone https://github.com/Texan-NXTassist/nr-mcp.git
cd nr-mcp
uv tool install .This creates the nr-mcp command in ~/.local/bin/.
Configuration
Environment variables
Variable | Required | Description |
| No | Node-RED URL (default: |
| No* | Bearer token for token-based auth |
| No* | Username for Basic Auth |
| No* | Password for Basic Auth |
* At least one auth method is recommended. Auth is checked in order: token → basic auth → no auth.
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"nr-mcp": {
"command": "nr-mcp",
"env": {
"NR_URL": "http://localhost:1880",
"NR_USER": "admin",
"NR_PASS": "your-password"
}
}
}
}Tip: If you get a "working directory" error, create a wrapper script:
#!/bin/bash cd /tmp exec nr-mcp "$@"Then point
commandto the wrapper path.
Cursor / VS Code
Add to your MCP settings (.cursor/mcp.json or VS Code equivalent):
{
"mcpServers": {
"nr-mcp": {
"command": "nr-mcp",
"env": {
"NR_URL": "http://localhost:1880",
"NR_TOKEN": "your-access-token"
}
}
}
}Usage examples
Once connected, you can ask your AI assistant things like:
"Show me all Node-RED tabs and their node counts"
"Search for nodes that contain 'mqtt' in their code"
"Show me the function code for node abc123"
"Update the function code in node xyz to add error handling"
"Create an inject node and an HTTP request node on the Weather tab"
"What modules are installed? Is node-red-dashboard available?"
"Install node-red-contrib-influxdb"
"Trigger the 'Test' inject node and check for errors"
Architecture
nr-mcp is a Python MCP server that communicates with Node-RED via its Admin API. It uses stdio transport (standard for MCP) and makes HTTP calls to your Node-RED instance.
AI Assistant ↔ MCP (stdio) ↔ nr-mcp ↔ HTTP ↔ Node-RED Admin APIKey design decisions
GET→POST pattern: All deploys fetch full flows, modify in-place, then POST back. Never uses
PUT /flow/:idwhich reorders tabs.Optimistic locking: Uses the Node-RED
revfield to detect concurrent modifications.No caching: Every tool call fetches fresh data. Slightly slower, but always correct.
Single retry on conflict: Deploy operations retry once on 409 Conflict.
For more details, see docs/ARCHITECTURE.md.
Node-RED setup
The Admin API must be enabled (it is by default). If you've restricted it, ensure these endpoints are accessible:
GET /flowsandPOST /flows— flow read/writeGET /context/flow/:id— flow contextPOST /inject/:id— inject triggerGET /nodesandPOST /nodes— module management
See Node-RED Admin API docs for auth configuration.
Contributing
Contributions welcome! Please open an issue first to discuss what you'd like to change.
git clone https://github.com/Texan-NXTassist/nr-mcp.git
cd nr-mcp
uv venv && source .venv/bin/activate
uv pip install -e .License
MIT — see LICENSE.
Available Tools
13 toolsnr_create_nodesA
Create one or more new nodes/groups in a single deploy. Each node dict must include 'id', 'type', and 'z' (target tab ID). Groups need 'type': 'group'. Config nodes (e.g. ha-entity-config) use 'z': '' for global scope.
| Name | Required | Description | Default |
|---|---|---|---|
| nodes | Yes | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the operation creates nodes/groups, includes details about required fields (id, type, z) and special cases (config nodes use 'z': ''). It does not mention auth needs or error conditions, but for a creation tool it provides adequate transparency.
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 with no waste. The first sentence front-loads the purpose, and the second provides essential detail. Every sentence earns its place, making it appropriately 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 presence of an output schema (so return values are covered), the description adequately explains the main parameter and special cases. It lacks information on prerequisites or error conditions, but for a creation tool, it is complete enough for typical 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?
Despite 0% schema description coverage, the description adds significant meaning to the 'nodes' parameter by listing required fields and explaining group and config node usage. The 'description' parameter is not explained, but it is optional and default null, so the overall param semantics are well-covered.
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 ('Create') and the resource ('nodes/groups'). It also specifies the required fields for each node dict, which distinguishes it from sibling tools like nr_delete_nodes or nr_inject. The verb-resource pair is specific and unambiguous.
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 tool is for creating nodes in a deploy, which is clear. However, it does not provide explicit guidance on when to use this tool versus alternatives (e.g., nr_install_module for modules) or when not to use it. The context is sufficient but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nr_delete_nodesA
Delete one or more nodes by ID. Also cleans up references: removes deleted IDs from group.nodes arrays and from other nodes' wires arrays.
| Name | Required | Description | Default |
|---|---|---|---|
| node_ids | Yes | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses side effect of cleaning up references in groups and wires, which is important. However, with no annotations, more transparency is expected—e.g., irreversibility, authorization needs, or impact on other nodes. Moderate disclosure.
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, front-loaded with the main action and key side effect. No wasted words.
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 deletion and reference cleanup. With an output schema present, return value details are acceptable. Could mention irreversibility or permissions, but overall sufficient for a deletion 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?
Schema coverage is 0%, so description must explain parameters. It mentions 'by ID' but does not specify that node_ids is an array of strings. The optional description parameter is not mentioned at all. Minimal added meaning beyond schema titles.
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 deletes nodes by ID and cleans up references. Verb 'Delete' + resource 'nodes' + method 'by ID' distinguishes from sibling tools like nr_create_nodes and nr_search_nodes.
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 explicit guidance on when to use versus alternatives. Lacks context such as prerequisites (e.g., node IDs must exist), or when not to use (e.g., avoid deleting referenced nodes without care). No mention of alternatives like bulk operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nr_get_debug_outputA
Read debug output from flow context. Use when a flow has a catch node that stores errors/debug data to flow context. Pass key=null to list all context keys. Trigger flow with nr_inject first, then read this.
| Name | Required | Description | Default |
|---|---|---|---|
| flow_id | Yes | ||
| key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It indicates a read operation ('Read debug output'), implying no side effects, but it does not explicitly state that it is non-destructive or safe. More transparency about permissions or effects would be beneficial.
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 long, front-loading the purpose and providing essential usage guidance without unnecessary words. Every sentence 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?
Given that an output schema exists, the description does not need to explain return values. It covers the main functionality, usage context, and key parameter behavior. However, it could mention what happens if no debug output exists or if the catch node hasn't stored data.
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 input schema has 0% description coverage, so the description must add meaning. It explains the key parameter behavior: pass null to list all context keys. This is valuable beyond the schema. However, the flow_id parameter is not elaborated beyond its type.
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 it reads debug output from flow context, specifically when a catch node stores errors/debug data. It also explains the behavior of passing key=null to list all keys. However, it does not explicitly distinguish from the sibling nr_get_flow_context, which could be used for general context reading.
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 explicitly says when to use: when a flow has a catch node storing errors/debug data to flow context. It also provides a usage sequence: trigger with nr_inject first, then read. However, it does not mention when not to use or list alternative tools like nr_get_flow_context for other context reading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nr_get_flowA
Get a single Node-RED tab with all its nodes and groups. Accepts tab name (case-insensitive) or tab ID.
| Name | Required | Description | Default |
|---|---|---|---|
| name_or_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must cover behavioral traits. It implies a read operation and explains case-insensitive name matching, but it omits details about error handling (e.g., tab not found) or whether the tool is idempotent.
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 action, and every sentence is necessary and informative. 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?
Given the tool's simplicity (1 param, output schema exists), the description covers the essential purpose and parameter meaning. It lacks mention of error behavior, but overall it is sufficient for correct usage.
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?
Despite 0% schema description coverage, the description adds significant meaning by clarifying that the single parameter can be a tab name (case-insensitive) or tab ID. This goes beyond the bare type definition, though it could specify ID format.
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 retrieves a single Node-RED tab with all its nodes and groups. It specifies the verb 'Get' and the resource 'tab', and distinguishes from sibling tools like nr_get_flow_summary by mentioning the full content.
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 its siblings (e.g., nr_get_flow_summary, nr_get_flow_context). It only explains parameter input (name or ID) but lacks context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nr_get_flow_contextA
Read Node-RED flow context variables. Pass key=null to list all keys, or a specific key to get its value.
| Name | Required | Description | Default |
|---|---|---|---|
| flow_id | Yes | ||
| key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It explains the key parameter's behavior but does not mention error handling (e.g., non-existent flow_id or key), authentication needs, or side effects. The 'Read' verb implies non-destructive, but more detail would improve transparency.
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 immediately states the purpose and usage pattern. It is concise without extraneous words, front-loading the key action and parameter behavior.
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 and the presence of an output schema (which likely defines return values), the description is nearly complete. It covers the main functionality and key parameter behavior. Missing details like error handling are minor for this read-only tool, but a note on precondition (flow must exist) would push it to 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 0% with no descriptions in the schema. The description adds meaning for the 'key' parameter (list vs. value retrieval) but does not clarify 'flow_id' beyond being required. For two parameters, this is partial compensation. Baseline for low coverage is 4, but the lack of flow_id explanation reduces it to 3.
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 reads Node-RED flow context variables. It specifies two modes: listing all keys (key=null) and retrieving a specific value (key set). This differentiates it from sibling tools like nr_get_flow or nr_get_function_code.
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 how to use the key parameter (null to list, specific key to get value). It implies the tool is for reading context, not writing, but does not explicitly mention when not to use or alternatives. For a simple read operation, this is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nr_get_flow_summaryA
Quick overview of all Node-RED tabs with node counts and groups.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only says 'quick overview' without disclosing behavioral traits such as read-only nature, cost, or side effects. The description carries the full burden but adds little beyond purpose.
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 extraneous words. It is front-loaded with the purpose and is efficiently written.
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 zero parameters and an existing output schema (though not shown), the description is minimal but functional. However, it lacks usage guidelines and behavioral transparency, making it less complete for complex 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?
There are zero parameters, so no parameter descriptions are needed. The baseline score of 4 applies as no additional information is required beyond what the schema (empty) 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 clearly states that the tool provides a quick overview of all Node-RED tabs with node counts and groups, using a specific verb and resource. It distinguishes itself from siblings like nr_get_flow, which likely returns more detailed flow information.
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 a quick overview but does not explicitly state when to use it versus alternatives like nr_get_flow or search tools. No guidance on when not to use it or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nr_get_function_codeB
Extract full JavaScript code from a Node-RED function node.
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states the action without detailing permissions, side effects, or return behavior. While an output schema exists, the description adds no clarity on what the extracted code looks like.
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, concise sentence with no redundant information. However, it could include more detail without sacrificing 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 simple one-parameter tool with an output schema, the description is moderately complete. It lacks error handling info and return value specifics, but the existence of an output schema mitigates some 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 0%, so the description should explain the parameter node_id. However, it does not describe how to obtain the node ID or its format, leaving ambiguity.
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 explicitly states the action 'Extract', the resource 'full JavaScript code', and the context 'from a Node-RED function node'. It is specific and distinguishable from sibling tools like nr_get_node_config or nr_get_flow.
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, prerequisites, or alternatives. For example, it does not clarify whether to use this instead of nr_get_node_config for retrieving code.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nr_get_installed_modulesA
List installed Node-RED modules and their node types. Optionally filter by module name or node type containing query string. Returns module name, version, and list of node types provided.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. Mentions return fields (module name, version, node types) but lacks details on side effects, idempotency, or performance.
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-loaded with main action, no wasted words.
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?
Simple tool with one optional parameter and output schema. Description covers purpose, parameter, and output structure sufficiently.
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 0%, but description explains the `query` parameter as filtering by substring. Adds meaning beyond the schema's type definition.
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 'List installed Node-RED modules and their node types' with a specific verb and resource. Distinguishes from sibling tools like nr_install_module and nr_create_nodes.
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?
Provides clear context: optional filtering by query string. While no explicit when-not-to-use, the description makes the use case obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nr_get_node_configB
Get full node configuration including wires, upstream/downstream connections, and group membership.
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose any behavioral traits such as permissions required, side effects, or rate limits. The operation appears read-only, but this is not explicitly stated.
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, well-structured sentence that immediately conveys the tool's purpose and scope, with no superfluous text.
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 simple parameter set and presence of an output schema, the description is minimally adequate but lacks details on the output structure and any usage nuances. It does not fully cover the context for a retrieval 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 sole parameter 'node_id' has no description in the schema (0% coverage) and the tool description does not explain its format or expected values, leaving the agent without guidance.
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 'Get full node configuration' with explicit details on what is included (wires, upstream/downstream connections, group membership), which distinguishes it from sibling tools like nr_get_flow or nr_search_nodes.
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 retrieving a node's full configuration, but it does not explicitly state when to use it versus alternatives or provide any usage restrictions. The purpose is clear enough from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nr_injectA
Trigger an inject node to fire immediately. Use nr_search_nodes to find inject nodes first. The node must be of type 'inject'.
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description reveals that the tool fires an inject node immediately and requires the node to be of type 'inject'. However, it lacks details on side effects or return behavior, leaving some behavioral aspects unclear.
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 exceptionally concise, with two sentences that front-load the core purpose and essential usage instruction, with no extraneous words.
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 (one parameter, output schema present), the description adequately covers prerequisites, type constraint, and action. No additional information seems necessary for correct invocation.
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 0%, but the description adds meaning by specifying that the node_id parameter refers to an inject node found via nr_search_nodes and must be of type 'inject', compensating for the schema's lack of 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 action ('Trigger an inject node to fire immediately') with a specific verb and resource, and distinguishes itself from sibling tools like nr_search_nodes and nr_create_nodes.
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 advises to 'Use nr_search_nodes to find inject nodes first', providing clear context for when to use the tool, but does not explicitly exclude other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nr_install_moduleA
Install a new Node-RED module (npm package) from the registry. Use nr_get_installed_modules to check what's already installed first. Installation may take 30-60 seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| module_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It mentions installation may take 30-60 seconds, which is helpful. However, it lacks details about error handling, idempotency, permissions, or effects on existing modules.
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 long with no redundancy. The first sentence states the purpose, and the second provides usage guidance and time expectation. Every sentence is necessary and directly contributes.
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 and the presence of an output schema (which means return values need not be explained), the description covers purpose, pre-installation check, and time estimate. It could mention dependencies or failure modes, but is largely sufficient.
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 input schema has one required parameter 'module_name' with 0% coverage from schema description. The description does not explain what constitutes a valid module name or provide examples, leaving the agent without semantic guidance beyond the parameter name.
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 'Install a new Node-RED module (npm package) from the registry.' It uses a specific verb (Install) and resource (Node-RED module) and distinguishes from sibling tools that deal with nodes, flows, and other operations.
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 advises using nr_get_installed_modules to check before installing, and mentions a 30-60 second installation time. It provides a clear when-to-use guideline but does not explicitly state when not to use or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nr_safe_deployB
Deploy changes to a Node-RED node with optimistic locking. Uses correct GET→POST pattern (never PUT). Preserves tab order.
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes | ||
| fields | Yes | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors like optimistic locking, proper HTTP pattern, and tab order preservation. However, with no annotations provided, it does not cover other important aspects such as error handling, permissions, or conflict resolution. The disclosed traits are useful but not exhaustive.
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 three sentences, each adding unique value: purpose and locking, HTTP pattern, and tab order. No wasted words; front-loaded with the core action.
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 absence of annotations, the description lacks details on return values (despite an output schema), conflict handling, and prerequisites (e.g., node must exist). The tool involves optimistic locking and a specific pattern, but the description does not sufficiently prepare the agent for operational nuances.
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 input schema has 0% description coverage, and the tool description does not mention or explain any of the three parameters (node_id, fields, description). This leaves the agent with no semantic guidance beyond parameter names and types.
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 explicitly states deploying changes to a Node-RED node with optimistic locking, and distinguishes the tool from potential alternatives by specifying the correct GET→POST pattern (never PUT). This makes the purpose clear and distinct from siblings like nr_create_nodes or nr_delete_nodes.
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, nor does it mention any prerequisites or conditions. While the `GET→POST` pattern hints at best practices, there is no explicit when-to-use or when-not-to-use information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nr_search_nodesC
Search Node-RED nodes by name, type, or function code content. Searches in: name, type, func, template, action fields.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| type | No | ||
| flow | No | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fails to disclose behavioral traits. It does not state that the tool is read-only, whether authentication is required, rate limits, or search semantics (e.g., case sensitivity, matching logic).
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 very concise with two sentences, front-loading the core purpose and listing searched fields. There is no redundant or unnecessary text.
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?
Despite having an output schema, the description does not summarize return values, pagination, or behavior when no results are found. The tool has multiple parameters and a search function, yet the description is too sparse to enable confident usage.
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 0%, but the description only mentions search fields without explaining parameters like 'type', 'flow', or 'max_results'. It does not describe how these parameters filter results or what values they accept.
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 verb 'Search' and the resource 'Node-RED nodes', specifying searchable fields (name, type, func, template, action). It distinguishes this tool from siblings, none of which are search tools.
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 about when to use this tool versus alternatives. No mention of prerequisites, when to avoid it, or which sibling tools might be more appropriate for specific tasks.
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.
13 tool updates
v1.2.2- First observed
nr_create_nodes - First observed
nr_delete_nodes - First observed
nr_get_debug_output - First observed
nr_get_flow - First observed
nr_get_flow_context - First observed
nr_get_flow_summary - First observed
nr_get_function_code - First observed
nr_get_installed_modules - First observed
nr_get_node_config - First observed
nr_inject - First observed
nr_install_module - First observed
nr_safe_deploy - First observed
nr_search_nodes
TDQS
Scored across 13 tools
Each tool targets a distinct operation: creation, deletion, retrieval of various aspects (flow, config, code, context, summary), searching, injecting, module management, and deployment. No two tools have overlapping functionality due to clear scope definitions.
All tools follow the 'nr_verb_noun' pattern with consistent snake_case naming. Verbs are descriptive (create, delete, get, inject, install, safe_deploy, search) and nouns clearly indicate the resource or action.
13 tools cover the core Node-RED management operations without being excessive. The count is well-scoped for typical use cases including node manipulation, flow inspection, module management, and deployment.
The tool set covers CRUD for nodes and flows, searching, debugging, module installation, and deployment. Minor gaps exist (e.g., no explicit tool to update individual node properties, no module uninstall), but the deployment tool and context operations mitigate these for most workflows.
Maintenance
Related MCP Connectors
Inspect and control your Northflank projects, services, jobs, and builds from your AI assistant.
- FlowstepOAuthai.flowstep
Generate, inspect, and manage Flowstep UI designs directly from your AI assistant.
Create, browse, remix, collaborate on, and run durable AI workflow nodes from MCP hosts.
Read and write KukGit repositories, files, issues and pull requests from an AI assistant.
Related MCP Servers
- FlicenseNot gradedqualityAmaintenanceA Model Context Protocol server for Node-RED integration, enabling AI agents to manage flows, install modules, and monitor Node-RED instances via natural language.5-
- AlicenseNot gradedqualityBmaintenanceExposes Node-RED flows as MCP tools for AI assistants, with OAuth protection and optional admin tools for flow management.30 npm1ISC
- AlicenseBqualityDmaintenanceConnects AI assistants to the Node-RED Admin API, enabling flow inspection, node management, graph analysis, debug capture, and rollback operations through natural language.3711 npmMIT
- AlicenseNot gradedqualityBmaintenanceTurns Node-RED flows into OAuth-protected MCP tools that AI assistants can call, with optional read-only access to the Node-RED admin API.MIT