MCP DuckDuckGo Search Server

by spences10
Verified
import { FormattedResponse, SerpApiResponse } from './types.js'; export function format_response(data: SerpApiResponse): FormattedResponse { let formatted_response = 'Search Results:\n\n'; // Add knowledge graph if available if (data.knowledge_graph) { const kg = data.knowledge_graph; formatted_response += `${kg.title}\n`; formatted_response += `${kg.description}\n`; // Add facts if available if (kg.facts && Object.keys(kg.facts).length > 0) { formatted_response += '\nKey Facts:\n'; for (const [key, value] of Object.entries(kg.facts)) { formatted_response += `- ${key}: ${value}\n`; } } // Add profiles if available if (kg.profiles && kg.profiles.length > 0) { formatted_response += '\nProfiles:\n'; kg.profiles.forEach(profile => { formatted_response += `- ${profile.name}: ${profile.link}\n`; }); } formatted_response += '\n'; } // Add advertisement results if available if (data.ads && data.ads.length > 0) { formatted_response += 'Sponsored Results:\n'; data.ads.forEach((ad, index) => { formatted_response += `${index + 1}. ${ad.title}\n`; formatted_response += ` ${ad.snippet}\n`; formatted_response += ` Source: ${ad.source}\n`; formatted_response += ` URL: ${ad.link}\n`; if (ad.sitelinks && ad.sitelinks.length > 0) { formatted_response += ' Related links:\n'; ad.sitelinks.forEach(link => { formatted_response += ` - ${link.title}: ${link.link}\n`; }); } formatted_response += '\n'; }); } // Add organic results if (data.organic_results?.length > 0) { formatted_response += 'Organic Results:\n'; data.organic_results.forEach((result, index) => { formatted_response += `${index + 1}. ${result.title}\n`; formatted_response += ` ${result.snippet}\n`; formatted_response += ` URL: ${result.link}\n`; if (result.sitelinks && result.sitelinks.length > 0) { formatted_response += ' Related pages:\n'; result.sitelinks.forEach(link => { formatted_response += ` - ${link.title}: ${link.link}\n`; if (link.snippet) { formatted_response += ` ${link.snippet}\n`; } }); } formatted_response += '\n'; }); } // Add news results if available if (data.news_results && data.news_results.length > 0) { formatted_response += 'News Results:\n'; data.news_results.forEach((item, index) => { formatted_response += `${index + 1}. ${item.title}\n`; formatted_response += ` ${item.snippet}\n`; formatted_response += ` Source: ${item.source} - ${item.date}\n`; formatted_response += ` URL: ${item.link}\n\n`; }); } // Add inline videos if available if (data.inline_videos && data.inline_videos.length > 0) { formatted_response += 'Video Results:\n'; data.inline_videos.forEach((video, index) => { formatted_response += `${index + 1}. ${video.title}\n`; if (video.duration) { formatted_response += ` Duration: ${video.duration}\n`; } if (video.platform) { formatted_response += ` Platform: ${video.platform}\n`; } if (video.views !== undefined) { formatted_response += ` Views: ${video.views}\n`; } formatted_response += ` URL: ${video.link}\n\n`; }); } // Add inline images if available if (data.inline_images && data.inline_images.length > 0) { formatted_response += 'Image Results:\n'; data.inline_images.forEach((image, index) => { formatted_response += `${index + 1}. ${image.title}\n`; if (image.source) { formatted_response += ` Source: ${image.source}\n`; } formatted_response += ` URL: ${image.link}\n\n`; }); } // Add related searches if (data.related_searches && data.related_searches.length > 0) { formatted_response += 'Related Searches:\n'; data.related_searches.forEach(search => { formatted_response += `- ${search.query}\n`; }); } // Add search metadata formatted_response += `\nSearch Information:\n`; formatted_response += `- Time taken: ${data.search_metadata.total_time_taken}s\n`; formatted_response += `- Results state: ${data.search_information.organic_results_state}\n`; return { content: [ { type: 'text', text: formatted_response.trim(), }, ], }; }