Google Search for Local LLMs — No API Key Required. MCP server using headless Chromium via Playwright.
Project description
noapi-google-search-mcp
Google Search for Local LLMs — No API Key Required
An MCP (Model Context Protocol) server that gives your local LLM real Google search and browsing abilities using headless Chromium via Playwright. No Google API key, no Custom Search Engine setup, no usage limits — just real Google results.
Works with LM Studio, Claude Desktop, and any MCP-compatible client.
Why This Instead of API-Based Alternatives?
| noapi-google-search-mcp | API-based MCP servers | |
|---|---|---|
| API key required | No | Yes (Google CSE API) |
| Cost | Free | Paid after 100 queries/day |
| Setup time | pip install + go |
Create Google Cloud project, enable API, get key, configure CSE |
| Results quality | Real Google results | Custom Search Engine (different ranking) |
| JavaScript pages | Renders them (Chromium) | Cannot render JS |
| Google News | Built-in | Usually not available |
| Google Scholar | Built-in | Not available |
| Google Images | Built-in | Separate API needed |
| Google Trends | Built-in | Separate API needed |
| Page fetching | Built-in visit_page tool |
Usually separate |
Tools
google_search — Web Search
Search Google and get structured results with titles, URLs, and snippets.
Parameters:
| Parameter | Description | Example |
|---|---|---|
query |
Search query (required) | "best python frameworks 2025" |
num_results |
Number of results (1-10, default 5) | 5 |
time_range |
Filter by recency | "past_hour", "past_day", "past_week", "past_month", "past_year" |
site |
Limit to a domain | "reddit.com", "stackoverflow.com", "github.com", "arxiv.org", "news.ycombinator.com" |
page |
Results page (1-10, default 1) | 2 for next page |
language |
Language code | "en", "de", "fr", "es", "ja", "zh" |
region |
Country/region code | "us", "gb", "de", "fr", "jp" |
How your LLM uses it: The LLM automatically sees these parameters in the tool definition. When you ask "search Reddit for Python tips from the past week", it will call google_search(query="Python tips", site="reddit.com", time_range="past_week").
google_news — News Search
Search Google News for recent headlines with source and timestamp.
Parameters:
| Parameter | Description | Example |
|---|---|---|
query |
News search query (required) | "AI regulation" |
num_results |
Number of results (1-10, default 5) | 5 |
google_scholar — Academic Search
Search Google Scholar for papers, citations, and research.
Parameters:
| Parameter | Description | Example |
|---|---|---|
query |
Academic search query (required) | "transformer attention mechanism" |
num_results |
Number of results (1-10, default 5) | 5 |
Returns: title, URL, authors, citation count, and snippet for each paper.
google_images — Image Search
Search Google Images and get image URLs.
Parameters:
| Parameter | Description | Example |
|---|---|---|
query |
Image search query (required) | "sunset over ocean" |
num_results |
Number of results (1-10, default 5) | 5 |
google_trends — Trends Lookup
Check Google Trends for topic interest, related topics, and related queries.
Parameters:
| Parameter | Description | Example |
|---|---|---|
query |
Topic to check trends for (required) | "artificial intelligence" |
visit_page — Page Fetcher
Fetch any URL and extract readable text content. Use after search to read full articles.
Parameters:
| Parameter | Description | Example |
|---|---|---|
url |
Full URL to fetch (required) | "https://example.com/article" |
How Does the LLM Know About These Tools?
You don't need to teach the LLM anything. MCP automatically exposes all tool names, descriptions, and parameters to the model. When you ask a question like:
- "What are the latest AI news?" → LLM calls
google_news - "Find me papers on quantum computing" → LLM calls
google_scholar - "Search Reddit for home lab setups" → LLM calls
google_searchwithsite="reddit.com" - "What's trending in tech?" → LLM calls
google_trends - "Show me images of the Northern Lights" → LLM calls
google_images - "Read this article for me: https://..." → LLM calls
visit_page
The LLM picks the right tool and parameters automatically based on your request.
Installation
Quick Install (pipx — recommended)
pipx install noapi-google-search-mcp
playwright install chromium
This puts noapi-google-search-mcp on your PATH so you can use it directly.
Install in a Virtual Environment
If you don't have pipx, install in a dedicated venv:
python3 -m venv ~/.local/share/noapi-google-search-mcp
~/.local/share/noapi-google-search-mcp/bin/pip install noapi-google-search-mcp
~/.local/share/noapi-google-search-mcp/bin/playwright install chromium
Configuration
LM Studio
Add to ~/.lmstudio/mcp.json:
If installed with pipx (command is on PATH):
{
"mcpServers": {
"google-search": {
"command": "noapi-google-search-mcp",
"env": {
"PYTHONUNBUFFERED": "1"
}
}
}
}
If installed in a venv (use the full path):
{
"mcpServers": {
"google-search": {
"command": "~/.local/share/noapi-google-search-mcp/bin/noapi-google-search-mcp",
"env": {
"PYTHONUNBUFFERED": "1"
}
}
}
}
Claude Desktop
Add to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"google-search": {
"command": "noapi-google-search-mcp"
}
}
}
If installed in a venv, use the full path to the binary instead.
As a CLI
noapi-google-search-mcp
Or:
python -m google_search_mcp
Development
git clone https://github.com/VincentKaufmann/google-search-mcp.git
cd google-search-mcp
pip install -e .
playwright install chromium
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file noapi_google_search_mcp-0.1.2.tar.gz.
File metadata
- Download URL: noapi_google_search_mcp-0.1.2.tar.gz
- Upload date:
- Size: 9.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
308ad1dcaf3102be7b3f1b6f3e5e45cb03c70801b93ccc20b2b6596146f69848
|
|
| MD5 |
cb72b07a11bc06280711f553cddcd89a
|
|
| BLAKE2b-256 |
e1bc1b4e927058c5f74e7b74b98cd8648dab0c309caecbbc4c6095d6cce3eab4
|
Provenance
The following attestation bundles were made for noapi_google_search_mcp-0.1.2.tar.gz:
Publisher:
publish.yml on VincentKaufmann/google-search-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
noapi_google_search_mcp-0.1.2.tar.gz -
Subject digest:
308ad1dcaf3102be7b3f1b6f3e5e45cb03c70801b93ccc20b2b6596146f69848 - Sigstore transparency entry: 938608930
- Sigstore integration time:
-
Permalink:
VincentKaufmann/google-search-mcp@0bd6305258b62e0f0ac814722e1dfda7001397ee -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/VincentKaufmann
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0bd6305258b62e0f0ac814722e1dfda7001397ee -
Trigger Event:
release
-
Statement type:
File details
Details for the file noapi_google_search_mcp-0.1.2-py3-none-any.whl.
File metadata
- Download URL: noapi_google_search_mcp-0.1.2-py3-none-any.whl
- Upload date:
- Size: 10.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
92707d703d46345210023dc48f6c1d96a6211fc23b04dbbcc9e625db1c163dd8
|
|
| MD5 |
289172ddca51a83a36b84689c23280cd
|
|
| BLAKE2b-256 |
24283ccf1e40ba6d27833a7382b488f4910d1e70db2e4ed39a3372f3d881c65a
|
Provenance
The following attestation bundles were made for noapi_google_search_mcp-0.1.2-py3-none-any.whl:
Publisher:
publish.yml on VincentKaufmann/google-search-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
noapi_google_search_mcp-0.1.2-py3-none-any.whl -
Subject digest:
92707d703d46345210023dc48f6c1d96a6211fc23b04dbbcc9e625db1c163dd8 - Sigstore transparency entry: 938608938
- Sigstore integration time:
-
Permalink:
VincentKaufmann/google-search-mcp@0bd6305258b62e0f0ac814722e1dfda7001397ee -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/VincentKaufmann
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0bd6305258b62e0f0ac814722e1dfda7001397ee -
Trigger Event:
release
-
Statement type: