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
| Name | Required | Description | Default |
|---|---|---|---|
| doc_id | Yes | ||
| query | Yes |
Implementation Reference
- docnav/navigator.py:874-920 (handler)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)