Skip to main content
Glama
gemini2026

Documentation Search MCP Server

by gemini2026

filtered_search

Search documentation with filters for content type, difficulty, code examples, and version to find precise information for programming tasks.

Instructions

Search with advanced filtering options.

Args:
    query: The search query
    library: The library to search in
    content_type: Filter by content type ("tutorial", "reference", "example", "guide")
    difficulty_level: Filter by difficulty ("beginner", "intermediate", "advanced")
    has_code_examples: Filter for content with code examples (true/false)
    version: Library version to search (e.g., "4.2", "stable", "latest"). Default: "latest"
    auto_detect_version: Automatically detect installed package version. Default: False

Returns:
    Filtered search results matching specified criteria

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYes
libraryYes
content_typeNo
difficulty_levelNo
has_code_examplesNo
versionNolatest
auto_detect_versionNo

Implementation Reference

  • The main handler function for the 'filtered_search' MCP tool. It constructs SearchFilters from parameters and delegates to the FilteredSearch instance's search_with_filters method. Includes the @mcp.tool() registration decorator.
    @mcp.tool()
    async def filtered_search(
        query: str,
        library: str,
        content_type: Optional[str] = None,
        difficulty_level: Optional[str] = None,
        has_code_examples: Optional[bool] = None,
        version: str = "latest",
        auto_detect_version: bool = False,
    ):
        """
        Search with advanced filtering options.
    
        Args:
            query: The search query
            library: The library to search in
            content_type: Filter by content type ("tutorial", "reference", "example", "guide")
            difficulty_level: Filter by difficulty ("beginner", "intermediate", "advanced")
            has_code_examples: Filter for content with code examples (true/false)
            version: Library version to search (e.g., "4.2", "stable", "latest"). Default: "latest"
            auto_detect_version: Automatically detect installed package version. Default: False
    
        Returns:
            Filtered search results matching specified criteria
        """
        from .smart_search import filtered_search, SearchFilters
    
        await enforce_rate_limit("filtered_search")
    
        filters = SearchFilters(
            content_type=content_type,
            difficulty_level=difficulty_level,
            has_code_examples=has_code_examples,
        )
    
        try:
            results = await filtered_search.search_with_filters(query, library, filters)
    
            return {
                "query": query,
                "library": library,
                "filters_applied": {
                    "content_type": content_type,
                    "difficulty_level": difficulty_level,
                    "has_code_examples": has_code_examples,
                },
                "total_results": len(results),
                "results": [
                    {
                        "title": result.title,
                        "url": result.url,
                        "snippet": (
                            result.snippet[:200] + "..."
                            if len(result.snippet) > 200
                            else result.snippet
                        ),
                        "relevance_score": result.relevance_score,
                        "content_type": result.content_type,
                        "difficulty_level": result.difficulty_level,
                        "estimated_read_time": f"{result.estimated_read_time} min",
                    }
                    for result in results[:10]
                ],
            }
        except Exception as e:
            return {"error": f"Filtered search failed: {str(e)}", "results": []}
  • FilteredSearch class that wraps SmartSearch and applies post-search filtering based on content_type, difficulty_level, and has_code_examples.
    class FilteredSearch:
        """Search with advanced filtering capabilities"""
    
        def __init__(self, smart_search: SmartSearch):
            self.smart_search = smart_search
    
        async def search_with_filters(
            self, query: str, library: str, filters: SearchFilters
        ) -> List[SearchResult]:
            """Perform search with applied filters"""
    
            # Get base search results
            results = await self.smart_search.semantic_search(query, library)
    
            # Apply filters
            filtered_results = []
            for result in results:
                if self.passes_filters(result, filters):
                    filtered_results.append(result)
    
            return filtered_results
    
        def passes_filters(self, result: SearchResult, filters: SearchFilters) -> bool:
            """Check if a result passes all filters"""
    
            if filters.content_type and result.content_type != filters.content_type:
                return False
    
            if (
                filters.difficulty_level
                and result.difficulty_level != filters.difficulty_level
            ):
                return False
    
            if filters.has_code_examples is not None:
                has_code = result.code_snippets_count > 0
                if filters.has_code_examples != has_code:
                    return False
    
            if (
                filters.max_reading_time
                and result.estimated_read_time > filters.max_reading_time
            ):
                return False
    
            # Language filter would need more sophisticated detection
            # For now, skip language filtering
    
            return True
  • Dataclass defining the filter parameters used by FilteredSearch.
    @dataclass
    class SearchFilters:
        """Filters for refining search results"""
    
        content_type: Optional[str] = None  # "tutorial", "reference", "example"
        difficulty_level: Optional[str] = None  # "beginner", "intermediate", "advanced"
        has_code_examples: Optional[bool] = None
        max_reading_time: Optional[int] = None  # in minutes
        language: Optional[str] = None  # programming language
  • Global instance of FilteredSearch used by the tool handler.
    smart_search = SmartSearch()
    filtered_search = FilteredSearch(smart_search)

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/gemini2026/documentation-search-mcp'

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