serper-search-mcp 3.0.0 → 3.0.2
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 +18 -3
- package/dist/api/LLMClient.js +2 -2
- package/dist/api/LLMClient.js.map +1 -1
- package/dist/index.js +10 -7
- package/dist/index.js.map +1 -1
- package/dist/server/SerperMCPServer.d.ts.map +1 -1
- package/dist/server/SerperMCPServer.js +6 -4
- package/dist/server/SerperMCPServer.js.map +1 -1
- package/index.js +8 -7
- package/package.json +9 -9
package/README.md
CHANGED
|
@@ -46,7 +46,8 @@ This MCP server wraps the [Serper API](https://serper.dev) (Google Search result
|
|
|
46
46
|
"command": "npx",
|
|
47
47
|
"args": ["-y", "serper-search-mcp"],
|
|
48
48
|
"env": {
|
|
49
|
-
"SERPER_API_KEY": "
|
|
49
|
+
"SERPER_API_KEY": "${SERPER_API_KEY}",
|
|
50
|
+
"GEMINI_API_KEY": "${GEMINI_API_KEY}"
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
53
|
}
|
|
@@ -62,13 +63,24 @@ Add this to your MCP client config (paths listed below), then restart.
|
|
|
62
63
|
"mcpServers": {
|
|
63
64
|
"serper-search": {
|
|
64
65
|
"command": "docker",
|
|
65
|
-
"args": ["run", "-i", "--rm", "-e", "SERPER_API_KEY
|
|
66
|
-
"env": {
|
|
66
|
+
"args": ["run", "-i", "--rm", "-e", "SERPER_API_KEY", "-e", "GEMINI_API_KEY", "smjahid/server-serper-search:3"],
|
|
67
|
+
"env": {
|
|
68
|
+
"SERPER_API_KEY": "your_key_here",
|
|
69
|
+
"GEMINI_API_KEY": "your_gemini_key_here"
|
|
70
|
+
}
|
|
67
71
|
}
|
|
68
72
|
}
|
|
69
73
|
}
|
|
70
74
|
```
|
|
71
75
|
|
|
76
|
+
Or run directly:
|
|
77
|
+
```bash
|
|
78
|
+
docker run -i --rm \
|
|
79
|
+
-e SERPER_API_KEY=your_key \
|
|
80
|
+
-e GEMINI_API_KEY=your_gemini_key \
|
|
81
|
+
smjahid/server-serper-search:3
|
|
82
|
+
```
|
|
83
|
+
|
|
72
84
|
### Option 3 — Local clone
|
|
73
85
|
|
|
74
86
|
```bash
|
|
@@ -76,9 +88,12 @@ git clone https://github.com/smjahid012/serper-search-mcp-server.git
|
|
|
76
88
|
cd serper-search-mcp-server
|
|
77
89
|
npm install
|
|
78
90
|
export SERPER_API_KEY="your_key"
|
|
91
|
+
export GEMINI_API_KEY="your_gemini_key"
|
|
79
92
|
node index.js
|
|
80
93
|
```
|
|
81
94
|
|
|
95
|
+
> **💡 AI-powered research is free.** `deep_research` uses Gemini's free tier by default. Set `GEMINI_API_KEY` above to unlock it.
|
|
96
|
+
|
|
82
97
|
---
|
|
83
98
|
|
|
84
99
|
## Config file locations
|
package/dist/api/LLMClient.js
CHANGED
|
@@ -11,14 +11,14 @@ function detectProvider() {
|
|
|
11
11
|
return {
|
|
12
12
|
provider: 'openrouter',
|
|
13
13
|
apiKey: process.env.OPENROUTER_API_KEY,
|
|
14
|
-
model: process.env.OPENROUTER_MODEL || 'google/gemini-
|
|
14
|
+
model: process.env.OPENROUTER_MODEL || 'google/gemini-3.1-flash-lite:free',
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
if (process.env.GEMINI_API_KEY) {
|
|
18
18
|
return {
|
|
19
19
|
provider: 'gemini',
|
|
20
20
|
apiKey: process.env.GEMINI_API_KEY,
|
|
21
|
-
model: process.env.GEMINI_MODEL || 'gemini-
|
|
21
|
+
model: process.env.GEMINI_MODEL || 'gemini-3.1-flash-lite',
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
24
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LLMClient.js","sourceRoot":"","sources":["../../src/api/LLMClient.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAqEH,0BAgBC;AAED,wCAEC;AAzED,SAAS,cAAc;IACrB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QACnC,OAAO;YACL,QAAQ,EAAE,YAAY;YACtB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;YACtC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,
|
|
1
|
+
{"version":3,"file":"LLMClient.js","sourceRoot":"","sources":["../../src/api/LLMClient.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
8
|
const SerperMCPServer_js_1 = require("./server/SerperMCPServer.js");
|
|
9
|
+
const package_json_1 = require("../package.json");
|
|
9
10
|
function parseArgs() {
|
|
10
11
|
const argv = process.argv.slice(2);
|
|
11
12
|
const out = {};
|
|
@@ -22,7 +23,7 @@ async function main() {
|
|
|
22
23
|
const flags = parseArgs();
|
|
23
24
|
if ('help' in flags) {
|
|
24
25
|
console.log(`
|
|
25
|
-
Serper Search MCP Server
|
|
26
|
+
Serper Search MCP Server v${package_json_1.version} — SMLabs AI
|
|
26
27
|
|
|
27
28
|
Usage:
|
|
28
29
|
npx serper-search-mcp [options]
|
|
@@ -41,12 +42,14 @@ Environment variables:
|
|
|
41
42
|
SERPER_MCP_HOST HTTP host
|
|
42
43
|
|
|
43
44
|
Tools provided:
|
|
44
|
-
search_web
|
|
45
|
-
search_images
|
|
46
|
-
search_videos
|
|
47
|
-
search_news
|
|
48
|
-
search_shopping
|
|
49
|
-
search_places
|
|
45
|
+
search_web Google web search with Knowledge Graph + Answer Box
|
|
46
|
+
search_images Google Image search
|
|
47
|
+
search_videos Google Video search
|
|
48
|
+
search_news Google News search
|
|
49
|
+
search_shopping Google Shopping search
|
|
50
|
+
search_places Google Places / Maps search (NEW in v3)
|
|
51
|
+
deep_research Multi-step research: sub-queries, parallel search, LLM report
|
|
52
|
+
search_rag_context Clean chunked text + metadata for RAG/embedding pipelines
|
|
50
53
|
`);
|
|
51
54
|
process.exit(0);
|
|
52
55
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA;;;GAGG;;AAEH,oEAA8D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA;;;GAGG;;AAEH,oEAA8D;AAC9D,kDAA0C;AAE1C,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC;YACjC,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAE1B,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC;4BACY,sBAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BlC,CAAC,CAAC;QACC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,oCAAe,CAAC;YACjC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;YACxB,SAAS,EAAE,KAAK,CAAC,WAAW,CAAqB;YACjD,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YAC7D,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;SACpB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SerperMCPServer.d.ts","sourceRoot":"","sources":["../../src/server/SerperMCPServer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAE,YAAY,EAA6B,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"SerperMCPServer.d.ts","sourceRoot":"","sources":["../../src/server/SerperMCPServer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAE,YAAY,EAA6B,MAAM,mBAAmB,CAAC;AAiB5E,qBAAa,eAAe;IAC1B,SAAgB,MAAM,EAAE,YAAY,CAAC;IACrC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAY;gBAEX,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM;IAoB/C,OAAO,CAAC,gBAAgB;YAqEV,SAAS;IAmBjB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAI3B"}
|
|
@@ -13,6 +13,7 @@ const SearchTools_js_1 = require("../tools/SearchTools.js");
|
|
|
13
13
|
const ResultFormatter_js_1 = require("../utils/ResultFormatter.js");
|
|
14
14
|
const DeepResearch_js_1 = require("../tools/DeepResearch.js");
|
|
15
15
|
const RAGContext_js_1 = require("../tools/RAGContext.js");
|
|
16
|
+
const package_json_1 = require("../../package.json");
|
|
16
17
|
const SEARCH_TYPE_MAP = {
|
|
17
18
|
search_web: 'web',
|
|
18
19
|
search_images: 'images',
|
|
@@ -33,7 +34,7 @@ class SerperMCPServer {
|
|
|
33
34
|
if (!this.config.apiKey)
|
|
34
35
|
throw new Error('SERPER_API_KEY is required');
|
|
35
36
|
this.api = new SerperAPI_js_1.SerperAPI(this.config.apiKey);
|
|
36
|
-
this.server = new index_js_1.Server({ name: 'serper-search-mcp', version:
|
|
37
|
+
this.server = new index_js_1.Server({ name: 'serper-search-mcp', version: package_json_1.version }, { capabilities: { tools: {} } });
|
|
37
38
|
this.registerHandlers();
|
|
38
39
|
}
|
|
39
40
|
registerHandlers() {
|
|
@@ -90,8 +91,9 @@ class SerperMCPServer {
|
|
|
90
91
|
process.on('SIGTERM', () => this.server.close().then(() => process.exit(0)));
|
|
91
92
|
}
|
|
92
93
|
async runSearch(args, searchType) {
|
|
94
|
+
const defaultNum = searchType === 'places' ? 5 : 10;
|
|
93
95
|
const opts = {
|
|
94
|
-
num_results: args['num_results'] ??
|
|
96
|
+
num_results: args['num_results'] ?? defaultNum,
|
|
95
97
|
country: args['country'] ?? 'US',
|
|
96
98
|
search_lang: args['search_lang'] ?? 'en',
|
|
97
99
|
ui_lang: args['ui_lang'] ?? 'en',
|
|
@@ -102,12 +104,12 @@ class SerperMCPServer {
|
|
|
102
104
|
page: args['page'] ?? 1,
|
|
103
105
|
};
|
|
104
106
|
const data = await this.api.search(args['query'], searchType, opts);
|
|
105
|
-
const text = ResultFormatter_js_1.ResultFormatter.format(data, opts.num_results ??
|
|
107
|
+
const text = ResultFormatter_js_1.ResultFormatter.format(data, opts.num_results ?? defaultNum, searchType);
|
|
106
108
|
return { content: [{ type: 'text', text }] };
|
|
107
109
|
}
|
|
108
110
|
async run() {
|
|
109
111
|
await this.server.connect(new stdio_js_1.StdioServerTransport());
|
|
110
|
-
console.error(
|
|
112
|
+
console.error(`Serper Search MCP Server v${package_json_1.version} — SMLabs AI`);
|
|
111
113
|
}
|
|
112
114
|
}
|
|
113
115
|
exports.SerperMCPServer = SerperMCPServer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SerperMCPServer.js","sourceRoot":"","sources":["../../src/server/SerperMCPServer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,wEAAmE;AACnE,wEAAiF;AACjF,iEAK4C;AAG5C,sDAAgD;AAChD,4DAAsD;AACtD,oEAA8D;AAC9D,8DAA0E;AAC1E,0DAAyD;
|
|
1
|
+
{"version":3,"file":"SerperMCPServer.js","sourceRoot":"","sources":["../../src/server/SerperMCPServer.ts"],"names":[],"mappings":"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"}
|
package/index.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Serper Search MCP Server
|
|
3
|
+
* Serper Search MCP Server — SMLabs AI
|
|
4
4
|
* Zero-build JavaScript entry point (works with npx, Docker, direct node)
|
|
5
5
|
* github.com/smjahid012/serper-search-mcp-server
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
'use strict';
|
|
9
9
|
|
|
10
|
-
const {
|
|
10
|
+
const { version } = require('./package.json');
|
|
11
|
+
const { Server } = require('@modelcontextprotocol/sdk/server/index.js');
|
|
11
12
|
const { StdioServerTransport } = require('@modelcontextprotocol/sdk/server/stdio.js');
|
|
12
13
|
const {
|
|
13
14
|
CallToolRequestSchema,
|
|
@@ -314,7 +315,7 @@ class SerperMCPServer {
|
|
|
314
315
|
constructor(apiKey) {
|
|
315
316
|
this.apiKey = apiKey;
|
|
316
317
|
this.server = new Server(
|
|
317
|
-
{ name: 'serper-search-mcp', version
|
|
318
|
+
{ name: 'serper-search-mcp', version },
|
|
318
319
|
{ capabilities: { tools: {} } }
|
|
319
320
|
);
|
|
320
321
|
this._setup();
|
|
@@ -365,7 +366,7 @@ class SerperMCPServer {
|
|
|
365
366
|
|
|
366
367
|
async run() {
|
|
367
368
|
await this.server.connect(new StdioServerTransport());
|
|
368
|
-
console.error(
|
|
369
|
+
console.error(`Serper Search MCP Server v${version} — SMLabs AI`);
|
|
369
370
|
}
|
|
370
371
|
}
|
|
371
372
|
|
|
@@ -388,7 +389,7 @@ if (require.main === module) {
|
|
|
388
389
|
|
|
389
390
|
if ('help' in flags) {
|
|
390
391
|
console.log(`
|
|
391
|
-
Serper Search MCP Server
|
|
392
|
+
Serper Search MCP Server v${version} — SMLabs AI
|
|
392
393
|
|
|
393
394
|
Usage: npx serper-search-mcp [options]
|
|
394
395
|
|
|
@@ -429,14 +430,14 @@ function detectLLM() {
|
|
|
429
430
|
return {
|
|
430
431
|
provider: 'openrouter',
|
|
431
432
|
apiKey: process.env.OPENROUTER_API_KEY,
|
|
432
|
-
model: process.env.OPENROUTER_MODEL || 'google/gemini-
|
|
433
|
+
model: process.env.OPENROUTER_MODEL || 'google/gemini-3.1-flash-lite:free',
|
|
433
434
|
};
|
|
434
435
|
}
|
|
435
436
|
if (process.env.GEMINI_API_KEY) {
|
|
436
437
|
return {
|
|
437
438
|
provider: 'gemini',
|
|
438
439
|
apiKey: process.env.GEMINI_API_KEY,
|
|
439
|
-
model: process.env.GEMINI_MODEL || 'gemini-
|
|
440
|
+
model: process.env.GEMINI_MODEL || 'gemini-3.1-flash-lite',
|
|
440
441
|
};
|
|
441
442
|
}
|
|
442
443
|
return null;
|
package/package.json
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "serper-search-mcp",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.2",
|
|
4
4
|
"description": "MCP server for Serper API — Google web, image, video, news, shopping, and places search for AI agents",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"serper-search-mcp": "index.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"build":
|
|
11
|
-
"start":
|
|
12
|
-
"dev":
|
|
13
|
-
"http":
|
|
10
|
+
"build": "tsc",
|
|
11
|
+
"start": "node index.js",
|
|
12
|
+
"dev": "ts-node src/index.ts",
|
|
13
|
+
"http": "SERPER_MCP_TRANSPORT=http node index.js",
|
|
14
14
|
"docker:build": "docker build -t smjahid/serper-search-mcp .",
|
|
15
|
-
"docker:run":
|
|
16
|
-
"help":
|
|
17
|
-
"clean":
|
|
18
|
-
"rebuild":
|
|
15
|
+
"docker:run": "docker run -i --rm -e SERPER_API_KEY smjahid/serper-search-mcp",
|
|
16
|
+
"help": "node index.js --help",
|
|
17
|
+
"clean": "rm -rf dist",
|
|
18
|
+
"rebuild": "npm run clean && npm run build"
|
|
19
19
|
},
|
|
20
20
|
"keywords": [
|
|
21
21
|
"mcp",
|