Skip to main content
Glama
qwang07
by qwang07

search

Search the web using DuckDuckGo to find information, websites, and resources with configurable options for region, safe search, and result quantity.

Instructions

Search the web using DuckDuckGo

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYes
optionsNo

Implementation Reference

  • Handler for CallToolRequestSchema that implements the 'search' tool logic: validates input, performs web search using DuckDuckGo via 'duck-duck-scrape', processes results, and returns formatted JSON or error.
    server.setRequestHandler(CallToolRequestSchema, async (request) => { try { const { name, arguments: args } = request.params; if (name !== "search") { throw Object.assign( new Error(`Unknown tool: ${name}`), { errorType: 'UNKNOWN_TOOL', name } ); } const parsed = SearchArgsSchema.safeParse(args); if (!parsed.success) { throw Object.assign( new Error(`Invalid arguments: ${parsed.error}`), { errorType: 'INVALID_ARGS', details: parsed.error } ); } const searchResults = await search(parsed.data.query, { region: parsed.data.options?.region || 'zh-cn', safeSearch: parsed.data.options?.safeSearch ? SafeSearchType[parsed.data.options.safeSearch] : SafeSearchType.MODERATE, maxResults: parsed.data.options?.numResults || 50 }); const response = processSearchResults( searchResults.results, parsed.data.query, { region: parsed.data.options?.region, safeSearch: parsed.data.options?.safeSearch ? SafeSearchType[parsed.data.options.safeSearch] : SafeSearchType.MODERATE } ); return { content: [{ type: "text", text: JSON.stringify(response, null, 2) }] }; } catch (error) { const errorResponse = { type: 'search_error', message: error instanceof Error ? error.message : String(error), suggestion: '你可以尝试:1. 修改搜索关键词 2. 减少结果数量 3. 更换地区', context: { query: request.params.arguments?.query, options: request.params.arguments?.options } }; return { content: [{ type: "text", text: JSON.stringify(errorResponse, null, 2) }], isError: true }; } });
  • Zod schema defining the input structure for the 'search' tool.
    const SearchArgsSchema = z.object({ query: z.string(), options: z.object({ region: z.string().default('zh-cn'), safeSearch: z.enum(['OFF', 'MODERATE', 'STRICT']).default('MODERATE'), numResults: z.number().default(50) }).optional() });
  • src/index.js:92-102 (registration)
    Registration of the 'search' tool in the ListToolsRequestSchema handler, providing name, description, and input schema.
    server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ { name: "search", description: "Search the web using DuckDuckGo", inputSchema: zodToJsonSchema(SearchArgsSchema), } ], }; });
  • Helper function that processes raw search results into a structured response with added metadata like content type, source, language detection, and topics.
    function processSearchResults(results, query, options) { return { type: 'search_results', data: results.map(result => ({ title: result.title.replace(/'/g, "'").replace(/"/g, '"'), url: result.url, description: result.description.trim(), metadata: { type: detectContentType(result), source: new URL(result.url).hostname } })), metadata: { query, timestamp: new Date().toISOString(), resultCount: results.length, searchContext: { region: options.region || 'zh-cn', safeSearch: options.safeSearch?.toString() || 'MODERATE' }, queryAnalysis: { language: detectLanguage(query), topics: detectTopics(results) } } }; }
Install Server

Other Tools

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/qwang07/duck-duck-mcp'

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