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>
53 lines
1.2 KiB
Python
53 lines
1.2 KiB
Python
"""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)
|