search
Perform web searches with customizable parameters including categories, search engines, language, time range, and safe search settings.
Instructions
Search using SearXNG
Args:
query: The search query
categories: Optional comma-separated list of categories
engines: Optional comma-separated list of engines
language: Optional language code
page: Page number (default: 1)
time_range: Optional time range (day, month, year)
safe_search: Safe search level (0, 1, 2)Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| categories | No | ||
| engines | No | ||
| language | No | ||
| page | No | ||
| time_range | No | ||
| safe_search | No |
Implementation Reference
- server.py:37-87 (handler)The search tool handler, decorated with @mcp.tool(). It performs an HTTP request to a SearXNG instance using parameters provided to the tool.
@mcp.tool() def search(query: str, categories: Optional[str] = None, engines: Optional[str] = None, language: Optional[str] = None, page: int = 1, time_range: Optional[str] = None, safe_search: int = 1) -> Dict[str, Any]: """ Search using SearXNG Args: query: The search query categories: Optional comma-separated list of categories engines: Optional comma-separated list of engines language: Optional language code page: Page number (default: 1) time_range: Optional time range (day, month, year) safe_search: Safe search level (0, 1, 2) """ logger.info(f"Received search request - Query: {query}") params = { "q": query, "format": "json", "pageno": page, "safesearch": safe_search } if categories: params["categories"] = categories logger.debug(f"Categories specified: {categories}") if engines: params["engines"] = engines logger.debug(f"Engines specified: {engines}") if language: params["language"] = language logger.debug(f"Language specified: {language}") if time_range: params["time_range"] = time_range logger.debug(f"Time range specified: {time_range}") logger.debug(f"Making request to SearXNG with params: {params}") try: response = client.get(urljoin(SEARXNG_URL, "/search"), params=params) response.raise_for_status() result = response.json() logger.info(f"Search completed successfully - Found {len(result.get('results', []))} results") return result except httpx.HTTPError as e: logger.error(f"HTTP error occurred during search: {str(e)}") raise except Exception as e: logger.error(f"Unexpected error during search: {str(e)}") raise