- Updated n8n from 1.100.1 to 1.101.1 - Updated n8n-core from 1.99.0 to 1.100.0 - Updated n8n-workflow from 1.97.0 to 1.98.0 - Updated @n8n/n8n-nodes-langchain from 1.99.0 to 1.100.1 - Rebuilt node database with 528 nodes - All validation tests passing - Bumped version to 2.7.12 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
113 lines
3.8 KiB
TypeScript
113 lines
3.8 KiB
TypeScript
#!/usr/bin/env npx tsx
|
||
/**
|
||
* Test MCP search behavior
|
||
*/
|
||
import { createDatabaseAdapter } from '../src/database/database-adapter';
|
||
import { TemplateService } from '../src/templates/template-service';
|
||
import { TemplateRepository } from '../src/templates/template-repository';
|
||
|
||
async function testMCPSearch() {
|
||
console.log('🔍 Testing MCP search behavior...\n');
|
||
|
||
// Set MCP_MODE to simulate Docker environment
|
||
process.env.MCP_MODE = 'stdio';
|
||
console.log('Environment: MCP_MODE =', process.env.MCP_MODE);
|
||
|
||
const db = await createDatabaseAdapter('./data/nodes.db');
|
||
|
||
// Test 1: Direct repository search
|
||
console.log('\n1️⃣ Testing TemplateRepository directly:');
|
||
const repo = new TemplateRepository(db);
|
||
|
||
try {
|
||
const repoResults = repo.searchTemplates('webhook', 5);
|
||
console.log(` Repository search returned: ${repoResults.length} results`);
|
||
if (repoResults.length > 0) {
|
||
console.log(` First result: ${repoResults[0].name}`);
|
||
}
|
||
} catch (error) {
|
||
console.log(' Repository search error:', error);
|
||
}
|
||
|
||
// Test 2: Service layer search (what MCP uses)
|
||
console.log('\n2️⃣ Testing TemplateService (MCP layer):');
|
||
const service = new TemplateService(db);
|
||
|
||
try {
|
||
const serviceResults = await service.searchTemplates('webhook', 5);
|
||
console.log(` Service search returned: ${serviceResults.length} results`);
|
||
if (serviceResults.length > 0) {
|
||
console.log(` First result: ${serviceResults[0].name}`);
|
||
}
|
||
} catch (error) {
|
||
console.log(' Service search error:', error);
|
||
}
|
||
|
||
// Test 3: Test with empty query
|
||
console.log('\n3️⃣ Testing with empty query:');
|
||
try {
|
||
const emptyResults = await service.searchTemplates('', 5);
|
||
console.log(` Empty query returned: ${emptyResults.length} results`);
|
||
} catch (error) {
|
||
console.log(' Empty query error:', error);
|
||
}
|
||
|
||
// Test 4: Test getTemplatesForTask (which works)
|
||
console.log('\n4️⃣ Testing getTemplatesForTask (control):');
|
||
try {
|
||
const taskResults = await service.getTemplatesForTask('webhook_processing');
|
||
console.log(` Task search returned: ${taskResults.length} results`);
|
||
if (taskResults.length > 0) {
|
||
console.log(` First result: ${taskResults[0].name}`);
|
||
}
|
||
} catch (error) {
|
||
console.log(' Task search error:', error);
|
||
}
|
||
|
||
// Test 5: Direct SQL queries
|
||
console.log('\n5️⃣ Testing direct SQL queries:');
|
||
try {
|
||
// Count templates
|
||
const count = db.prepare('SELECT COUNT(*) as count FROM templates').get() as { count: number };
|
||
console.log(` Total templates: ${count.count}`);
|
||
|
||
// Test LIKE search
|
||
const likeResults = db.prepare(`
|
||
SELECT COUNT(*) as count FROM templates
|
||
WHERE name LIKE '%webhook%' OR description LIKE '%webhook%'
|
||
`).get() as { count: number };
|
||
console.log(` LIKE search for 'webhook': ${likeResults.count} results`);
|
||
|
||
// Check if FTS5 table exists
|
||
const ftsExists = db.prepare(`
|
||
SELECT name FROM sqlite_master
|
||
WHERE type='table' AND name='templates_fts'
|
||
`).get() as { name: string } | undefined;
|
||
console.log(` FTS5 table exists: ${ftsExists ? 'Yes' : 'No'}`);
|
||
|
||
if (ftsExists) {
|
||
// Test FTS5 search
|
||
try {
|
||
const ftsResults = db.prepare(`
|
||
SELECT COUNT(*) as count FROM templates t
|
||
JOIN templates_fts ON t.id = templates_fts.rowid
|
||
WHERE templates_fts MATCH 'webhook'
|
||
`).get() as { count: number };
|
||
console.log(` FTS5 search for 'webhook': ${ftsResults.count} results`);
|
||
} catch (ftsError) {
|
||
console.log(` FTS5 search error:`, ftsError);
|
||
}
|
||
}
|
||
} catch (error) {
|
||
console.log(' Direct SQL error:', error);
|
||
}
|
||
|
||
db.close();
|
||
}
|
||
|
||
// Run if called directly
|
||
if (require.main === module) {
|
||
testMCPSearch().catch(console.error);
|
||
}
|
||
|
||
export { testMCPSearch }; |