
Brings Google search into your MCP workflow via AceDataCloud's SERP API. Exposes tools for web search, images, news, videos, local places, and maps, plus knowledge graph lookups. You can filter by country, language, and time range. Ships with a hosted endpoint at serp.mcp.acedata.cloud that works over streamable HTTP, so you can connect from Claude Desktop, VS Code, Cursor, or JetBrains without running anything locally. Requires an AceDataCloud API token. If you need your AI to pull fresh search results or find current information beyond its training data, this handles the integration. Also available as a local Python package if you want to self host.
Public tool metadata for what this MCP can expose to an agent.
serp_list_search_typesList all available Google search types. Shows all available search types and their use cases. Use this to understand which search type to use for your query. Returns: Table of all search types with descriptions.List all available Google search types. Shows all available search types and their use cases. Use this to understand which search type to use for your query. Returns: Table of all search types with descriptions.
No parameter schema in public metadata yet.
serp_list_countriesList commonly used country codes for Google search. Shows common country codes that can be used to localize search results. Returns: Table of country codes and their countries.List commonly used country codes for Google search. Shows common country codes that can be used to localize search results. Returns: Table of country codes and their countries.
No parameter schema in public metadata yet.
serp_list_languagesList commonly used language codes for Google search. Shows common language codes that can be used to get results in specific languages. Returns: Table of language codes and their languages.List commonly used language codes for Google search. Shows common language codes that can be used to get results in specific languages. Returns: Table of language codes and their languages.
No parameter schema in public metadata yet.
serp_list_time_rangesList available time range filters for Google search. Shows all time range options that can be used to filter results by date. Returns: Table of time range codes and their meanings.List available time range filters for Google search. Shows all time range options that can be used to filter results by date. Returns: Table of time range codes and their meanings.
No parameter schema in public metadata yet.
serp_get_usage_guideGet a comprehensive guide for using the Google SERP tools. Provides detailed information on how to use the SERP search tools effectively, including parameters, examples, and best practices. Returns: Complete usage guide for SERP tools.Get a comprehensive guide for using the Google SERP tools. Provides detailed information on how to use the SERP search tools effectively, including parameters, examples, and best practices. Returns: Complete usage guide for SERP tools.
No parameter schema in public metadata yet.
serp_google_searchSearch Google and get structured results using the SERP API. Performs a Google search and returns the complete JSON response from the API, preserving all available fields and data. Args: query: The search query string. Required. search_type: Type of search to perform. Options:...7 paramsSearch Google and get structured results using the SERP API. Performs a Google search and returns the complete JSON response from the API, preserving all available fields and data. Args: query: The search query string. Required. search_type: Type of search to perform. Options:...
countryvaluelanguagevaluenumbervaluepagevaluequerystringsearch_typestringsearch · images · news · maps · places · videosdefault: searchtime_rangevalueserp_google_imagesSearch Google Images and get image results. Performs a Google Image search and returns structured image results.5 paramsSearch Google Images and get image results. Performs a Google Image search and returns structured image results.
countryvaluelanguagevaluenumbervaluepagevaluequerystringserp_google_newsSearch Google News and get news article results. Performs a Google News search and returns structured news results.6 paramsSearch Google News and get news article results. Performs a Google News search and returns structured news results.
countryvaluelanguagevaluenumbervaluepagevaluequerystringtime_rangevalueserp_google_videosSearch Google Videos and get video results. Performs a Google Video search and returns structured video results.5 paramsSearch Google Videos and get video results. Performs a Google Video search and returns structured video results.
countryvaluelanguagevaluenumbervaluepagevaluequerystringserp_google_placesSearch Google for local places and businesses. Performs a Google Places search and returns structured place results.5 paramsSearch Google for local places and businesses. Performs a Google Places search and returns structured place results.
countryvaluelanguagevaluenumbervaluepagevaluequerystringserp_google_mapsSearch Google Maps for locations. Performs a Google Maps search and returns structured map results.5 paramsSearch Google Maps for locations. Performs a Google Maps search and returns structured map results.
countryvaluelanguagevaluenumbervaluepagevaluequerystringA Model Context Protocol (MCP) server for Google search using SERP API through the AceDataCloud API.
Perform Google searches and get structured results directly from Claude, VS Code, or any MCP-compatible client.
| Tool | Description |
|---|---|
serp_google_search | Search Google and get structured results using the SERP API. |
serp_google_images | Search Google Images and get image results. |
serp_google_news | Search Google News and get news article results. |
serp_google_videos | Search Google Videos and get video results. |
serp_google_places | Search Google for local places and businesses. |
serp_google_maps | Search Google Maps for locations. |
serp_list_search_types | List all available Google search types. |
serp_list_countries | List commonly used country codes for Google search. |
serp_list_languages | List commonly used language codes for Google search. |
serp_list_time_ranges | List available time range filters for Google search. |
serp_get_usage_guide | Get a comprehensive guide for using the Google SERP tools. |
The hosted endpoint is https://serp.mcp.acedata.cloud/mcp. Choose one route for the MCP client:
| Route | When to use it | Credential setup |
|---|---|---|
| Hosted OAuth | The client supports remote MCP OAuth | Add only the URL, then sign in to AceDataCloud and approve access. No token needs to be pasted into client configuration. |
| Hosted API token | The client cannot finish OAuth, or you need an explicit integration credential | Send an AceDataCloud API token in the Authorization: Bearer … header. Keep it in a local secret store or environment variable. |
| Local stdio | The client runs a local MCP process | Install mcp-serp and pass ACEDATACLOUD_API_TOKEN to that process. It still calls the AceDataCloud API. |
The hosted service advertises OAuth metadata and Dynamic Client Registration (DCR). DCR registers the client application; it is not an API key. OAuth signs you in and the client sends the resulting Bearer token; it may reuse or create an API credential for the account. Browser sign-in still requires an AceDataCloud account. The hosted service can be metered: review current service documentation and displayed pricing before a real operation. Do not configure both an OAuth login and a fixed Authorization header for the same server.
Customize → Connectors → Add custom connector, enter https://serp.mcp.acedata.cloud/mcp, select sign-in, and choose Register automatically if Claude asks how to register its OAuth client. Complete consent. Claude Desktop's local claude_desktop_config.json is a separate setup. Claude connector guide.claude mcp add --transport http --scope user serp https://serp.mcp.acedata.cloud/mcp, then claude mcp login serp. Check /mcp. Claude Code MCP guide.https://serp.mcp.acedata.cloud/mcp. For a project, merge the entry below into <project>/.cursor/mcp.json; for personal use, use ~/.cursor/mcp.json. Cursor MCP guide.https://serp.mcp.acedata.cloud/mcp, then finish the browser sign-in. New portable workspace configs use <project>/.mcp.json; the VS Code-specific format below uses <project>/.vscode/mcp.json or the user profile. Check MCP: List Servers. VS Code MCP setup.codex mcp add serp --url https://serp.mcp.acedata.cloud/mcp, then codex mcp login serp. Its user settings are in ~/.codex/config.toml. Official Codex MCP guide.Cursor project config (OAuth):
{
"mcpServers": {
"serp": {"url": "https://serp.mcp.acedata.cloud/mcp"}
}
}
VS Code-specific workspace config (OAuth):
{
"servers": {
"serp": {"type": "http", "url": "https://serp.mcp.acedata.cloud/mcp"}
}
}
Bearer . An API Key / API Token field expects this raw value; only a manually configured HTTP Authorization header needs the Bearer prefix. A platform-... account-management token cannot replace a generation API key.

