Skip to main content
Glama

one_search

Perform web searches and retrieve content by querying multiple engines. Customize results by category, language, and time range for precise outcomes.

Instructions

Search and retrieve content from web pages. Returns SERP results by default (url, title, description).

Input Schema

NameRequiredDescriptionDefault
categoriesNoCategories to search for (default: general)
languageNoLanguage code for search results (default: auto)
limitNoMaximum number of results to return (default: 10)
queryYesSearch query string
timeRangeNoTime range for search results (default: all)

Input Schema (JSON Schema)

{ "properties": { "categories": { "description": "Categories to search for (default: general)", "enum": [ "general", "news", "images", "videos", "it", "science", "map", "music", "files", "social_media" ], "type": "string" }, "language": { "description": "Language code for search results (default: auto)", "type": "string" }, "limit": { "description": "Maximum number of results to return (default: 10)", "type": "number" }, "query": { "description": "Search query string", "type": "string" }, "timeRange": { "description": "Time range for search results (default: all)", "enum": [ "all", "day", "week", "month", "year" ], "type": "string" } }, "required": [ "query" ], "type": "object" }

Implementation Reference

  • Defines the input schema, description, and Tool type for the 'one_search' tool.
    export const SEARCH_TOOL: Tool = { name: 'one_search', description: 'Search and retrieve content from web pages. ' + 'Returns SERP results by default (url, title, description).', inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'Search query string', }, limit: { type: 'number', description: 'Maximum number of results to return (default: 10)', }, language: { type: 'string', description: 'Language code for search results (default: auto)', }, categories: { type: 'string', enum: [ 'general', 'news', 'images', 'videos', 'it', 'science', 'map', 'music', 'files', 'social_media', ], description: 'Categories to search for (default: general)', }, timeRange: { type: 'string', description: 'Time range for search results (default: all)', enum: [ 'all', 'day', 'week', 'month', 'year', ], }, }, required: ['query'], }, };
  • src/index.ts:66-73 (registration)
    Registers the 'one_search' tool (as SEARCH_TOOL) in the server's list of available tools.
    server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [ SEARCH_TOOL, EXTRACT_TOOL, SCRAPE_TOOL, MAP_TOOL, ], }));
  • Main handler for 'one_search' tool call: validates arguments, invokes processSearch, formats results into text content, handles errors.
    case 'one_search': { // check args. if (!checkSearchArgs(args)) { throw new Error(`Invalid arguments for tool: [${name}]`); } try { const { results, success } = await processSearch({ ...args, apiKey: SEARCH_API_KEY ?? '', apiUrl: SEARCH_API_URL, }); if (!success) { throw new Error('Failed to search'); } const resultsText = results.map((result) => ( `Title: ${result.title} URL: ${result.url} Description: ${result.snippet} ${result.markdown ? `Content: ${result.markdown}` : ''}` )); return { content: [ { type: 'text', text: resultsText.join('\n\n'), }, ], results, success, }; } catch (error) { server.sendLoggingMessage({ level: 'error', data: `[${new Date().toISOString()}] Error searching: ${error}`, }); const msg = error instanceof Error ? error.message : 'Unknown error'; return { success: false, content: [ { type: 'text', text: msg, }, ], }; } }
  • Core search processing function that dispatches to the configured search provider (searxng, tavily, bing, duckduckgo, or local) based on SEARCH_PROVIDER environment variable.
    async function processSearch(args: ISearchRequestOptions): Promise<ISearchResponse> { switch (SEARCH_PROVIDER) { case 'searxng': { // merge default config with args const params = { ...searchDefaultConfig, ...args, apiKey: SEARCH_API_KEY, }; // but categories and language have higher priority (ENV > args). const { categories, language } = searchDefaultConfig; if (categories) { params.categories = categories; } if (language) { params.language = language; } return await searxngSearch(params); } case 'tavily': { return await tavilySearch({ ...searchDefaultConfig, ...args, apiKey: SEARCH_API_KEY, }); } case 'bing': { return await bingSearch({ ...searchDefaultConfig, ...args, apiKey: SEARCH_API_KEY, }); } case 'duckduckgo': { const safeSearch = args.safeSearch ?? 0; const safeSearchOptions = [SafeSearchType.STRICT, SafeSearchType.MODERATE, SafeSearchType.OFF]; return await duckDuckGoSearch({ ...searchDefaultConfig, ...args, apiKey: SEARCH_API_KEY, safeSearch: safeSearchOptions[safeSearch], }); } case 'local': { return await localSearch({ ...searchDefaultConfig, ...args, }); } default: throw new Error(`Unsupported search provider: ${SEARCH_PROVIDER}`); } }
  • Helper function to validate input arguments for the 'one_search' tool, ensuring 'query' is a non-null string.
    return ( typeof args === 'object' && args !== null && 'query' in args && typeof args.query === 'string' ); }

Other Tools

Related 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/yokingma/one-search-mcp'

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