Back to the catalog

io.github.AceDataCloud/mcp-serp

MCP server for Google search results via SERP API

Open source Repository Open in the app JSON README (API)

About

MCP server for Google search results via SERP API

Details

Kind
MCP servers
Topic
Web search, scraping & browser
Publisher
acedatacloud
Origin
official
Category
ferramentas
Transport
http
Version
2026.8.28.0
Stars
1
Open pull requests
8
Last push
2026-08-28T10:40:21Z
Repository state
ativo
Language
Python
License
MIT
Added
2026-08-29 03:01:40
Updated
2026-08-29 03:01:40
Origin id
io.github.AceDataCloud/mcp-serp

README

# SerpMCP

<!-- mcp-name: io.github.AceDataCloud/mcp-serp -->

[![PyPI version](https://img.shields.io/pypi/v/mcp-serp.svg)](https://pypi.org/project/mcp-serp/)
[![PyPI downloads](https://img.shields.io/pypi/dm/mcp-serp.svg)](https://pypi.org/project/mcp-serp/)
[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![MCP](https://img.shields.io/badge/MCP-Compatible-green.svg)](https://modelcontextprotocol.io)

A [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server for Google search using [SERP API](https://platform.acedata.cloud/documents/serp-google) through the [AceDataCloud API](https://platform.acedata.cloud).

Perform Google searches and get structured results directly from Claude, VS Code, or any MCP-compatible client.

## Features

- **Web Search** - Regular Google web search with structured results
- **Image Search** - Search for images with URLs and thumbnails
- **News Search** - Get latest news articles on any topic
- **Video Search** - Find videos from YouTube and other sources
- **Places Search** - Search for local businesses and places
- **Maps Search** - Find locations and geographic information
- **Knowledge Graph** - Get structured entity information
- **Localization** - Support for multiple countries and languages
- **Time Filtering** - Filter results by time range

## Tool Reference

| 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. |

## Quick Start

### 1. Get Your API Token

1. Sign up at [AceDataCloud Platform](https://platform.acedata.cloud)
2. Go to the [API documentation page](https://platform.acedata.cloud/documents/serp-google)
3. Click **"Acquire"** to get your API token
4. Copy the token for use below

### 2. Use the Hosted Server (Recommended)

AceDataCloud hosts a managed MCP server — **no local installation required**.

**Endpoint:** `https://serp.mcp.acedata.cloud/mcp`

All requests require a Bearer token. Use the API token from Step 1.

#### Claude.ai

Connect directly on [Claude.ai](https://claude.ai) with OAuth — **no API token needed**:

1. Go to Claude.ai **Settings → Integrations → Add More**
2. Enter the server URL: `https://serp.mcp.acedata.cloud/mcp`
3. Complete the OAuth login flow
4. Start using the tools in your conversation

#### Claude Desktop

Add to your config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):

```json
{
  "mcpServers": {
    "serp": {
      "type": "streamable-http",
      "url": "https://serp.mcp.acedata.cloud/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_TOKEN"
      }
    }
  }
}
```

#### Cursor / Windsurf

Add to your MCP config (`.cursor/mcp.json` or `.windsurf/mcp.json`):

```json
{
  "mcpServers": {
    "serp": {
      "type": "streamable-http",
      "url": "https://serp.mcp.acedata.cloud/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_TOKEN"
      }
    }
  }
}
```

#### VS Code (Copilot)

Add to your VS Code MCP config (`.vscode/mcp.json`):

```json
{
  "servers": {
    "serp": {
      "type": "streamable-http",
      "url": "https://serp.mcp.acedata.cloud/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_TOKEN"
      }
    }
  }
}
```

Or install the [Ace Data Cloud MCP extension](https://marketplace.visualstudio.com/items?itemName=acedatacloud.acedatacloud-mcp) for VS Code, which registers the hosted MCP servers with one-click setup.

#### JetBrains IDEs

1. Go to **Settings → Tools → AI Assistant → Model Context Protocol (MCP)**
2. Click **Add** → **HTTP**
3. Paste:

```json
{
  "mcpServers": {
    "serp": {
      "url": "https://serp.mcp.acedata.cloud/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_TOKEN"
      }
    }
  }
}
```


#### Claude Code

Claude Code supports MCP servers natively:

```bash
claude mcp add serp --transport http https://serp.mcp.acedata.cloud/mcp \
  -h "Authorization: Bearer YOUR_API_TOKEN"
```

Or add to your project's `.mcp.json`:

```json
{
  "mcpServers": {
    "serp": {
      "type": "streamable-http",
      "url": "https://serp.mcp.acedata.cloud/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_TOKEN"
      }
    }
  }
}
```

#### Cline

Add to Cline's MCP settings (`.cline/mcp_settings.json`):

```json
{
  "mcpServers": {
    "serp": {
      "type": "streamable-http",
      "url": "https://serp.mcp.acedata.cloud/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_TOKEN"
      }
    }
  }
}
```

#### Amazon Q Developer

Add to your MCP configuration:

```json
{
  "mcpServers": {
    "serp": {
      "type": "streamable-http",
      "url": "https://serp.mcp.acedata.cloud/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_TOKEN"
      }
    }
  }
}
```

#### Roo Code

Add to Roo Code MCP settings:

```json
{
  "mcpServers": {
    "serp": {
      "type": "streamable-http",
      "url": "https://serp.mcp.acedata.cloud/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_TOKEN"
      }
    }
  }
}
```

#### Continue.dev

Add to `.continue/config.yaml`:

```yaml
mcpServers:
  - name: serp
    type: streamable-http
    url: https://serp.mcp.acedata.cloud/mcp
    headers:
      Authorization: "Bearer YOUR_API_TOKEN"
```

#### Zed

Add to Zed's settings (`~/.config/zed/settings.json`):

```json
{
  "language_models": {
    "mcp_servers": {
      "serp": {
        "url": "https://serp.mcp.acedata.cloud/mcp",
        "headers": {
          "Authorization": "Bearer YOUR_API_TOKEN"
        }
      }
    }
  }
}
```

#### cURL Test

```bash
# Health check (no auth required)
curl https://serp.mcp.acedata.cloud/health

# MCP initialize
curl -X POST https://serp.mcp.acedata.cloud/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
```

### 3. Or Run Locally (Alternative)

If you prefer to run the server on your own machine:

```bash
# Install from PyPI
pip install mcp-serp
# or
uvx mcp-serp

# Set your API token
export ACEDATACLOUD_API_TOKEN="your_token_here"

# Run (stdio mode for Claude Desktop / local clients)
mcp-serp

# Run (HTTP mode for remote access)
mcp-serp --transport http --port 8000
```

#### Claude Desktop (Local)

```json
{
  "mcpServers": {
    "serp": {
      "command": "uvx",
      "args": ["mcp-serp"],
      "env": {
        "ACEDATACLOUD_API_TOKEN": "your_token_here"
      }
    }
  }
}
```

#### Docker (Self-Hosting)

```bash
docker pull ghcr.io/acedatacloud/mcp-serp:latest
docker run -p 8000:8000 ghcr.io/acedatacloud/mcp-serp:latest
```

Clients connect with their own Bearer token — the server extracts the token from each request's `Authorization` header.

## Available Tools

### Search Tools

| 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                |

### Information Tools

| 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        |

## Usage Examples

### Basic Web Search

```
User: Search for information about artificial intelligence

Claude: I'll search for information about AI.
[Calls serp_google_search with query="artificial intelligence"]
```

### News Search with Time Filter

```
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"]
```

### Localized Search

```
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"]
```

### Image Search

```
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"]
```

## Search Parameters

### Search Types

| Type     | Description                  |
| -------- | ---------------------------- |
| `search` | Regular web search (default) |
| `images` | Image search                 |
| `news`   | News articles                |
| `maps`   | Map results                  |
| `places` | Local businesses             |
| `videos` | Video results                |

### Time Range Filters

| 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  |

### Image Size Filters (for `images` search type)

`large`, `medium`, `icon`, `2mp`, `4mp`, `6mp`, `8mp`, `10mp`, `12mp`, `15mp`, `20mp`, `40mp`, `70mp`

### Common Country Codes

| Code | Country        |
| ---- | -------------- |
| `us` | United States  |
| `uk` | United Kingdom |
| `cn` | China          |
| `jp` | Japan          |
| `de` | Germany        |
| `fr` | France         |

### Common Language Codes

| Code    | Language             |
| ------- | -------------------- |
| `en`    | English              |
| `zh-cn` | Chinese (Simplified) |
| `ja`    | Japanese             |
| `es`    | Spanish              |
| `fr`    | French               |
| `de`    | German               |

## Response Structure

### Regular Search Results

- **knowledge_graph**: Entity information (company, person, etc.)
- **answer_box**: Direct answers
- **organic**: Regular search results with title, link, snippet
- **people_also_ask**: Related questions
- **related_searches**: Related queries

### Image Search Results

- **images**: Image results with URLs and thumbnails

### News Search Results

- **news**: News articles with source and date

## Configuration

### Environment Variables

| 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`                      |

### Command Line Options

```bash
mcp-serp --help

Options:
  --version          Show version
  --transport        Transport mode: stdio (default) or http
  --port             Port for HTTP transport (default: 8000)
```

## Development

### Setup Development Environment

```bash
# 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 Tests

```bash
# 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
```

### Code Quality

```bash
# Format code
ruff format .

# Lint code
ruff check .

# Type check
mypy core tools
```

### Build & Publish

```bash
# Install build dependencies
pip install -e ".[release]"

# Build package
python -m build

# Upload to PyPI
twine upload dist/*
```

## Project Structure

```
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
```

## API Reference

This server wraps the [AceDataCloud Google SERP API](https://platform.acedata.cloud/documents/serp-google):

- [Google SERP API Documentation](https://platform.acedata.cloud/documents/serp-google)

## Contributing

Contributions are welcome! Please:

1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing`)
3. Commit your changes (`git commit -m 'Add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing`)
5. Open a Pull Request

## Documentation

<!-- canonical-documentation -->
[Documentation](https://platform.acedata.cloud/documents/serp-mcp)

## License

MIT License - see [LICENSE](LICENSE) for details.

## Links

- [AceDataCloud Platform](https://platform.acedata.cloud)
- [Google SERP API](https://platform.acedata.cloud/documents/serp-google)
- [Model Context Protocol](https://modelcontextprotocol.io)
- [MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk)

---

Made with love by [AceDataCloud](https://platform.acedata.cloud)

More