@disruptorganic/mcp-google-search-console 1.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.
Files changed (108) hide show
  1. package/.env.example +141 -0
  2. package/LICENSE +21 -0
  3. package/README.md +0 -0
  4. package/dist/auth/index.d.ts +3 -0
  5. package/dist/auth/index.d.ts.map +1 -0
  6. package/dist/auth/index.js +2 -0
  7. package/dist/auth/index.js.map +1 -0
  8. package/dist/auth/oauth2.d.ts +31 -0
  9. package/dist/auth/oauth2.d.ts.map +1 -0
  10. package/dist/auth/oauth2.js +380 -0
  11. package/dist/auth/oauth2.js.map +1 -0
  12. package/dist/config/index.d.ts +36 -0
  13. package/dist/config/index.d.ts.map +1 -0
  14. package/dist/config/index.js +87 -0
  15. package/dist/config/index.js.map +1 -0
  16. package/dist/gsc/client.d.ts +72 -0
  17. package/dist/gsc/client.d.ts.map +1 -0
  18. package/dist/gsc/client.js +243 -0
  19. package/dist/gsc/client.js.map +1 -0
  20. package/dist/gsc/index.d.ts +3 -0
  21. package/dist/gsc/index.d.ts.map +1 -0
  22. package/dist/gsc/index.js +3 -0
  23. package/dist/gsc/index.js.map +1 -0
  24. package/dist/gsc/properties.d.ts +42 -0
  25. package/dist/gsc/properties.d.ts.map +1 -0
  26. package/dist/gsc/properties.js +393 -0
  27. package/dist/gsc/properties.js.map +1 -0
  28. package/dist/gsc/queries.d.ts +73 -0
  29. package/dist/gsc/queries.d.ts.map +1 -0
  30. package/dist/gsc/queries.js +390 -0
  31. package/dist/gsc/queries.js.map +1 -0
  32. package/dist/index.d.ts +3 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +186 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/tools/compare-date-ranges.d.ts +83 -0
  37. package/dist/tools/compare-date-ranges.d.ts.map +1 -0
  38. package/dist/tools/compare-date-ranges.js +462 -0
  39. package/dist/tools/compare-date-ranges.js.map +1 -0
  40. package/dist/tools/get-property-info.d.ts +30 -0
  41. package/dist/tools/get-property-info.d.ts.map +1 -0
  42. package/dist/tools/get-property-info.js +174 -0
  43. package/dist/tools/get-property-info.js.map +1 -0
  44. package/dist/tools/get-top-pages.d.ts +103 -0
  45. package/dist/tools/get-top-pages.d.ts.map +1 -0
  46. package/dist/tools/get-top-pages.js +254 -0
  47. package/dist/tools/get-top-pages.js.map +1 -0
  48. package/dist/tools/get-top-queries.d.ts +103 -0
  49. package/dist/tools/get-top-queries.d.ts.map +1 -0
  50. package/dist/tools/get-top-queries.js +254 -0
  51. package/dist/tools/get-top-queries.js.map +1 -0
  52. package/dist/tools/health-check.d.ts +12 -0
  53. package/dist/tools/health-check.d.ts.map +1 -0
  54. package/dist/tools/health-check.js +107 -0
  55. package/dist/tools/health-check.js.map +1 -0
  56. package/dist/tools/index.d.ts +1124 -0
  57. package/dist/tools/index.d.ts.map +1 -0
  58. package/dist/tools/index.js +70 -0
  59. package/dist/tools/index.js.map +1 -0
  60. package/dist/tools/list-properties.d.ts +50 -0
  61. package/dist/tools/list-properties.d.ts.map +1 -0
  62. package/dist/tools/list-properties.js +234 -0
  63. package/dist/tools/list-properties.js.map +1 -0
  64. package/dist/tools/query-advanced.d.ts +109 -0
  65. package/dist/tools/query-advanced.d.ts.map +1 -0
  66. package/dist/tools/query-advanced.js +378 -0
  67. package/dist/tools/query-advanced.js.map +1 -0
  68. package/dist/tools/query-by-keyword.d.ts +115 -0
  69. package/dist/tools/query-by-keyword.d.ts.map +1 -0
  70. package/dist/tools/query-by-keyword.js +339 -0
  71. package/dist/tools/query-by-keyword.js.map +1 -0
  72. package/dist/tools/query-by-url.d.ts +116 -0
  73. package/dist/tools/query-by-url.d.ts.map +1 -0
  74. package/dist/tools/query-by-url.js +366 -0
  75. package/dist/tools/query-by-url.js.map +1 -0
  76. package/dist/utils/cache.d.ts +22 -0
  77. package/dist/utils/cache.d.ts.map +1 -0
  78. package/dist/utils/cache.js +75 -0
  79. package/dist/utils/cache.js.map +1 -0
  80. package/dist/utils/index.d.ts +8 -0
  81. package/dist/utils/index.d.ts.map +1 -0
  82. package/dist/utils/index.js +8 -0
  83. package/dist/utils/index.js.map +1 -0
  84. package/dist/utils/logger.d.ts +4 -0
  85. package/dist/utils/logger.d.ts.map +1 -0
  86. package/dist/utils/logger.js +15 -0
  87. package/dist/utils/logger.js.map +1 -0
  88. package/dist/utils/metrics.d.ts +9 -0
  89. package/dist/utils/metrics.d.ts.map +1 -0
  90. package/dist/utils/metrics.js +54 -0
  91. package/dist/utils/metrics.js.map +1 -0
  92. package/dist/utils/rate-limiter.d.ts +24 -0
  93. package/dist/utils/rate-limiter.d.ts.map +1 -0
  94. package/dist/utils/rate-limiter.js +175 -0
  95. package/dist/utils/rate-limiter.js.map +1 -0
  96. package/dist/utils/token-estimator.d.ts +33 -0
  97. package/dist/utils/token-estimator.d.ts.map +1 -0
  98. package/dist/utils/token-estimator.js +226 -0
  99. package/dist/utils/token-estimator.js.map +1 -0
  100. package/dist/utils/types.d.ts +68 -0
  101. package/dist/utils/types.d.ts.map +1 -0
  102. package/dist/utils/types.js +13 -0
  103. package/dist/utils/types.js.map +1 -0
  104. package/dist/utils/validators.d.ts +579 -0
  105. package/dist/utils/validators.d.ts.map +1 -0
  106. package/dist/utils/validators.js +358 -0
  107. package/dist/utils/validators.js.map +1 -0
  108. package/package.json +73 -0
