Skip to main content
Glama
hasinduudara

Google Search MCP Server

by hasinduudara
README.md
<div align="center">

<img src="https://capsule-render.vercel.app/api?type=waving&color=gradient&customColorList=6,11,20&height=200&section=header&text=Google%20Search%20MCP%20Server&fontSize=42&fontColor=ffffff&animation=fadeIn&fontAlignY=38&desc=Web%20Search%20for%20AI%20Agents%20via%20MCP&descAlignY=58&descSize=18" width="100%"/>

<br/>

[![Node.js](https://img.shields.io/badge/Node.js-18%2B-339933?style=for-the-badge&logo=nodedotjs&logoColor=white)](https://nodejs.org/)
[![TypeScript](https://img.shields.io/badge/TypeScript-Ready-3178C6?style=for-the-badge&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
[![MCP](https://img.shields.io/badge/Protocol-MCP-8A2BE2?style=for-the-badge&logo=protocolsdotio&logoColor=white)](https://modelcontextprotocol.io/)
[![Google Custom Search](https://img.shields.io/badge/Google-Custom%20Search%20API-4285F4?style=for-the-badge&logo=google&logoColor=white)](https://programmablesearchengine.google.com/)
[![License](https://img.shields.io/badge/License-Unspecified-lightgrey?style=for-the-badge)]()

<br/>

### ๐Ÿ” An MCP server that lets any MCP-compatible AI client search the live web through Google's Custom Search JSON API โ€” over stdio, plug-and-play.

</div>

---

## ๐Ÿงญ Table of Contents

- [๐Ÿงญ Table of Contents](#-table-of-contents)
- [โœจ Overview](#-overview)
- [โš™๏ธ Requirements](#๏ธ-requirements)
- [๐Ÿ”ง Google Custom Search Setup](#-google-custom-search-setup)
- [๐Ÿ“ฆ Installation](#-installation)
- [โ–ถ๏ธ Run](#๏ธ-run)
- [๐Ÿ”Œ MCP Client Configuration](#-mcp-client-configuration)
- [๐Ÿ› ๏ธ Available Tool](#๏ธ-available-tool)
  - [`search_google`](#search_google)
- [๐Ÿงช Test with MCP Inspector](#-test-with-mcp-inspector)
- [๐Ÿ“ Project Structure](#-project-structure)
- [๐Ÿ“„ License](#-license)
- [๐Ÿ‘ค Author](#-author)

---

## โœจ Overview

> This server bridges the gap between **AI agents** and **real-time web knowledge**.
> It speaks the **Model Context Protocol (MCP)** over stdio, so any compatible client can call a single tool โ€” `search_google` โ€” and get back clean, structured search results straight from Google.

```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”        stdio (MCP)        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”        HTTPS        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   MCP Client     โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถ โ”‚  Google Search MCP    โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถ โ”‚  Google Custom     โ”‚
โ”‚ (Claude, etc.)   โ”‚ โ—€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚       Server           โ”‚ โ—€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚  Search JSON API   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜        results            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜       results        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```

---

## โš™๏ธ Requirements

| Requirement | Details |
|---|---|
| ๐ŸŸข **Node.js** | v18 or newer |
| ๐Ÿ”‘ **Google API Key** | With access to the Custom Search JSON API |
| ๐Ÿ†” **Search Engine ID** | From a Google Programmable Search Engine (`cx`) |

---

## ๐Ÿ”ง Google Custom Search Setup

1. **Create a project** in the [Google Cloud Console](https://console.cloud.google.com/)
2. **Enable** the `Custom Search API` for that project
3. **Generate** an API key
4. **Create** a [Programmable Search Engine](https://programmablesearchengine.google.com/) and copy its **Search Engine ID**

---

## ๐Ÿ“ฆ Installation

```bash
npm install
```

Create a `.env` file in the project root:

```env
GOOGLE_API_KEY=your_google_api_key
SEARCH_ENGINE_ID=your_search_engine_id
```

> โš ๏ธ **Never commit `.env`** or expose your API key in source control.

---

## โ–ถ๏ธ Run

**Development** (run TypeScript directly):

```bash
npm start
```

**Production** (build then run compiled output):

```bash
npm run build
node build/index.js
```

> โ„น๏ธ The server logs status and errors to `stderr`, keeping `stdout` clean for MCP protocol messages.

---

## ๐Ÿ”Œ MCP Client Configuration

After building the project, register the server with an MCP-compatible client using the compiled entry point:

```json
{
  "mcpServers": {
    "google-search": {
      "command": "node",
      "args": ["D:/My Learning Projects/Google-Search-MCP/build/index.js"],
      "env": {
        "GOOGLE_API_KEY": "your_google_api_key",
        "SEARCH_ENGINE_ID": "your_search_engine_id"
      }
    }
  }
}
```

Or keep credentials in the project's `.env` and launch from the project directory:

```json
{
  "mcpServers": {
    "google-search": {
      "command": "node",
      "args": ["D:/My Learning Projects/Google-Search-MCP/build/index.js"]
    }
  }
}
```

---

## ๐Ÿ› ๏ธ Available Tool

### `search_google`

Searches Google Custom Search for the supplied query and returns the **top 3 results**.

**Input**

```json
{
  "query": "latest TypeScript release"
}
```

**Output**

Each result includes:
- ๐Ÿ“Œ `title`
- ๐Ÿ”— `link`
- ๐Ÿ“ `snippet`

If nothing is found, the tool responds with `No results found.`

---

## ๐Ÿงช Test with MCP Inspector

```bash
npm run build
npx @modelcontextprotocol/inspector node build/index.js
```

> Make sure your environment variables are set before launching the inspector.

---

## ๐Ÿ“ Project Structure

```text
๐Ÿ“ฆ Google-Search-MCP
โ”œโ”€โ”€ ๐Ÿ“‚ src
โ”‚   โ””โ”€โ”€ index.ts     # MCP server implementation
โ”œโ”€โ”€ ๐Ÿ“‚ build          # Compiled JavaScript and type declarations
โ”œโ”€โ”€ .env              # Local environment config (not committed)
โ””โ”€โ”€ README.md
```

---

## ๐Ÿ“„ License

No license has been specified for this project yet.

---

## ๐Ÿ‘ค Author

<div align="center">

**M. Hasindu Udara**
Full-Stack Developer

[![LinkedIn](https://img.shields.io/badge/LinkedIn-Connect-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/hasindu-udara)

</div>

<img src="https://capsule-render.vercel.app/api?type=waving&color=gradient&customColorList=6,11,20&height=100&section=footer" width="100%"/>

TDQS

A3.7/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of confusion or overlap between tools. The single tool's purpose is clear and distinct by default.

Naming Consistency5/5

The tool name follows a clear verb_noun pattern (search_google), which is consistent and descriptive. There are no other tools to create inconsistencies.

Tool Count3/5

The server has only one tool, which feels thin for typical MCP servers. However, for a narrowly scoped Google Search service, a single focused search tool is defensible.

Completeness5/5

The tool fully covers the stated purpose of searching the web via Google Custom Search API. There are no obvious missing operations for a server dedicated solely to performing web searches.

Maintenance

ActivityMaintained
ResponsivenessNo issues