Skip to main content
Glama

rag_search

Search your personal document corpus to find relevant information from notes, documents, and web pages using natural language queries.

Instructions

Поиск по личному корпусу документов

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoМаксимальное количество результатов
queryYesПоисковый запрос

Implementation Reference

  • src/server.ts:43-61 (registration)
    Registration of 'rag_search' tool in MCP server, including input schema definition.
    { name: 'rag_search', description: 'Поиск по личному корпусу документов', inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'Поисковый запрос', }, limit: { type: 'number', description: 'Максимальное количество результатов', default: 5, }, }, required: ['query'], }, },
  • MCP tool call handler for 'rag_search' that delegates to RAGService.search.
    case 'rag_search': return { content: await this.ragService.search(args.query as string, (args.limit as number) || 5) };
  • RAGService.search method: obtains SQLiteClient from pool and calls its search method.
    async search(query: string, limit: number = 5): Promise<SearchResult[]> { try { console.log(`🔍 Поиск: "${query}" (лимит: ${limit})`); // Получаем SQLiteClient из пула соединений const sqliteClient = await this.connectionPool.getSQLiteClient(); // Выполняем поиск через SQLite const results = await sqliteClient.search(query, { limit }); if (results.isErr()) { throw new Error(`Ошибка поиска: ${results.error.message}`); } console.log(`✅ Найдено результатов: ${results.value.length}`); return results.value; } catch (error) { console.error('Ошибка поиска:', error); throw new Error(`Ошибка поиска: ${error}`); } }
  • SQLiteClient.search: core implementation using FTS5 search with fallback to keyword search, scoring, snippets, and highlights.
    async search(query: string, options: SearchOptions = {}): Promise<Result<SearchResult[], SQLiteError>> { const { limit = 10, offset = 0, includeSnippets = true, highlightTerms = true, minScore = 0.1 } = options; try { // Try FTS search first let results = await this.performFTSSearch(query, limit, offset); if (results.length === 0) { // Fallback to simple search results = await this.performSimpleSearch(query, limit, offset); } // Filter by minimum score const filteredResults = results.filter(r => r.score >= minScore); // Add snippets and highlights if requested if (includeSnippets || highlightTerms) { filteredResults.forEach(result => { if (includeSnippets) { result.snippet = this.generateSnippet(result.text, query, 200); } if (highlightTerms) { result.highlights = this.extractHighlights(result.text, query); } }); } this.metrics.recordOperation('search'); this.logger.info('Search completed', { query, resultsCount: filteredResults.length }); return ok(filteredResults); } catch (error) { this.metrics.recordError('search'); return err(new SQLiteError( `Search failed: ${error instanceof Error ? error.message : String(error)}`, 'SEARCH_ERROR', undefined, error instanceof Error ? error : undefined )); } }

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/Galiusbro/MCP'

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