@serpstat/serpstat-mcp-server 1.0.8 → 1.0.9

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/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.0.9] - 2025-10-01
4
+
5
+ ### Added
6
+
7
+ - **URL Analysis Tools**: Added four new methods for analyzing website URLs and their search performance
8
+ - `get_url_summary_traff` - Get traffic and keyword statistics for website pages matching a specific URL mask, showing organic traffic and keyword counts for URLs matching the given pattern
9
+ - `get_url_competitors` - Get list of URL competitors showing domains and pages that compete for the same keywords in top-10 search results
10
+ - `get_url_keywords` - Get keywords for which specified URL ranks in top-100 Google and top-50 Bing search results, with comprehensive metrics including positions, traffic, difficulty, and keyword intents
11
+ - `get_url_missing_keywords` - Get keywords that competitors rank for but the given URL does not, helping identify keyword gaps and content optimization opportunities
12
+ - Added comprehensive validation schemas and TypeScript types for URL analysis operations
13
+ - Added test coverage for all URL analysis methods (24 tests)
14
+ - Updated documentation with URL analysis tools section and usage examples
15
+
3
16
  ## [1.0.8] - 2025-09-30
4
17
 
5
18
  ### Added
package/README.md CHANGED
@@ -179,6 +179,15 @@ After installation and configuration in Claude Desktop, you can ask Claude:
179
179
  | get_keyword_competitors | Get domains that rank for the given keyword in Google top-20 results with competitor analysis | keyword, se, filters, sort |
180
180
  | get_keyword_top | Get Google's top-100 search results for the analyzed keyword with position, URL, and SERP features| keyword, se, filters, size |
181
181
 
182
+ ### URL Analysis Tools
183
+
184
+ | Tool Name | Description | Key Parameters |
185
+ |---------------------------|---------------------------------------------------------------------------------------------------|--------------------------|
186
+ | get_url_summary_traff | Get traffic and keyword statistics for website pages matching a specific URL mask | se, domain, urlContains |
187
+ | get_url_competitors | Get list of URL competitors showing domains competing for same keywords in top-10 results | se, url, sort, page |
188
+ | get_url_keywords | Get keywords for which specified URL ranks in top-100 Google and top-50 Bing search results | se, url, filters, sort |
189
+ | get_url_missing_keywords | Get keywords that competitors rank for but the given URL does not, identifying keyword gaps | url, se, filters, sort |
190
+
182
191
  ### Backlinks Analysis Tools
183
192
 
184
193
  | Tool Name | Description | Key Parameters |
