Skip to main content
Glama

list_available_nodes

Browse available diagram nodes by provider, category, or search term to find valid components before creating diagrams.

Instructions

Discover 500+ node types across providers.

⚠️ USE THIS FIRST before create_diagram to avoid invalid node errors.

Filters: provider, category, search_term

Examples: AWS compute: provider="aws", category="compute" → EC2, Lambda, ECS, EKS... Search DBs: search_term="db" → RDS, DynamoDB, SQL across providers

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
providerNoFilter by provider (aws, azure, gcp, etc.)
categoryNoFilter by category (compute, database, etc.)
search_termNoSearch term for node type names
limitNoMaximum results to return

Implementation Reference

  • Registers the 'list_available_nodes' tool with the MCP server, defining its name, description, input parameters schema via type hints, and annotations.
    @mcp.tool( name="list_available_nodes", description="""Discover 500+ node types across providers. ⚠️ USE THIS FIRST before create_diagram to avoid invalid node errors. Filters: provider, category, search_term Examples: AWS compute: provider="aws", category="compute" → EC2, Lambda, ECS, EKS... Search DBs: search_term="db" → RDS, DynamoDB, SQL across providers""", annotations={ "readOnlyHint": True, "destructiveHint": False, "idempotentHint": True, }, )
  • The main handler function that implements the tool logic: accepts parameters, calls the search_nodes helper, formats the result using format_node_catalog, and handles errors.
    async def list_available_nodes( provider: Annotated[ Optional[str], Field(description="Filter by provider (aws, azure, gcp, etc.)") ] = None, category: Annotated[ Optional[str], Field(description="Filter by category (compute, database, etc.)") ] = None, search_term: Annotated[ Optional[str], Field(description="Search term for node type names") ] = None, limit: Annotated[int, Field(description="Maximum results to return", ge=1, le=500)] = 100, ) -> str: """List available diagram node types.""" try: # Search nodes nodes = search_nodes( provider=provider, category=category, search_term=search_term, limit=limit, ) # Calculate total (for this implementation, returned = total due to limit) total_count = len(nodes) returned_count = len(nodes) return format_node_catalog(nodes, total_count, returned_count) except Exception as e: return format_error(f"Failed to list nodes: {str(e)}")
  • Core helper function that performs the node discovery and filtering logic by dynamically introspecting the 'diagrams' library modules using importlib and inspect.
    def search_nodes( provider: Optional[str] = None, category: Optional[str] = None, search_term: Optional[str] = None, limit: int = 100, ) -> List[Dict[str, str]]: """Search for nodes matching criteria using dynamic discovery. Args: provider: Optional provider filter category: Optional category filter search_term: Optional search term for node type limit: Maximum number of results to return Returns: List of matching nodes with their information """ # Get discovered nodes (cached after first call) all_nodes = _discover_all_nodes() results = [] # Determine which providers to search providers_to_search = [provider] if provider else all_nodes.keys() for prov in providers_to_search: if prov not in all_nodes: continue provider_nodes = all_nodes[prov] # Determine which categories to search categories_to_search = [category] if category else provider_nodes.keys() for cat in categories_to_search: if cat not in provider_nodes: continue # Get nodes in this category nodes = provider_nodes[cat] for node in nodes: # Apply search filter if provided if search_term and search_term.lower() not in node.lower(): continue node_info = get_node_info(prov, cat, node) results.append(node_info) if len(results) >= limit: return results return results

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