@@ -0,0 +1,83 @@
1
+ import { GSCClient } from '../gsc/client.js';
2
+ export interface ToolResponse {
3
+ content: Array<{
4
+ type: 'text';
5
+ text: string;
6
+ }>;
7
+ isError?: boolean;
8
+ }
9
+ export declare const compareDateRangesTool: {
10
+ name: string;
11
+ description: string;
12
+ inputSchema: {
13
+ type: string;
14
+ properties: {
15
+ property: {
16
+ type: string;
17
+ description: string;
18
+ };
19
+ dimension: {
20
+ type: string;
21
+ enum: string[];
22
+ description: string;
23
+ };
24
+ currentStartDate: {
25
+ type: string;
26
+ description: string;
27
+ pattern: string;
28
+ };
29
+ currentEndDate: {
30
+ type: string;
31
+ description: string;
32
+ pattern: string;
33
+ };
34
+ previousStartDate: {
35
+ type: string;
36
+ description: string;
37
+ pattern: string;
38
+ };
39
+ previousEndDate: {
40
+ type: string;
41
+ description: string;
42
+ pattern: string;
43
+ };
44
+ limit: {
45
+ type: string;
46
+ description: string;
47
+ minimum: number;
48
+ maximum: number;
49
+ default: number;
50
+ };
51
+ sortBy: {
52
+ type: string;
53
+ enum: string[];
54
+ description: string;
55
+ default: string;
56
+ };
57
+ searchType: {
58
+ type: string;
59
+ enum: string[];
60
+ description: string;
61
+ default: string;
62
+ };
63
+ minCurrentClicks: {
64
+ type: string;
65
+ description: string;
66
+ minimum: number;
67
+ };
68
+ deviceType: {
69
+ type: string;
70
+ enum: string[];
71
+ description: string;
72
+ };
73
+ country: {
74
+ type: string;
75
+ description: string;
76
+ pattern: string;
77
+ };
78
+ };
79
+ required: string[];
80
+ };
81
+ };
82
+ export declare function handleCompareDateRanges(params: any, client: GSCClient): Promise<ToolResponse>;
83
+ //# sourceMappingURL=compare-date-ranges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-date-ranges.d.ts","sourceRoot":"","sources":["../../src/tools/compare-date-ranges.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAc7C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAuUD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoFjC,CAAC;AAqCF,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAsSnG"}
@@ -0,0 +1,462 @@
1
+ import { listProperties, matchProperty, generatePropertyMatchError } from '../gsc/properties.js';
2
+ import { compareDateRangesParamsSchema } from '../utils/validators.js';
3
+ import { calculateMetricChanges, isSignificantChange } from '../utils/metrics.js';
4
+ import { logger } from '../utils/logger.js';
5
+ async function executePeriodQuery(client, property, startDate, endDate, dimension, options) {
6
+ const { searchType = 'web', deviceType, country, limit = 1000 } = options;
7
+ const request = {
8
+ startDate,
9
+ endDate,
10
+ dimensions: [dimension],
11
+ type: searchType,
12
+ dataState: 'final',
13
+ rowLimit: Math.min(limit * 2, 25000),
14
+ };
15
+ const filters = [];
16
+ if (deviceType) {
17
+ filters.push({
18
+ dimension: 'device',
19
+ operator: 'equals',
20
+ expression: deviceType.toLowerCase(),
21
+ });
22
+ }
23
+ if (country) {
24
+ filters.push({
25
+ dimension: 'country',
26
+ operator: 'equals',
27
+ expression: country.toLowerCase(),
28
+ });
29
+ }
30
+ if (filters.length > 0) {
31
+ request.dimensionFilterGroups = [{ filters }];
32
+ }
33
+ logger.debug('Executing period query', {
34
+ property,
35
+ dateRange: `${startDate} to ${endDate}`,
36
+ dimension,
37
+ searchType,
38
+ });
39
+ const response = await client.query({
40
+ propertyUrl: property,
41
+ startDate,
42
+ endDate,
43
+ dimensions: request.dimensions,
44
+ rowLimit: request.rowLimit,
45
+ searchType: request.type,
46
+ dataState: request.dataState,
47
+ filters: request.dimensionFilterGroups ? request.dimensionFilterGroups.map((group) => ({
48
+ filters: group.filters
49
+ })) : undefined,
50
+ });
51
+ const resultsMap = new Map();
52
+ if (response && response.rows) {
53
+ response.rows.forEach((row) => {
54
+ const key = row.keys[0];
55
+ resultsMap.set(key, {
56
+ clicks: row.clicks || 0,
57
+ impressions: row.impressions || 0,
58
+ ctr: row.ctr || 0,
59
+ position: row.position || 0,
60
+ });
61
+ });
62
+ }
63
+ logger.debug('Period query completed', {
64
+ resultsCount: resultsMap.size,
65
+ dateRange: `${startDate} to ${endDate}`,
66
+ });
67
+ return resultsMap;
68
+ }
69
+ function mergeResults(currentMap, previousMap, dimension) {
70
+ const allKeys = new Set([...currentMap.keys(), ...previousMap.keys()]);
71
+ const results = [];
72
+ allKeys.forEach((key) => {
73
+ const current = currentMap.get(key) || null;
74
+ const previous = previousMap.get(key) || null;
75
+ const result = {
76
+ [dimension]: key,
77
+ current,
78
+ previous,
79
+ };
80
+ if (current && previous) {
81
+ result.changes = calculateMetricChanges(current, previous);
82
+ }
83
+ results.push(result);
84
+ });
85
+ logger.debug('Results merged', {
86
+ totalItems: results.length,
87
+ currentOnlyCount: currentMap.size,
88
+ previousOnlyCount: previousMap.size,
89
+ });
90
+ return results;
91
+ }
92
+ function sortByChangeMetric(results, sortBy, sortOrder = 'desc') {
93
+ return results.sort((a, b) => {
94
+ let aVal = 0;
95
+ let bVal = 0;
96
+ if (sortBy === 'clicks' && a.current && b.current) {
97
+ aVal = a.current.clicks;
98
+ bVal = b.current.clicks;
99
+ }
100
+ else if (sortBy === 'impressions' && a.current && b.current) {
101
+ aVal = a.current.impressions;
102
+ bVal = b.current.impressions;
103
+ }
104
+ else if (sortBy === 'ctr' && a.current && b.current) {
105
+ aVal = a.current.ctr;
106
+ bVal = b.current.ctr;
107
+ }
108
+ else if (sortBy === 'position' && a.current && b.current) {
109
+ aVal = a.current.position;
110
+ bVal = b.current.position;
111
+ }
112
+ else if (sortBy === 'clicks_change') {
113
+ aVal = a.changes?.clicks ?? null;
114
+ bVal = b.changes?.clicks ?? null;
115
+ }
116
+ else if (sortBy === 'clicks_percent_change') {
117
+ aVal = a.changes?.clicksPercent ?? null;
118
+ bVal = b.changes?.clicksPercent ?? null;
119
+ }
120
+ else if (sortBy === 'impressions_change') {
121
+ aVal = a.changes?.impressions ?? null;
122
+ bVal = b.changes?.impressions ?? null;
123
+ }
124
+ else if (sortBy === 'impressions_percent_change') {
125
+ aVal = a.changes?.impressionsPercent ?? null;
126
+ bVal = b.changes?.impressionsPercent ?? null;
127
+ }
128
+ else if (sortBy === 'position_change') {
129
+ aVal = a.changes?.position ?? null;
130
+ bVal = b.changes?.position ?? null;
131
+ }
132
+ if (aVal === null && bVal === null)
133
+ return 0;
134
+ if (aVal === null)
135
+ return 1;
136
+ if (bVal === null)
137
+ return -1;
138
+ const direction = sortOrder === 'asc' ? 1 : -1;
139
+ return direction * (aVal - bVal);
140
+ });
141
+ }
142
+ function generateSummary(results) {
143
+ let itemsImproved = 0;
144
+ let itemsDeclined = 0;
145
+ let itemsNew = 0;
146
+ let itemsDropped = 0;
147
+ results.forEach((result) => {
148
+ if (!result.current && result.previous) {
149
+ itemsDropped++;
150
+ }
151
+ else if (result.current && !result.previous) {
152
+ itemsNew++;
153
+ }
154
+ else if (result.changes) {
155
+ const clicksChange = result.changes.clicks;
156
+ const clicksPercent = result.changes.clicksPercent;
157
+ const positionChange = result.changes.position;
158
+ if (clicksPercent !== null && isSignificantChange(clicksChange, clicksPercent, 10, 10)) {
159
+ if (clicksChange > 0) {
160
+ itemsImproved++;
161
+ }
162
+ else {
163
+ itemsDeclined++;
164
+ }
165
+ }
166
+ else if (Math.abs(positionChange) > 1) {
167
+ if (positionChange < 0) {
168
+ itemsImproved++;
169
+ }
170
+ else {
171
+ itemsDeclined++;
172
+ }
173
+ }
174
+ }
175
+ });
176
+ return {
177
+ totalItems: results.length,
178
+ itemsImproved,
179
+ itemsDeclined,
180
+ itemsNew,
181
+ itemsDropped,
182
+ };
183
+ }
184
+ export const compareDateRangesTool = {
185
+ name: 'compare_date_ranges',
186
+ description: 'Compares search performance metrics across two date periods (e.g., this month vs last month, last 7 days vs previous 7 days). Shows changes in clicks, impressions, CTR, and position for queries or pages. Identifies which keywords/pages improved or declined. Supports sorting by change metrics (clicks_change, clicks_percent_change, position_change). Use for trend analysis, impact measurement, and performance monitoring. IMPORTANT: Use list_properties first to get the correct property identifier.',
187
+ inputSchema: {
188
+ type: 'object',
189
+ properties: {
190
+ property: {
191
+ type: 'string',
192
+ description: 'Property identifier from list_properties (e.g., "sc-domain:example.com")',
193
+ },
194
+ dimension: {
195
+ type: 'string',
196
+ enum: ['query', 'page'],
197
+ description: 'What to compare: "query" for keywords or "page" for URLs',
198
+ },
199
+ currentStartDate: {
200
+ type: 'string',
201
+ description: 'Current period start date in ISO 8601 format (YYYY-MM-DD)',
202
+ pattern: '^\\d{4}-\\d{2}-\\d{2}$',
203
+ },
204
+ currentEndDate: {
205
+ type: 'string',
206
+ description: 'Current period end date in ISO 8601 format (YYYY-MM-DD)',
207
+ pattern: '^\\d{4}-\\d{2}-\\d{2}$',
208
+ },
209
+ previousStartDate: {
210
+ type: 'string',
211
+ description: 'Previous period start date in ISO 8601 format (YYYY-MM-DD)',
212
+ pattern: '^\\d{4}-\\d{2}-\\d{2}$',
213
+ },
214
+ previousEndDate: {
215
+ type: 'string',
216
+ description: 'Previous period end date in ISO 8601 format (YYYY-MM-DD)',
217
+ pattern: '^\\d{4}-\\d{2}-\\d{2}$',
218
+ },
219
+ limit: {
220
+ type: 'number',
221
+ description: 'Number of items to compare (1-1000, default: 50)',
222
+ minimum: 1,
223
+ maximum: 1000,
224
+ default: 50,
225
+ },
226
+ sortBy: {
227
+ type: 'string',
228
+ enum: [
229
+ 'clicks',
230
+ 'impressions',
231
+ 'ctr',
232
+ 'position',
233
+ 'clicks_change',
234
+ 'clicks_percent_change',
235
+ 'impressions_change',
236
+ 'impressions_percent_change',
237
+ 'position_change',
238
+ ],
239
+ description: 'Sort by change metric (default: clicks_change). Use *_change for absolute changes, *_percent_change for percentage changes',
240
+ default: 'clicks_change',
241
+ },
242
+ searchType: {
243
+ type: 'string',
244
+ enum: ['web', 'image', 'video', 'news', 'discover', 'googleNews'],
245
+ description: 'Search type filter (default: web)',
246
+ default: 'web',
247
+ },
248
+ minCurrentClicks: {
249
+ type: 'number',
250
+ description: 'Only include items with N+ clicks in current period (optional)',
251
+ minimum: 0,
252
+ },
253
+ deviceType: {
254
+ type: 'string',
255
+ enum: ['desktop', 'mobile', 'tablet'],
256
+ description: 'Filter by device type (optional)',
257
+ },
258
+ country: {
259
+ type: 'string',
260
+ description: '3-letter country code (e.g., "usa", "gbr") (optional)',
261
+ pattern: '^[a-z]{3}$',
262
+ },
263
+ },
264
+ required: ['property', 'dimension', 'currentStartDate', 'currentEndDate', 'previousStartDate', 'previousEndDate'],
265
+ },
266
+ };
267
+ export async function handleCompareDateRanges(params, client) {
268
+ try {
269
+ logger.info('Handling compare_date_ranges request', {
270
+ propertyInput: params.property,
271
+ dimension: params.dimension,
272
+ currentPeriod: params.currentStartDate && params.currentEndDate
273
+ ? `${params.currentStartDate} to ${params.currentEndDate}`
274
+ : 'not provided',
275
+ previousPeriod: params.previousStartDate && params.previousEndDate
276
+ ? `${params.previousStartDate} to ${params.previousEndDate}`
277
+ : 'not provided',
278
+ sortBy: params.sortBy || 'clicks_change',
279
+ });
280
+ const validationResult = compareDateRangesParamsSchema.safeParse(params);
281
+ if (!validationResult.success) {
282
+ const errorMessages = validationResult.error.issues
283
+ .map((issue) => {
284
+ const path = issue.path.length > 0 ? `${issue.path.join('.')}: ` : '';
285
+ return `${path}${issue.message}`;
286
+ })
287
+ .join('; ');
288
+ logger.error('Input validation failed', {
289
+ errors: errorMessages,
290
+ params,
291
+ });
292
+ return {
293
+ content: [
294
+ {
295
+ type: 'text',
296
+ text: JSON.stringify({
297
+ error: 'Input validation failed',
298
+ details: errorMessages,
299
+ }, null, 2),
300
+ },
301
+ ],
302
+ isError: true,
303
+ };
304
+ }
305
+ const validated = validationResult.data;
306
+ const { property, dimension, currentStartDate, currentEndDate, previousStartDate, previousEndDate, limit = 50, sortBy = 'clicks_change', searchType = 'web', minCurrentClicks, deviceType, country, } = validated;
307
+ logger.debug('Fetching available properties');
308
+ const availableProperties = await listProperties(client);
309
+ if (availableProperties.length === 0) {
310
+ logger.warn('No properties found for this account');
311
+ return {
312
+ content: [
313
+ {
314
+ type: 'text',
315
+ text: JSON.stringify({
316
+ error: 'No properties found',
317
+ details: 'No Google Search Console properties are accessible with this account. Please verify your account has access to at least one property.',
318
+ }, null, 2),
319
+ },
320
+ ],
321
+ isError: true,
322
+ };
323
+ }
324
+ const matchResult = matchProperty(property, availableProperties);
325
+ if (!matchResult.matched) {
326
+ const errorMessage = generatePropertyMatchError(matchResult, availableProperties);
327
+ logger.error('Property matching failed', {
328
+ searchInput: property,
329
+ matchType: matchResult.matchType,
330
+ alternativeCount: matchResult.alternatives?.length || 0,
331
+ });
332
+ return {
333
+ content: [
334
+ {
335
+ type: 'text',
336
+ text: JSON.stringify({
337
+ error: 'Property not found or ambiguous',
338
+ details: errorMessage,
339
+ }, null, 2),
340
+ },
341
+ ],
342
+ isError: true,
343
+ };
344
+ }
345
+ const matchedProperty = matchResult.matched;
346
+ logger.info('Property matched successfully', {
347
+ searchInput: property,
348
+ matched: matchedProperty.propertyUrl,
349
+ matchType: matchResult.matchType,
350
+ });
351
+ logger.info('Executing dual-period queries', {
352
+ property: matchedProperty.propertyUrl,
353
+ currentPeriod: `${currentStartDate} to ${currentEndDate}`,
354
+ previousPeriod: `${previousStartDate} to ${previousEndDate}`,
355
+ });
356
+ const [currentMap, previousMap] = await Promise.all([
357
+ executePeriodQuery(client, matchedProperty.propertyUrl, currentStartDate, currentEndDate, dimension, {
358
+ searchType,
359
+ deviceType,
360
+ country,
361
+ limit,
362
+ }),
363
+ executePeriodQuery(client, matchedProperty.propertyUrl, previousStartDate, previousEndDate, dimension, {
364
+ searchType,
365
+ deviceType,
366
+ country,
367
+ limit,
368
+ }),
369
+ ]);
370
+ let comparison = mergeResults(currentMap, previousMap, dimension);
371
+ logger.info('Results merged', {
372
+ totalItems: comparison.length,
373
+ currentPeriodItems: currentMap.size,
374
+ previousPeriodItems: previousMap.size,
375
+ });
376
+ if (minCurrentClicks !== undefined) {
377
+ const beforeCount = comparison.length;
378
+ comparison = comparison.filter((item) => item.current && item.current.clicks >= minCurrentClicks);
379
+ logger.debug('Applied minCurrentClicks filter', {
380
+ minCurrentClicks,
381
+ beforeCount,
382
+ afterCount: comparison.length,
383
+ });
384
+ }
385
+ comparison = sortByChangeMetric(comparison, sortBy);
386
+ comparison = comparison.slice(0, limit);
387
+ logger.info('Results sorted and limited', {
388
+ sortBy,
389
+ limit,
390
+ finalCount: comparison.length,
391
+ });
392
+ const summary = generateSummary(comparison);
393
+ logger.info('Summary generated', summary);
394
+ const responseObject = {
395
+ property: matchedProperty.propertyUrl,
396
+ dimension,
397
+ currentPeriod: {
398
+ start: currentStartDate,
399
+ end: currentEndDate,
400
+ },
401
+ previousPeriod: {
402
+ start: previousStartDate,
403
+ end: previousEndDate,
404
+ },
405
+ sortBy,
406
+ searchType,
407
+ comparison,
408
+ summary,
409
+ };
410
+ logger.info('Compare date ranges completed successfully', {
411
+ property: matchedProperty.propertyUrl,
412
+ itemsReturned: comparison.length,
413
+ itemsImproved: summary.itemsImproved,
414
+ itemsDeclined: summary.itemsDeclined,
415
+ itemsNew: summary.itemsNew,
416
+ itemsDropped: summary.itemsDropped,
417
+ });
418
+ return {
419
+ content: [
420
+ {
421
+ type: 'text',
422
+ text: JSON.stringify(responseObject, null, 2),
423
+ },
424
+ ],
425
+ };
426
+ }
427
+ catch (error) {
428
+ const errorMessage = error instanceof Error ? error.message : String(error);
429
+ const errorStack = error instanceof Error ? error.stack : undefined;
430
+ logger.error('Compare date ranges handler failed', {
431
+ error: errorMessage,
432
+ stack: errorStack,
433
+ params,
434
+ });
435
+ let userFriendlyMessage = errorMessage;
436
+ if (errorMessage.includes('permission') || errorMessage.includes('Permission')) {
437
+ userFriendlyMessage = `Permission denied for property ${params.property}. Use list_properties to see accessible properties.`;
438
+ }
439
+ else if (errorMessage.includes('not found') || errorMessage.includes('Not Found')) {
440
+ userFriendlyMessage = `Property ${params.property} not found. Use list_properties to get valid property identifiers.`;
441
+ }
442
+ else if (errorMessage.includes('date') || errorMessage.includes('Date')) {
443
+ userFriendlyMessage = `Invalid date range. ${errorMessage}`;
444
+ }
445
+ else if (errorMessage.includes('rate limit') || errorMessage.includes('Rate limit')) {
446
+ userFriendlyMessage = 'Rate limit exceeded. Please wait a moment and try again.';
447
+ }
448
+ return {
449
+ content: [
450
+ {
451
+ type: 'text',
452
+ text: JSON.stringify({
453
+ error: 'Compare date ranges execution failed',
454
+ details: userFriendlyMessage,
455
+ }, null, 2),
456
+ },
457
+ ],
458
+ isError: true,
459
+ };
460
+ }
461
+ }
462
+ //# sourceMappingURL=compare-date-ranges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-date-ranges.js","sourceRoot":"","sources":["../../src/tools/compare-date-ranges.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { GSCClient } from '../gsc/client.js';
2
+ export interface ToolResponse {
3
+ content: Array<{
4
+ type: 'text';
5
+ text: string;
6
+ }>;
7
+ isError?: boolean;
8
+ }
9
+ export type PropertyType = 'domain' | 'url_prefix';
10
+ export interface PropertyInfoResponse {
11
+ propertyUrl: string;
12
+ permissionLevel: string;
13
+ propertyType: PropertyType;
14
+ }
15
+ export declare const getPropertyInfoTool: {
16
+ name: string;
17
+ description: string;
18
+ inputSchema: {
19
+ type: string;
20
+ properties: {
21
+ propertyUrl: {
22
+ type: string;
23
+ description: string;
24
+ };
25
+ };
26
+ required: string[];
27
+ };
28
+ };
29
+ export declare function handleGetPropertyInfo(params: any, client: GSCClient): Promise<ToolResponse>;
30
+ //# sourceMappingURL=get-property-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-property-info.d.ts","sourceRoot":"","sources":["../../src/tools/get-property-info.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAY7C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAKD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,YAAY,CAAC;AAKnD,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAiED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;CAa/B,CAAC;AA4BF,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,YAAY,CAAC,CAgMvB"}