search_documents
Search project documents by content with filtering options for document types and project scope, returning ranked results with optional full content inclusion.
Instructions
Search documents by content with advanced filtering and ranking
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query to find in document titles and content | |
| project_id | No | Limit search to specific project | |
| document_types | No | Filter by document types | |
| limit | No | Maximum number of results to return | |
| include_content | No | Whether to include full document content in results |
Implementation Reference
- src/tools/documents.ts:295-331 (handler)Main handler function for search_documents tool. Parses input, queries database via supabaseService.getDocuments, filters by type, ranks results using rankSearchResults helper, and returns formatted results with metadata.export const searchDocuments = requireAuth(async (args: any) => { const { query, project_id, document_types, limit, include_content } = SearchDocumentsSchema.parse(args) logger.info('Searching documents', { query, project_id, document_types, limit }) // Get all matching documents const allDocuments = await supabaseService.getDocuments( { project_id, search: query }, { limit: limit * 2 }, // Get more for better ranking { field: 'updated_at', order: 'desc' } ) // Filter by document types if specified let filteredDocuments = allDocuments if (document_types && document_types.length > 0) { filteredDocuments = allDocuments.filter(doc => document_types.includes(doc.document_type)) } // Rank results by relevance const rankedResults = rankSearchResults(filteredDocuments, query, include_content) // Limit results const finalResults = rankedResults.slice(0, limit) return { results: finalResults, total_found: rankedResults.length, search_metadata: { query, filters: { project_id, document_types }, ranking_factors: ['title_match', 'content_relevance', 'document_freshness', 'ai_readiness'] } } })
- src/tools/documents.ts:45-51 (schema)Zod schema used for input validation in the search_documents handler.const SearchDocumentsSchema = z.object({ query: z.string().min(1), project_id: z.string().uuid().optional(), document_types: z.array(z.string()).optional(), limit: z.number().int().positive().max(50).default(20), include_content: z.boolean().default(false) })
- src/tools/documents.ts:254-293 (registration)MCPTool registration for search_documents, including name, description, and input schema definition.export const searchDocumentsTool: MCPTool = { name: 'search_documents', description: 'Search documents by content with advanced filtering and ranking', inputSchema: { type: 'object', properties: { query: { type: 'string', minLength: 1, description: 'Search query to find in document titles and content' }, project_id: { type: 'string', format: 'uuid', description: 'Limit search to specific project' }, document_types: { type: 'array', items: { type: 'string', enum: ['requirement', 'design', 'technical', 'meeting_notes', 'other'] }, description: 'Filter by document types' }, limit: { type: 'number', minimum: 1, maximum: 50, default: 20, description: 'Maximum number of results to return' }, include_content: { type: 'boolean', default: false, description: 'Whether to include full document content in results' } }, required: ['query'] } }
- src/tools/documents.ts:1346-1357 (registration)Object exporting all document handlers, including search_documents mapped to the handler function.export const documentHandlers = { list_documents: listDocuments, create_document: createDocument, get_document: getDocument, update_document: updateDocument, search_documents: searchDocuments, get_document_context: getDocumentContext, add_document_collaborator: addDocumentCollaborator, analyze_document_content: analyzeDocumentContent, get_document_collaboration: getDocumentCollaboration, generate_document_template: generateDocumentTemplate, bulk_document_operations: bulkDocumentOperations
- src/tools/documents.ts:1361-1373 (registration)Object exporting all document tool definitions, including searchDocumentsTool.export const documentTools = { listDocumentsTool, createDocumentTool, getDocumentTool, updateDocumentTool, searchDocumentsTool, getDocumentContextTool, addDocumentCollaboratorTool, analyzeDocumentContentTool, getDocumentCollaborationTool, generateDocumentTemplateTool, bulkDocumentOperationsTool }