Skip to main content
Glama

validate_diagram_spec

Validate diagram specifications before generation to check node validity, connection references, and cluster memberships, returning validation results with any errors or warnings.

Instructions

Validate diagram before generation (dry-run).

Checks: node validity, connection references, cluster memberships. Returns: {"valid": true/false, "errors": [...], "warnings": [...]}

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nodesYesNodes to validate
connectionsYesConnections to validate
clustersNoClusters to validate

Implementation Reference

  • The main asynchronous handler function that executes the tool's validation logic: checks node references, connection validity, cluster memberships, collects errors and warnings, and formats the output.
    async def validate_diagram_spec( nodes: Annotated[List[NodeDef], Field(description="Nodes to validate")], connections: Annotated[List[ConnectionDef], Field(description="Connections to validate")], clusters: Annotated[ Optional[List[ClusterDef]], Field(description="Clusters to validate") ] = None, ) -> str: """Validate diagram specification.""" errors = [] warnings = [] try: # Validate nodes node_ids = {node.id for node in nodes} for node in nodes: try: validate_node_reference(node.provider, node.category, node.type) except ValueError as e: errors.append(f"Node '{node.id}': {str(e)}") # Validate connections for conn in connections: if conn.from_node not in node_ids: errors.append(f"Connection references unknown source node '{conn.from_node}'") targets = [conn.to_node] if isinstance(conn.to_node, str) else conn.to_node for target in targets: if target not in node_ids: errors.append(f"Connection references unknown target node '{target}'") # Validate clusters if clusters: cluster_names = {cluster.name for cluster in clusters} for cluster in clusters: # Check node references for node_id in cluster.node_ids: if node_id not in node_ids: errors.append( f"Cluster '{cluster.name}' references unknown node '{node_id}'" ) # Check parent cluster exists if cluster.parent_cluster and cluster.parent_cluster not in cluster_names: errors.append( f"Cluster '{cluster.name}' references unknown parent '{cluster.parent_cluster}'" ) # Check for empty clusters if not cluster.node_ids: warnings.append(f"Cluster '{cluster.name}' is empty") # Determine if valid valid = len(errors) == 0 # Build metadata metadata = { "node_count": len(nodes), "edge_count": len(connections), "cluster_count": len(clusters) if clusters else 0, } return format_validation_result(valid, errors, warnings, metadata) except Exception as e: return format_error(f"Validation failed: {str(e)}")
  • The MCP tool decorator that registers the 'validate_diagram_spec' function as a tool with name, description, input schema via annotations, and execution hints.
    @mcp.tool( name="validate_diagram_spec", description="""Validate diagram before generation (dry-run). Checks: node validity, connection references, cluster memberships. Returns: {"valid": true/false, "errors": [...], "warnings": [...]}""", annotations={ "readOnlyHint": True, "destructiveHint": False, "idempotentHint": True, }, )
  • Pydantic input schema definitions using Annotated types (NodeDef, ConnectionDef, ClusterDef) with Field descriptions for validation and documentation.
    nodes: Annotated[List[NodeDef], Field(description="Nodes to validate")], connections: Annotated[List[ConnectionDef], Field(description="Connections to validate")], clusters: Annotated[ Optional[List[ClusterDef]], Field(description="Clusters to validate") ] = None, ) -> str:

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/apetta/diagrams-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server