Initial commit: Node-RED MCP server (Python/FastMCP)

22-tool MCP server for Node-RED flow management with Pydantic models,
incremental flow patching, layout linting, and flexible auth (token,
basic, OAuth2). 137 tests, full ruff compliance.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Joe Carter
2026-02-24 09:19:33 +00:00
commit 764d123fdb
34 changed files with 5923 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
"""Response models for MCP tools.
All MCP tools must return Pydantic models, never dicts.
These models wrap paginated and structured responses.
"""
from typing import Any
from pydantic import Field
from nodered_mcp.models.base import BaseApiModel
class FlowList(BaseApiModel):
"""List of flows with summary statistics."""
flows: list[Any] = Field(default_factory=list) # raw flow data (heterogeneous)
tabs: list[Any] = Field(default_factory=list) # raw tab data
summary: str = ""
statistics: dict = Field(default_factory=dict)
class FlowSummary(BaseApiModel):
"""Formatted flow summary with grouped data."""
summary: str = ""
statistics: dict = Field(default_factory=dict)
data: dict = Field(default_factory=dict)
class FlowCreateResult(BaseApiModel):
"""Result of flow creation."""
id: str = ""
class Settings(BaseApiModel):
"""Node-RED settings."""
http_node_root: str = Field("", validation_alias="httpNodeRoot")
version: str = ""
user: dict | None = None
class DiagnosticsResult(BaseApiModel):
"""Diagnostics result.
Thin wrapper - diagnostics response structure is too variable
for strict modeling.
"""
data: dict = Field(default_factory=dict)