Show HN: Sifthound – self-hosted, Tavily-compatible search API for AI agents Sifthound, an open-source self-hosted web search API for AI agents, launched as a drop-in replacement for the Tavily API, serving the same /search, /extract, /crawl and /map endpoints so existing Tavily code works by changing only the base URL. The MIT-licensed project searches through a SearXNG metasearch instance with no search API keys, extracts clean markdown or text via trafilatura, ranks results with BM25 blended with the upstream engine's order, and is tested with tavily-python 0.8.4 and langchain-tavily 0.2.18. Sifthound also ships as an MCP server with four read-only tools (sifthound_search, sifthound_extract, sifthound_crawl, sifthound_map) over HTTP at /mcp or stdio, with images published for linux/amd64 and linux/arm64 tagged latest and 0.1.0. Sifthound is an open-source, self-hosted web search API for AI agents and LLM apps, and a drop-in replacement for the Tavily https://tavily.com API. It serves the same /search , /extract , /crawl and /map endpoints with the same request and response shapes, so code written for Tavily including the official Python SDK and the LangChain integration works against your own server by changing only the base URL. It needs no search API key. - Search through a SearXNG https://github.com/searxng/searxng metasearch instance, with no search API keys - Extraction of clean markdown or text from web pages with trafilatura https://github.com/adbar/trafilatura - Ranking : BM25 relevance blended with the upstream engine's order; advanced depth fetches each page and returns its most relevant chunks - Answers include answer written by Claude from the retrieved results - Crawling and site maps with depth, breadth, limit and regex path/domain filters - MCP server for Claude Code, Claude Desktop, Cursor and other MCP clients, over HTTP at /mcp or stdio with sifthound mcp - SSRF protection : private and internal addresses are blocked, including via redirects and DNS rebinding - MIT licensed Point the official Tavily clients at your Sifthound server with api base url . The key can be any string when auth is disabled, or one of your API KEYS . python from tavily import TavilyClient client = TavilyClient api key="your-sifthound-key", api base url="http://localhost:8000" results = client.search "latest python release", search depth="advanced", max results=5 pages = client.extract urls= "https://en.wikipedia.org/wiki/Okapi BM25" LangChain, through langchain-tavily https://github.com/tavily-ai/langchain-tavily : python from langchain tavily import TavilySearch search = TavilySearch max results=5, tavily api key="your-sifthound-key", api base url="http://localhost:8000" search.invoke {"query": "what is BM25 ranking"} Tested with tavily-python 0.8.4 search, extract, crawl, map; sync and async and langchain-tavily 0.2.18 search, extract . The full stack, with a SearXNG instance for /search , using the published image: git clone https://github.com/khsarvar/sifthound && cd sifthound cp .env.example .env optional: set API KEYS and ANTHROPIC API KEY docker compose up Try a search: curl -s localhost:8000/search -H "Content-Type: application/json" \ -d '{"query": "latest python release", "search depth": "advanced"}' If you set API KEYS , add -H "Authorization: Bearer