@@ -0,0 +1,35 @@
1
+ import { BaseHandler } from './base.js';
2
+ import { MCPToolCall, MCPToolResponse } from '../types/mcp.js';
3
+ export declare class GetUrlSummaryTrafficHandler extends BaseHandler {
4
+ private urlService;
5
+ constructor();
6
+ getName(): string;
7
+ getDescription(): string;
8
+ getInputSchema(): object;
9
+ handle(call: MCPToolCall): Promise<MCPToolResponse>;
10
+ }
11
+ export declare class GetUrlCompetitorsHandler extends BaseHandler {
12
+ private urlService;
13
+ constructor();
14
+ getName(): string;
15
+ getDescription(): string;
16
+ getInputSchema(): object;
17
+ handle(call: MCPToolCall): Promise<MCPToolResponse>;
18
+ }
19
+ export declare class GetUrlKeywordsHandler extends BaseHandler {
20
+ private urlService;
21
+ constructor();
22
+ getName(): string;
23
+ getDescription(): string;
24
+ getInputSchema(): object;
25
+ handle(call: MCPToolCall): Promise<MCPToolResponse>;
26
+ }
27
+ export declare class GetUrlMissingKeywordsHandler extends BaseHandler {
28
+ private urlService;
29
+ constructor();
30
+ getName(): string;
31
+ getDescription(): string;
32
+ getInputSchema(): object;
33
+ handle(call: MCPToolCall): Promise<MCPToolResponse>;
34
+ }
35
+ //# sourceMappingURL=url_tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url_tools.d.ts","sourceRoot":"","sources":["../../src/handlers/url_tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAwB/D,qBAAa,2BAA4B,SAAQ,WAAW;IACxD,OAAO,CAAC,UAAU,CAAa;;IAQ/B,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAOxB,cAAc,IAAI,MAAM;IA+BlB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAY5D;AAED,qBAAa,wBAAyB,SAAQ,WAAW;IACrD,OAAO,CAAC,UAAU,CAAa;;IAQ/B,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IA8ClB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAe5D;AAED,qBAAa,qBAAsB,SAAQ,WAAW;IAClD,OAAO,CAAC,UAAU,CAAa;;IAQ/B,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAoFlB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAe5D;AAED,qBAAa,4BAA6B,SAAQ,WAAW;IACzD,OAAO,CAAC,UAAU,CAAa;;IAQ/B,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAuElB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAe5D"}
@@ -0,0 +1,361 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetUrlMissingKeywordsHandler = exports.GetUrlKeywordsHandler = exports.GetUrlCompetitorsHandler = exports.GetUrlSummaryTrafficHandler = void 0;
4
+ const base_js_1 = require("./base.js");
5
+ const url_tools_js_1 = require("../services/url_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
+ const constants_js_1 = require("../utils/constants.js");
10
+ class GetUrlSummaryTrafficHandler extends base_js_1.BaseHandler {
11
+ urlService;
12
+ constructor() {
13
+ super();
14
+ const config = (0, config_js_1.loadConfig)();
15
+ this.urlService = new url_tools_js_1.UrlService(config);
16
+ }
17
+ getName() {
18
+ return 'get_url_summary_traff';
19
+ }
20
+ getDescription() {
21
+ return 'Returns traffic and keyword statistics for website pages that match a specific URL mask. ' +
22
+ 'Shows organic traffic and number of keywords found for URLs matching the given pattern. **HIGH-COST METHOD - EXPLICIT CONFIRMATION REQUIRED**. Before executing, inform the user:\n' +
23
+ ' `This operation will cost 1000-2000 credits`. API COST: 1000 credits per each of `traffic`|`keywords` output parameter';
24
+ }
25
+ getInputSchema() {
26
+ return {
27
+ type: 'object',
28
+ properties: {
29
+ se: {
30
+ type: 'string',
31
+ enum: constants_js_1.MAIN_SEARCH_ENGINES,
32
+ default: 'g_us',
33
+ description: 'Search database ID'
34
+ },
35
+ domain: {
36
+ type: 'string',
37
+ description: 'The domain for which to retrieve traffic and keyword data'
38
+ },
39
+ urlContains: {
40
+ type: 'string',
41
+ minLength: constants_js_1.MIN_URL_CONTAIN_LENGTH,
42
+ maxLength: constants_js_1.MAX_URL_CONTAIN_LENGTH,
43
+ description: "URL pattern to filter results. Must be at least 3 characters long. Method finds all URLs containing this substring and aggregates statistics. Examples: '/blog/' matches all blog pages, '/products/' matches product section, '/en/' matches English version. Cannot use '/' alone.",
44
+ },
45
+ output_data: {
46
+ type: 'string',
47
+ enum: constants_js_1.URL_OUTPUT_DATA_TYPES,
48
+ description: "Specify which data to return. 'traffic' returns only traffic estimates (1000 credits). 'keywords' returns only keyword counts (1000 credits). If not specified, returns both traffic and keywords (2000 credits). Specify this parameter unless both metrics are required."
49
+ }
50
+ },
51
+ required: ['se', 'domain', 'urlContains'],
52
+ additionalProperties: false
53
+ };
54
+ }
55
+ async handle(call) {
56
+ try {
57
+ const params = validation_js_1.urlSummaryTrafficSchema.parse(call.arguments);
58
+ const result = await this.urlService.getUrlSummaryTraffic(params);
59
+ return this.createSuccessResponse(result);
60
+ }
61
+ catch (error) {
62
+ if (error instanceof zod_1.z.ZodError) {
63
+ return this.createErrorResponse(new Error(`Invalid parameters: ${error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ')}`));
64
+ }
65
+ return this.createErrorResponse(error);
66
+ }
67
+ }
68
+ }
69
+ exports.GetUrlSummaryTrafficHandler = GetUrlSummaryTrafficHandler;
70
+ class GetUrlCompetitorsHandler extends base_js_1.BaseHandler {
71
+ urlService;
72
+ constructor() {
73
+ super();
74
+ const config = (0, config_js_1.loadConfig)();
75
+ this.urlService = new url_tools_js_1.UrlService(config);
76
+ }
77
+ getName() {
78
+ return 'get_url_competitors';
79
+ }
80
+ getDescription() {
81
+ return 'Returns competitor URLs that rank for the same keywords in Google top-10. The analyzed URL must rank for 10+ keywords in top-10 to have competitor data available. Returns \'Data not found\' error for new or low-traffic pages with few ranking keywords, URLs not found in Serpstat database, or pages without sufficient top-10 keyword overlap with competitors. The URL parameter must include protocol https://. Best results for established pages with significant organic traffic. API cost: 1 credit per result row returned.';
82
+ }
83
+ getInputSchema() {
84
+ return {
85
+ type: 'object',
86
+ properties: {
87
+ se: {
88
+ type: 'string',
89
+ enum: constants_js_1.MAIN_SEARCH_ENGINES,
90
+ default: 'g_us',
91
+ description: 'Search database ID'
92
+ },
93
+ url: {
94
+ type: 'string',
95
+ format: 'uri',
96
+ description: "Full URL to analyze including protocol. Examples: 'https://example.com/' or 'https://example.com/page'. The URL must rank for keywords in Google top-10 to have competitor data. New or low-traffic pages may return 'Data not found' error."
97
+ },
98
+ sort: {
99
+ type: 'object',
100
+ properties: {
101
+ cnt: {
102
+ type: 'string',
103
+ enum: constants_js_1.SORT_ORDER,
104
+ description: 'Sort by number of keywords in top 10 for which pages intersect'
105
+ }
106
+ },
107
+ additionalProperties: false,
108
+ description: 'Sorting parameters'
109
+ },
110
+ page: {
111
+ type: 'integer',
112
+ minimum: constants_js_1.MIN_PAGE,
113
+ default: 1,
114
+ description: 'Page number in response'
115
+ },
116
+ size: {
117
+ type: 'integer',
118
+ minimum: 1,
119
+ maximum: constants_js_1.MAX_PAGE_SIZE,
120
+ default: constants_js_1.DEFAULT_PAGE_SIZE,
121
+ description: 'Number of results per page'
122
+ }
123
+ },
124
+ required: ['se', 'url'],
125
+ additionalProperties: false
126
+ };
127
+ }
128
+ async handle(call) {
129
+ try {
130
+ const params = validation_js_1.urlCompetitorsSchema.parse(call.arguments);
131
+ if (params.size === undefined) {
132
+ params.size = constants_js_1.DEFAULT_PAGE_SIZE;
133
+ }
134
+ const result = await this.urlService.getUrlCompetitors(params);
135
+ return this.createSuccessResponse(result);
136
+ }
137
+ catch (error) {
138
+ if (error instanceof zod_1.z.ZodError) {
139
+ return this.createErrorResponse(new Error(`Invalid parameters: ${error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ')}`));
140
+ }
141
+ return this.createErrorResponse(error);
142
+ }
143
+ }
144
+ }
145
+ exports.GetUrlCompetitorsHandler = GetUrlCompetitorsHandler;
146
+ class GetUrlKeywordsHandler extends base_js_1.BaseHandler {
147
+ urlService;
148
+ constructor() {
149
+ super();
150
+ const config = (0, config_js_1.loadConfig)();
151
+ this.urlService = new url_tools_js_1.UrlService(config);
152
+ }
153
+ getName() {
154
+ return 'get_url_keywords';
155
+ }
156
+ getDescription() {
157
+ return 'Returns a list of keywords for which the specified URL ranks in top-100 Google search results. Provides comprehensive insights including current positions, estimated traffic per keyword, keyword difficulty, search volume, and SERP features. Use filters to narrow down by position range, search volume, difficulty, or keyword patterns. API cost: 1 credit per result row returned.';
158
+ }
159
+ getInputSchema() {
160
+ return {
161
+ type: 'object',
162
+ properties: {
163
+ se: {
164
+ type: 'string',
165
+ enum: constants_js_1.MAIN_SEARCH_ENGINES,
166
+ default: 'g_us',
167
+ description: 'Search database ID'
168
+ },
169
+ url: {
170
+ type: 'string',
171
+ format: 'uri',
172
+ description: "Full URL to analyze including protocol (https://). Returns keywords where this exact URL ranks in Google top-100 (Bing top-50). Examples: 'https://example.com/', 'https://example.com/blog/article'",
173
+ },
174
+ withIntents: {
175
+ type: 'boolean',
176
+ description: "Include keyword search intent classification (informational, navigational, commercial, transactional). When enabled, response includes intents array for each keyword.",
177
+ },
178
+ sort: {
179
+ type: 'object',
180
+ properties: {
181
+ position: { type: 'string', enum: constants_js_1.SORT_ORDER, description: 'Sort by position' },
182
+ difficulty: { type: 'string', enum: constants_js_1.SORT_ORDER, description: 'Sort by keyword difficulty' },
183
+ cost: { type: 'string', enum: constants_js_1.SORT_ORDER, description: 'Sort by cost per click' },
184
+ traff: { type: 'string', enum: constants_js_1.SORT_ORDER, description: 'Sort by traffic' }
185
+ },
186
+ additionalProperties: false,
187
+ description: 'Sorting parameters'
188
+ },
189
+ filters: {
190
+ type: 'object',
191
+ properties: {
192
+ cost: { type: 'number', minimum: constants_js_1.MIN_FILTER_VALUE, maximum: constants_js_1.MAX_FILTER_COST },
193
+ cost_from: { type: 'number', minimum: constants_js_1.MIN_FILTER_VALUE, maximum: constants_js_1.MAX_FILTER_COST },
194
+ cost_to: { type: 'number', minimum: constants_js_1.MIN_FILTER_VALUE, maximum: constants_js_1.MAX_FILTER_COST },
195
+ position: { type: 'integer', minimum: constants_js_1.MIN_FILTER_POSITION, maximum: constants_js_1.MAX_FILTER_POSITION },
196
+ position_from: { type: 'integer', minimum: constants_js_1.MIN_FILTER_POSITION, maximum: constants_js_1.MAX_FILTER_POSITION },
197
+ position_to: { type: 'integer', minimum: constants_js_1.MIN_FILTER_POSITION, maximum: constants_js_1.MAX_FILTER_POSITION },
198
+ concurrency: { type: 'integer', minimum: constants_js_1.MIN_FILTER_CONCURRENCY, maximum: constants_js_1.MAX_FILTER_CONCURRENCY },
199
+ concurrency_from: { type: 'integer', minimum: constants_js_1.MIN_FILTER_CONCURRENCY, maximum: constants_js_1.MAX_FILTER_CONCURRENCY },
200
+ concurrency_to: { type: 'integer', minimum: constants_js_1.MIN_FILTER_CONCURRENCY, maximum: constants_js_1.MAX_FILTER_CONCURRENCY },
201
+ keyword_length: { type: 'integer', minimum: constants_js_1.MIN_KEYWORD_LENGTH },
202
+ difficulty: { type: 'number', minimum: constants_js_1.MIN_FILTER_VALUE, maximum: constants_js_1.MAX_FILTER_DIFFICULTY },
203
+ difficulty_from: { type: 'number', minimum: constants_js_1.MIN_FILTER_VALUE, maximum: constants_js_1.MAX_FILTER_DIFFICULTY },
204
+ difficulty_to: { type: 'number', minimum: constants_js_1.MIN_FILTER_VALUE, maximum: constants_js_1.MAX_FILTER_DIFFICULTY },
205
+ traff: { type: 'integer', minimum: constants_js_1.MIN_FILTER_VALUE },
206
+ region_queries_count: { type: 'integer', minimum: constants_js_1.MIN_FILTER_VALUE },
207
+ region_queries_count_from: { type: 'integer', minimum: constants_js_1.MIN_FILTER_VALUE },
208
+ region_queries_count_to: { type: 'integer', minimum: constants_js_1.MIN_FILTER_VALUE },
209
+ region_queries_count_wide: { type: 'integer', minimum: constants_js_1.MIN_FILTER_VALUE },
210
+ region_queries_count_wide_from: { type: 'integer', minimum: constants_js_1.MIN_FILTER_VALUE },
211
+ region_queries_count_wide_to: { type: 'integer', minimum: constants_js_1.MIN_FILTER_VALUE },
212
+ url_contains: { type: 'string', description: 'Exact website pages ranking for keywords' },
213
+ right_spelling: { type: 'boolean', description: 'Display or hide misspelled keywords' },
214
+ keyword_contain: { type: 'string', description: 'Contains all keywords (exact matching)' },
215
+ keyword_not_contain: { type: 'string', description: 'Does not contain all keywords (exact matching)' },
216
+ keyword_contain_one_of: { type: 'string', description: 'Contains one of the keywords (exact matching)' },
217
+ keyword_not_contain_one_of: { type: 'string', description: 'Does not contain one of the keywords (exact matching)' },
218
+ intents_contain: { type: 'array', items: { type: 'string', enum: constants_js_1.KEYWORD_INTENTS }, description: 'Contains one or several intents' },
219
+ intents_not_contain: { type: 'array', items: { type: 'string', enum: constants_js_1.KEYWORD_INTENTS }, description: 'Does not contain one of the intents' }
220
+ },
221
+ additionalProperties: false,
222
+ description: 'Filter conditions'
223
+ },
224
+ page: {
225
+ type: 'integer',
226
+ minimum: constants_js_1.MIN_PAGE,
227
+ default: 1,
228
+ description: 'Page number in response'
229
+ },
230
+ size: {
231
+ type: 'integer',
232
+ minimum: 1,
233
+ maximum: constants_js_1.MAX_PAGE_SIZE,
234
+ default: constants_js_1.DEFAULT_PAGE_SIZE,
235
+ description: 'Number of results per page'
236
+ }
237
+ },
238
+ required: ['se', 'url'],
239
+ additionalProperties: false
240
+ };
241
+ }
242
+ async handle(call) {
243
+ try {
244
+ const params = validation_js_1.urlKeywordsSchema.parse(call.arguments);
245
+ if (params.size === undefined) {
246
+ params.size = constants_js_1.DEFAULT_PAGE_SIZE;
247
+ }
248
+ const result = await this.urlService.getUrlKeywords(params);
249
+ return this.createSuccessResponse(result);
250
+ }
251
+ catch (error) {
252
+ if (error instanceof zod_1.z.ZodError) {
253
+ return this.createErrorResponse(new Error(`Invalid parameters: ${error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ')}`));
254
+ }
255
+ return this.createErrorResponse(error);
256
+ }
257
+ }
258
+ }
259
+ exports.GetUrlKeywordsHandler = GetUrlKeywordsHandler;
260
+ class GetUrlMissingKeywordsHandler extends base_js_1.BaseHandler {
261
+ urlService;
262
+ constructor() {
263
+ super();
264
+ const config = (0, config_js_1.loadConfig)();
265
+ this.urlService = new url_tools_js_1.UrlService(config);
266
+ }
267
+ getName() {
268
+ return 'get_url_missing_keywords';
269
+ }
270
+ getDescription() {
271
+ return "Identifies keyword opportunities by finding keywords where your competitors rank in top-20 but your URL does not. The weight metric returned in results indicates how many competitor URLs from top-20 rank for that keyword. Higher weight means more competitors are targeting this keyword, suggesting it is valuable for your niche. Perfect for content gap analysis and finding quick wins. API cost: 1 credit per result row returned.";
272
+ }
273
+ getInputSchema() {
274
+ return {
275
+ type: 'object',
276
+ properties: {
277
+ url: {
278
+ type: 'string',
279
+ format: 'uri',
280
+ description: 'Analyzed URL'
281
+ },
282
+ se: {
283
+ type: 'string',
284
+ enum: constants_js_1.MAIN_SEARCH_ENGINES,
285
+ default: 'g_us',
286
+ description: 'Search database ID'
287
+ },
288
+ sort: {
289
+ type: 'object',
290
+ properties: {
291
+ weight: {
292
+ type: 'string',
293
+ enum: constants_js_1.SORT_ORDER,
294
+ description: 'Sort by connection strength (number of competitor URLs in top-20 ranking for this keyword). Higher weight = more competitors = higher keyword value for your niche'
295
+ }
296
+ },
297
+ additionalProperties: false,
298
+ description: 'Sorting parameters. Sort by `weight` to see keywords where most competitors rank (highest opportunity)'
299
+ },
300
+ filters: {
301
+ type: 'object',
302
+ properties: {
303
+ region_queries_count: { type: 'integer', minimum: constants_js_1.MIN_FILTER_VALUE },
304
+ region_queries_count_to: { type: 'integer', minimum: constants_js_1.MIN_FILTER_VALUE },
305
+ region_queries_count_from: { type: 'integer', minimum: constants_js_1.MIN_FILTER_VALUE },
306
+ region_queries_count_wide: { type: 'integer', minimum: constants_js_1.MIN_FILTER_VALUE },
307
+ region_queries_count_wide_to: { type: 'integer', minimum: constants_js_1.MIN_FILTER_VALUE },
308
+ region_queries_count_wide_from: { type: 'integer', minimum: constants_js_1.MIN_FILTER_VALUE },
309
+ cost: { type: 'number', minimum: constants_js_1.MIN_FILTER_VALUE },
310
+ cost_to: { type: 'number', minimum: constants_js_1.MIN_FILTER_VALUE },
311
+ cost_from: { type: 'number', minimum: constants_js_1.MIN_FILTER_VALUE },
312
+ keyword: { type: 'string', description: 'Any text value' },
313
+ minus_keywords: { type: 'array', items: { type: 'string', minLength: constants_js_1.MIN_KEYWORD_LENGTH, maxLength: constants_js_1.MAX_KEYWORD_LENGTH }, description: 'Excluding keywords' },
314
+ concurrency: { type: 'number', minimum: constants_js_1.MIN_FILTER_VALUE },
315
+ concurrency_to: { type: 'number', minimum: constants_js_1.MIN_FILTER_VALUE },
316
+ concurrency_from: { type: 'number', minimum: constants_js_1.MIN_FILTER_VALUE },
317
+ weight: { type: 'integer', minimum: constants_js_1.MIN_FILTER_VALUE },
318
+ weight_to: { type: 'integer', minimum: constants_js_1.MIN_FILTER_VALUE },
319
+ weight_from: { type: 'integer', minimum: constants_js_1.MIN_FILTER_VALUE },
320
+ right_spelling: { type: 'boolean', description: 'Filter by spelling: true - contains all, false - does not contain all' }
321
+ },
322
+ additionalProperties: false,
323
+ description: 'Filter conditions'
324
+ },
325
+ page: {
326
+ type: 'integer',
327
+ minimum: constants_js_1.MIN_PAGE,
328
+ default: 1,
329
+ description: 'Page number in response'
330
+ },
331
+ size: {
332
+ type: 'integer',
333
+ minimum: 1,
334
+ maximum: constants_js_1.MAX_PAGE_SIZE,
335
+ default: constants_js_1.DEFAULT_PAGE_SIZE,
336
+ description: 'Number of results per page'
337
+ }
338
+ },
339
+ required: ['url', 'se'],
340
+ additionalProperties: false
341
+ };
342
+ }
343
+ async handle(call) {
344
+ try {
345
+ const params = validation_js_1.urlMissingKeywordsSchema.parse(call.arguments);
346
+ if (params.size === undefined) {
347
+ params.size = constants_js_1.DEFAULT_PAGE_SIZE;
348
+ }
349
+ const result = await this.urlService.getUrlMissingKeywords(params);
350
+ return this.createSuccessResponse(result);
351
+ }
352
+ catch (error) {
353
+ if (error instanceof zod_1.z.ZodError) {
354
+ return this.createErrorResponse(new Error(`Invalid parameters: ${error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ')}`));
355
+ }
356
+ return this.createErrorResponse(error);
357
+ }
358
+ }
359
+ }
360
+ exports.GetUrlMissingKeywordsHandler = GetUrlMissingKeywordsHandler;
361
+ //# sourceMappingURL=url_tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url_tools.js","sourceRoot":"","sources":["../../src/handlers/url_tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAeA,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAA2B;;IAoB3C,OAAO,CAAC,aAAa;IA8CrB,OAAO,CAAC,WAAW;IAkCb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAgBA,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAA2B;;IAoB3C,OAAO,CAAC,aAAa;IAkDrB,OAAO,CAAC,WAAW;IAkCb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B"}
package/dist/server.js CHANGED
@@ -7,6 +7,7 @@ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
7
7
  const domain_tools_js_1 = require("./handlers/domain_tools.js");
8
8
  const backlinks_tools_js_1 = require("./handlers/backlinks_tools.js");
9
9
  const keyword_tools_js_1 = require("./handlers/keyword_tools.js");
10
+ const url_tools_js_1 = require("./handlers/url_tools.js");
10
11
  const project_tools_js_1 = require("./handlers/project_tools.js");
11
12
  const credits_tools_js_1 = require("./handlers/credits_tools.js");
12
13
  const rank_tracking_tools_js_1 = require("./handlers/rank_tracking_tools.js");
@@ -17,7 +18,7 @@ class SerpstatMCPServer {
17
18
  constructor() {
18
19
  this.server = new index_js_1.Server({
19
20
  name: 'serpstat-mcp-server',
20
- version: '1.0.8',
21
+ version: '1.0.9',
21
22
  }, {
22
23
  capabilities: {
23
24
  tools: {},
@@ -54,6 +55,10 @@ class SerpstatMCPServer {
54
55
  new keyword_tools_js_1.GetKeywordTopUrlsHandler(),
55
56
  new keyword_tools_js_1.GetKeywordCompetitorsHandler(),
56
57
  new keyword_tools_js_1.GetKeywordTopHandler(),
58
+ new url_tools_js_1.GetUrlSummaryTrafficHandler(),
59
+ new url_tools_js_1.GetUrlCompetitorsHandler(),
60
+ new url_tools_js_1.GetUrlKeywordsHandler(),
61
+ new url_tools_js_1.GetUrlMissingKeywordsHandler(),
57
62
  new project_tools_js_1.CreateProjectHandler(),
58
63
  new project_tools_js_1.DeleteProjectHandler(),
59
64
  new project_tools_js_1.ListProjectsHandler(),
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;AAAA,wEAAmE;AACnE,wEAAiF;AACjF,iEAG4C;AAE5C,gEAAuL;AACvL,sEAAsV;AACtV,kEAA0P;AAC1P,kEAA8G;AAC9G,kEAA2F;AAC3F,8EAAkN;AAClN,iDAA2C;AAE3C,MAAa,iBAAiB;IAClB,MAAM,CAAS;IACf,QAAQ,CAA2B;IAE3C;QACI,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAM,CACpB;YACI,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,OAAO;SACnB,EACD;YACI,YAAY,EAAE;gBACV,KAAK,EAAE,EAAE;aACZ;SACJ,CACJ,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAEO,aAAa;QACjB,MAAM,QAAQ,GAAG;YACb,IAAI,oCAAkB,EAAE;YACxB,IAAI,oCAAkB,EAAE;YACxB,IAAI,uCAAqB,EAAE;YAC3B,IAAI,mCAAiB,EAAE;YACvB,IAAI,4CAAuB,EAAE;YAC7B,IAAI,sCAAiB,EAAE;YACvB,IAAI,8CAAyB,EAAE;YAC/B,IAAI,+CAA0B,EAAE;YAChC,IAAI,4CAAuB,EAAE;YAC7B,IAAI,yCAAoB,EAAE;YAC1B,IAAI,kDAA6B,EAAE;YACnC,IAAI,oDAA+B,EAAE;YACrC,IAAI,6CAAwB,EAAE;YAC9B,IAAI,mDAA8B,EAAE;YACpC,IAAI,8CAAyB,EAAE;YAC/B,IAAI,2CAAyB,EAAE;YAC/B,IAAI,8CAA4B,EAAE;YAClC,IAAI,qCAAkB,EAAE;YACxB,IAAI,4CAAyB,EAAE;YAC/B,IAAI,yCAAsB,EAAE;YAC5B,IAAI,+CAA4B,EAAE;YAClC,IAAI,2CAAwB,EAAE;YAC9B,IAAI,2CAAwB,EAAE;YAC9B,IAAI,+CAA4B,EAAE;YAClC,IAAI,uCAAoB,EAAE;YAC1B,IAAI,uCAAoB,EAAE;YAC1B,IAAI,uCAAoB,EAAE;YAC1B,IAAI,sCAAmB,EAAE;YACzB,IAAI,uCAAoB,EAAE;YAC1B,IAAI,yCAAsB,EAAE;YAC5B,IAAI,iDAAwB,EAAE;YAC9B,IAAI,kDAAyB,EAAE;YAC/B,IAAI,uDAA8B,EAAE;YACpC,IAAI,8DAAqC,EAAE;YAC3C,IAAI,0DAAiC,EAAE;SAC1C,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAED,kBAAM,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,MAAM,gBAAgB,CAAC,CAAC;IAC/D,CAAC;IAEO,WAAW;QACf,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,iCAAsB,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC7D,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE;gBACvB,WAAW,EAAE,OAAO,CAAC,cAAc,EAAE;gBACrC,WAAW,EAAE,OAAO,CAAC,cAAc,EAAE;aACxC,CAAC,CAAC,CAAC;YAEJ,kBAAM,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,MAAM,kBAAkB,CAAC,CAAC;YACxD,OAAO,EAAE,KAAK,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,gCAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACnE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAEjD,kBAAM,CAAC,IAAI,CAAC,uBAAuB,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEhE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;YAC7C,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;YAGrE,kBAAM,CAAC,IAAI,CAAC,wBAAwB,IAAI,EAAE,EAAE;gBACxC,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO;gBACxB,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM;aACpD,CAAC,CAAC;YAEH,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrC,kBAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACtE,CAAC;CACJ;AA3GD,8CA2GC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { BaseService } from './base.js';
2
+ import { UrlSummaryTrafficParams, UrlCompetitorsParams, UrlKeywordsParams, UrlMissingKeywordsParams } from '../utils/validation.js';
3
+ import { UrlSummaryTrafficResponse, UrlCompetitorsResponse, UrlKeywordsResponse, UrlMissingKeywordsResponse } from '../types/serpstat.js';
4
+ export declare class UrlService extends BaseService {
5
+ getUrlSummaryTraffic(params: UrlSummaryTrafficParams): Promise<UrlSummaryTrafficResponse>;
6
+ getUrlCompetitors(params: UrlCompetitorsParams): Promise<UrlCompetitorsResponse>;
7
+ getUrlKeywords(params: UrlKeywordsParams): Promise<UrlKeywordsResponse>;
8
+ getUrlMissingKeywords(params: UrlMissingKeywordsParams): Promise<UrlMissingKeywordsResponse>;
9
+ }
10
+ //# sourceMappingURL=url_tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url_tools.d.ts","sourceRoot":"","sources":["../../src/services/url_tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACpI,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,0BAA0B,EAAmB,MAAM,sBAAsB,CAAC;AAG3J,qBAAa,UAAW,SAAQ,WAAW;IACjC,oBAAoB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAoBzF,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAmBhF,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAmBvE,qBAAqB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,0BAA0B,CAAC;CAiBrG"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UrlService = void 0;
4
+ const base_js_1 = require("./base.js");
5
+ const logger_js_1 = require("../utils/logger.js");
6
+ class UrlService extends base_js_1.BaseService {
7
+ async getUrlSummaryTraffic(params) {
8
+ logger_js_1.logger.info('Getting URL summary traffic', { domain: params.domain, urlContains: params.urlContains, se: params.se });
9
+ const request = {
10
+ id: `get_url_summary_traffic_${Date.now()}`,
11
+ method: 'SerpstatUrlProcedure.getSummaryTraffic',
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 URL summary traffic', {
19
+ urls: response.result.urls,
20
+ traffic: response.result.traffic,
21
+ keywords: response.result.keywords,
22
+ leftLines: response.result.summary_info.left_lines
23
+ });
24
+ return response.result;
25
+ }
26
+ async getUrlCompetitors(params) {
27
+ logger_js_1.logger.info('Getting URL competitors', { url: params.url, se: params.se });
28
+ const request = {
29
+ id: `get_url_competitors_${Date.now()}`,
30
+ method: 'SerpstatUrlProcedure.getUrlCompetitors',
31
+ params,
32
+ };
33
+ const response = await this.makeRequest(request);
34
+ if (!response.result) {
35
+ throw new Error('No result data received from Serpstat API');
36
+ }
37
+ logger_js_1.logger.info('Successfully retrieved URL competitors', {
38
+ competitorsCount: response.result.data.length,
39
+ total: response.result.summary_info.total,
40
+ leftLines: response.result.summary_info.left_lines
41
+ });
42
+ return response.result;
43
+ }
44
+ async getUrlKeywords(params) {
45
+ logger_js_1.logger.info('Getting URL keywords', { url: params.url, se: params.se, withIntents: params.withIntents });
46
+ const request = {
47
+ id: `get_url_keywords_${Date.now()}`,
48
+ method: 'SerpstatUrlProcedure.getUrlKeywords',
49
+ params,
50
+ };
51
+ const response = await this.makeRequest(request);
52
+ if (!response.result) {
53
+ throw new Error('No result data received from Serpstat API');
54
+ }
55
+ logger_js_1.logger.info('Successfully retrieved URL keywords', {
56
+ keywordsCount: response.result.data.length,
57
+ total: response.result.summary_info.total,
58
+ leftLines: response.result.summary_info.left_lines
59
+ });
60
+ return response.result;
61
+ }
62
+ async getUrlMissingKeywords(params) {
63
+ logger_js_1.logger.info('Getting URL missing keywords', { url: params.url, se: params.se });
64
+ const request = {
65
+ id: `get_url_missing_keywords_${Date.now()}`,
66
+ method: 'SerpstatUrlProcedure.getUrlMissingKeywords',
67
+ params,
68
+ };
69
+ const response = await this.makeRequest(request);
70
+ if (!response.result) {
71
+ throw new Error('No result data received from Serpstat API');
72
+ }
73
+ logger_js_1.logger.info('Successfully retrieved URL missing keywords', {
74
+ keywordsCount: response.result.data.length,
75
+ leftLines: response.result.summary_info.left_lines
76
+ });
77
+ return response.result;
78
+ }
79
+ }
80
+ exports.UrlService = UrlService;
81
+ //# sourceMappingURL=url_tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url_tools.js","sourceRoot":"","sources":["../../src/services/url_tools.ts"],"names":[],"mappings":"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"}