search_artifact_patterns
Search for artifact patterns using a natural language query and filter by use case to quickly find design templates, code patterns, or visual components.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| patterns | Yes |
Implementation Reference
- src/web_gui_mcp/mcp_tools.py:36-45 (handler)Handler function for search_artifact_patterns tool. Delegates to search_patterns() from registry.
def search_artifact_patterns_handler( input_data: SearchArtifactPatternsInput, ) -> SearchArtifactPatternsOutput: return SearchArtifactPatternsOutput( patterns=search_patterns( query=input_data.query, use_case=input_data.use_case, max_results=input_data.max_results, ) ) - src/web_gui_mcp/mcp_tools.py:169-174 (registration)MCP tool registration of search_artifact_patterns via @mcp.tool() decorator.
def register_tools(mcp: Any, store: MemoryArtifactStore) -> None: @mcp.tool() def search_artifact_patterns( input: SearchArtifactPatternsInput, ) -> SearchArtifactPatternsOutput: return search_artifact_patterns_handler(input) - Input schema for search_artifact_patterns: query, use_case (optional), max_results.
class SearchArtifactPatternsInput(ToolBaseModel): query: str = "" use_case: Literal[ "planning", "code_review", "code_understanding", "design", "design_system", "prototyping", "diagrams", "decks", "research", "reports", "editor", ] | None = None max_results: int = Field(default=5, ge=1, le=20) - Output schema for search_artifact_patterns: list of PatternSummary objects.
class SearchArtifactPatternsOutput(ToolBaseModel): patterns: list[PatternSummary] - Core search logic: filters PATTERNS dict by use_case and keyword query, returns up to max_results summaries.
def search_patterns(query: str = "", use_case: str | None = None, max_results: int = 5) -> list[PatternSummary]: terms = query.casefold().split() results: list[ArtifactPattern] = [] for pattern in PATTERNS.values(): if use_case and pattern.use_case != use_case: continue haystack = " ".join( [pattern.id, pattern.name, pattern.description, pattern.use_case, *pattern.best_for] ).casefold() if terms and not all(term in haystack for term in terms): continue results.append(pattern) return [pattern.summary() for pattern in results[:max_results]]