The interesting tool is the usage stats call — free-tier Google quotas are small enough that a research session can exhaust them without warning, and being able to ask how much is left turns that from a mystery failure into a decision. The cache is the other half of the same answer.
A Python search server that fans one query out across three sources concurrently and returns them together, with each source also available on its own. Around the search sits production plumbing — encrypted API key storage, input validation, Redis-backed caching and rate limits, Prometheus metrics, retries with exponential backoff and circuit breakers on the external APIs.
- `unified_search` — search across scholar, web and youtube at once, choosing the `sources` and `num_results`
- `search_google_scholar` — academic papers filtered by `author` and a `year_start`/`year_end` range
- `search_google_web` — web search with `language` and `safe_search` settings
- `search_youtube` — video search filtered by `video_duration` and `upload_date`, ordered by criteria such as view count
- `get_author_info` — an author's profile from Google Scholar
- `clear_cache` — drop cached results for one source or all of them
- `get_api_usage_stats` — current usage against your API quotas
- Health and metrics exposed as resources at `health://status` and `metrics://stats`
Two Google API keys: `GOOGLE_API_KEY` with a `GOOGLE_CUSTOM_SEARCH_ENGINE_ID` for web search, and `YOUTUBE_API_KEY` for video search — the same Cloud project can serve both. Google Scholar has no official API and is rate-limited in practice. Python 3.11 or higher, with `pip install -r requirements.txt` from a clone; the documented client entry runs `python unified_search_server.py` over stdio, and `--transport streamable-http` serves it over HTTP for a shared deployment. Redis is optional and only needed for distributed caching and rate limiting, set through `MCP_REDIS_URL`; `MCP_ENCRYPTION_KEY` and `MCP_RATE_LIMIT_SECRET` cover the security layer. Watch the free-tier limits: Google web search allows 100 queries per day and the YouTube API 10,000 units per day, roughly 100 searches.
