Skip to main content
Glama

search_document

Find specific content within documents using search queries to locate relevant information quickly.

Instructions

Search for specific content within a document.

Args:
    doc_id: Document identifier
    query: Search term or phrase

Returns:
    Formatted search results with context

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
doc_idYes
queryYes

Implementation Reference

  • Core handler implementation of search_document in DocumentNavigator class. Performs recursive traversal of document nodes, searches for query matches in content, associates with nearest heading for context, formats top 5 results.
    def search_document(self, doc_id: str, query: str) -> str:
        """Search document and return formatted results."""
        document = self.get_document(doc_id)
        if not document:
            return f"Document '{doc_id}' not found"
    
        # Perform search using document's search functionality
        results = []
        query_lower = query.lower()
    
        def search_node(node: DocumentNode) -> None:
            if query_lower in node.content.lower():
                # Find nearest heading as context
                parent = node.parent
                while parent and parent.type != "heading":
                    parent = parent.parent
    
                section_title = parent.title if parent else "Document Root"
    
                from .models import SearchResult
    
                results.append(
                    SearchResult(
                        node_id=node.id,
                        section=section_title,
                        section_id=parent.id if parent else "root",
                        content=node.content,
                        type=node.type,
                        line_number=node.attributes.get("line_number"),
                    )
                )
    
            for child in node.children:
                search_node(child)
    
        if document.root:
            search_node(document.root)
    
        if not results:
            return f"No results found for '{query}'"
    
        output = f"Found {len(results)} results for '{query}':\n\n"
        for i, result in enumerate(results[:5], 1):  # Limit to first 5 results
            output += f"{i}. In section '{result.section}' (#{result.section_id}):\n"
            output += f"   {result.content[:100]}...\n\n"
    
        return output
  • server.py:85-96 (registration)
    MCP tool registration for 'search_document'. Thin wrapper that delegates to the navigator's search_document method. Input schema defined by function signature and docstring.
    @mcp.tool()
    def search_document(doc_id: str, query: str) -> str:
        """Search for specific content within a document.
    
        Args:
            doc_id: Document identifier
            query: Search term or phrase
    
        Returns:
            Formatted search results with context
        """
        return navigator.search_document(doc_id, query)

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/shenyimings/DocNav-MCP'

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