@serpstat/serpstat-mcp-server 1.0.2 → 1.0.4

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 (49) hide show
  1. package/.env.example +1 -1
  2. package/CHANGELOG.md +33 -0
  3. package/README.md +189 -107
  4. package/dist/handlers/backlinks_tools.d.ts +8 -0
  5. package/dist/handlers/backlinks_tools.d.ts.map +1 -1
  6. package/dist/handlers/backlinks_tools.js +86 -3
  7. package/dist/handlers/backlinks_tools.js.map +1 -1
  8. package/dist/handlers/base.js +1 -1
  9. package/dist/handlers/domain_base.d.ts +10 -0
  10. package/dist/handlers/domain_base.d.ts.map +1 -0
  11. package/dist/handlers/domain_base.js +33 -0
  12. package/dist/handlers/domain_base.js.map +1 -0
  13. package/dist/handlers/domain_tools.d.ts.map +1 -1
  14. package/dist/handlers/domain_tools.js +131 -137
  15. package/dist/handlers/domain_tools.js.map +1 -1
  16. package/dist/handlers/keyword_tools.d.ts +48 -0
  17. package/dist/handlers/keyword_tools.d.ts.map +1 -1
  18. package/dist/handlers/keyword_tools.js +626 -77
  19. package/dist/handlers/keyword_tools.js.map +1 -1
  20. package/dist/server.d.ts.map +1 -1
  21. package/dist/server.js +8 -1
  22. package/dist/server.js.map +1 -1
  23. package/dist/services/backlinks_tools.d.ts +3 -2
  24. package/dist/services/backlinks_tools.d.ts.map +1 -1
  25. package/dist/services/backlinks_tools.js +17 -0
  26. package/dist/services/backlinks_tools.js.map +1 -1
  27. package/dist/services/base.js +2 -1
  28. package/dist/services/base.js.map +1 -1
  29. package/dist/services/keyword_tools.d.ts +8 -2
  30. package/dist/services/keyword_tools.d.ts.map +1 -1
  31. package/dist/services/keyword_tools.js +131 -0
  32. package/dist/services/keyword_tools.js.map +1 -1
  33. package/dist/types/serpstat.d.ts +156 -0
  34. package/dist/types/serpstat.d.ts.map +1 -1
  35. package/dist/utils/config.d.ts.map +1 -1
  36. package/dist/utils/config.js +10 -5
  37. package/dist/utils/config.js.map +1 -1
  38. package/dist/utils/constants.d.ts +58 -0
  39. package/dist/utils/constants.d.ts.map +1 -0
  40. package/dist/utils/constants.js +113 -0
  41. package/dist/utils/constants.js.map +1 -0
  42. package/dist/utils/logger.d.ts.map +1 -1
  43. package/dist/utils/logger.js +6 -2
  44. package/dist/utils/logger.js.map +1 -1
  45. package/dist/utils/validation.d.ts +563 -22
  46. package/dist/utils/validation.d.ts.map +1 -1
  47. package/dist/utils/validation.js +321 -166
  48. package/dist/utils/validation.js.map +1 -1
  49. package/package.json +4 -3
package/.env.example CHANGED
@@ -7,4 +7,4 @@ LOG_LEVEL=info
7
7
 
8
8
  # Request Configuration
9
9
  MAX_RETRIES=3
10
- REQUEST_TIMEOUT=30000
10
+ REQUEST_TIMEOUT=60000
package/CHANGELOG.md ADDED
@@ -0,0 +1,33 @@
1
+ # Changelog
2
+
3
+ ## [1.0.4] - 2025-09-16
4
+ ### Added
5
+ - Added `get_keyword_full_top` method to show Google's top-100 search results for analyzed keywords
6
+ - Added `get_keywords_info` method to get keyword overview with volume, CPC, competition level, difficulty, and additional metrics for multiple keywords
7
+ - Added `get_keyword_suggestions` method to show search suggestions for keywords found by full-text search with geographic names information
8
+ - Added `get_keyword_top_urls` method to return website pages that rank for the largest amount of analyzed keyword variations with highest traffic
9
+ - Added `get_keyword_competitors` method to list domains that rank for the given keyword in Google top-20 results with detailed competitor analysis
10
+ - Added `get_keyword_top` method to show Google's top-100 search results for analyzed keyword with position, URL, domain and SERP features (deprecated method)
11
+ - Added `get_anchors` method to analyze anchor text distribution in backlinks with metrics on referring domains, total backlinks, and nofollow counts
12
+
13
+ ## [1.0.3] - 2025-09-09
14
+ ### Fixed
15
+ - Error then LLM's is unable to manage `size` parameters in query.
16
+
17
+ ## [1.0.2] - 2025-08-28
18
+ - Added new API methods for domain and keyword analysis.
19
+ - Improved error handling.
20
+
21
+ ### Fixed
22
+ - Fixed input validation errors.
23
+
24
+ ## [1.0.1] - 2024-08-24
25
+ ### Added
26
+ - Added logging support via Winston.
27
+ - Improved project structure.
28
+
29
+ ## [1.0.0] - 2024-08-23
30
+ ### Added
31
+ - Initial release: basic implementation of MCP Server for Serpstat API.
32
+ - Core features for SEO analysis, working with domains, keywords, and backlinks.
33
+
package/README.md CHANGED
@@ -1,26 +1,47 @@
1
1
  # Serpstat MCP Server
