@serpstat/serpstat-mcp-server 1.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.
Files changed (72) hide show
  1. package/.env.example +10 -0
  2. package/LICENSE +21 -0
  3. package/README.md +288 -0
  4. package/dist/handlers/backlinks_tools.d.ts +11 -0
  5. package/dist/handlers/backlinks_tools.d.ts.map +1 -0
  6. package/dist/handlers/backlinks_tools.js +59 -0
  7. package/dist/handlers/backlinks_tools.js.map +1 -0
  8. package/dist/handlers/base.d.ts +10 -0
  9. package/dist/handlers/base.d.ts.map +1 -0
  10. package/dist/handlers/base.js +26 -0
  11. package/dist/handlers/base.js.map +1 -0
  12. package/dist/handlers/domain.d.ts +11 -0
  13. package/dist/handlers/domain.d.ts.map +1 -0
  14. package/dist/handlers/domain.js +75 -0
  15. package/dist/handlers/domain.js.map +1 -0
  16. package/dist/handlers/domain_tools.d.ts +51 -0
  17. package/dist/handlers/domain_tools.d.ts.map +1 -0
  18. package/dist/handlers/domain_tools.js +538 -0
  19. package/dist/handlers/domain_tools.js.map +1 -0
  20. package/dist/handlers/keyword_tools.d.ts +19 -0
  21. package/dist/handlers/keyword_tools.d.ts.map +1 -0
  22. package/dist/handlers/keyword_tools.js +251 -0
  23. package/dist/handlers/keyword_tools.js.map +1 -0
  24. package/dist/index.d.ts +3 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +31 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/server.d.ts +9 -0
  29. package/dist/server.d.ts.map +1 -0
  30. package/dist/server.js +76 -0
  31. package/dist/server.js.map +1 -0
  32. package/dist/services/backlinks_tools.d.ts +7 -0
  33. package/dist/services/backlinks_tools.d.ts.map +1 -0
  34. package/dist/services/backlinks_tools.js +25 -0
  35. package/dist/services/backlinks_tools.js.map +1 -0
  36. package/dist/services/base.d.ts +13 -0
  37. package/dist/services/base.d.ts.map +1 -0
  38. package/dist/services/base.js +83 -0
  39. package/dist/services/base.js.map +1 -0
  40. package/dist/services/domain.d.ts +7 -0
  41. package/dist/services/domain.d.ts.map +1 -0
  42. package/dist/services/domain.js +26 -0
  43. package/dist/services/domain.js.map +1 -0
  44. package/dist/services/domain_tools.d.ts +13 -0
  45. package/dist/services/domain_tools.d.ts.map +1 -0
  46. package/dist/services/domain_tools.js +111 -0
  47. package/dist/services/domain_tools.js.map +1 -0
  48. package/dist/services/keyword_tools.d.ts +8 -0
  49. package/dist/services/keyword_tools.d.ts.map +1 -0
  50. package/dist/services/keyword_tools.js +43 -0
  51. package/dist/services/keyword_tools.js.map +1 -0
  52. package/dist/types/mcp.d.ts +12 -0
  53. package/dist/types/mcp.d.ts.map +1 -0
  54. package/dist/types/mcp.js +3 -0
  55. package/dist/types/mcp.js.map +1 -0
  56. package/dist/types/serpstat.d.ts +237 -0
  57. package/dist/types/serpstat.d.ts.map +1 -0
  58. package/dist/types/serpstat.js +24 -0
  59. package/dist/types/serpstat.js.map +1 -0
  60. package/dist/utils/config.d.ts +24 -0
  61. package/dist/utils/config.d.ts.map +1 -0
  62. package/dist/utils/config.js +21 -0
  63. package/dist/utils/config.js.map +1 -0
  64. package/dist/utils/logger.d.ts +3 -0
  65. package/dist/utils/logger.d.ts.map +1 -0
  66. package/dist/utils/logger.js +19 -0
  67. package/dist/utils/logger.js.map +1 -0
  68. package/dist/utils/validation.d.ts +952 -0
  69. package/dist/utils/validation.d.ts.map +1 -0
  70. package/dist/utils/validation.js +257 -0
  71. package/dist/utils/validation.js.map +1 -0
  72. package/package.json +46 -0
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetRelatedKeywordsHandler = exports.GetKeywordsHandler = void 0;
4
+ const base_js_1 = require("./base.js");
5
+ const keyword_tools_js_1 = require("../services/keyword_tools.js");
6
+ const validation_js_1 = require("../utils/validation.js");
7
+ const config_js_1 = require("../utils/config.js");
8
+ const zod_1 = require("zod");
9
+ class GetKeywordsHandler extends base_js_1.BaseHandler {
10
+ keywordService;
11
+ constructor() {
12
+ super();
13
+ const config = (0, config_js_1.loadConfig)();
14
+ this.keywordService = new keyword_tools_js_1.KeywordService(config);
15
+ }
16
+ getName() {
17
+ return 'get_keywords';
18
+ }
19
+ getDescription() {
20
+ return 'Shows organic keywords related to the researched keyword for which domains rank in Google top 100. For each found keyword, displays its search volume, CPC, and competition level.';
21
+ }
22
+ getInputSchema() {
23
+ return {
24
+ type: 'object',
25
+ properties: {
26
+ keyword: {
27
+ type: 'string',
28
+ minLength: 1,
29
+ maxLength: 100,
30
+ description: 'Keyword for finding related keywords'
31
+ },
32
+ se: {
33
+ type: 'string',
34
+ enum: [
35
+ 'g_us', 'g_uk', 'g_au', 'g_ca', 'g_de',
36
+ 'g_fr', 'g_br', 'g_mx', 'g_es', 'g_bg',
37
+ 'g_it', 'g_nl', 'g_pl', 'g_ua'
38
+ ],
39
+ default: 'g_us',
40
+ description: 'Search database ID'
41
+ },
42
+ minusKeywords: {
43
+ type: 'array',
44
+ items: { type: 'string', minLength: 1, maxLength: 100 },
45
+ maxItems: 50,
46
+ description: 'Keywords to exclude from search'
47
+ },
48
+ withIntents: {
49
+ type: 'boolean',
50
+ default: false,
51
+ description: 'Whether to include keyword intents'
52
+ },
53
+ page: {
54
+ type: 'integer',
55
+ minimum: 1,
56
+ default: 1,
57
+ description: 'page number'
58
+ },
59
+ size: {
60
+ type: 'integer',
61
+ minimum: 1,
62
+ maximum: 1000,
63
+ default: 100,
64
+ description: 'results per page'
65
+ },
66
+ sort: {
67
+ type: 'object',
68
+ properties: {
69
+ region_queries_count: { type: 'string', enum: ['asc', 'desc'] },
70
+ cost: { type: 'string', enum: ['asc', 'desc'] },
71
+ difficulty: { type: 'string', enum: ['asc', 'desc'] },
72
+ concurrency: { type: 'string', enum: ['asc', 'desc'] },
73
+ found_results: { type: 'string', enum: ['asc', 'desc'] },
74
+ keyword_length: { type: 'string', enum: ['asc', 'desc'] }
75
+ },
76
+ additionalProperties: false,
77
+ description: 'Sorting parameters for results'
78
+ },
79
+ filters: {
80
+ type: 'object',
81
+ properties: {
82
+ cost: { type: 'number', minimum: 0, maximum: 200 },
83
+ cost_from: { type: 'number', minimum: 0, maximum: 200 },
84
+ cost_to: { type: 'number', minimum: 0, maximum: 200 },
85
+ region_queries_count: { type: 'integer', minimum: 0, maximum: 100000000 },
86
+ region_queries_count_from: { type: 'integer', minimum: 0, maximum: 100000000 },
87
+ region_queries_count_to: { type: 'integer', minimum: 0, maximum: 100000000 },
88
+ keyword_length: { type: 'integer', minimum: 1 },
89
+ keyword_length_from: { type: 'integer', minimum: 1 },
90
+ keyword_length_to: { type: 'integer', minimum: 1 },
91
+ difficulty: { type: 'integer', minimum: 0, maximum: 100 },
92
+ difficulty_from: { type: 'integer', minimum: 0, maximum: 100 },
93
+ difficulty_to: { type: 'integer', minimum: 0, maximum: 100 },
94
+ concurrency: { type: 'integer', minimum: 1, maximum: 100 },
95
+ concurrency_from: { type: 'integer', minimum: 1, maximum: 100 },
96
+ concurrency_to: { type: 'integer', minimum: 1, maximum: 100 },
97
+ right_spelling: { type: 'boolean', description: 'Filter by correct spelling' },
98
+ keyword_contain: { type: 'array', items: { type: 'string' }, description: 'Keywords must contain all of these terms (exact match)' },
99
+ keyword_not_contain: { type: 'array', items: { type: 'string' }, description: 'Keywords must not contain these terms (exact match)' },
100
+ keyword_contain_one_of: { type: 'array', items: { type: 'string' }, description: 'Keywords must contain at least one of these terms' },
101
+ keyword_not_contain_one_of: { type: 'array', items: { type: 'string' }, description: 'Keywords must not contain any of these terms' },
102
+ keyword_contain_broad_match: { type: 'array', items: { type: 'string' }, description: 'Keywords must contain all of these terms (broad match)' },
103
+ keyword_not_contain_broad_match: { type: 'array', items: { type: 'string' }, description: 'Keywords must not contain these terms (broad match)' },
104
+ keyword_contain_one_of_broad_match: { type: 'array', items: { type: 'string' }, description: 'Keywords must contain at least one of these terms (broad match)' },
105
+ keyword_not_contain_one_of_broad_match: { type: 'array', items: { type: 'string' }, description: 'Keywords must not contain any of these terms (broad match)' },
106
+ geo_names: { type: 'string', enum: ['contain', 'not_contain'], description: 'Filter by presence of geographic names' },
107
+ types: { type: 'array', items: { type: 'string' }, description: 'Filter by SERP feature types' },
108
+ intents_contain: { type: 'array', items: { type: 'string', enum: ['informational', 'navigational', 'commercial', 'transactional'] }, description: 'Keywords must contain these search intents' }
109
+ },
110
+ additionalProperties: false,
111
+ description: 'Results filters'
112
+ }
113
+ },
114
+ required: ['keyword', 'se'],
115
+ additionalProperties: false
116
+ };
117
+ }
118
+ async handle(call) {
119
+ try {
120
+ const params = validation_js_1.keywordGetSchema.parse(call.arguments);
121
+ const result = await this.keywordService.getKeywords(params);
122
+ return this.createSuccessResponse(result);
123
+ }
124
+ catch (error) {
125
+ if (error instanceof zod_1.z.ZodError) {
126
+ return this.createErrorResponse(new Error(`Invalid parameters: ${error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ')}`));
127
+ }
128
+ return this.createErrorResponse(error);
129
+ }
130
+ }
131
+ }
132
+ exports.GetKeywordsHandler = GetKeywordsHandler;
133
+ class GetRelatedKeywordsHandler extends base_js_1.BaseHandler {
134
+ keywordService;
135
+ constructor() {
136
+ super();
137
+ const config = (0, config_js_1.loadConfig)();
138
+ this.keywordService = new keyword_tools_js_1.KeywordService(config);
139
+ }
140
+ getName() {
141
+ return 'get_related_keywords';
142
+ }
143
+ getDescription() {
144
+ return 'Shows all search queries semantically related to the researched keyword. For each found keyword, displays its search volume, CPC, competition, difficulty, weight, intents, and more.';
145
+ }
146
+ getInputSchema() {
147
+ return {
148
+ type: 'object',
149
+ properties: {
150
+ keyword: {
151
+ type: 'string',
152
+ minLength: 1,
153
+ maxLength: 200,
154
+ description: 'Keyword for finding related keywords'
155
+ },
156
+ se: {
157
+ type: 'string',
158
+ enum: [
159
+ 'g_us', 'g_uk', 'g_au', 'g_ca', 'g_de',
160
+ 'g_fr', 'g_br', 'g_mx', 'g_es', 'g_bg',
161
+ 'g_it', 'g_nl', 'g_pl', 'g_ua'
162
+ ],
163
+ default: 'g_us',
164
+ description: 'Search database ID'
165
+ },
166
+ withIntents: {
167
+ type: 'boolean',
168
+ default: false,
169
+ description: 'Whether to include keyword intents (works only for g_ua and g_us)'
170
+ },
171
+ page: {
172
+ type: 'integer',
173
+ minimum: 1,
174
+ default: 1,
175
+ description: 'Page number'
176
+ },
177
+ size: {
178
+ type: 'integer',
179
+ minimum: 1,
180
+ maximum: 1000,
181
+ default: 100,
182
+ description: 'results per page'
183
+ },
184
+ sort: {
185
+ type: 'object',
186
+ properties: {
187
+ region_queries_count: { type: 'string', enum: ['asc', 'desc'] },
188
+ cost: { type: 'string', enum: ['asc', 'desc'] },
189
+ difficulty: { type: 'string', enum: ['asc', 'desc'] },
190
+ concurrency: { type: 'string', enum: ['asc', 'desc'] },
191
+ weight: { type: 'string', enum: ['asc', 'desc'] },
192
+ keyword: { type: 'string', enum: ['asc', 'desc'] }
193
+ },
194
+ additionalProperties: false,
195
+ description: 'Sorting parameters for results'
196
+ },
197
+ filters: {
198
+ type: 'object',
199
+ properties: {
200
+ cost: { type: 'number', minimum: 0, maximum: 200 },
201
+ cost_from: { type: 'number', minimum: 0, maximum: 200 },
202
+ cost_to: { type: 'number', minimum: 0, maximum: 200 },
203
+ region_queries_count: { type: 'integer', minimum: 0, maximum: 100000000 },
204
+ region_queries_count_from: { type: 'integer', minimum: 0, maximum: 100000000 },
205
+ region_queries_count_to: { type: 'integer', minimum: 0, maximum: 100000000 },
206
+ keyword_length: { type: 'integer', minimum: 1 },
207
+ keyword_length_from: { type: 'integer', minimum: 1 },
208
+ keyword_length_to: { type: 'integer', minimum: 1 },
209
+ difficulty: { type: 'integer', minimum: 0, maximum: 100 },
210
+ difficulty_from: { type: 'integer', minimum: 0, maximum: 100 },
211
+ difficulty_to: { type: 'integer', minimum: 0, maximum: 100 },
212
+ concurrency: { type: 'integer', minimum: 1, maximum: 100 },
213
+ concurrency_from: { type: 'integer', minimum: 1, maximum: 100 },
214
+ concurrency_to: { type: 'integer', minimum: 1, maximum: 100 },
215
+ weight: { type: 'integer', minimum: 1 },
216
+ weight_from: { type: 'number', minimum: 1 },
217
+ weight_to: { type: 'number', minimum: 1 },
218
+ right_spelling: { type: 'boolean', description: 'Filter by correct spelling' },
219
+ keyword_contain: { type: 'array', items: { type: 'string' }, description: 'Keywords must contain all of these terms (exact match)' },
220
+ keyword_not_contain: { type: 'array', items: { type: 'string' }, description: 'Keywords must not contain these terms (exact match)' },
221
+ keyword_contain_one_of: { type: 'array', items: { type: 'string' }, description: 'Keywords must contain at least one of these terms' },
222
+ keyword_not_contain_one_of: { type: 'array', items: { type: 'string' }, description: 'Keywords must not contain any of these terms' },
223
+ keyword_contain_broad_match: { type: 'array', items: { type: 'string' }, description: 'Keywords must contain all of these terms (broad match)' },
224
+ keyword_not_contain_broad_match: { type: 'array', items: { type: 'string' }, description: 'Keywords must not contain these terms (broad match)' },
225
+ keyword_contain_one_of_broad_match: { type: 'array', items: { type: 'string' }, description: 'Keywords must contain at least one of these terms (broad match)' },
226
+ keyword_not_contain_one_of_broad_match: { type: 'array', items: { type: 'string' }, description: 'Keywords must not contain any of these terms (broad match)' },
227
+ geo_names: { type: 'string', enum: ['contain', 'not_contain'], description: 'Filter by presence of geographic names' },
228
+ types: { type: 'array', items: { type: 'string' }, description: 'Filter by SERP feature types' },
229
+ intents_contain: { type: 'array', items: { type: 'string', enum: ['informational', 'navigational', 'commercial', 'transactional'] }, description: 'Keywords must contain these search intents' }
230
+ },
231
+ additionalProperties: false,
232
+ description: 'Results filters'
233
+ }
234
+ },
235
+ required: ['keyword', 'se'],
236
+ additionalProperties: false
237
+ };
238
+ }
239
+ async handle(call) {
240
+ try {
241
+ const parsed = validation_js_1.getRelatedKeywordsSchema.parse(call.arguments);
242
+ const result = await this.keywordService.getRelatedKeywords(parsed);
243
+ return this.createSuccessResponse(result);
244
+ }
245
+ catch (error) {
246
+ return this.createErrorResponse(error);
247
+ }
248
+ }
249
+ }
250
+ exports.GetRelatedKeywordsHandler = GetRelatedKeywordsHandler;
251
+ //# sourceMappingURL=keyword_tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyword_tools.js","sourceRoot":"","sources":["../../src/handlers/keyword_tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const server_js_1 = require("./server.js");
5
+ const logger_js_1 = require("./utils/logger.js");
6
+ const config_js_1 = require("./utils/config.js");
7
+ async function main() {
8
+ try {
9
+ (0, config_js_1.loadConfig)();
10
+ logger_js_1.logger.info('Configuration loaded successfully');
11
+ const server = new server_js_1.SerpstatMCPServer();
12
+ await server.start();
13
+ }
14
+ catch (error) {
15
+ logger_js_1.logger.error('Failed to start server:', error);
16
+ process.exit(1);
17
+ }
18
+ }
19
+ process.on('SIGINT', () => {
20
+ logger_js_1.logger.info('Received SIGINT, shutting down gracefully');
21
+ process.exit(0);
22
+ });
23
+ process.on('SIGTERM', () => {
24
+ logger_js_1.logger.info('Received SIGTERM, shutting down gracefully');
25
+ process.exit(0);
26
+ });
27
+ main().catch((error) => {
28
+ logger_js_1.logger.error('Unhandled error:', error);
29
+ process.exit(1);
30
+ });
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,2CAAgD;AAChD,iDAA2C;AAC3C,iDAA+C;AAE/C,KAAK,UAAU,IAAI;IACf,IAAI,CAAC;QAED,IAAA,sBAAU,GAAE,CAAC;QACb,kBAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,IAAI,6BAAiB,EAAE,CAAC;QACvC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,kBAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAGD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,kBAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,kBAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACnB,kBAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare class SerpstatMCPServer {
2
+ private server;
3
+ private handlers;
4
+ constructor();
5
+ private setupHandlers;
6
+ private setupRoutes;
7
+ start(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAYA,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAA2B;;IAoB3C,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,WAAW;IAmCb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B"}
package/dist/server.js ADDED
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SerpstatMCPServer = void 0;
4
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
5
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
6
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
7
+ const domain_tools_js_1 = require("./handlers/domain_tools.js");
8
+ const backlinks_tools_js_1 = require("./handlers/backlinks_tools.js");
9
+ const keyword_tools_js_1 = require("./handlers/keyword_tools.js");
10
+ const logger_js_1 = require("./utils/logger.js");
11
+ class SerpstatMCPServer {
12
+ server;
13
+ handlers;
14
+ constructor() {
15
+ this.server = new index_js_1.Server({
16
+ name: 'serpstat-mcp-server',
17
+ version: '1.0.0',
18
+ }, {
19
+ capabilities: {
20
+ tools: {},
21
+ },
22
+ });
23
+ this.handlers = new Map();
24
+ this.setupHandlers();
25
+ this.setupRoutes();
26
+ }
27
+ setupHandlers() {
28
+ const handlers = [
29
+ new domain_tools_js_1.DomainsInfoHandler(),
30
+ new domain_tools_js_1.CompetitorsHandler(),
31
+ new domain_tools_js_1.DomainKeywordsHandler(),
32
+ new domain_tools_js_1.DomainUrlsHandler(),
33
+ new backlinks_tools_js_1.BacklinksSummaryHandler(),
34
+ new domain_tools_js_1.DomainRegionsCountHandler(),
35
+ new domain_tools_js_1.GetDomainUniqKeywordsHandler(),
36
+ new keyword_tools_js_1.GetKeywordsHandler(),
37
+ new keyword_tools_js_1.GetRelatedKeywordsHandler(),
38
+ ];
39
+ for (const handler of handlers) {
40
+ this.handlers.set(handler.getName(), handler);
41
+ }
42
+ logger_js_1.logger.info(`Registered ${handlers.length} tool handlers`);
43
+ }
44
+ setupRoutes() {
45
+ this.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
46
+ const tools = Array.from(this.handlers.values()).map(handler => ({
47
+ name: handler.getName(),
48
+ description: handler.getDescription(),
49
+ inputSchema: handler.getInputSchema(),
50
+ }));
51
+ logger_js_1.logger.debug(`Listing ${tools.length} available tools`);
52
+ return { tools };
53
+ });
54
+ this.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
55
+ const { name, arguments: args } = request.params;
56
+ logger_js_1.logger.info(`Tool call received: ${name}`, { arguments: args });
57
+ const handler = this.handlers.get(name);
58
+ if (!handler) {
59
+ throw new Error(`Unknown tool: ${name}`);
60
+ }
61
+ const result = await handler.handle({ name, arguments: args ?? {} });
62
+ logger_js_1.logger.info(`Tool call completed: ${name}`, {
63
+ success: !result.isError,
64
+ responseLength: result.content?.[0]?.text?.length
65
+ });
66
+ return { ...result };
67
+ });
68
+ }
69
+ async start() {
70
+ const transport = new stdio_js_1.StdioServerTransport();
71
+ await this.server.connect(transport);
72
+ logger_js_1.logger.info('Serpstat MCP Server started and listening on stdio');
73
+ }
74
+ }
75
+ exports.SerpstatMCPServer = SerpstatMCPServer;
76
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { BaseService } from './base.js';
2
+ import { BacklinksSummaryParams } from '../utils/validation.js';
3
+ import { BacklinksSummaryResponse } from '../types/serpstat.js';
4
+ export declare class BacklinksService extends BaseService {
5
+ getBacklinksSummary(params: BacklinksSummaryParams): Promise<BacklinksSummaryResponse>;
6
+ }
7
+ //# sourceMappingURL=backlinks_tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backlinks_tools.d.ts","sourceRoot":"","sources":["../../src/services/backlinks_tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAmB,MAAM,sBAAsB,CAAC;AAGjF,qBAAa,gBAAiB,SAAQ,WAAW;IACvC,mBAAmB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,wBAAwB,CAAC;CAqB/F"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BacklinksService = void 0;
4
+ const base_js_1 = require("./base.js");
5
+ const logger_js_1 = require("../utils/logger.js");
6
+ class BacklinksService extends base_js_1.BaseService {
7
+ async getBacklinksSummary(params) {
8
+ logger_js_1.logger.info('Getting backlinks summary', { query: params.query, searchType: params.searchType });
9
+ const request = {
10
+ id: `backlinks_summary_${Date.now()}`,
11
+ method: 'SerpstatBacklinksProcedure.getSummaryV2',
12
+ params,
13
+ };
14
+ const response = await this.makeRequest(request);
15
+ if (!response.result) {
16
+ throw new Error('No result data received from Serpstat API');
17
+ }
18
+ logger_js_1.logger.info('Successfully retrieved backlinks summary', {
19
+ leftLines: response.result.summary_info.left_lines
20
+ });
21
+ return response.result;
22
+ }
23
+ }
24
+ exports.BacklinksService = BacklinksService;
25
+ //# sourceMappingURL=backlinks_tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backlinks_tools.js","sourceRoot":"","sources":["../../src/services/backlinks_tools.ts"],"names":[],"mappings":";;;AAAA,uCAAwC;AAGxC,kDAA4C;AAE5C,MAAa,gBAAiB,SAAQ,qBAAW;IAC7C,KAAK,CAAC,mBAAmB,CAAC,MAA8B;QACpD,kBAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAEjG,MAAM,OAAO,GAAoB;YAC7B,EAAE,EAAE,qBAAqB,IAAI,CAAC,GAAG,EAAE,EAAE;YACrC,MAAM,EAAE,yCAAyC;YACjD,MAAM;SACT,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAA2B,OAAO,CAAC,CAAC;QAE3E,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QAED,kBAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE;YACpD,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU;SACrD,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,MAAM,CAAC;IAC3B,CAAC;CACJ;AAtBD,4CAsBC"}
@@ -0,0 +1,13 @@
1
+ import { AxiosInstance } from 'axios';
2
+ import { SerpstatRequest, SerpstatResponse } from '../types/serpstat.js';
3
+ import { Config } from '../utils/config.js';
4
+ export declare abstract class BaseService {
5
+ protected readonly client: AxiosInstance;
6
+ protected readonly config: Config;
7
+ constructor(config: Config);
8
+ private setupInterceptors;
9
+ makeRequest<T>(request: SerpstatRequest, retries?: number): Promise<SerpstatResponse<T>>;
10
+ private isRetryableError;
11
+ private delay;
12
+ }
13
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/services/base.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAsB,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,8BAAsB,WAAW;IAC7B,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IACzC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEtB,MAAM,EAAE,MAAM;IAa1B,OAAO,CAAC,iBAAiB;IAmCnB,WAAW,CAAC,CAAC,EACf,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,MAA+B,GACzC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IA2B/B,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,KAAK;CAGhB"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BaseService = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const logger_js_1 = require("../utils/logger.js");
9
+ class BaseService {
10
+ client;
11
+ config;
12
+ constructor(config) {
13
+ this.config = config;
14
+ this.client = axios_1.default.create({
15
+ baseURL: config.serpstatApiUrl,
16
+ timeout: config.requestTimeout,
17
+ headers: {
18
+ 'Content-Type': 'application/json',
19
+ },
20
+ });
21
+ this.setupInterceptors();
22
+ }
23
+ setupInterceptors() {
24
+ this.client.interceptors.request.use((config) => {
25
+ logger_js_1.logger.debug('Making API request', {
26
+ url: config.url,
27
+ method: config.method,
28
+ data: config.data
29
+ });
30
+ return config;
31
+ }, (error) => {
32
+ logger_js_1.logger.error('Request interceptor error', error);
33
+ return Promise.reject(error);
34
+ });
35
+ this.client.interceptors.response.use((response) => {
36
+ logger_js_1.logger.debug('API response received', {
37
+ status: response.status,
38
+ data: response.data
39
+ });
40
+ return response;
41
+ }, (error) => {
42
+ logger_js_1.logger.error('Response interceptor error', {
43
+ status: error.response?.status,
44
+ data: error.response?.data,
45
+ message: error.message
46
+ });
47
+ return Promise.reject(error);
48
+ });
49
+ }
50
+ async makeRequest(request, retries = this.config.maxRetries) {
51
+ const requestConfig = {
52
+ method: 'POST',
53
+ url: '/',
54
+ params: { token: this.config.serpstatApiToken },
55
+ data: request,
56
+ };
57
+ try {
58
+ const response = await this.client.request(requestConfig);
59
+ if (response.data.error) {
60
+ throw new Error(`Serpstat API error: ${response.data.error.message} (code: ${response.data.error.code})`);
61
+ }
62
+ return response.data;
63
+ }
64
+ catch (error) {
65
+ if (retries > 0 && this.isRetryableError(error)) {
66
+ logger_js_1.logger.warn(`Request failed, retrying... (${retries} retries left)`, { error: error.message });
67
+ await this.delay(1000);
68
+ return this.makeRequest(request, retries - 1);
69
+ }
70
+ throw error;
71
+ }
72
+ }
73
+ isRetryableError(error) {
74
+ return (error.code === 'ECONNRESET' ||
75
+ error.code === 'ETIMEDOUT' ||
76
+ (error.response && error.response.status >= 500));
77
+ }
78
+ delay(ms) {
79
+ return new Promise(resolve => setTimeout(resolve, ms));
80
+ }
81
+ }
82
+ exports.BaseService = BaseService;
83
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/services/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { BaseService } from './base';
2
+ import { DomainsInfoResponse } from '../types/serpstat';
3
+ import { DomainsInfoParams } from '../utils/validation';
4
+ export declare class DomainService extends BaseService {
5
+ getDomainsInfo(params: DomainsInfoParams): Promise<DomainsInfoResponse>;
6
+ }
7
+ //# sourceMappingURL=domain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../src/services/domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAmB,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,qBAAa,aAAc,SAAQ,WAAW;IACpC,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAsBhF"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DomainService = void 0;
4
+ const base_1 = require("./base");
5
+ const logger_1 = require("../utils/logger");
6
+ class DomainService extends base_1.BaseService {
7
+ async getDomainsInfo(params) {
8
+ logger_1.logger.info('Getting domains info', { domains: params.domains, se: params.se });
9
+ const request = {
10
+ id: `domains_info_${Date.now()}`,
11
+ method: 'SerpstatDomainProcedure.getDomainsInfo',
12
+ params,
13
+ };
14
+ const response = await this.makeRequest(request);
15
+ if (!response.result) {
16
+ throw new Error('No result data received from Serpstat API');
17
+ }
18
+ logger_1.logger.info('Successfully retrieved domains info', {
19
+ domainsCount: response.result.data.length,
20
+ leftLines: response.result.summary_info.left_lines
21
+ });
22
+ return response.result;
23
+ }
24
+ }
25
+ exports.DomainService = DomainService;
26
+ //# sourceMappingURL=domain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.js","sourceRoot":"","sources":["../../src/services/domain.ts"],"names":[],"mappings":";;;AAAA,iCAAqC;AAGrC,4CAAyC;AAEzC,MAAa,aAAc,SAAQ,kBAAW;IAC1C,KAAK,CAAC,cAAc,CAAC,MAAyB;QAC1C,eAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAEhF,MAAM,OAAO,GAAoB;YAC7B,EAAE,EAAE,gBAAgB,IAAI,CAAC,GAAG,EAAE,EAAE;YAChC,MAAM,EAAE,wCAAwC;YAChD,MAAM;SACT,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAsB,OAAO,CAAC,CAAC;QAEtE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QAED,eAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE;YAC/C,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM;YACzC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU;SACrD,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,MAAM,CAAC;IAC3B,CAAC;CACJ;AAvBD,sCAuBC"}
@@ -0,0 +1,13 @@
1
+ import { BaseService } from './base.js';
2
+ import { DomainsInfoResponse } from '../types/serpstat.js';
3
+ import { DomainsInfoParams, CompetitorsGetParams, DomainKeywordsParams, DomainUrlsParams, DomainRegionsCountParams, DomainUniqKeywordsParams } from '../utils/validation.js';
4
+ import { CompetitorsResponse, DomainKeywordsResponse, DomainUrlsResponse, DomainRegionsCountResponse, DomainUniqKeywordsResponse } from '../types/serpstat.js';
5
+ export declare class DomainService extends BaseService {
6
+ getDomainsInfo(params: DomainsInfoParams): Promise<DomainsInfoResponse>;
7
+ getCompetitors(params: CompetitorsGetParams): Promise<CompetitorsResponse>;
8
+ getDomainKeywords(params: DomainKeywordsParams): Promise<DomainKeywordsResponse>;
9
+ getDomainUrls(params: DomainUrlsParams): Promise<DomainUrlsResponse>;
10
+ getDomainRegionsCount(params: DomainRegionsCountParams): Promise<DomainRegionsCountResponse>;
11
+ getDomainUniqKeywords(params: DomainUniqKeywordsParams): Promise<DomainUniqKeywordsResponse>;
12
+ }
13
+ //# sourceMappingURL=domain_tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain_tools.d.ts","sourceRoot":"","sources":["../../src/services/domain_tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAmB,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAE7K,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAE/J,qBAAa,aAAc,SAAQ,WAAW;IACpC,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAuBvE,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAuB1E,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAuBhF,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuBpE,qBAAqB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAuB5F,qBAAqB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,0BAA0B,CAAC;CAsBrG"}