serper-search
Enables web searching using the Serper API for Google search results, returning structured results with titles, URLs, descriptions, and optionally fetches web page content.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@serper-searchsearch for MCP protocol details"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Serper Search MCP Server
A Model Context Protocol (MCP) server that enables web searching using the Serper API for Google search results.
Features
Search the web using Serper API for Google search results
Requires Serper API key for authentication
Returns structured results with titles, URLs, and descriptions
Fetches and includes actual web page content for each result
Configurable number of results per search
Supports streamable-http transport for LibreChat integration
Docker containerization support
Health checks and monitoring
Built-in rate limiting to respect API limits
Related MCP server: Serper MCP Server
Installation
Clone or download this repository
Install dependencies:
npm installBuild the server:
npm run buildUsage Modes
Local Development (Stdio Mode)
For local development and direct MCP client integration:
npm startAdd the server to your MCP configuration:
For VSCode (Claude Dev Extension):
{
"mcpServers": {
"web-search": {
"command": "node",
"args": ["/path/to/web-search/build/index.js"]
}
}
}For Claude Desktop:
{
"mcpServers": {
"web-search": {
"command": "node",
"args": ["/path/to/web-search/build/index.js"]
}
}
}HTTP Mode (Container-Ready)
For containerized deployments or LibreChat integration:
# Start in HTTP mode
npm run start:http
# or
node build/index.js --http
# or set environment variable
MCP_HTTP_MODE=true npm startThe server will expose:
MCP endpoint:
http://localhost:3000/mcp(for JSON-RPC 2.0 requests)Health endpoint:
http://localhost:3000/healthHealth check:
http://localhost:3000/health
Docker Deployment
Using Docker directly:
# Build the image
npm run docker:build
# Run the container
npm run docker:runOr manually:
docker build -t web-search-mcp .
docker run -p 3000:3000 -e MCP_HTTP_MODE=true web-search-mcpUsing Docker Compose:
# Start the service
npm run docker:up
# View logs
npm run docker:logs
# Stop the service
npm run docker:downContainer Configuration
Environment variables:
MCP_HTTP_MODE: Set totrueto enable HTTP/SSE modePORT: Port number (default: 3000)SEARCH_RATE_LIMIT_MS: Minimum milliseconds between search requests (default: 500)
The container includes:
Health checks
Non-root user execution
CORS support
Automatic restart policies
Rate Limiting
The server includes built-in rate limiting to be respectful to Google's servers:
Default: Minimum 500ms between search requests
Configurable: Set
SEARCH_RATE_LIMIT_MSenvironment variableAutomatic: If requests come in faster than the limit, the server will automatically wait
Logging: Rate limiting events are logged to stderr
Example with custom rate limit:
# Set 1 second minimum between searches
SEARCH_RATE_LIMIT_MS=1000 npm run start:httpAPI Reference
Tool: search
Parameters:
{
"query": string, // The search query
"limit": number, // Optional: Number of results to return (default: 5, max: 10)
"maxContentLength": number // Optional: Max length of content to extract (default: 50000)
}Tool: fetch_page_content
Parameters:
{
"url": string, // The URL of the web page to fetch
"maxContentLength": number // Optional: Max length of content to extract (default: 50000)
}HTTP/SSE API
Health Check
GET /healthReturns:
{
"status": "ok",
"service": "web-search-mcp"
}SSE Connection
GET /sseEstablishes Server-Sent Events connection for real-time communication.
Message Endpoint
POST /message
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": "unique-id",
"method": "tools/call",
"params": {
"name": "search",
"arguments": {
"query": "your search query",
"limit": 5
}
}
}Testing
A test client is included (test-client.html) for testing the HTTP/SSE endpoint. Open it in a browser and ensure the server is running in HTTP mode.
Example Usage
MCP Client (stdio mode):
use_mcp_tool({
server_name: "web-search",
tool_name: "search",
arguments: {
query: "your search query",
limit: 3
}
})HTTP API (container mode):
const response = await fetch('http://localhost:3000/message', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: "2.0",
id: "1",
method: "tools/call",
params: {
name: "search",
arguments: { query: "Model Context Protocol", limit: 5 }
}
})
});Example response:
{
"jsonrpc": "2.0",
"id": "1",
"result": {
"content": [
{
"type": "text",
"text": "[{\"title\":\"Example Result\",\"url\":\"https://example.com\",\"description\":\"Description...\"}]"
}
]
}
}Fetch Page Content Tool
HTTP API Example
{
"jsonrpc": "2.0",
"id": "1",
"method": "tools/call",
"params": {
"name": "fetch_page_content",
"arguments": {
"url": "https://en.wikipedia.org/wiki/Model_Context_Protocol",
"maxContentLength": 10000
}
}
}Example Response
{
"jsonrpc": "2.0",
"id": "1",
"result": {
"content": [
{
"type": "text",
"text": "[Cleaned web page content here...]"
}
]
}
}Limitations
Since this tool uses web scraping of Google search results, there are some important limitations to be aware of:
Rate Limiting: Google may temporarily block requests if too many searches are performed in a short time. To avoid this:
Keep searches to a reasonable frequency
Use the limit parameter judiciously
Consider implementing delays between searches if needed
Result Accuracy:
The tool relies on Google's HTML structure, which may change
Some results might be missing descriptions or other metadata
Complex search operators may not work as expected
Legal Considerations:
This tool is intended for personal use
Respect Google's terms of service
Consider implementing appropriate rate limiting for your use case
Contributing
Feel free to submit issues and enhancement requests!
License
This project is licensed under the MIT License. See the LICENSE file for details.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/shgsousa/serper-search'
If you have feedback or need assistance with the MCP directory API, please join our Discord server