2
2
 
3
- [![npm version](https://badge.fury.io/js/serpstat-mcp-server.svg)](https://badge.fury.io/js/serpstat-mcp-server)
3
+ [![npm version](https://badge.fury.io/js/@serpstat%2Fserpstat-mcp-server.svg)](https://badge.fury.io/js/@serpstat%2Fserpstat-mcp-server)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
5
 
6
- Server for integrating Serpstat with Model Context Protocol (MCP).
6
+ 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.
7
+
8
+ ## Table of Contents
9
+
10
+ - [About MCP](#about-mcp)
11
+ - [Prerequisites](#prerequisites)
12
+ - [Installation](#installation)
13
+ - [Configuration](#configuration)
14
+ - [Usage Examples](#usage-examples)
15
+ - [MCP Tools](#mcp-tools)
16
+ - [Troubleshooting](#troubleshooting)
17
+ - [Development](#development)
18
+ - [API Rate Limits](#api-rate-limits)
19
+ - [Contributing](#contributing)
20
+ - [Support](#support)
21
+ - [License](#license)
22
+
23
+ ## About MCP
24
+
25
+ The Model Context Protocol (MCP) is an open standard developed by Anthropic that enables AI assistants to securely connect to external data sources and tools. This server implements MCP to provide Claude and other compatible AI assistants with access to Serpstat's powerful SEO analytics API.
7
26
 
8
27
  ## Description
9
28
 
10
- This project implements a TypeScript server that provides an API interface for working with Serpstat tools via the MCP protocol. The server supports request handling, parameter validation, logging, and working with multiple tools.
29
+ This project implements a TypeScript server that provides an API interface for working with Serpstat tools via the MCP protocol. The server supports request handling, parameter validation, logging, and working with multiple SEO analysis tools.
11
30
 
12
31
  ## Features
13
32
 
14
- - Retrieve domain information via Serpstat API
15
- - Input parameter validation using Zod
16
- - Event logging with Winston
17
- - Flexible configuration via environment variables
18
- - Jest tests for parameter and logic validation
33
+ - 🔍 **Comprehensive SEO Analysis**: Access domain info, keyword research, competitor analysis, and backlink data
34
+ - ✅ **Input Validation**: Robust parameter validation using Zod schemas
35
+ - 📊 **Event Logging**: Detailed logging with Winston for debugging and monitoring
36
+ - ⚙️ **Flexible Configuration**: Environment-based configuration with sensible defaults
37
+ - 🧪 **Well Tested**: Jest tests for parameter validation and business logic
38
+ - 🚀 **TypeScript**: Full type safety throughout the codebase
19
39
 
20
- ## Requirements
40
+ ## Prerequisites
21
41
 
22
- - Node.js 18.0.0 or higher
23
- - Valid Serpstat API token
42
+ - **Node.js 18.0.0 or higher** ([Download Node.js](https://nodejs.org/en/download/current))
43
+ - **Valid Serpstat API token** (get one from [Serpstat](https://serpstat.com/api/))
44
+ - **Compatible AI Assistant**: Claude Desktop, Gemini CLI, or any MCP-compatible client
24
45
 
25
46
  ## Installation
26
47
 
@@ -46,12 +67,17 @@ Set the following environment variables (can be in .env file):
46
67
  - `SERPSTAT_API_URL` — Serpstat API URL (default: https://api.serpstat.com/v4)
47
68
  - `LOG_LEVEL` — Logging level: error, warn, info, debug (default: info)
48
69
 
49
- ### Claude Desktop Configuration
70
+ ### Claude Desktop & Gemini CLI Configuration
50
71
 
51
72
  Add to your Claude Desktop config file:
52
73
 
53
- **MacOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
74
+ **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
54
75
  **Windows**: `%APPDATA%/Claude/claude_desktop_config.json`
76
+ **Linux**: `~/.config/Claude/claude_desktop_config.json`
77
+
78
+ Add to your Gemini CLI config:
79
+
80
+ **Linux**: `~/.gemini/settings.json`
55
81
 
56
82
  ```json
57
83
  {
@@ -60,7 +86,7 @@ Add to your Claude Desktop config file:
60
86
  "command": "npx",
61
87
  "args": ["-y", "@serpstat/serpstat-mcp-server"],
62
88
  "env": {
63
- "SERPSTAT_API_TOKEN": "XXXXXXXXXXXPLACETOKENHEREXXXXXXXXXXXXX",
89
+ "SERPSTAT_API_TOKEN": "YOUR_SERPSTAT_API_TOKEN_HERE",
64
90
  "LANG": "en_US.UTF-8",
65
91
  "LC_ALL": "en_US.UTF-8"
66
92
  }
@@ -89,12 +115,119 @@ For local development, use the full path:
89
115
 
90
116
  After installation and configuration in Claude Desktop, you can ask Claude:
91
117
 
92
- - "Show me domain info for example.com"
93
- - "Find competitors for my-site.com in Google US"
94
- - "Get top 50 keywords that example.com ranks for"
95
- - "Analyze backlinks summary for domain.com"
96
- - "Find related keywords to 'digital marketing'"
97
- - "Get unique keywords for domain1.com vs domain2.com"
118
+ ### Domain Analysis
119
+ - "Show me domain info for **example.com**"
120
+ - "Find competitors for **my-site.com** in Google US"
121
+ - "Get top 50 keywords that **example.com** ranks for"
122
+
123
+ ### Keyword Research
124
+ - "Find related keywords to **'digital marketing'**"
125
+ - "Get keyword suggestions for **'iphone 15'** excluding **'rent'** keywords"
126
+ - "Get comprehensive keyword data for **[ `iphone`, `samsung`, `googel pixel` ]** including search volume, CPC, and difficulty"
127
+
128
+ ### Competitor Analysis
129
+ - "Show me competitor domains ranking for **`pizza delivery`** keyword with visibility metrics"
130
+ - "Get top search results for **`laptop computers`** keyword showing positions, domains and SERP features"
131
+ - "Get unique keywords for **domain1.com** vs **domain2.com**"
132
+
133
+ ### Backlink Analysis
134
+ - "Analyze backlinks summary for **domain.com**"
135
+ - "Get anchor text analysis for **domain.com** backlinks"
136
+
137
+ ## MCP Tools
138
+
139
+ | Tool Name | Description | Key Parameters |
140
+ |--------------------------|----------------------------------------------------------------------------------------------------------------|---------------------------------|
141
+ | get_domains_info | Get SEO information for multiple domains | domains, se, filters |
142
+ | get_domain_competitors | Get list of competitor domains | domain, se, size, filters |
143
+ | get_domain_keywords | Get keywords that domain ranks for | domain, se, page, size |
144
+ | get_domain_urls | Get URLs within a domain and their keyword counts | domain, se, page, size |
145
+ | get_domain_regions_count | Get keyword count by region for a domain | domain, sort, order |
146
+ | get_domain_uniq_keywords | Get unique keywords for two domains not ranked by a third domain | se, domains, minusDomain |
147
+ | get_keywords | Get related organic keywords for a given keyword | keyword, se, filters |
148
+ | get_keyword_suggestions | Get search suggestions for a keyword using full-text search with geographic names info | keyword, se, filters |
149
+ | get_keywords_info | Get keyword overview with volume, CPC, competition, difficulty, and SERP features | keywords, se, withIntents |
150
+ | get_keyword_full_top | Get Google's top-100 search results for analyzed keywords | keyword, se, size |
151
+ | get_keyword_top_urls | Get website pages that rank for the largest amount of analyzed keyword variations with highest traffic | keyword, se, page, page_size |
152
+ | get_keyword_competitors | Get domains that rank for the given keyword in Google top-20 results with competitor analysis | keyword, se, filters, sort |
153
+ | get_keyword_top | Get Google's top-100 search results for the analyzed keyword with position, URL, domain and SERP features | keyword, se, filters, size |
154
+ | get_backlinks_summary | Get comprehensive backlinks summary with referring domains, quality metrics, and changes | domain, subdomain |
155
+ | get_anchors | Get anchor text analysis for backlinks with metrics on referring domains, total backlinks, and nofollow counts | query, searchType, anchor, sort |
156
+ | get_related_keywords | Get semantically related keywords with frequency, CPC, competition, and difficulty data | keyword, se, filters, sort |
157
+
158
+ ### Search Engines (se parameter)
159
+
160
+ Common search engine codes:
161
+ - `g_us` - Google USA
162
+ - `g_uk` - Google United Kingdom
163
+ - `g_ca` - Google Canada
164
+ - `g_au` - Google Australia
165
+ - `g_de` - Germany
166
+ - `g_fr` - Google France
167
+ - `g_es` - Google Spain
168
+ - `g_it` - Google Italy
169
+ - `g_pl` - Google Poland
170
+ - `g_ua` - Google Ukraine
171
+
172
+ See a full list of [Search Engines Short Names](https://api-docs.serpstat.com/docs/serpstat-public-api/ba97ni814ao9p-search-engine-short-names)
173
+
174
+ ## Troubleshooting
175
+
176
+ ### Common Issues
177
+
178
+ **"Command not found: serpstat-mcp-server"**
179
+ - Make sure you installed the package globally with `-g` flag
180
+ - Verify your PATH includes npm global binaries: `npm config get prefix`
181
+ - Try reinstalling: `npm uninstall -g @serpstat/serpstat-mcp-server && npm install -g @serpstat/serpstat-mcp-server`
182
+
183
+ **"API token error" or "Unauthorized"**
184
+ - Check that `SERPSTAT_API_TOKEN` is set correctly in your environment
185
+ - Verify your token is valid and active in your Serpstat account
186
+ - Ensure your token has sufficient API credits and permissions
187
+
188
+ **"Module not found" errors**
189
+ - Make sure all dependencies are installed: `npm install`
190
+ - Try rebuilding: `npm run clean && npm run build`
191
+
192
+ **Claude Desktop doesn't recognize the server**
193
+ - Restart Claude Desktop after configuration changes
194
+ - Check the config file path and JSON syntax
195
+ - Verify the server starts correctly: run `serpstat-mcp-server` in terminal
196
+
197
+ **"Can't find npx"**
198
+ - You need to install Node.js - [download and install Node.js](https://nodejs.org/en/download/current)
199
+
200
+ **Rate limit errors**
201
+ - Most Serpstat plans have 1 RPS (1 request per second) limit
202
+ - Wait between requests or contact Serpstat support for higher limits
203
+ - Check your API usage in the Serpstat dashboard
204
+
205
+ ### Debug Mode
206
+
207
+ Enable debug logging by setting:
208
+
209
+ ```bash
210
+ export LOG_LEVEL=debug
211
+ ```
212
+
213
+ Or in your Claude Desktop config:
214
+
215
+ ```json
216
+ {
217
+ "mcpServers": {
218
+ "serpstat": {
219
+ "command": "npx",
220
+ "args": ["-y", "@serpstat/serpstat-mcp-server"],
221
+ "env": {
222
+ "SERPSTAT_API_TOKEN": "YOUR_TOKEN_HERE",
223
+ "LANG": "en_US.UTF-8",
224
+ "LC_ALL": "en_US.UTF-8",
225
+ "LOG_LEVEL": "debug"
226
+ }
227
+ }
228
+ }
229
+ }
230
+ ```
98
231
 
99
232
  ## Development
100
233
 
@@ -102,8 +235,8 @@ After installation and configuration in Claude Desktop, you can ask Claude:
102
235
 
103
236
  1. Clone the repository:
104
237
  ```bash
105
- git clone <repository-url>
106
- cd serpstat-mcp-server
238
+ git clone git@github.com:SerpstatGlobal/serpstat-mcp-server-js.git
239
+ cd serpstat-mcp-server-js
107
240
  ```
108
241
 
109
242
  2. Install dependencies:
@@ -135,10 +268,23 @@ After installation and configuration in Claude Desktop, you can ask Claude:
135
268
  ### Testing
136
269
 
137
270
  To run tests:
271
+
138
272
  ```bash
139
273
  npm test
140
274
  ```
141
275
 
276
+ Run specific test file:
277
+
278
+ ```bash
279
+ npx jest src/__tests__/services/keyword_tools.test.ts
280
+ ```
281
+
282
+ Run specific test by name:
283
+
284
+ ```bash
285
+ npx jest --testNamePattern="methodName"
286
+ ```
287
+
142
288
  ### Scripts
143
289
 
144
290
  - `npm run build` — Compile TypeScript sources to JavaScript (output in `dist/`)
@@ -167,86 +313,11 @@ serpstat-mcp-server/
167
313
  └── .env.example
168
314
  ```
169
315
 
170
- ## MCP Tools
171
-
172
- | Tool Name | Description | Key Parameters |
173
- |---------------------------|-----------------------------------------------------------------------------------------------|-----------------------------|
174
- | get_domains_info | Get SEO information for multiple domains | domains, se, filters |
175
- | get_domain_competitors | Get list of competitor domains | domain, se, size, filters |
176
- | get_domain_keywords | Get keywords that domain ranks for | domain, se, page, size |
177
- | get_domain_urls | Get URLs within a domain and their keyword counts | domain, se, page, size |
178
- | get_domain_regions_count | Get keyword count by region for a domain | domain, sort, order |
179
- | get_domain_uniq_keywords | Get unique keywords for two domains not ranked by a third domain | se, domains, minusDomain |
180
- | get_keywords | Get related organic keywords for a given keyword | keyword, se, filters |
181
- | get_backlinks_summary | Get comprehensive backlinks summary with referring domains, quality metrics, and changes | domain, subdomain |
182
- | get_related_keywords | Get semantically related keywords with frequency, CPC, competition, and difficulty data | keyword, se, filters, sort |
183
-
184
- ### Search Engines (se parameter)
185
-
186
- Common search engine codes:
187
- - `g_us` - Google US
188
- - `g_uk` - Google UK
189
- - `g_ca` - Google Canada
190
- - `g_au` - Google Australia
191
- - `g_de` - Google Germany
192
- - `g_fr` - Google France
193
- - `g_es` - Google Spain
194
- - `g_it` - Google Italy
195
-
196
-
197
- ## Troubleshooting
198
-
199
- ### Common Issues
200
-
201
- **"Command not found: serpstat-mcp-server"**
202
- - Make sure you installed the package globally with `-g` flag
203
- - Verify your PATH includes npm global binaries: `npm config get prefix`
204
- - Try reinstalling: `npm uninstall -g serpstat-mcp-server && npm install -g serpstat-mcp-server`
205
-
206
- **"API token error" or "Unauthorized"**
207
- - Check that `SERPSTAT_API_TOKEN` is set correctly in your environment
208
- - Verify your token is valid and active in your Serpstat account
209
- - Ensure your token has sufficient API credits and permissions
210
-
211
- **"Module not found" errors**
212
- - Make sure all dependencies are installed: `npm install`
213
- - Try rebuilding: `npm run clean && npm run build`
214
-
215
- **Claude Desktop doesn't recognize the server**
216
- - Restart Claude Desktop after configuration changes
217
- - Check the config file path and JSON syntax
218
- - Verify the server starts correctly: run `serpstat-mcp-server` in terminal
219
-
220
- ### Debug Mode
221
-
222
- Enable debug logging by setting:
223
- ```bash
224
- export LOG_LEVEL=debug
225
- ```
226
-
227
- Or in your Claude Desktop config for linux:
228
- ```json
229
- {
230
- "mcpServers": {
231
- "serpstat": {
232
- "command": "npx",
233
- "args": ["-y", "@serpstat/serpstat-mcp-server"],
234
- "env": {
235
- "SERPSTAT_API_TOKEN": "XXXXXXXXXXXPLACETOKENHEREXXXXXXXXXXXXX",
236
- "LANG": "en_US.UTF-8",
237
- "LC_ALL": "en_US.UTF-8"
238
- }
239
- }
240
- }
241
- }
242
- ```
243
-
244
316
  ## API Rate Limits
245
317
 
246
- Serpstat API has rate limits. The server includes:
247
- - Automatic retry logic with exponential backoff
248
- - Request queuing to prevent rate limit violations
249
- - Detailed error messages for quota exceeded scenarios
318
+ By default, most Serpstat plans have **1 RPS (1 request per second)** - this is sufficient for most tasks. If you need higher throughput, contact Serpstat support to discuss plan upgrades.
319
+
320
+ **Important**: The server respects rate limits automatically. If you encounter rate limit errors, wait before making additional requests.
250
321
 
251
322
  ## Contributing
252
323
 
@@ -267,6 +338,7 @@ We welcome contributions! Please follow these steps:
267
338
  - Add tests for new features
268
339
  - Update documentation as needed
269
340
  - Use conventional commit messages
341
+ - Ensure all linting passes: `npm run lint`
270
342
 
271
343
  ## Changelog
272
344
 
@@ -274,15 +346,25 @@ See [CHANGELOG.md](CHANGELOG.md) for details about changes in each version.
274
346
 
275
347
  ## Support
276
348
 
277
- - 📖 [Serpstat API Documentation](https://serpstat.com/api/)
278
- - 🐛 [Report Issues](https://github.com/your-username/serpstat-mcp-server/issues)
279
- - 💬 [Discussions](https://github.com/your-username/serpstat-mcp-server/discussions)
280
-
281
- ## License
349
+ - 📖 [Serpstat API Documentation](https://api-docs.serpstat.com/docs/serpstat-public-api/jenasqbwtxdlr-introduction-to-serpstat-api)
350
+ - 🐛 [Report Issues](https://github.com/SerpstatGlobal/serpstat-mcp-server-js/issues)
282
351
 
283
- This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
352
+ The most effective way to receive support from Serpstat is to use their live chat feature directly within the platform. Alternatively, you can email them at support@serpstat.com.
284
353
 
285
354
  ## Acknowledgments
286
355
 
287
356
  - [Model Context Protocol](https://github.com/modelcontextprotocol) by Anthropic
288
- - [Serpstat API](https://serpstat.com/api/) for SEO data services
357
+ - [Serpstat API](https://serpstat.com/api/) for SEO data services
358
+
359
+ ## License
360
+
361
+ MIT License
362
+
363
+ This project is under MIT license, which means you can copy, use, modify, and even sell any part of this code without any hassle.
364
+
365
+ - See the [LICENSE](LICENSE) file for details
366
+ - Want to grab a chunk for your project? Go for it
367
+ - Want to rewrite half of it and ship a commercial product? Be my guest
368
+ - The only thing you need to do is not delete the copyright and the license itself from the files you take, and remember the Serpstat team with a kind word when you get that paycheck
369
+
370
+ _With love, Serpstat R&D Team_
@@ -8,4 +8,12 @@ export declare class BacklinksSummaryHandler extends BaseHandler {
8
8
  getInputSchema(): object;
9
9
  handle(call: MCPToolCall): Promise<MCPToolResponse>;
10
10
  }
11
+ export declare class GetAnchorsHandler extends BaseHandler {
12
+ private backlinksService;
13
+ constructor();
14
+ getName(): string;
15
+ getDescription(): string;
16
+ getInputSchema(): object;
17
+ handle(call: MCPToolCall): Promise<MCPToolResponse>;
18
+ }
11
19
  //# sourceMappingURL=backlinks_tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"backlinks_tools.d.ts","sourceRoot":"","sources":["../../src/handlers/backlinks_tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAK/D,qBAAa,uBAAwB,SAAQ,WAAW;IACpD,OAAO,CAAC,gBAAgB,CAAmB;;IAQ3C,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAuBlB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAY5D"}
1
+ {"version":3,"file":"backlinks_tools.d.ts","sourceRoot":"","sources":["../../src/handlers/backlinks_tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAM/D,qBAAa,uBAAwB,SAAQ,WAAW;IACpD,OAAO,CAAC,gBAAgB,CAAmB;;IAQ3C,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAuBlB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAY5D;AAED,qBAAa,iBAAkB,SAAQ,WAAW;IAC9C,OAAO,CAAC,gBAAgB,CAAmB;;IAQ3C,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAuDlB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAY5D"}
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BacklinksSummaryHandler = void 0;
3
+ exports.GetAnchorsHandler = exports.BacklinksSummaryHandler = void 0;
4
4
  const base_js_1 = require("./base.js");
5
5
  const backlinks_tools_js_1 = require("../services/backlinks_tools.js");
6
6
  const validation_js_1 = require("../utils/validation.js");
7
7
  const config_js_1 = require("../utils/config.js");
8
8
  const zod_1 = require("zod");
9
+ const constants_js_1 = require("../utils/constants.js");
9
10
  class BacklinksSummaryHandler extends base_js_1.BaseHandler {
10
11
  backlinksService;
11
12
  constructor() {
@@ -25,14 +26,14 @@ class BacklinksSummaryHandler extends base_js_1.BaseHandler {
25
26
  properties: {
26
27
  query: {
27
28
  type: "string",
28
- pattern: "^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$",
29
+ pattern: constants_js_1.DOMAIN_NAME_REGEX,
29
30
  minLength: 4,
30
31
  maxLength: 253,
31
32
  description: "Domain or subdomain to analyze"
32
33
  },
33
34
  searchType: {
34
35
  type: "string",
35
- enum: ["domain", "domain_with_subdomains"],
36
+ enum: constants_js_1.SEARCH_TYPES,
36
37
  default: "domain",
37
38
  description: "Type of search query"
38
39
  }
@@ -56,4 +57,86 @@ class BacklinksSummaryHandler extends base_js_1.BaseHandler {
56
57
  }
57
58
  }
58
59
  exports.BacklinksSummaryHandler = BacklinksSummaryHandler;
60
+ class GetAnchorsHandler extends base_js_1.BaseHandler {
61
+ backlinksService;
62
+ constructor() {
63
+ super();
64
+ const config = (0, config_js_1.loadConfig)();
65
+ this.backlinksService = new backlinks_tools_js_1.BacklinksService(config);
66
+ }
67
+ getName() {
68
+ return 'get_anchors';
69
+ }
70
+ getDescription() {
71
+ return 'Get anchor text analysis for backlinks using Serpstat API. Returns anchor texts used in backlinks, with metrics including referring domains, total backlinks, and nofollow counts for domain or URL analysis.';
72
+ }
73
+ getInputSchema() {
74
+ return {
75
+ type: "object",
76
+ properties: {
77
+ query: {
78
+ type: "string",
79
+ pattern: constants_js_1.DOMAIN_NAME_REGEX,
80
+ minLength: 4,
81
+ maxLength: 253,
82
+ description: "Domain, subdomain, or URL to analyze"
83
+ },
84
+ searchType: {
85
+ type: "string",
86
+ enum: constants_js_1.SEARCH_TYPES_URL,
87
+ description: "Type of search query"
88
+ },
89
+ anchor: {
90
+ type: "string",
91
+ description: "Filter by specific anchor text"
92
+ },
93
+ count: {
94
+ type: "string",
95
+ description: "Number of words in anchor text filter"
96
+ },
97
+ sort: {
98
+ type: "string",
99
+ enum: constants_js_1.ANCHORS_SORT_FIELDS,
100
+ default: "lastupdate",
101
+ description: "Sort results by field (total, refDomains, nofollow, anchor, lastupdate)"
102
+ },
103
+ order: {
104
+ type: "string",
105
+ enum: constants_js_1.SORT_ORDER,
106
+ default: "desc",
107
+ description: "Sort order (asc, desc)"
108
+ },
109
+ page: {
110
+ type: "integer",
111
+ minimum: constants_js_1.MIN_PAGE,
112
+ default: 1,
113
+ description: "Page number for pagination"
114
+ },
115
+ size: {
116
+ type: "integer",
117
+ minimum: 1,
118
+ maximum: constants_js_1.MAX_PAGE_SIZE,
119
+ default: constants_js_1.DEFAULT_PAGE_SIZE,
120
+ description: "Number of results per page"
121
+ }
122
+ },
123
+ required: ["query", "searchType"],
124
+ additionalProperties: false
125
+ };
126
+ }
127
+ async handle(call) {
128
+ try {
129
+ const params = validation_js_1.anchorsSchema.parse(call.arguments);
130
+ const result = await this.backlinksService.getAnchors(params);
131
+ return this.createSuccessResponse(result);
132
+ }
133
+ catch (error) {
134
+ if (error instanceof zod_1.z.ZodError) {
135
+ return this.createErrorResponse(new Error(`Invalid parameters: ${error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ')}`));
136
+ }
137
+ return this.createErrorResponse(error);
138
+ }
139
+ }
140
+ }
141
+ exports.GetAnchorsHandler = GetAnchorsHandler;
59
142
  //# sourceMappingURL=backlinks_tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"backlinks_tools.js","sourceRoot":"","sources":["../../src/handlers/backlinks_tools.ts"],"names":[],"mappings":";;;AAAA,uCAAwC;AACxC,uEAAkE;AAElE,0DAAwF;AACxF,kDAAgD;AAChD,6BAAwB;AAExB,MAAa,uBAAwB,SAAQ,qBAAW;IAC5C,gBAAgB,CAAmB;IAE3C;QACI,KAAK,EAAE,CAAC;QACR,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,qCAAgB,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;IAED,OAAO;QACH,OAAO,uBAAuB,CAAC;IACnC,CAAC;IAED,cAAc;QACV,OAAO,6KAA6K,CAAC;IACzL,CAAC;IAED,cAAc;QACV,OAAO;YACH,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,KAAK,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,iEAAiE;oBAC1E,SAAS,EAAE,CAAC;oBACZ,SAAS,EAAE,GAAG;oBACd,WAAW,EAAE,gCAAgC;iBAChD;gBACD,UAAU,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,wBAAwB,CAAC;oBAC1C,OAAO,EAAE,QAAQ;oBACjB,WAAW,EAAE,sBAAsB;iBACtC;aACJ;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;YACnB,oBAAoB,EAAE,KAAK;SAC9B,CAAC;IACN,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAiB;QAC1B,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,sCAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAA2B,CAAC;YACtF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,OAAC,CAAC,QAAQ,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,uBAAuB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/I,CAAC;YACD,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAc,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;CACJ;AApDD,0DAoDC"}
1
+ {"version":3,"file":"backlinks_tools.js","sourceRoot":"","sources":["../../src/handlers/backlinks_tools.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ class BaseHandler {
7
7
  return {
8
8
  content: [{
9
9
  type: "text",
10
- text: JSON.stringify(data, null, 2)
10
+ text: JSON.stringify(data, null, 1)
11
11
  }]
12
12
  };
13
13
  }
@@ -0,0 +1,10 @@
1
+ import { BaseHandler } from './base.js';
2
+ import { DomainService } from '../services/domain_tools.js';
3
+ import { z } from 'zod';
4
+ import { MCPToolCall, MCPToolResponse } from '../types/mcp.js';
5
+ export declare abstract class DomainBaseHandler extends BaseHandler {
6
+ protected domainService: DomainService;
7
+ constructor();
8
+ protected safeHandle<T>(schema: z.ZodTypeAny, call: MCPToolCall, handler: (params: T) => Promise<any>, defaultSize?: number): Promise<MCPToolResponse>;
9
+ }
10
+ //# sourceMappingURL=domain_base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain_base.d.ts","sourceRoot":"","sources":["../../src/handlers/domain_base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE/D,8BAAsB,iBAAkB,SAAQ,WAAW;IACvD,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;;cAevB,UAAU,CAAC,CAAC,EACxB,MAAM,EAAE,CAAC,CAAC,UAAU,EACpB,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,EACpC,WAAW,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,eAAe,CAAC;CAe9B"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DomainBaseHandler = void 0;
4
+ const base_js_1 = require("./base.js");
5
+ const domain_tools_js_1 = require("../services/domain_tools.js");
6
+ const config_js_1 = require("../utils/config.js");
7
+ const zod_1 = require("zod");
8
+ class DomainBaseHandler extends base_js_1.BaseHandler {
9
+ domainService;
10
+ constructor() {
11
+ super();
12
+ const config = (0, config_js_1.loadConfig)();
13
+ this.domainService = new domain_tools_js_1.DomainService(config);
14
+ }
15
+ async safeHandle(schema, call, handler, defaultSize) {
16
+ try {
17
+ const params = schema.parse(call.arguments);
18
+ if (defaultSize !== undefined && params.size === undefined) {
19
+ params.size = defaultSize;
20
+ }
21
+ const result = await handler(params);
22
+ return this.createSuccessResponse(result);
23
+ }
24
+ catch (error) {
25
+ if (error instanceof zod_1.z.ZodError) {
26
+ return this.createErrorResponse(new Error(`Invalid parameters: ${error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ')}`));
27
+ }
28
+ return this.createErrorResponse(error);
29
+ }
30
+ }
31
+ }
32
+ exports.DomainBaseHandler = DomainBaseHandler;
33
+ //# sourceMappingURL=domain_base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain_base.js","sourceRoot":"","sources":["../../src/handlers/domain_base.ts"],"names":[],"mappings":";;;AAAA,uCAAwC;AACxC,iEAA4D;AAC5D,kDAAgD;AAChD,6BAAwB;AAGxB,MAAsB,iBAAkB,SAAQ,qBAAW;IAC7C,aAAa,CAAgB;IAEvC;QACI,KAAK,EAAE,CAAC;QACR,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,+BAAa,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IASS,KAAK,CAAC,UAAU,CACtB,MAAoB,EACpB,IAAiB,EACjB,OAAoC,EACpC,WAAoB;QAEpB,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAM,CAAC;YACjD,IAAI,WAAW,KAAK,SAAS,IAAK,MAAc,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACjE,MAAc,CAAC,IAAI,GAAG,WAAW,CAAC;YACvC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,OAAC,CAAC,QAAQ,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,uBAAuB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/I,CAAC;YACD,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAc,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;CACJ;AApCD,8CAoCC"}
@@ -1 +1 @@
1
- {"version":3,"file":"domain_tools.d.ts","sourceRoot":"","sources":["../../src/handlers/domain_tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAK/D,qBAAa,kBAAmB,SAAQ,WAAW;IAC/C,OAAO,CAAC,aAAa,CAAgB;;IAQrC,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IA4ClB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAY5D;AAED,qBAAa,kBAAmB,SAAQ,WAAW;IAC/C,OAAO,CAAC,aAAa,CAAgB;;IAQrC,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAqDlB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAY5D;AAED,qBAAa,qBAAsB,SAAQ,WAAW;IAClD,OAAO,CAAC,aAAa,CAAgB;;IAQrC,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IA6FlB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAY5D;AAED,qBAAa,iBAAkB,SAAQ,WAAW;IAC9C,OAAO,CAAC,aAAa,CAAgB;;IAQrC,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IA+ClB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAY5D;AAED,qBAAa,yBAA0B,SAAQ,WAAW;IACtD,OAAO,CAAC,aAAa,CAAgB;;IAQrC,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAMxB,cAAc,IAAI,MAAM;IA6BlB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAY5D;AAED,qBAAa,4BAA6B,SAAQ,WAAW;IACzD,OAAO,CAAC,aAAa,CAAgB;;IAQrC,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAmGlB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAY5D"}
1
+ {"version":3,"file":"domain_tools.d.ts","sourceRoot":"","sources":["../../src/handlers/domain_tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAwC/D,qBAAa,kBAAmB,SAAQ,WAAW;IAC/C,OAAO,CAAC,aAAa,CAAgB;;IAQrC,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAwClB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAY5D;AAED,qBAAa,kBAAmB,SAAQ,WAAW;IAC/C,OAAO,CAAC,aAAa,CAAgB;;IAQrC,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAiDlB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAgB5D;AAED,qBAAa,qBAAsB,SAAQ,WAAW;IAClD,OAAO,CAAC,aAAa,CAAgB;;IAQrC,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAyFlB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAe5D;AAED,qBAAa,iBAAkB,SAAQ,WAAW;IAC9C,OAAO,CAAC,aAAa,CAAgB;;IAQrC,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IA2ClB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAe5D;AAED,qBAAa,yBAA0B,SAAQ,WAAW;IACtD,OAAO,CAAC,aAAa,CAAgB;;IAQrC,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAKxB,cAAc,IAAI,MAAM;IA6BlB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAY5D;AAED,qBAAa,4BAA6B,SAAQ,WAAW;IACzD,OAAO,CAAC,aAAa,CAAgB;;IAQrC,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAiGlB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAe5D"}