Skip to main content
Glama
thejusdutt

Google Search MCP Server

by thejusdutt
README.md
# Google Search MCP Server

An MCP (Model Context Protocol) server that performs comprehensive web searches using Google Custom Search JSON API with advanced content extraction using Mozilla's Readability algorithm.

## Features

- **Three Search Modes**:
  - `google_search` - Fast snippet-only search for quick lookups
  - `deep_search` - Full content extraction with Readability algorithm
  - `deep_search_news` - News-optimized deep search
- **Google Custom Search API** - Uses official Google Custom Search JSON API
- **Advanced Content Extraction** - Uses Mozilla's Readability algorithm (same as Firefox Reader View) for clean article extraction
- **Multiple Search Types** - Web search, news search, and image search
- **Domain Filtering** - Include or exclude specific domains from results
- **Retry Logic** - Automatic retries with exponential backoff for reliability
- **Controlled Concurrency** - Fetches pages in batches to avoid overwhelming servers

## Prerequisites

### Get Google Custom Search API Credentials

1. Go to [Google Cloud Console](https://console.cloud.google.com/)
2. Create a new project or select an existing one
3. Enable the "Custom Search API"
4. Go to "Credentials" and create an API key
5. Go to [Programmable Search Engine](https://programmablesearchengine.google.com/)
6. Create a new search engine and get your Search Engine ID (CX)

You'll need:
- `GOOGLE_API_KEY` - Your Google Cloud API key
- `GOOGLE_CX` - Your Programmable Search Engine ID

## Installation

### Using npx (Recommended)

No installation needed - just configure your MCP client:

```json
{
  "mcpServers": {
    "google-search": {
      "command": "npx",
      "args": ["-y", "@thejusdutt/google-search-mcp"],
      "env": {
        "GOOGLE_API_KEY": "your-google-api-key",
        "GOOGLE_CX": "your-search-engine-id"
      }
    }
  }
}
```

### Global Installation

```bash
npm install -g @thejusdutt/google-search-mcp
```

Then configure:

```json
{
  "mcpServers": {
    "google-search": {
      "command": "google-search-mcp",
      "env": {
        "GOOGLE_API_KEY": "your-google-api-key",
        "GOOGLE_CX": "your-search-engine-id"
      }
    }
  }
}
```

## Tools

### `google_search`

Simple Google search for quick lookups. Returns snippets only without fetching full page content.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `query` | string | required | The search query |
| `num_results` | number | 10 | Number of results (1-10) |

**Example:**

```javascript
// Quick search with snippets only
google_search({ query: "React hooks tutorial" })
```

### `deep_search`

Comprehensive web search with full content extraction.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `query` | string | required | The search query |
| `num_results` | number | 10 | Number of results (1-10) |
| `max_content_per_page` | number | 50000 | Max characters per page (5000-100000) |
| `search_type` | string | "web" | Search type: "web", "news", or "images" |
| `include_domains` | string | - | Comma-separated domains to include |
| `exclude_domains` | string | - | Comma-separated domains to exclude |

**Examples:**

```javascript
// Basic web search
deep_search({ query: "React best practices 2025" })

// News search
deep_search({ query: "AI announcements", search_type: "news" })

// Search specific sites only
deep_search({ 
  query: "TypeScript tips",
  include_domains: "github.com,dev.to"
})

// Exclude certain sites
deep_search({
  query: "web development trends",
  exclude_domains: "pinterest.com,facebook.com"
})
```

### `deep_search_news`

Convenience wrapper for news search. Equivalent to calling `deep_search` with `search_type: "news"` and optimized content limits.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `query` | string | required | The news topic to search |
| `num_results` | number | 10 | Number of articles (1-10) |
| `max_content_per_page` | number | 30000 | Max characters per article |

**Example:**

```javascript
deep_search_news({ query: "OpenAI latest updates" })
```

## Configuration

### Kiro

Add to `~/.kiro/settings/mcp.json`:

```json
{
  "mcpServers": {
    "google-search": {
      "command": "npx",
      "args": ["-y", "@thejusdutt/google-search-mcp"],
      "env": {
        "GOOGLE_API_KEY": "your-google-api-key",
        "GOOGLE_CX": "your-search-engine-id"
      }
    }
  }
}
```

### Claude Desktop

Add to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "google-search": {
      "command": "npx",
      "args": ["-y", "@thejusdutt/google-search-mcp"],
      "env": {
        "GOOGLE_API_KEY": "your-google-api-key",
        "GOOGLE_CX": "your-search-engine-id"
      }
    }
  }
}
```

## How It Works

1. **Search** - Queries Google Custom Search API to get top results
2. **Fetch** - Downloads each result page with retry logic
3. **Extract** - Uses Mozilla Readability to extract clean article content
4. **Format** - Returns consolidated markdown with full content from each page

## Requirements

- Node.js 18+
- Google Cloud API key with Custom Search API enabled
- Programmable Search Engine ID (CX)

## License

MIT

## Author

[thejusdutt](https://github.com/thejusdutt)

## Contributing

Issues and PRs welcome at [GitHub](https://github.com/thejusdutt/google-search-mcp)

TDQS

A3.6/5.0

Scored across 3 tools

Disambiguation2/5

The tools have overlapping purposes that could cause misselection. Both deep_search and deep_search_news perform similar comprehensive searches with full content extraction, differing mainly in search type (general vs. news), while google_search is a simpler alternative. An agent might struggle to choose between deep_search and deep_search_news for news-related queries, as their descriptions suggest functional overlap.

Naming Consistency5/5

The tool names follow a consistent snake_case pattern throughout, with clear and descriptive verbs (deep_search, deep_search_news, google_search). The naming is predictable and readable, making it easy for an agent to understand the tool set's structure without confusion.

Tool Count3/5

With only 3 tools, the server feels thin for a Google Search domain, which typically involves more varied operations like filtering, pagination, or specialized searches (e.g., by date or region). While the tools cover basic search needs, the count is borderline for comprehensive search functionality, potentially limiting agent capabilities.

Completeness2/5

There are significant gaps in the tool surface for a Google Search server. Missing operations include advanced filtering options, image or video search handling beyond basic mentions, pagination support, and error handling tools. The server focuses on content retrieval but lacks tools for refining or managing search results, which could lead to agent failures in complex tasks.

Maintenance

ActivityInactive
ResponsivenessNo issues