@serpstat/serpstat-mcp-server 1.1.0 → 1.1.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 (36) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +75 -1
  3. package/dist/handlers/one_page_audit_tools.d.ts +91 -0
  4. package/dist/handlers/one_page_audit_tools.d.ts.map +1 -0
  5. package/dist/handlers/one_page_audit_tools.js +523 -0
  6. package/dist/handlers/one_page_audit_tools.js.map +1 -0
  7. package/dist/http-server.d.ts +8 -0
  8. package/dist/http-server.d.ts.map +1 -0
  9. package/dist/http-server.js +202 -0
  10. package/dist/http-server.js.map +1 -0
  11. package/dist/middleware/auth.d.ts +3 -0
  12. package/dist/middleware/auth.d.ts.map +1 -0
  13. package/dist/middleware/auth.js +112 -0
  14. package/dist/middleware/auth.js.map +1 -0
  15. package/dist/server.d.ts.map +1 -1
  16. package/dist/server.js +107 -55
  17. package/dist/server.js.map +1 -1
  18. package/dist/services/one_page_audit.d.ts +17 -0
  19. package/dist/services/one_page_audit.d.ts.map +1 -0
  20. package/dist/services/one_page_audit.js +220 -0
  21. package/dist/services/one_page_audit.js.map +1 -0
  22. package/dist/transports/sse.d.ts +20 -0
  23. package/dist/transports/sse.d.ts.map +1 -0
  24. package/dist/transports/sse.js +52 -0
  25. package/dist/transports/sse.js.map +1 -0
  26. package/dist/types/serpstat.d.ts +81 -6
  27. package/dist/types/serpstat.d.ts.map +1 -1
  28. package/dist/utils/constants.d.ts +4 -0
  29. package/dist/utils/constants.d.ts.map +1 -1
  30. package/dist/utils/constants.js +5 -1
  31. package/dist/utils/constants.js.map +1 -1
  32. package/dist/utils/validation.d.ts +148 -0
  33. package/dist/utils/validation.d.ts.map +1 -1
  34. package/dist/utils/validation.js +60 -1
  35. package/dist/utils/validation.js.map +1 -1
  36. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,48 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.1.2] - 2025-10-24
4
+
5
+ ### Added
6
+
7
+ - **Category Filtering**: Added support for filtering tools by categories via `SERPSTAT_ENABLED_CATEGORIES` environment variable
8
+ - Enable only specific tool categories to reduce context window usage in AI assistants
9
+ - Comma-separated list of categories: `domain`, `keywords`, `backlinks`, `url`, `projects`, `credits`, `rt`, `audit`, `page-audit`
10
+ - Default behavior (no filter): all 63 tools available across 9 categories
11
+ - Example: `SERPSTAT_ENABLED_CATEGORIES=keywords,domain` loads only keyword research (8 tools) and domain analysis (6 tools) tools
12
+ - Useful for creating specialized configurations focused on specific SEO analysis areas
13
+ - Updated documentation with category filtering examples in README.md and CLAUDE.md
14
+ - Added category-based handler organization in `src/server.ts` for maintainable tool management
15
+
16
+
17
+ ## [1.1.1] - 2025-10-04
18
+
19
+ ### Added
20
+
21
+ - **One-Page Audit Tools Enhancement**: Added seven additional methods for comprehensive one-page audit management and analysis
22
+ - `page_audit_rescan` - Rescan existing one-page audit project and create new audit report with updated settings (consumes 10 API credits per rescan)
23
+ - `page_audit_stop` - Stop active one-page audit scan and receive operation result status (does not consume API credits)
24
+ - `page_audit_delete` - Remove one-page audit project from customer project list permanently (does not consume API credits)
25
+ - `page_audit_get_report_by_categories` - Get audit results by categories for a specific report with error grouping by type and support for comparing with previous reports to track changes (does not consume API credits)
26
+ - `page_audit_report_drill_down` - Get detailed error rows for specific audit error type with filtering by mode (all/new/solved), pagination support, and affected URL list (does not consume API credits)
27
+ - `page_audit_get_scan_names` - Get list of all one-page audit project names with URLs and finished report counts for project discovery (does not consume API credits)
28
+ - `page_audit_scan_logs` - Get user log for audit report with chronological scan events, message types (info/warning/error), parameters, and timestamps for debugging and progress tracking (does not consume API credits)
29
+ - Added comprehensive validation schemas and TypeScript types for all new one-page audit operations
30
+ - Added test coverage for all new one-page audit methods (21 tests covering validation schemas and edge cases)
31
+ - Updated documentation with enhanced one-page audit tools section and complete API reference
32
+
33
+ ## [1.1.1] - 2025-10-03
34
+
35
+ ### Added
36
+
37
+ - **One-Page Audit Tools**: Added four methods for single-page audit analysis with JavaScript rendering support
38
+ - `page_audit_start_scan` - Scan a single webpage with JavaScript rendering and receive pageId and reportId for tracking progress (consumes 10 API credits per scan)
39
+ - `page_audit_get_last_scans` - Get list of all one-page audit projects with latest scan results, SDO scores, and settings information (does not consume API credits)
40
+ - `page_audit_get_reports_for_page` - Get history of all audit reports for a specific page with status, SDO scores, error counts by priority, and progress tracking (does not consume API credits)
41
+ - `page_audit_get_results_report` - Get detailed audit results for a page with error categories grouped by type (meta tags, headings, content, multimedia, etc.) and complete issue breakdown showing priority levels and error counts (does not consume API credits)
42
+ - Added comprehensive validation schemas and TypeScript types for all one-page audit operations
43
+ - Added test coverage for all one-page audit methods (12 tests covering validation schemas)
44
+ - Updated documentation with one-page audit tools section and usage examples
45
+
3
46
  ## [1.1.0] - 2025-10-01