Save the key in the client's credential store or the environment variable shown below. Never put it in a prompt, shared workflow, screenshot, or Git commit. If authentication fails, check the full copied value, application/service access, expiration, usage limit, and balance before creating another key.
A fixed Bearer header bypasses OAuth. If the header is invalid, remove it before trying browser sign-in; keep the saved credential private.
For Claude Code, the shell expands the token when you add the server; treat the saved user MCP config as a secret:
export ACEDATACLOUD_API_TOKEN='YOUR_API_TOKEN'
claude mcp add --transport http --scope user serp https://serp.mcp.acedata.cloud/mcp \
--header "Authorization: Bearer $ACEDATACLOUD_API_TOKEN"
For a Claude Code project config, put a variable reference in <project>/.mcp.json and set that variable in the environment that launches Claude Code:
{
"mcpServers": {
"serp": {
"type": "http",
"url": "https://serp.mcp.acedata.cloud/mcp",
"headers": {"Authorization": "Bearer ${ACEDATACLOUD_API_TOKEN}"}
}
}
}
Cursor uses a different environment-variable syntax in ~/.cursor/mcp.json or an uncommitted project config:
{
"mcpServers": {
"serp": {
"url": "https://serp.mcp.acedata.cloud/mcp",
"headers": {"Authorization": "Bearer ${env:ACEDATACLOUD_API_TOKEN}"}
}
}
}
In VS Code, run MCP: Open User Configuration and merge this server plus its masked input; ${input:...} is for VS Code's user/workspace format and is not portable to the Agent Host .mcp.json format:
{
"inputs": [
{"id": "acedata-serp-token", "type": "promptString", "description": "AceDataCloud API token", "password": true}
],
"servers": {
"serp": {
"type": "http",
"url": "https://serp.mcp.acedata.cloud/mcp",
"headers": {"Authorization": "Bearer ${input:acedata-serp-token}"}
}
}
}
For Cline, use its MCP configuration UI or CLI file ~/.cline/data/settings/cline_mcp_settings.json; its remote transport value is streamableHttp. For JetBrains AI Assistant, add a remote URL from Settings → Tools → AI Assistant → Model Context Protocol (MCP). For Zed, use a context_servers entry with the URL only for OAuth or add a local Bearer header. These clients have different configuration schemas; follow their current UI rather than copying another client's JSON. Cline · JetBrains · Zed.
Install the package and give the local process an API token:
python -m pip install mcp-serp
export ACEDATACLOUD_API_TOKEN='YOUR_API_TOKEN'
mcp-serp
For Claude Desktop local MCP, merge this entry into the file opened by its developer settings (~/Library/Application Support/Claude/claude_desktop_config.json on macOS). uvx requires uv on PATH:
{
"mcpServers": {
"serp": {
"command": "uvx",
"args": ["mcp-serp"],
"env": {"ACEDATACLOUD_API_TOKEN": "YOUR_API_TOKEN"}
}
}
}
Keep this user-level file private. Self-hosted HTTP uses mcp-serp --transport http --port 8000; expose it only with suitable network and TLS controls. Local execution still calls the AceDataCloud API.
https://serp.mcp.acedata.cloud/health returning {"status":"ok"} checks endpoint reachability only.serp_get_usage_guide is a reference tool; it does not verify downstream API access or balance.serp_google_search with your own valid input after reviewing current service documentation and displayed pricing.For 401, check which auth route the client used and whether the token or OAuth session is valid. A 403 may mean an account permission or content moderation failure; read the returned error. Insufficient balance and downstream service failures need their own diagnosis. A listed tool or submitted task does not prove a successful result.
| Tool | Description |
|---|---|
serp_google_search | Flexible Google search with all options |
serp_google_images | Search for images |
serp_google_news | Search for news articles |
serp_google_videos | Search for videos |
serp_google_places | Search for local places/businesses |
serp_google_maps | Search for map locations |
| Tool | Description |
|---|---|
serp_list_search_types | List available search types |
serp_list_countries | List country codes for localization |
serp_list_languages | List language codes for localization |
serp_list_time_ranges | List time range filter options |
serp_get_usage_guide | Get comprehensive usage guide |
User: Search for information about artificial intelligence
Claude: I'll search for information about AI.
[Calls serp_google_search with query="artificial intelligence"]
User: What's the latest news about technology?
Claude: I'll search for recent tech news.
[Calls serp_google_news with query="technology", time_range="qdr:d"]
User: Find popular restaurants in Tokyo
Claude: I'll search for restaurants in Tokyo.
[Calls serp_google_places with query="popular restaurants Tokyo", country="jp"]
User: Find images of the Northern Lights
Claude: I'll search for aurora borealis images.
[Calls serp_google_images with query="Northern Lights aurora borealis"]
| Type | Description |
|---|---|
search | Regular web search (default) |
images | Image search |
news | News articles |
maps | Map results |
places | Local businesses |
videos | Video results |
| Code | Time Range |
|---|---|
h | Past hour |
qdr:h | Past hour |
d | Past day |
qdr:d | Past day |
w | Past week |
qdr:w | Past week |
m | Past month |
qdr:m | Past month |
y | Past year |
qdr:y | Past year |
images search type)large, medium, icon, 2mp, 4mp, 6mp, 8mp, 10mp, 12mp, 15mp, 20mp, 40mp, 70mp
| Code | Country |
|---|---|
us | United States |
uk | United Kingdom |
cn | China |
jp | Japan |
de | Germany |
fr | France |
| Code | Language |
|---|---|
en | English |
zh-cn | Chinese (Simplified) |
ja | Japanese |
es | Spanish |
fr | French |
de | German |
| Variable | Description | Default |
|---|---|---|
ACEDATACLOUD_API_TOKEN | API token from AceDataCloud | Required |
ACEDATACLOUD_API_BASE_URL | API base URL | https://api.acedata.cloud |
ACEDATACLOUD_OAUTH_CLIENT_ID | OAuth client ID (hosted mode) | — |
ACEDATACLOUD_PLATFORM_BASE_URL | Platform base URL | https://platform.acedata.cloud |
SERP_REQUEST_TIMEOUT | Request timeout in seconds | 30 |
LOG_LEVEL | Logging level | INFO |
mcp-serp --help
Options:
--version Show version
--transport Transport mode: stdio (default) or http
--port Port for HTTP transport (default: 8000)
# Clone repository
git clone https://github.com/AceDataCloud/SerpMCP.git
cd SerpMCP
# Create virtual environment
python -m venv .venv
source .venv/bin/activate # or `.venv\Scripts\activate` on Windows
# Install with dev dependencies
pip install -e ".[dev,test]"
# Run unit tests
pytest
# Run with coverage
pytest --cov=core --cov=tools
# Run integration tests (requires API token)
pytest tests/test_integration.py -m integration
# Format code
ruff format .
# Lint code
ruff check .
# Type check
mypy core tools
# Install build dependencies
pip install -e ".[release]"
# Build package
python -m build
# Upload to PyPI
twine upload dist/*
SerpMCP/
├── core/ # Core modules
│ ├── __init__.py
│ ├── client.py # HTTP client for SERP API
│ ├── config.py # Configuration management
│ ├── exceptions.py # Custom exceptions
│ └── server.py # MCP server initialization
├── tools/ # MCP tool definitions
│ ├── __init__.py
│ ├── search_tools.py # Search tools
│ └── info_tools.py # Information tools
├── prompts/ # MCP prompt templates
│ └── __init__.py
├── tests/ # Test suite
│ ├── conftest.py
│ ├── test_client.py
│ └── test_config.py
├── deploy/ # Deployment configs
│ └── production/
│ ├── deployment.yaml
│ ├── ingress.yaml
│ └── service.yaml
├── .env.example # Environment template
├── .gitignore
├── CHANGELOG.md
├── Dockerfile # Docker image for HTTP mode
├── docker-compose.yaml # Docker Compose config
├── LICENSE
├── main.py # Entry point
├── pyproject.toml # Project configuration
└── README.md
This server wraps the AceDataCloud Google SERP API:
Contributions are welcome! Please:
git checkout -b feature/amazing)git commit -m 'Add amazing feature')git push origin feature/amazing)MIT License - see LICENSE for details.
Made with love by AceDataCloud
ACEDATACLOUD_API_TOKEN*secretAPI token from Ace Data Cloud (https://platform.acedata.cloud)