serper-search-mcp 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +428 -0
- package/dist/api/SerperAPI.d.ts +30 -0
- package/dist/api/SerperAPI.d.ts.map +1 -0
- package/dist/api/SerperAPI.js +106 -0
- package/dist/api/SerperAPI.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +102 -0
- package/dist/index.js.map +1 -0
- package/dist/server/SerperMCPServer.d.ts +37 -0
- package/dist/server/SerperMCPServer.d.ts.map +1 -0
- package/dist/server/SerperMCPServer.js +166 -0
- package/dist/server/SerperMCPServer.js.map +1 -0
- package/dist/tools/SearchTools.d.ts +36 -0
- package/dist/tools/SearchTools.d.ts.map +1 -0
- package/dist/tools/SearchTools.js +257 -0
- package/dist/tools/SearchTools.js.map +1 -0
- package/dist/types/index.d.ts +59 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/ResultFormatter.d.ts +28 -0
- package/dist/utils/ResultFormatter.d.ts.map +1 -0
- package/dist/utils/ResultFormatter.js +131 -0
- package/dist/utils/ResultFormatter.js.map +1 -0
- package/index.js +494 -0
- package/package.json +60 -0
package/README.md
ADDED
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
# Serper Search MCP Server v2.0.0 - Enterprise Edition
|
|
2
|
+
|
|
3
|
+
🚀 **Enterprise-grade Google search MCP server** with **dual architecture**: JavaScript for integration + TypeScript for enterprise development.
|
|
4
|
+
|
|
5
|
+
👨💻 **Author:** SMJAHID from SMLabs01
|
|
6
|
+
📦 **NPM:** `@modelcontextprotocol/server-serper-search`
|
|
7
|
+
🐳 **Docker:** `smlabs01/server-serper-search`
|
|
8
|
+
🔧 **Architecture:** JavaScript (primary) + TypeScript (enterprise modular design)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 🏗️ Dual Architecture Approach
|
|
13
|
+
|
|
14
|
+
This server provides **the best of both worlds**:
|
|
15
|
+
|
|
16
|
+
### **JavaScript Version (Primary)**
|
|
17
|
+
- **File:** `index.js` - Single file deployment
|
|
18
|
+
- **Transport:** Full HTTP/SSE + STDIO support
|
|
19
|
+
- **Integration:** Zero build process, immediate deployment
|
|
20
|
+
- **Use Case:** Kilo Code integration, simple deployment
|
|
21
|
+
|
|
22
|
+
### **TypeScript Version (Enterprise)**
|
|
23
|
+
- **Structure:** `src/` - Modular enterprise architecture
|
|
24
|
+
- **Features:** Type safety, better IDE support, team development
|
|
25
|
+
- **Build:** `npm run build` creates `dist/` folder
|
|
26
|
+
- **Use Case:** Large teams, maintainability, advanced development
|
|
27
|
+
|
|
28
|
+
## 🏗️ Enterprise Architecture
|
|
29
|
+
This server follows enterprise-grade patterns:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
src/
|
|
33
|
+
├── api/
|
|
34
|
+
│ └── SerperAPI.ts # Serper API client abstraction
|
|
35
|
+
├── tools/
|
|
36
|
+
│ └── SearchTools.ts # Tool definitions and validation
|
|
37
|
+
├── utils/
|
|
38
|
+
│ └── ResultFormatter.ts # Response formatting utilities
|
|
39
|
+
├── server/
|
|
40
|
+
│ └── SerperMCPServer.ts # Main server implementation
|
|
41
|
+
├── types/
|
|
42
|
+
│ └── index.ts # TypeScript type definitions
|
|
43
|
+
└── index.ts # Application entry point
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Features
|
|
47
|
+
- 🔍 **Multi-Type Search**: Web, Images, Videos, News, and Shopping search capabilities
|
|
48
|
+
- 🚀 **Multi-Transport**: STDIO (default) and HTTP/SSE transport modes
|
|
49
|
+
- 🌍 **Advanced Filtering**: Country, language, freshness, and content filters
|
|
50
|
+
- 🤖 **AI Summarization**: Generate summaries from search results
|
|
51
|
+
- 🐳 **Docker Support**: Multi-stage builds with smlabs01 namespace
|
|
52
|
+
- 📦 **NPM Package**: TypeScript with full CLI support
|
|
53
|
+
- ⚡ **Fast Results**: Optimized API client with error handling
|
|
54
|
+
- 🎯 **Structured Data**: Clean JSON responses perfect for AI processing
|
|
55
|
+
- 🔧 **Enterprise Ready**: Modular architecture for maintainability
|
|
56
|
+
|
|
57
|
+
## 🚀 Quick Start & Integration Guide
|
|
58
|
+
|
|
59
|
+
**🎯 Use JavaScript Version (`index.js`) for integration:**
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# No build process required
|
|
63
|
+
node index.js --help
|
|
64
|
+
|
|
65
|
+
# HTTP transport ready
|
|
66
|
+
SERPER_MCP_TRANSPORT=http SERPER_MCP_PORT=8080 node index.js
|
|
67
|
+
|
|
68
|
+
# Docker integration
|
|
69
|
+
docker run -e SERPER_API_KEY=your_key smlabs01/server-serper-search:2.0.0
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Why JavaScript for Integration:**
|
|
73
|
+
- ✅ **Zero configuration** - No build step needed
|
|
74
|
+
- ✅ **HTTP transport** - Full MCP SSE support
|
|
75
|
+
- ✅ **Simple deployment** - Single file execution
|
|
76
|
+
- ✅ **Standard approach** - Like other MCP servers
|
|
77
|
+
|
|
78
|
+
### For Enterprise Development (Optional)
|
|
79
|
+
|
|
80
|
+
**🏗️ Use TypeScript Version (`src/`) for development:**
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# Build TypeScript
|
|
84
|
+
npm run build
|
|
85
|
+
|
|
86
|
+
# Use compiled version
|
|
87
|
+
node dist/index.js --help
|
|
88
|
+
|
|
89
|
+
# Enterprise benefits
|
|
90
|
+
# - Type safety and IntelliSense
|
|
91
|
+
# - Modular architecture
|
|
92
|
+
# - Better for large teams
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Installation & Setup
|
|
96
|
+
|
|
97
|
+
### Option 1: NPX (Recommended for Integration)
|
|
98
|
+
|
|
99
|
+
1. **Get your Serper API key** from [Serper.dev](https://serper.dev)
|
|
100
|
+
|
|
101
|
+
2. **Configure the MCP server** in your MCP settings:
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"mcpServers": {
|
|
106
|
+
"serper-search": {
|
|
107
|
+
"command": "npx",
|
|
108
|
+
"args": ["-y", "@modelcontextprotocol/server-serper-search"],
|
|
109
|
+
"env": {
|
|
110
|
+
"SERPER_API_KEY": "your_actual_api_key_here"
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
3. **Restart your MCP client**
|
|
118
|
+
|
|
119
|
+
### Option 2: Docker
|
|
120
|
+
|
|
121
|
+
1. **Pull from Docker Hub** (Recommended):
|
|
122
|
+
```bash
|
|
123
|
+
docker pull smlabs01/server-serper-search:2.0.0
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
2. **Or build locally**:
|
|
127
|
+
```bash
|
|
128
|
+
docker build -t smlabs01/server-serper-search:2.0.0 .
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
3. **Configure the MCP server**:
|
|
132
|
+
```json
|
|
133
|
+
{
|
|
134
|
+
"mcpServers": {
|
|
135
|
+
"serper-search": {
|
|
136
|
+
"command": "docker",
|
|
137
|
+
"args": [
|
|
138
|
+
"run",
|
|
139
|
+
"-i",
|
|
140
|
+
"--rm",
|
|
141
|
+
"-e",
|
|
142
|
+
"SERPER_API_KEY=your_actual_api_key_here",
|
|
143
|
+
"smlabs01/server-serper-search:2.0.0"
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Option 2.1: Docker Compose (Development)
|
|
151
|
+
|
|
152
|
+
1. **Set your API key**:
|
|
153
|
+
```bash
|
|
154
|
+
export SERPER_API_KEY="your_actual_api_key_here"
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
2. **Start with Docker Compose**:
|
|
158
|
+
```bash
|
|
159
|
+
# Production mode
|
|
160
|
+
docker-compose up
|
|
161
|
+
|
|
162
|
+
# Development mode with hot reload
|
|
163
|
+
docker-compose --profile dev up
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
3. **Access the server** at `http://localhost:8080`
|
|
167
|
+
|
|
168
|
+
### Option 3: Local Installation
|
|
169
|
+
|
|
170
|
+
1. **Clone and install**:
|
|
171
|
+
```bash
|
|
172
|
+
git clone https://github.com/smjahid012/serper-search-mcp-server.git
|
|
173
|
+
cd server-serper-search
|
|
174
|
+
npm install
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
2. **Set environment variable**:
|
|
178
|
+
```bash
|
|
179
|
+
export SERPER_API_KEY="your_actual_api_key_here"
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
3. **Run locally**:
|
|
183
|
+
```bash
|
|
184
|
+
# STDIO mode (default)
|
|
185
|
+
npm start
|
|
186
|
+
|
|
187
|
+
# HTTP mode
|
|
188
|
+
npm run http
|
|
189
|
+
|
|
190
|
+
# Show help
|
|
191
|
+
npm run help
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Option 4: Command Line Interface
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
# Show all options
|
|
198
|
+
node index.js --help
|
|
199
|
+
|
|
200
|
+
# Run with custom options
|
|
201
|
+
node index.js --transport http --port 3000 --host 127.0.0.1
|
|
202
|
+
|
|
203
|
+
# Environment variables
|
|
204
|
+
SERPER_MCP_TRANSPORT=http SERPER_MCP_PORT=3000 node index.js
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Usage
|
|
208
|
+
|
|
209
|
+
Once configured, you can use the search tools in your MCP client:
|
|
210
|
+
|
|
211
|
+
### Available Tools:
|
|
212
|
+
|
|
213
|
+
#### 1. `search_web` - General Web Search
|
|
214
|
+
**Parameters:**
|
|
215
|
+
- `query` (required): The search query string (max 400 chars, 50 words)
|
|
216
|
+
- `num_results` (optional): Number of results to return (1-20, default: 10)
|
|
217
|
+
- `country` (optional): Country code (default: "US")
|
|
218
|
+
- `search_lang` (optional): Search language (default: "en")
|
|
219
|
+
- `ui_lang` (optional): UI language (default: "en-US")
|
|
220
|
+
- `freshness` (optional): Time filter ("pd", "pw", "pm", "py")
|
|
221
|
+
- `safesearch` (optional): Content filtering ("off", "moderate", "strict")
|
|
222
|
+
- `summary` (optional): Enable AI summarization (default: false)
|
|
223
|
+
|
|
224
|
+
**Example:**
|
|
225
|
+
```javascript
|
|
226
|
+
// Advanced search with filtering
|
|
227
|
+
await callTool("search_web", {
|
|
228
|
+
query: "artificial intelligence recent news",
|
|
229
|
+
num_results: 15,
|
|
230
|
+
country: "US",
|
|
231
|
+
freshness: "pw", // Past week
|
|
232
|
+
safesearch: "moderate",
|
|
233
|
+
summary: true // Get AI summary
|
|
234
|
+
});
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
#### 2. `search_images` - Image Search
|
|
238
|
+
**Parameters:**
|
|
239
|
+
- `query` (required): The image search query
|
|
240
|
+
- `num_results` (optional): Number of results to return (default: 10)
|
|
241
|
+
|
|
242
|
+
**Example:**
|
|
243
|
+
```javascript
|
|
244
|
+
// Search for AI-generated images
|
|
245
|
+
await callTool("search_images", {
|
|
246
|
+
query: "artificial intelligence artwork",
|
|
247
|
+
num_results: 8
|
|
248
|
+
});
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
#### 3. `search_videos` - Video Search
|
|
252
|
+
**Parameters:**
|
|
253
|
+
- `query` (required): The video search query
|
|
254
|
+
- `num_results` (optional): Number of results to return (default: 10)
|
|
255
|
+
|
|
256
|
+
**Example:**
|
|
257
|
+
```javascript
|
|
258
|
+
// Search for tutorial videos
|
|
259
|
+
await callTool("search_videos", {
|
|
260
|
+
query: "machine learning tutorials",
|
|
261
|
+
num_results: 5
|
|
262
|
+
});
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
#### 4. `search_news` - News Search
|
|
266
|
+
**Parameters:**
|
|
267
|
+
- `query` (required): The news search query
|
|
268
|
+
- `num_results` (optional): Number of results to return (default: 10)
|
|
269
|
+
|
|
270
|
+
**Example:**
|
|
271
|
+
```javascript
|
|
272
|
+
// Get latest AI news
|
|
273
|
+
await callTool("search_news", {
|
|
274
|
+
query: "artificial intelligence breakthroughs 2024",
|
|
275
|
+
num_results: 10
|
|
276
|
+
});
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
#### 5. `search_shopping` - Shopping/Product Search
|
|
280
|
+
**Parameters:**
|
|
281
|
+
- `query` (required): The shopping search query
|
|
282
|
+
- `num_results` (optional): Number of results to return (default: 10)
|
|
283
|
+
|
|
284
|
+
**Example:**
|
|
285
|
+
```javascript
|
|
286
|
+
// Search for products
|
|
287
|
+
await callTool("search_shopping", {
|
|
288
|
+
query: "wireless headphones under $100",
|
|
289
|
+
num_results: 5
|
|
290
|
+
});
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
## Configuration
|
|
294
|
+
|
|
295
|
+
### Environment Variables
|
|
296
|
+
|
|
297
|
+
The server supports the following environment variables:
|
|
298
|
+
|
|
299
|
+
| Variable | Description | Default | Required |
|
|
300
|
+
|----------|-------------|---------|----------|
|
|
301
|
+
| `SERPER_API_KEY` | Your Serper API key | - | ✅ |
|
|
302
|
+
| `SERPER_MCP_TRANSPORT` | Transport mode | `stdio` | ❌ |
|
|
303
|
+
| `SERPER_MCP_PORT` | HTTP server port | `8080` | ❌ |
|
|
304
|
+
| `SERPER_MCP_HOST` | HTTP server host | `0.0.0.0` | ❌ |
|
|
305
|
+
| `SERPER_MCP_LOG_LEVEL` | Logging level | `info` | ❌ |
|
|
306
|
+
|
|
307
|
+
### Command Line Options
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
node index.js [options]
|
|
311
|
+
|
|
312
|
+
Options:
|
|
313
|
+
--transport <stdio\|http> Transport type (default: stdio)
|
|
314
|
+
--port <number> HTTP server port (default: 8080)
|
|
315
|
+
--host <string> HTTP server host (default: "0.0.0.0")
|
|
316
|
+
--log-level <string> Logging level (default: "info")
|
|
317
|
+
--api-key <string> Serper API key
|
|
318
|
+
--help Show help message
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
## Search Capabilities
|
|
322
|
+
|
|
323
|
+
The server supports all major Google search types through the Serper API:
|
|
324
|
+
|
|
325
|
+
| Search Type | Use Case | Data Included |
|
|
326
|
+
|-------------|----------|---------------|
|
|
327
|
+
| **Web** | General research, content discovery | Title, URL, snippet, SEO data |
|
|
328
|
+
| **Images** | AI datasets, creative tools, visual research | Image URL, thumbnail, source page |
|
|
329
|
+
| **Videos** | Learning, entertainment, research | Title, channel, duration, thumbnail |
|
|
330
|
+
| **News** | Current events, trend monitoring | Headlines, sources, publication dates |
|
|
331
|
+
| **Shopping** | E-commerce, price comparison | Products, prices, ratings, sources |
|
|
332
|
+
|
|
333
|
+
## Usage Scenarios
|
|
334
|
+
|
|
335
|
+
With these comprehensive search capabilities, your Serper MCP server can be used for:
|
|
336
|
+
|
|
337
|
+
### 🤖 **AI & Machine Learning**
|
|
338
|
+
- **Dataset Collection**: Gather images for training computer vision models
|
|
339
|
+
- **Research**: Find latest papers, tutorials, and educational videos
|
|
340
|
+
- **Content Generation**: Source diverse content for AI-generated materials
|
|
341
|
+
|
|
342
|
+
### 🔍 **Research & Analysis**
|
|
343
|
+
- **Market Research**: Track product prices, reviews, and competition
|
|
344
|
+
- **Trend Analysis**: Monitor news and social media for emerging trends
|
|
345
|
+
- **Competitive Intelligence**: Research competitor products and strategies
|
|
346
|
+
|
|
347
|
+
### 📈 **Business Intelligence**
|
|
348
|
+
- **Lead Generation**: Find business contact information and company data
|
|
349
|
+
- **Content Marketing**: Discover trending topics and viral content
|
|
350
|
+
- **SEO Research**: Analyze search results and ranking factors
|
|
351
|
+
|
|
352
|
+
### 🎨 **Creative Work**
|
|
353
|
+
- **Design Inspiration**: Search for visual references and creative assets
|
|
354
|
+
- **Media Research**: Find videos, images, and audio for projects
|
|
355
|
+
- **Content Curation**: Gather materials for blogs, presentations, and reports
|
|
356
|
+
|
|
357
|
+
### 💼 **E-commerce & Shopping**
|
|
358
|
+
- **Price Monitoring**: Track product prices across different retailers
|
|
359
|
+
- **Product Research**: Find detailed product information and reviews
|
|
360
|
+
- **Market Analysis**: Compare products and identify market gaps
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
## License
|
|
364
|
+
|
|
365
|
+
MIT License - see LICENSE file for details.
|
|
366
|
+
|
|
367
|
+
## Support
|
|
368
|
+
|
|
369
|
+
For issues and questions:
|
|
370
|
+
- GitHub Issues: [Report bugs](https://github.com/smjahid012/serper-search-mcp-server/issues)
|
|
371
|
+
- Serper API: [Get API key](https://serper.dev)
|
|
372
|
+
|
|
373
|
+
## 📋 Version History & Migration Guide
|
|
374
|
+
|
|
375
|
+
### v2.0.0 (Latest) - Enterprise Edition 🚀
|
|
376
|
+
**Release Date:** October 2024
|
|
377
|
+
**Author:** SMJAHID from SMLabs01
|
|
378
|
+
|
|
379
|
+
**🎯 New Features:**
|
|
380
|
+
- 🌐 **Multi-Transport Support**: HTTP/SSE + STDIO transport modes
|
|
381
|
+
- 🎛️ **Advanced Filtering**: Country, language, freshness, content filters
|
|
382
|
+
- 🤖 **AI Summarization**: Generate summaries from search results
|
|
383
|
+
- 🔧 **Command Line Interface**: Full CLI with help and options
|
|
384
|
+
- 🐳 **Docker Compose**: Development and production environments
|
|
385
|
+
- ⚙️ **Enhanced Configuration**: Environment variables and CLI options
|
|
386
|
+
- 📦 **Enterprise Architecture**: Modular TypeScript structure available
|
|
387
|
+
|
|
388
|
+
**🔧 Improvements:**
|
|
389
|
+
- 📊 **Parameter Validation**: Query length limits and input validation
|
|
390
|
+
- 🔍 **Enhanced Search Parameters**: Full Serper API feature support
|
|
391
|
+
- 📚 **Comprehensive Documentation**: Complete integration guide
|
|
392
|
+
- 🏗️ **Better Architecture**: Improved error handling and logging
|
|
393
|
+
- 🚀 **Performance Optimized**: Faster startup and response times
|
|
394
|
+
|
|
395
|
+
**📁 File Structure:**
|
|
396
|
+
```
|
|
397
|
+
JavaScript (Primary): index.js - Single file deployment
|
|
398
|
+
TypeScript (Enterprise): src/ (6 modules) - Modular architecture
|
|
399
|
+
Docker: smlabs01/server-serper-search:2.0.0
|
|
400
|
+
NPM: @modelcontextprotocol/server-serper-search
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
**⬆️ Migration from v1.x:**
|
|
404
|
+
- ✅ **Backward Compatible**: All v1.x configurations work
|
|
405
|
+
- ✅ **Default Transport**: STDIO (same as v1.x)
|
|
406
|
+
- ✅ **New Features**: Opt-in via parameters
|
|
407
|
+
- ⚡ **No Breaking Changes**: Existing integrations continue working
|
|
408
|
+
|
|
409
|
+
### v1.1.0 - Multi-Type Search Expansion
|
|
410
|
+
**Added:** Images, Videos, News, Shopping search capabilities
|
|
411
|
+
**Enhanced:** Result formatting and documentation
|
|
412
|
+
|
|
413
|
+
### v1.0.0 - Initial Release
|
|
414
|
+
**Features:** Basic web search, Docker/NPX support, MCP compliance
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
## 📋 **v2.0.0 Integration Summary**
|
|
419
|
+
|
|
420
|
+
| Component | JavaScript Version | TypeScript Version | Agent Ready |
|
|
421
|
+
|-----------|-------------------|-------------------|----------------|
|
|
422
|
+
| **Primary Server** | ✅ `index.js` | ❌ `src/` (enterprise) | ✅ **JavaScript** |
|
|
423
|
+
| **Transport Support** | ✅ HTTP/SSE + STDIO | ✅ STDIO | ✅ **JavaScript** |
|
|
424
|
+
| **Build Required** | ❌ No | ✅ Yes (`npm run build`) | ✅ **JavaScript** |
|
|
425
|
+
| **Docker Hub** | ✅ `smlabs01/server-serper-search` | ✅ Same | ✅ **Both** |
|
|
426
|
+
| **Enterprise Ready** | ❌ Simple | ✅ Modular structure | ✅ **TypeScript** |
|
|
427
|
+
|
|
428
|
+
---
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serper API Client for Serper MCP Server v2.0.0 - Enterprise Edition
|
|
3
|
+
* Author: SMJAHID from SMLabs01
|
|
4
|
+
*/
|
|
5
|
+
import { SearchOptions, SerperAPIResponse, SearchType } from '../types';
|
|
6
|
+
export declare class SerperAPI {
|
|
7
|
+
private apiKey;
|
|
8
|
+
private baseURL;
|
|
9
|
+
constructor(apiKey: string);
|
|
10
|
+
/**
|
|
11
|
+
* Perform search request to Serper API
|
|
12
|
+
*/
|
|
13
|
+
search(query: string, searchType?: SearchType, options?: Partial<SearchOptions>): Promise<SerperAPIResponse>;
|
|
14
|
+
/**
|
|
15
|
+
* Build request body for Serper API
|
|
16
|
+
*/
|
|
17
|
+
private buildRequestBody;
|
|
18
|
+
/**
|
|
19
|
+
* Validate API key by making a test request
|
|
20
|
+
*/
|
|
21
|
+
validateApiKey(): Promise<boolean>;
|
|
22
|
+
/**
|
|
23
|
+
* Get API usage information (if available)
|
|
24
|
+
*/
|
|
25
|
+
getApiInfo(): {
|
|
26
|
+
endpoint: string;
|
|
27
|
+
version: string;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=SerperAPI.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SerperAPI.d.ts","sourceRoot":"","sources":["../../src/api/SerperAPI.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAExE,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,MAAM;IAK1B;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,GAAE,UAAkB,EAAE,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA8B7H;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoDxB;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IASxC;;OAEG;IACH,UAAU,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAMpD"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Serper API Client for Serper MCP Server v2.0.0 - Enterprise Edition
|
|
4
|
+
* Author: SMJAHID from SMLabs01
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.SerperAPI = void 0;
|
|
8
|
+
class SerperAPI {
|
|
9
|
+
constructor(apiKey) {
|
|
10
|
+
this.apiKey = apiKey;
|
|
11
|
+
this.baseURL = 'https://google.serper.dev';
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Perform search request to Serper API
|
|
15
|
+
*/
|
|
16
|
+
async search(query, searchType = 'web', options = {}) {
|
|
17
|
+
const requestBody = this.buildRequestBody(query, searchType, {
|
|
18
|
+
query,
|
|
19
|
+
...options
|
|
20
|
+
});
|
|
21
|
+
try {
|
|
22
|
+
const response = await fetch(`${this.baseURL}/search`, {
|
|
23
|
+
method: 'POST',
|
|
24
|
+
headers: {
|
|
25
|
+
'X-API-KEY': this.apiKey,
|
|
26
|
+
'Content-Type': 'application/json'
|
|
27
|
+
},
|
|
28
|
+
body: JSON.stringify(requestBody)
|
|
29
|
+
});
|
|
30
|
+
if (!response.ok) {
|
|
31
|
+
const errorText = await response.text();
|
|
32
|
+
throw new Error(`Serper API error (${response.status}): ${errorText}`);
|
|
33
|
+
}
|
|
34
|
+
return await response.json();
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
if (error instanceof Error) {
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
throw new Error('Unknown error occurred during API request');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Build request body for Serper API
|
|
45
|
+
*/
|
|
46
|
+
buildRequestBody(query, searchType, options) {
|
|
47
|
+
const { num_results = 10, country = 'US', search_lang = 'en', ui_lang = 'en-US', freshness, safesearch = 'moderate', summary = false } = options;
|
|
48
|
+
const requestBody = {
|
|
49
|
+
q: query,
|
|
50
|
+
num: Math.min(num_results, 20), // Cap at 20 per API limits
|
|
51
|
+
gl: country, // Country code
|
|
52
|
+
hl: ui_lang, // UI language
|
|
53
|
+
lr: `lang_${search_lang}` // Search language
|
|
54
|
+
};
|
|
55
|
+
// Add search type specific parameters
|
|
56
|
+
switch (searchType) {
|
|
57
|
+
case 'images':
|
|
58
|
+
requestBody.tbm = 'isch'; // Images search
|
|
59
|
+
break;
|
|
60
|
+
case 'videos':
|
|
61
|
+
requestBody.tbm = 'vid'; // Videos search
|
|
62
|
+
break;
|
|
63
|
+
case 'news':
|
|
64
|
+
requestBody.tbm = 'nws'; // News search
|
|
65
|
+
break;
|
|
66
|
+
case 'shopping':
|
|
67
|
+
requestBody.tbm = 'shop'; // Shopping search
|
|
68
|
+
break;
|
|
69
|
+
// web search uses default parameters
|
|
70
|
+
}
|
|
71
|
+
// Add optional filters
|
|
72
|
+
if (freshness) {
|
|
73
|
+
requestBody.tbs = `qdr:${freshness}`; // Time-based search
|
|
74
|
+
}
|
|
75
|
+
if (safesearch && safesearch !== 'moderate') {
|
|
76
|
+
requestBody.safe = safesearch === 'strict' ? 'active' : 'off';
|
|
77
|
+
}
|
|
78
|
+
if (summary) {
|
|
79
|
+
requestBody.summary = true; // Enable AI summarization
|
|
80
|
+
}
|
|
81
|
+
return requestBody;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Validate API key by making a test request
|
|
85
|
+
*/
|
|
86
|
+
async validateApiKey() {
|
|
87
|
+
try {
|
|
88
|
+
await this.search('test query', 'web', { num_results: 1 });
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get API usage information (if available)
|
|
97
|
+
*/
|
|
98
|
+
getApiInfo() {
|
|
99
|
+
return {
|
|
100
|
+
endpoint: this.baseURL,
|
|
101
|
+
version: '2.0.0'
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.SerperAPI = SerperAPI;
|
|
106
|
+
//# sourceMappingURL=SerperAPI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SerperAPI.js","sourceRoot":"","sources":["../../src/api/SerperAPI.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AA0G3D,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.SerperMCPServer = void 0;
|
|
5
|
+
const SerperMCPServer_1 = require("./server/SerperMCPServer");
|
|
6
|
+
Object.defineProperty(exports, "SerperMCPServer", { enumerable: true, get: function () { return SerperMCPServer_1.SerperMCPServer; } });
|
|
7
|
+
/**
|
|
8
|
+
* Serper Search MCP Server v2.0.0 - Enterprise Edition
|
|
9
|
+
*
|
|
10
|
+
* Author: SMJAHID from SMLabs01
|
|
11
|
+
* Description: Enterprise-grade Google search MCP server with multi-transport support
|
|
12
|
+
*
|
|
13
|
+
* Features:
|
|
14
|
+
* - Multi-Type Search (Web, Images, Videos, News, Shopping)
|
|
15
|
+
* - Multi-Transport (STDIO, HTTP/SSE)
|
|
16
|
+
* - Advanced Filtering (Country, Language, Freshness, Content)
|
|
17
|
+
* - AI Summarization
|
|
18
|
+
* - Docker & NPM Deployment
|
|
19
|
+
*/
|
|
20
|
+
// Parse command line arguments
|
|
21
|
+
function parseArgs() {
|
|
22
|
+
const args = process.argv.slice(2);
|
|
23
|
+
const options = {};
|
|
24
|
+
for (let i = 0; i < args.length; i++) {
|
|
25
|
+
const arg = args[i];
|
|
26
|
+
switch (arg) {
|
|
27
|
+
case '--transport':
|
|
28
|
+
options.transport = args[++i];
|
|
29
|
+
break;
|
|
30
|
+
case '--port':
|
|
31
|
+
options.port = parseInt(args[++i]);
|
|
32
|
+
break;
|
|
33
|
+
case '--host':
|
|
34
|
+
options.host = args[++i];
|
|
35
|
+
break;
|
|
36
|
+
case '--log-level':
|
|
37
|
+
options.logLevel = args[++i];
|
|
38
|
+
break;
|
|
39
|
+
case '--api-key':
|
|
40
|
+
options.apiKey = args[++i];
|
|
41
|
+
break;
|
|
42
|
+
case '--help':
|
|
43
|
+
console.log(`
|
|
44
|
+
Serper MCP Server v2.0.0 - Enterprise Edition
|
|
45
|
+
|
|
46
|
+
Usage: node dist/index.js [options]
|
|
47
|
+
|
|
48
|
+
Options:
|
|
49
|
+
--transport <stdio|http> Transport mode (default: stdio)
|
|
50
|
+
--port <number> HTTP server port (default: 8080)
|
|
51
|
+
--host <string> HTTP server host (default: "0.0.0.0")
|
|
52
|
+
--log-level <string> Logging level (default: "info")
|
|
53
|
+
--api-key <string> Serper API key
|
|
54
|
+
--help Show this help message
|
|
55
|
+
|
|
56
|
+
Environment Variables:
|
|
57
|
+
SERPER_API_KEY Your Serper API key (required)
|
|
58
|
+
SERPER_MCP_TRANSPORT Transport mode ("stdio" or "http")
|
|
59
|
+
SERPER_MCP_PORT HTTP server port
|
|
60
|
+
SERPER_MCP_HOST HTTP server host
|
|
61
|
+
SERPER_MCP_LOG_LEVEL Logging level
|
|
62
|
+
|
|
63
|
+
Examples:
|
|
64
|
+
# STDIO mode (default)
|
|
65
|
+
npm start
|
|
66
|
+
|
|
67
|
+
# HTTP mode
|
|
68
|
+
node dist/index.js --transport http --port 3000
|
|
69
|
+
|
|
70
|
+
# Docker deployment
|
|
71
|
+
docker run -e SERPER_API_KEY=your_key smlabs01/server-serper-search
|
|
72
|
+
|
|
73
|
+
Author: SMJAHID from SMLabs01
|
|
74
|
+
`);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return options;
|
|
79
|
+
}
|
|
80
|
+
// Main execution
|
|
81
|
+
async function main() {
|
|
82
|
+
try {
|
|
83
|
+
console.log('🚀 Starting Serper MCP Server v2.0.0 - Enterprise Edition');
|
|
84
|
+
console.log('👨💻 Author: SMJAHID from SMLabs01');
|
|
85
|
+
const options = parseArgs();
|
|
86
|
+
const server = new SerperMCPServer_1.SerperMCPServer(options);
|
|
87
|
+
console.log(`🌐 Transport: ${server.config.transport}`);
|
|
88
|
+
if (server.config.transport === 'http') {
|
|
89
|
+
console.log(`📍 Server: http://${server.config.host}:${server.config.port}`);
|
|
90
|
+
}
|
|
91
|
+
await server.run();
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error('❌ Failed to start server:', error);
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Start server if this file is run directly
|
|
99
|
+
if (require.main === module) {
|
|
100
|
+
main();
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAEA,8DAA2D;AA0GlD,gGA1GA,iCAAe,OA0GA;AAxGxB;;;;;;;;;;;;GAYG;AAEH,+BAA+B;AAC/B,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAQ,EAAE,CAAC;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,aAAa;gBAChB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9B,MAAM;YACR,KAAK,QAAQ;gBACX,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM;YACR,KAAK,QAAQ;gBACX,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzB,MAAM;YACR,KAAK,aAAa;gBAChB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,WAAW;gBACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3B,MAAM;YACR,KAAK,QAAQ;gBACX,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SA+BX,CAAC,CAAC;gBACH,OAAO;QACX,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,iBAAiB;AACjB,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QAEnD,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,iCAAe,CAAC,OAAO,CAAC,CAAC;QAE5C,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IAErB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,4CAA4C;AAC5C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC;AACT,CAAC"}
|