4
47
 
5
48
  ### Added
package/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Serpstat MCP Server
2
2
 
3
3
  [![npm version](https://badge.fury.io/js/@serpstat%2Fserpstat-mcp-server.svg)](https://badge.fury.io/js/@serpstat%2Fserpstat-mcp-server)
4
+ [![MCP Badge](https://lobehub.com/badge/mcp/serpstatglobal-serpstat-mcp-server-js)](https://lobehub.com/mcp/serpstatglobal-serpstat-mcp-server-js)
4
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
6
 
6
7
  A TypeScript server that integrates Serpstat SEO API with Anthropic's Model Context Protocol (MCP), enabling AI assistants like Claude to access comprehensive SEO data and analysis tools.
@@ -66,6 +67,7 @@ Set the following environment variables (can be in .env file):
66
67
  - `SERPSTAT_API_TOKEN` — Your Serpstat API token (required)
67
68
  - `SERPSTAT_API_URL` — Serpstat API URL (default: https://api.serpstat.com/v4)
68
69
  - `LOG_LEVEL` — Logging level: error, warn, info, debug (default: info)
70
+ - `SERPSTAT_ENABLED_CATEGORIES` — Filter tools by categories (optional, comma-separated, default: all categories enabled)
69
71
 
70
72
  ### Claude Desktop & Gemini CLI Configuration
71
73
 
@@ -104,13 +106,69 @@ For local development, use the full path:
104
106
  "command": "node",
105
107
  "args": ["/path/to/node_modules/serpstat-mcp-server/dist/index.js"],
106
108
  "env": {
107
- "SERPSTAT_API_TOKEN": "your_serpstat_api_token_here"
109
+ "SERPSTAT_API_TOKEN": "9184b2aa2328fd93bf002ed4c59e4e8e"
108
110
  }
109
111
  }
110
112
  }
111
113
  }
112
114
  ```
113
115
 
116
+ ### Filtering Tools by Category
117
+
118
+ You can limit which tools are available by specifying `SERPSTAT_ENABLED_CATEGORIES` environment variable. This is useful for:
119
+ - Reducing context window usage in AI assistants
120
+ - Focusing on specific SEO analysis areas
121
+ - Creating specialized configurations for different use cases
122
+
123
+ **Available categories:**
124
+ - `domain` - Domain analysis tools (domain info, competitors, domain keywords, etc.)
125
+ - `keywords` - Keyword research tools (keyword suggestions, search volume, difficulty, etc.)
126
+ - `backlinks` - Backlink analysis tools (backlink summary, anchors, referring domains, etc.)
127
+ - `url` - URL analysis tools (URL traffic, competitors, keywords, etc.)
128
+ - `projects` - Project management tools (create, list, delete projects)
129
+ - `credits` - Credits and usage monitoring tools
130
+ - `rt` - Rank tracking tools (rank history, SERP tracking, etc.)
131
+ - `audit` - Site audit tools (full site SEO audit, error reports, etc.)
132
+ - `page-audit` - One-page audit tools (single page analysis, on-page SEO, etc.)
133
+
134
+ **Example: Enable only keyword and domain tools**
135
+
136
+ ```json
137
+ {
138
+ "mcpServers": {
139
+ "serpstat": {
140
+ "command": "npx",
141
+ "args": ["-y", "@serpstat/serpstat-mcp-server"],
142
+ "env": {
143
+ "SERPSTAT_API_TOKEN": "YOUR_SERPSTAT_API_TOKEN_HERE",
144
+ "SERPSTAT_ENABLED_CATEGORIES": "keywords,domain"
145
+ }
146
+ }
147
+ }
148
+ }
149
+ ```
150
+
151
+ **Example: Enable only backlink analysis**
152
+
153
+ ```json
154
+ {
155
+ "mcpServers": {
156
+ "serpstat": {
157
+ "command": "npx",
158
+ "args": ["-y", "@serpstat/serpstat-mcp-server"],
159
+ "env": {
160
+ "SERPSTAT_API_TOKEN": "YOUR_SERPSTAT_API_TOKEN_HERE",
161
+ "SERPSTAT_ENABLED_CATEGORIES": "backlinks"
162
+ }
163
+ }
164
+ }
165
+ }
166
+ ```
167
+
168
+ **Default behavior (all tools enabled):**
169
+
170
+ If `SERPSTAT_ENABLED_CATEGORIES` is not specified or is empty, all tools are available (63 total tools across all categories).
171
+
114
172
  ## Usage Examples
115
173
 
116
174
  After installation and configuration in Claude Desktop, you can ask Claude:
@@ -252,6 +310,22 @@ After installation and configuration in Claude Desktop, you can ask Claude:
252
310
  | get_site_audit_pages_spec_errors | Get list of all pages where a specific error was detected with filtering by mode (all/new/solved) and pagination support *No cost* | reportId, compareReportId, projectId, errorName, mode, limit, offset |
253
311
  | get_site_audit_elements_with_issues | Get list of sub-elements (URLs) containing specific errors using CRC from get_site_audit_pages_spec_errors response *No cost* | reportId, projectId, errorName, crc, compareReportId (optional), mode, limit, offset |
254
312
 
313
+ ### One Page Audit Tools
314
+
315
+ | Tool Name | Description | Key Parameters |
316
+ |--------------------------------|----------------------------------------------------------------------------------------------------------------------------------|-----------------------------|
317
+ | page_audit_start_scan | Scan a single webpage with JavaScript rendering. Returns pageId and reportId for tracking. Use page_audit_get_reports_for_page to check progress via status and progress fields (10 credits per scan) | name, url, userAgent (recommended: 0 for Chrome), httpAuthLogin (optional), httpAuthPass (optional) |
318
+ | page_audit_get_last_scans | Get list of all one-page audit projects with pageId, url, name, status, lastActiveReport (latest scan results with SDO score), finishedReportCount, settings *No cost* | limit (optional, default 30), offset (optional, default 0), teamMemberId (optional) |
319
+ | page_audit_get_reports_for_page | Get history of all audit reports for a specific page with reportId, auditDate, status (1=in progress, 3=finalizing, 4=completed), SDO score (0-100), error counts, progress (0-100) *No cost* | pageId, limit (optional), offset (optional) |
320
+ | page_audit_get_results_report | Get detailed audit results with categories array (errors grouped by meta_tags, headings, content, multimedia, https, pagespeed_desktop/mobile, etc), hasAdditionRows flag for drill-down availability *No cost* | pageId (from page_audit_get_last_scans or page_audit_start_scan) |
321
+ | page_audit_rescan | Rescan existing one-page audit project and create new audit report. Returns reportId. Track progress via page_audit_get_reports_for_page (10 credits per rescan) | pageId, name, userAgent (recommended: 0 for Chrome), httpAuthLogin (optional), httpAuthPass (optional) |
322
+ | page_audit_stop | Stop active one-page audit scan. Returns boolean indicating success *No cost* | pageId |
323
+ | page_audit_delete | Remove one-page audit project from customer project list permanently. Returns boolean *No cost* | pageId |
324
+ | page_audit_get_report_by_categories | Get audit results by categories for specific report. Use compareReportId to see countNew (errors added) and countFixed (errors resolved) *No cost* | reportId, compareReportId (optional, enables change tracking) |
325
+ | page_audit_report_drill_down | Get detailed problematic elements list. ONLY works for errors with hasAdditionRows=true. Response varies by error type (e.g., image URLs for multimedia errors) *No cost* | reportId, error (must match error.key), mode (all/new/solved, optional), compareReportId (optional), page (optional), size (optional, max 1000) |
326
+ | page_audit_get_scan_names | Get list of all one-page audit project names with pageId, name, url, finishedReportCount for project discovery *No cost* | teamMemberId (optional) |
327
+ | page_audit_scan_logs | Get chronological log of scan events with message (event name), type (info/warning/error), params (event-specific data or []), created_at timestamp for debugging *No cost* | reportId (optional, all scans if not specified), page (optional, default 0), pageSize (optional, default 100) |
328
+
255
329
  ### Search Engines (se parameter)
256
330
 
257
331
  Common search engine codes:
@@ -0,0 +1,91 @@
1
+ import { BaseHandler } from './base.js';
2
+ import { MCPToolCall, MCPToolResponse } from '../types/mcp.js';
3
+ export declare class StartOnePageAuditScanHandler extends BaseHandler {
4
+ private onePageAuditService;
5
+ constructor();
6
+ getName(): string;
7
+ getDescription(): string;
8
+ getInputSchema(): object;
9
+ handle(call: MCPToolCall): Promise<MCPToolResponse>;
10
+ }
11
+ export declare class GetOnePageAuditsListHandler extends BaseHandler {
12
+ private onePageAuditService;
13
+ constructor();
14
+ getName(): string;
15
+ getDescription(): string;
16
+ getInputSchema(): object;
17
+ handle(call: MCPToolCall): Promise<MCPToolResponse>;
18
+ }
19
+ export declare class GetOnePageReportsListHandler extends BaseHandler {
20
+ private onePageAuditService;
21
+ constructor();
22
+ getName(): string;
23
+ getDescription(): string;
24
+ getInputSchema(): object;
25
+ handle(call: MCPToolCall): Promise<MCPToolResponse>;
26
+ }
27
+ export declare class GetOnePageAuditResultsHandler extends BaseHandler {
28
+ private onePageAuditService;
29
+ constructor();
30
+ getName(): string;
31
+ getDescription(): string;
32
+ getInputSchema(): object;
33
+ handle(call: MCPToolCall): Promise<MCPToolResponse>;
34
+ }
35
+ export declare class RescanOnePageAuditHandler extends BaseHandler {
36
+ private onePageAuditService;
37
+ constructor();
38
+ getName(): string;
39
+ getDescription(): string;
40
+ getInputSchema(): object;
41
+ handle(call: MCPToolCall): Promise<MCPToolResponse>;
42
+ }
43
+ export declare class StopOnePageAuditHandler extends BaseHandler {
44
+ private onePageAuditService;
45
+ constructor();
46
+ getName(): string;
47
+ getDescription(): string;
48
+ getInputSchema(): object;
49
+ handle(call: MCPToolCall): Promise<MCPToolResponse>;
50
+ }
51
+ export declare class RemoveOnePageAuditHandler extends BaseHandler {
52
+ private onePageAuditService;
53
+ constructor();
54
+ getName(): string;
55
+ getDescription(): string;
56
+ getInputSchema(): object;
57
+ handle(call: MCPToolCall): Promise<MCPToolResponse>;
58
+ }
59
+ export declare class GetOnePageAuditByCategoriesHandler extends BaseHandler {
60
+ private onePageAuditService;
61
+ constructor();
62
+ getName(): string;
63
+ getDescription(): string;
64
+ getInputSchema(): object;
65
+ handle(call: MCPToolCall): Promise<MCPToolResponse>;
66
+ }
67
+ export declare class GetOnePageAuditErrorRowsHandler extends BaseHandler {
68
+ private onePageAuditService;
69
+ constructor();
70
+ getName(): string;
71
+ getDescription(): string;
72
+ getInputSchema(): object;
73
+ handle(call: MCPToolCall): Promise<MCPToolResponse>;
74
+ }
75
+ export declare class GetOnePageAuditPageNamesHandler extends BaseHandler {
76
+ private onePageAuditService;
77
+ constructor();
78
+ getName(): string;
79
+ getDescription(): string;
80
+ getInputSchema(): object;
81
+ handle(call: MCPToolCall): Promise<MCPToolResponse>;
82
+ }
83
+ export declare class GetOnePageAuditUserLogHandler extends BaseHandler {
84
+ private onePageAuditService;
85
+ constructor();
86
+ getName(): string;
87
+ getDescription(): string;
88
+ getInputSchema(): object;
89
+ handle(call: MCPToolCall): Promise<MCPToolResponse>;
90
+ }
91
+ //# sourceMappingURL=one_page_audit_tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"one_page_audit_tools.d.ts","sourceRoot":"","sources":["../../src/handlers/one_page_audit_tools.ts"],"names":[],"mappings":"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"}