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.
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Main Serper MCP Server for Serper MCP Server v2.0.0 - Enterprise Edition
3
+ * Author: SMJAHID from SMLabs01
4
+ */
5
+ import { ServerConfig } from '../types';
6
+ export declare class SerperMCPServer {
7
+ readonly config: ServerConfig;
8
+ private server;
9
+ private serperAPI;
10
+ constructor(options?: Partial<ServerConfig>);
11
+ /**
12
+ * Setup MCP tool handlers
13
+ */
14
+ private setupToolHandlers;
15
+ /**
16
+ * Perform search operation
17
+ */
18
+ private performSearch;
19
+ /**
20
+ * Start the server
21
+ */
22
+ run(): Promise<void>;
23
+ /**
24
+ * Get server configuration
25
+ */
26
+ getConfig(): ServerConfig;
27
+ /**
28
+ * Get server info
29
+ */
30
+ getInfo(): {
31
+ name: string;
32
+ version: string;
33
+ author: string;
34
+ features: string[];
35
+ };
36
+ }
37
+ //# sourceMappingURL=SerperMCPServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SerperMCPServer.d.ts","sourceRoot":"","sources":["../../src/server/SerperMCPServer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAE,YAAY,EAA6B,MAAM,UAAU,CAAC;AAKnE,qBAAa,eAAe;IAC1B,SAAgB,MAAM,EAAE,YAAY,CAAC;IACrC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAY;gBAEjB,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM;IAgC/C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0CzB;;OAEG;YACW,aAAa;IAyC3B;;OAEG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB1B;;OAEG;IACH,SAAS,IAAI,YAAY;IAIzB;;OAEG;IACH,OAAO,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;CAejF"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ /**
3
+ * Main Serper MCP Server for Serper MCP Server v2.0.0 - Enterprise Edition
4
+ * Author: SMJAHID from SMLabs01
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SerperMCPServer = void 0;
8
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
9
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
10
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
11
+ const SerperAPI_1 = require("../api/SerperAPI");
12
+ const SearchTools_1 = require("../tools/SearchTools");
13
+ const ResultFormatter_1 = require("../utils/ResultFormatter");
14
+ class SerperMCPServer {
15
+ constructor(options = {}) {
16
+ // Merge provided options with defaults
17
+ this.config = {
18
+ apiKey: options.apiKey || process.env.SERPER_API_KEY || '',
19
+ transport: options.transport || process.env.SERPER_MCP_TRANSPORT || 'stdio',
20
+ port: options.port || parseInt(process.env.SERPER_MCP_PORT || '8080'),
21
+ host: options.host || process.env.SERPER_MCP_HOST || '0.0.0.0',
22
+ logLevel: options.logLevel || process.env.SERPER_MCP_LOG_LEVEL || 'info'
23
+ };
24
+ // Validate required configuration
25
+ if (!this.config.apiKey) {
26
+ throw new Error('SERPER_API_KEY environment variable is required');
27
+ }
28
+ // Initialize components
29
+ this.serperAPI = new SerperAPI_1.SerperAPI(this.config.apiKey);
30
+ this.server = new index_js_1.Server({
31
+ name: 'serper-search-server',
32
+ version: '2.0.0'
33
+ }, {
34
+ capabilities: {
35
+ tools: {}
36
+ }
37
+ });
38
+ this.setupToolHandlers();
39
+ }
40
+ /**
41
+ * Setup MCP tool handlers
42
+ */
43
+ setupToolHandlers() {
44
+ // List available tools
45
+ this.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
46
+ return {
47
+ tools: SearchTools_1.SearchTools.getAllTools()
48
+ };
49
+ });
50
+ // Handle tool calls
51
+ this.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
52
+ const { name, arguments: args } = request.params;
53
+ try {
54
+ // Validate arguments
55
+ SearchTools_1.SearchTools.validateToolArgs(name, args);
56
+ // Route to appropriate handler
57
+ switch (name) {
58
+ case 'search_web':
59
+ return await this.performSearch(args, 'web');
60
+ case 'search_images':
61
+ return await this.performSearch(args, 'images');
62
+ case 'search_videos':
63
+ return await this.performSearch(args, 'videos');
64
+ case 'search_news':
65
+ return await this.performSearch(args, 'news');
66
+ case 'search_shopping':
67
+ return await this.performSearch(args, 'shopping');
68
+ default:
69
+ throw new types_js_1.McpError(types_js_1.ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
70
+ }
71
+ }
72
+ catch (error) {
73
+ if (error instanceof types_js_1.McpError) {
74
+ throw error;
75
+ }
76
+ const message = error instanceof Error ? error.message : 'Unknown error';
77
+ throw new types_js_1.McpError(types_js_1.ErrorCode.InternalError, message);
78
+ }
79
+ });
80
+ }
81
+ /**
82
+ * Perform search operation
83
+ */
84
+ async performSearch(args, searchType) {
85
+ const searchOptions = {
86
+ query: args.query,
87
+ num_results: args.num_results || 10,
88
+ country: args.country || 'US',
89
+ search_lang: args.search_lang || 'en',
90
+ ui_lang: args.ui_lang || 'en-US',
91
+ freshness: args.freshness,
92
+ safesearch: args.safesearch || 'moderate',
93
+ summary: args.summary || false
94
+ };
95
+ try {
96
+ // Perform search via API
97
+ const searchResults = await this.serperAPI.search(searchOptions.query, searchType, searchOptions);
98
+ // Format results
99
+ const formattedResults = ResultFormatter_1.ResultFormatter.formatResults(searchResults, searchOptions.num_results || 10, searchType);
100
+ return {
101
+ content: [
102
+ {
103
+ type: 'text',
104
+ text: formattedResults
105
+ }
106
+ ]
107
+ };
108
+ }
109
+ catch (error) {
110
+ const message = error instanceof Error ? error.message : 'Unknown error';
111
+ throw new types_js_1.McpError(types_js_1.ErrorCode.InternalError, `Search failed: ${message}`);
112
+ }
113
+ }
114
+ /**
115
+ * Start the server
116
+ */
117
+ async run() {
118
+ try {
119
+ if (this.config.transport === 'http') {
120
+ // HTTP transport using SSE - Note: HTTP transport may need different implementation
121
+ // For now, fallback to STDIO for TypeScript compatibility
122
+ const transport = new stdio_js_1.StdioServerTransport();
123
+ await this.server.connect(transport);
124
+ console.log(`🚀 Serper MCP Server v2.0.0 running on STDIO (HTTP transport available in JavaScript version)`);
125
+ console.log(`👨‍💻 Author: SMJAHID from SMLabs01`);
126
+ }
127
+ else {
128
+ // Default STDIO transport
129
+ const transport = new stdio_js_1.StdioServerTransport();
130
+ await this.server.connect(transport);
131
+ console.log('🚀 Serper MCP Server v2.0.0 running on STDIO');
132
+ console.log('👨‍💻 Author: SMJAHID from SMLabs01');
133
+ }
134
+ }
135
+ catch (error) {
136
+ console.error('❌ Failed to start server:', error);
137
+ throw error;
138
+ }
139
+ }
140
+ /**
141
+ * Get server configuration
142
+ */
143
+ getConfig() {
144
+ return { ...this.config };
145
+ }
146
+ /**
147
+ * Get server info
148
+ */
149
+ getInfo() {
150
+ return {
151
+ name: 'Serper Search MCP Server',
152
+ version: '2.0.0',
153
+ author: 'SMJAHID from SMLabs01',
154
+ features: [
155
+ 'Multi-Type Search (Web, Images, Videos, News, Shopping)',
156
+ 'Multi-Transport (STDIO, HTTP/SSE)',
157
+ 'Advanced Filtering (Country, Language, Freshness)',
158
+ 'AI Summarization',
159
+ 'Enterprise Architecture',
160
+ 'Docker & NPM Deployment'
161
+ ]
162
+ };
163
+ }
164
+ }
165
+ exports.SerperMCPServer = SerperMCPServer;
166
+ //# sourceMappingURL=SerperMCPServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SerperMCPServer.js","sourceRoot":"","sources":["../../src/server/SerperMCPServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Search Tools for Serper MCP Server v2.0.0 - Enterprise Edition
3
+ * Author: SMJAHID from SMLabs01
4
+ */
5
+ import { ToolDefinition } from '../types';
6
+ export declare class SearchTools {
7
+ /**
8
+ * Get all available search tools
9
+ */
10
+ static getAllTools(): ToolDefinition[];
11
+ /**
12
+ * Web search tool definition
13
+ */
14
+ static getWebSearchTool(): ToolDefinition;
15
+ /**
16
+ * Image search tool definition
17
+ */
18
+ static getImageSearchTool(): ToolDefinition;
19
+ /**
20
+ * Video search tool definition
21
+ */
22
+ static getVideoSearchTool(): ToolDefinition;
23
+ /**
24
+ * News search tool definition
25
+ */
26
+ static getNewsSearchTool(): ToolDefinition;
27
+ /**
28
+ * Shopping search tool definition
29
+ */
30
+ static getShoppingSearchTool(): ToolDefinition;
31
+ /**
32
+ * Validate tool arguments
33
+ */
34
+ static validateToolArgs(toolName: string, args: any): void;
35
+ }
36
+ //# sourceMappingURL=SearchTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchTools.d.ts","sourceRoot":"","sources":["../../src/tools/SearchTools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAc,MAAM,UAAU,CAAC;AAEtD,qBAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,cAAc,EAAE;IAUtC;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,cAAc;IAuDzC;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,cAAc;IAkC3C;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,cAAc;IAkC3C;;OAEG;IACH,MAAM,CAAC,iBAAiB,IAAI,cAAc;IAwC1C;;OAEG;IACH,MAAM,CAAC,qBAAqB,IAAI,cAAc;IAkC9C;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI;CA0B3D"}
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ /**
3
+ * Search Tools for Serper MCP Server v2.0.0 - Enterprise Edition
4
+ * Author: SMJAHID from SMLabs01
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SearchTools = void 0;
8
+ class SearchTools {
9
+ /**
10
+ * Get all available search tools
11
+ */
12
+ static getAllTools() {
13
+ return [
14
+ this.getWebSearchTool(),
15
+ this.getImageSearchTool(),
16
+ this.getVideoSearchTool(),
17
+ this.getNewsSearchTool(),
18
+ this.getShoppingSearchTool()
19
+ ];
20
+ }
21
+ /**
22
+ * Web search tool definition
23
+ */
24
+ static getWebSearchTool() {
25
+ return {
26
+ name: 'search_web',
27
+ description: 'Search the web using Serper API (Google search results)',
28
+ inputSchema: {
29
+ type: 'object',
30
+ properties: {
31
+ query: {
32
+ type: 'string',
33
+ description: 'The search query to execute (max 400 chars, 50 words)'
34
+ },
35
+ num_results: {
36
+ type: 'number',
37
+ description: 'Number of results to return (1-20, default: 10)',
38
+ minimum: 1,
39
+ maximum: 20,
40
+ default: 10
41
+ },
42
+ country: {
43
+ type: 'string',
44
+ description: 'Country code (default: "US")',
45
+ default: 'US'
46
+ },
47
+ search_lang: {
48
+ type: 'string',
49
+ description: 'Search language (default: "en")',
50
+ default: 'en'
51
+ },
52
+ ui_lang: {
53
+ type: 'string',
54
+ description: 'UI language (default: "en-US")',
55
+ default: 'en-US'
56
+ },
57
+ freshness: {
58
+ type: 'string',
59
+ description: 'Time filter: "pd" (day), "pw" (week), "pm" (month), "py" (year)',
60
+ enum: ['pd', 'pw', 'pm', 'py']
61
+ },
62
+ safesearch: {
63
+ type: 'string',
64
+ description: 'Content filtering',
65
+ enum: ['off', 'moderate', 'strict'],
66
+ default: 'moderate'
67
+ },
68
+ summary: {
69
+ type: 'boolean',
70
+ description: 'Enable AI summarization (default: false)',
71
+ default: false
72
+ }
73
+ },
74
+ required: ['query']
75
+ }
76
+ };
77
+ }
78
+ /**
79
+ * Image search tool definition
80
+ */
81
+ static getImageSearchTool() {
82
+ return {
83
+ name: 'search_images',
84
+ description: 'Search for images using Serper API',
85
+ inputSchema: {
86
+ type: 'object',
87
+ properties: {
88
+ query: {
89
+ type: 'string',
90
+ description: 'The image search query'
91
+ },
92
+ num_results: {
93
+ type: 'number',
94
+ description: 'Number of results to return (default: 10)',
95
+ minimum: 1,
96
+ maximum: 20,
97
+ default: 10
98
+ },
99
+ country: {
100
+ type: 'string',
101
+ description: 'Country code (default: "US")',
102
+ default: 'US'
103
+ },
104
+ search_lang: {
105
+ type: 'string',
106
+ description: 'Search language (default: "en")',
107
+ default: 'en'
108
+ }
109
+ },
110
+ required: ['query']
111
+ }
112
+ };
113
+ }
114
+ /**
115
+ * Video search tool definition
116
+ */
117
+ static getVideoSearchTool() {
118
+ return {
119
+ name: 'search_videos',
120
+ description: 'Search for videos using Serper API',
121
+ inputSchema: {
122
+ type: 'object',
123
+ properties: {
124
+ query: {
125
+ type: 'string',
126
+ description: 'The video search query'
127
+ },
128
+ num_results: {
129
+ type: 'number',
130
+ description: 'Number of results to return (default: 10)',
131
+ minimum: 1,
132
+ maximum: 20,
133
+ default: 10
134
+ },
135
+ country: {
136
+ type: 'string',
137
+ description: 'Country code (default: "US")',
138
+ default: 'US'
139
+ },
140
+ search_lang: {
141
+ type: 'string',
142
+ description: 'Search language (default: "en")',
143
+ default: 'en'
144
+ }
145
+ },
146
+ required: ['query']
147
+ }
148
+ };
149
+ }
150
+ /**
151
+ * News search tool definition
152
+ */
153
+ static getNewsSearchTool() {
154
+ return {
155
+ name: 'search_news',
156
+ description: 'Search for news articles using Serper API',
157
+ inputSchema: {
158
+ type: 'object',
159
+ properties: {
160
+ query: {
161
+ type: 'string',
162
+ description: 'The news search query'
163
+ },
164
+ num_results: {
165
+ type: 'number',
166
+ description: 'Number of results to return (default: 10)',
167
+ minimum: 1,
168
+ maximum: 20,
169
+ default: 10
170
+ },
171
+ country: {
172
+ type: 'string',
173
+ description: 'Country code (default: "US")',
174
+ default: 'US'
175
+ },
176
+ search_lang: {
177
+ type: 'string',
178
+ description: 'Search language (default: "en")',
179
+ default: 'en'
180
+ },
181
+ freshness: {
182
+ type: 'string',
183
+ description: 'Time filter (default: "pd" for last 24 hours)',
184
+ enum: ['pd', 'pw', 'pm', 'py'],
185
+ default: 'pd'
186
+ }
187
+ },
188
+ required: ['query']
189
+ }
190
+ };
191
+ }
192
+ /**
193
+ * Shopping search tool definition
194
+ */
195
+ static getShoppingSearchTool() {
196
+ return {
197
+ name: 'search_shopping',
198
+ description: 'Search for products and shopping results using Serper API',
199
+ inputSchema: {
200
+ type: 'object',
201
+ properties: {
202
+ query: {
203
+ type: 'string',
204
+ description: 'The shopping search query'
205
+ },
206
+ num_results: {
207
+ type: 'number',
208
+ description: 'Number of results to return (default: 10)',
209
+ minimum: 1,
210
+ maximum: 20,
211
+ default: 10
212
+ },
213
+ country: {
214
+ type: 'string',
215
+ description: 'Country code (default: "US")',
216
+ default: 'US'
217
+ },
218
+ search_lang: {
219
+ type: 'string',
220
+ description: 'Search language (default: "en")',
221
+ default: 'en'
222
+ }
223
+ },
224
+ required: ['query']
225
+ }
226
+ };
227
+ }
228
+ /**
229
+ * Validate tool arguments
230
+ */
231
+ static validateToolArgs(toolName, args) {
232
+ const tool = this.getAllTools().find(t => t.name === toolName);
233
+ if (!tool) {
234
+ throw new Error(`Unknown tool: ${toolName}`);
235
+ }
236
+ // Check required parameters
237
+ for (const required of tool.inputSchema.required) {
238
+ if (!(required in args)) {
239
+ throw new Error(`Missing required parameter: ${required}`);
240
+ }
241
+ }
242
+ // Validate query length
243
+ if (args.query) {
244
+ if (typeof args.query !== 'string') {
245
+ throw new Error('Query must be a string');
246
+ }
247
+ if (args.query.length > 400) {
248
+ throw new Error('Query too long (max 400 characters)');
249
+ }
250
+ if (args.query.split(' ').length > 50) {
251
+ throw new Error('Query too long (max 50 words)');
252
+ }
253
+ }
254
+ }
255
+ }
256
+ exports.SearchTools = SearchTools;
257
+ //# sourceMappingURL=SearchTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchTools.js","sourceRoot":"","sources":["../../src/tools/SearchTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Type definitions for Serper MCP Server v2.0.0 - Enterprise Edition
3
+ * Author: SMJAHID from SMLabs01
4
+ */
5
+ export interface SearchOptions {
6
+ query: string;
7
+ num_results?: number;
8
+ country?: string;
9
+ search_lang?: string;
10
+ ui_lang?: string;
11
+ freshness?: 'pd' | 'pw' | 'pm' | 'py';
12
+ safesearch?: 'off' | 'moderate' | 'strict';
13
+ summary?: boolean;
14
+ }
15
+ export interface SearchResult {
16
+ title: string;
17
+ link: string;
18
+ snippet?: string;
19
+ imageUrl?: string;
20
+ source?: string;
21
+ channel?: string;
22
+ duration?: string;
23
+ date?: string;
24
+ price?: string;
25
+ rating?: string;
26
+ }
27
+ export interface SerperAPIResponse {
28
+ searchParameters?: {
29
+ q: string;
30
+ [key: string]: any;
31
+ };
32
+ organic?: SearchResult[];
33
+ images?: SearchResult[];
34
+ videos?: SearchResult[];
35
+ news?: SearchResult[];
36
+ shopping?: SearchResult[];
37
+ [key: string]: any;
38
+ }
39
+ export interface ServerConfig {
40
+ apiKey: string;
41
+ transport: 'stdio' | 'http';
42
+ port: number;
43
+ host: string;
44
+ logLevel: string;
45
+ }
46
+ export interface ToolDefinition {
47
+ name: string;
48
+ description: string;
49
+ inputSchema: {
50
+ type: 'object';
51
+ properties: Record<string, any>;
52
+ required: string[];
53
+ };
54
+ }
55
+ export type SearchType = 'web' | 'images' | 'videos' | 'news' | 'shopping';
56
+ export interface Transport {
57
+ run(): Promise<void>;
58
+ }
59
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,CAAC,EAAE;QACjB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAED,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAE3E,MAAM,WAAW,SAAS;IACxB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * Type definitions for Serper MCP Server v2.0.0 - Enterprise Edition
4
+ * Author: SMJAHID from SMLabs01
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Result Formatter for Serper MCP Server v2.0.0 - Enterprise Edition
3
+ * Author: SMJAHID from SMLabs01
4
+ */
5
+ import { SerperAPIResponse, SearchType } from '../types';
6
+ export declare class ResultFormatter {
7
+ /**
8
+ * Format search results for display
9
+ */
10
+ static formatResults(results: SerperAPIResponse, maxResults: number, searchType: SearchType): string;
11
+ /**
12
+ * Format error message
13
+ */
14
+ static formatError(error: Error): string;
15
+ /**
16
+ * Format validation error
17
+ */
18
+ static formatValidationError(message: string): string;
19
+ /**
20
+ * Format server info
21
+ */
22
+ static formatServerInfo(): string;
23
+ /**
24
+ * Capitalize first letter of a string
25
+ */
26
+ private static capitalizeFirst;
27
+ }
28
+ //# sourceMappingURL=ResultFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResultFormatter.d.ts","sourceRoot":"","sources":["../../src/utils/ResultFormatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAgB,UAAU,EAAE,MAAM,UAAU,CAAC;AAEvE,qBAAa,eAAe;IAC1B;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM;IAqGpG;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;IAIxC;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIrD;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,MAAM;IAUjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;CAG/B"}