MCP Google Custom Search Server

# MCP Google Custom Search Server A Model Context Protocol (MCP) server that provides web search capabilities through Google's Custom Search API. This server enables Language Learning Models (LLMs) to perform web searches using a standardized interface. ## šŸŒŸ Features - Seamless integration with Google Custom Search API - Model Context Protocol (MCP) compliant server implementation - Type-safe implementation using TypeScript - Environment variable configuration - Input validation using Zod - Configurable search results (up to 10 per query) - Formatted search results including titles, URLs, and descriptions - Error handling and validation - Compatible with Claude Desktop and other MCP clients ## šŸ“‹ Prerequisites Before you begin, ensure you have: 1. A Google Cloud Project with Custom Search API enabled - Visit [Google Cloud Console](https://console.cloud.google.com) - Enable the Custom Search API - Create API credentials 2. A Custom Search Engine ID - Visit [Programmable Search Engine](https://programmablesearchengine.google.com/) - Create a new search engine - Get your Search Engine ID 3. Local development requirements: - Node.js (v18 or higher) - npm (comes with Node.js) ## šŸš€ Quick Start 1. Clone the repository: ```bash git clone https://github.com/yourusername/mcp-google-custom-search-server.git cd mcp-google-custom-search-server ``` 2. Install dependencies: ```bash npm install ``` 3. Create a .env file: ```bash GOOGLE_API_KEY=your-api-key GOOGLE_SEARCH_ENGINE_ID=your-search-engine-id ``` 4. Build the server: ```bash npm run build ``` 5. Start the server: ```bash npm start ``` ## šŸ”§ Configuration ### Environment Variables | Variable | Description | Required | | ----------------------- | --------------------------------- | -------- | | GOOGLE_API_KEY | Your Google Custom Search API key | Yes | | GOOGLE_SEARCH_ENGINE_ID | Your Custom Search Engine ID | Yes | ### Claude Desktop Integration Add this configuration to your Claude Desktop config file (typically located at `~/Library/Application Support/Claude/claude_desktop_config.json`): ```json { "mcpServers": { "google-search": { "command": "node", "args": [ "/absolute/path/to/mcp-google-custom-search-server/build/index.js" ], "env": { "GOOGLE_API_KEY": "your-api-key", "GOOGLE_SEARCH_ENGINE_ID": "your-search-engine-id" } } } } ``` ## šŸ“– API Reference ### Available Tools #### search Performs a web search using Google Custom Search API. **Parameters:** - `query` (string, required): The search query to execute - `numResults` (number, optional): Number of results to return - Default: 5 - Maximum: 10 **Example Response:** ``` Result 1: Title: Example Search Result URL: https://example.com Description: This is an example search result description --- Result 2: ... ``` ## šŸ› ļø Development ### Project Structure ``` mcp-google-custom-search-server/ ā”œā”€ā”€ src/ ā”‚ ā””ā”€ā”€ index.ts # Main server implementation ā”œā”€ā”€ build/ # Compiled JavaScript output ā”œā”€ā”€ .env # Environment variables ā”œā”€ā”€ package.json # Project dependencies and scripts ā”œā”€ā”€ tsconfig.json # TypeScript configuration ā””ā”€ā”€ README.md # Project documentation ``` ### Available Scripts - `npm run build`: Compile TypeScript to JavaScript - `npm start`: Start the MCP server - `npm run dev`: Watch mode for development ### Testing 1. Using MCP Inspector: ```bash npx @modelcontextprotocol/inspector node build/index.js ``` 2. Manual testing with example queries: ```bash # After starting the server {"jsonrpc":"2.0","id":1,"method":"callTool","params":{"name":"search","arguments":{"query":"example search"}}} ``` ## šŸ“ License This project is licensed under the MIT License - see the LICENSE file for details. ## šŸ™ Acknowledgments - Built with [Model Context Protocol (MCP)](https://github.com/anthropics/model-context-protocol) - Uses Google's Custom Search API - Inspired by the need for better search capabilities in LLM applications