Skip to main content
Glama

Claude Desktop Commander MCP

test_improved_search_truncation.js5.08 kB
// Test script to verify improved search result behavior using new streaming API import { handleStartSearch, handleGetMoreSearchResults, handleStopSearch } from '../dist/handlers/search-handlers.js'; /** * Helper function to wait for search completion and get all results */ async function searchAndWaitForCompletion(searchArgs, timeout = 30000) { const result = await handleStartSearch(searchArgs); // Extract session ID from result with tighter regex const sessionIdMatch = result.content[0].text.match(/Started .* session:\s*([a-zA-Z0-9_-]+)/); if (!sessionIdMatch) { throw new Error('Could not extract session ID from search result'); } const sessionId = sessionIdMatch[1]; try { // Wait for completion by polling const startTime = Date.now(); while (Date.now() - startTime < timeout) { const moreResults = await handleGetMoreSearchResults({ sessionId }); if (moreResults.content[0].text.includes('✅ Search completed')) { return { initialResult: result, finalResult: moreResults, sessionId }; } if (moreResults.content[0].text.includes('❌ ERROR')) { throw new Error(`Search failed: ${moreResults.content[0].text}`); } // Wait a bit before polling again await new Promise(resolve => setTimeout(resolve, 100)); } throw new Error('Search timed out'); } finally { // Always stop the search session to prevent hanging try { await handleStopSearch({ sessionId }); } catch (e) { // Ignore errors when stopping - session might already be completed } } } async function testImprovedSearchTruncation() { try { console.log('Testing improved search result behavior with streaming API...'); // Test search that will produce many results to trigger potential limits const searchArgs = { path: '.', pattern: '.', // Match almost every line - this should be a lot of results searchType: 'content', maxResults: 50000, // Very high limit to get lots of results, but may be capped ignoreCase: true }; console.log('Searching for "." to get maximum results...'); const start = Date.now(); const { initialResult, finalResult } = await searchAndWaitForCompletion(searchArgs); const end = Date.now(); console.log(`Search completed in ${end - start}ms`); console.log('Initial result type:', typeof initialResult.content[0].text); console.log('Initial result length:', initialResult.content[0].text.length); console.log('Final result type:', typeof finalResult.content[0].text); console.log('Final result length:', finalResult.content[0].text.length); const totalLength = initialResult.content[0].text.length + finalResult.content[0].text.length; const apiLimit = 1048576; // 1 MiB - use consistent constant // Check if we're within the safe limits using single source of truth if (totalLength > apiLimit) { console.log('❌ Results still quite large - over 1MB combined'); } else if (totalLength > Math.floor(0.8 * apiLimit)) { console.log('⚠️ Results approaching limits but acceptable'); } else { console.log('✅ Results well within safe limits'); } if (finalResult.content[0].text.includes('Results truncated')) { console.log('✅ Results properly truncated with warning message'); const truncationIndex = finalResult.content[0].text.indexOf('Results truncated'); console.log('Truncation message:', finalResult.content[0].text.substring(truncationIndex, truncationIndex + 150)); } else { console.log('ℹ️ Results complete, no truncation needed with new streaming API'); } console.log('First 200 characters of final result:'); console.log(finalResult.content[0].text.substring(0, 200)); // Check character length safety const safetyMargin = apiLimit - totalLength; console.log(`\n📊 Safety Analysis:`); console.log(` Initial response: ${initialResult.content[0].text.length.toLocaleString()} characters`); console.log(` Final response: ${finalResult.content[0].text.length.toLocaleString()} characters`); console.log(` Combined size: ${totalLength.toLocaleString()} characters`); console.log(` API limit: ${apiLimit.toLocaleString()} characters`); console.log(` Safety margin: ${safetyMargin.toLocaleString()} characters`); console.log(` Utilization: ${((totalLength / apiLimit) * 100).toFixed(1)}%`); } catch (error) { console.error('Test failed:', error); } } testImprovedSearchTruncation().then(() => { console.log('Improved search truncation test completed successfully.'); process.exit(0); }).catch(error => { console.error('Test failed:', error); process.exit(1); });

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/wonderwhy-er/DesktopCommanderMCP'

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