vector_search
Enables vector similarity search in Turso databases by querying specific vectors within a table, returning results based on similarity for advanced data analysis.
Instructions
Performs vector similarity search
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | Database name (optional, uses context if not provided) | |
| limit | No | Maximum number of results (optional, default 10) | |
| query_vector | Yes | Query vector for similarity search | |
| table | Yes | Table name | |
| vector_column | Yes | Column containing vectors |
Implementation Reference
- src/tools/handler.ts:322-358 (handler)The async handler function that executes the vector similarity search using SQLite vector_distance and vector_from_json functions, constructs the query, executes it via database_client, and formats the results.async ({ table, vector_column, query_vector, limit = 10, database }) => { try { const database_name = resolve_database_name(database); if (database) set_current_database(database); // Construct a vector search query using SQLite's vector functions const vector_string = query_vector.join(','); const query = ` SELECT *, vector_distance(${vector_column}, vector_from_json(?)) as distance FROM ${table} ORDER BY distance ASC LIMIT ? `; const params = { 1: `[${vector_string}]`, 2: limit, }; const result = await database_client.execute_query( database_name, query, params, ); const formatted_result = format_query_result(result); return create_tool_response({ database: database_name, table, vector_column, query_vector, results: formatted_result, }); } catch (error) { return create_tool_error_response(error); } },
- src/tools/handler.ts:53-59 (schema)Zod input schema defining parameters for the vector_search tool: table, vector_column, query_vector, optional limit and database.const VectorSearchSchema = z.object({ table: z.string().describe('Table name'), vector_column: z.string().describe('Column containing vectors'), query_vector: z.array(z.number()).describe('Query vector for similarity search'), limit: z.number().optional().describe('Maximum number of results (optional, default 10)'), database: z.string().optional().describe('Database name (optional, uses context if not provided)'), });
- src/tools/handler.ts:316-359 (registration)Registration of the vector_search tool with McpServer using name, description, VectorSearchSchema, and the handler function.server.tool( { name: 'vector_search', description: 'Performs vector similarity search', schema: VectorSearchSchema, }, async ({ table, vector_column, query_vector, limit = 10, database }) => { try { const database_name = resolve_database_name(database); if (database) set_current_database(database); // Construct a vector search query using SQLite's vector functions const vector_string = query_vector.join(','); const query = ` SELECT *, vector_distance(${vector_column}, vector_from_json(?)) as distance FROM ${table} ORDER BY distance ASC LIMIT ? `; const params = { 1: `[${vector_string}]`, 2: limit, }; const result = await database_client.execute_query( database_name, query, params, ); const formatted_result = format_query_result(result); return create_tool_response({ database: database_name, table, vector_column, query_vector, results: formatted_result, }); } catch (error) { return create_tool_error_response(error); } }, );