Labsco
MCP SERVER

Unified Search MCP Server

by JDeun

Search Google Scholar, Google web search and YouTube from one call, or each separately, with Redis caching and rate limiting in front.

Web Search Engines
Summary
One query, three sources, and the quota tools to survive it.

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.

What it is

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.

What you get
  • `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`
Requirements

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.