@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.
- package/.env.example +1 -1
- package/CHANGELOG.md +33 -0
- package/README.md +189 -107
- package/dist/handlers/backlinks_tools.d.ts +8 -0
- package/dist/handlers/backlinks_tools.d.ts.map +1 -1
- package/dist/handlers/backlinks_tools.js +86 -3
- package/dist/handlers/backlinks_tools.js.map +1 -1
- package/dist/handlers/base.js +1 -1
- package/dist/handlers/domain_base.d.ts +10 -0
- package/dist/handlers/domain_base.d.ts.map +1 -0
- package/dist/handlers/domain_base.js +33 -0
- package/dist/handlers/domain_base.js.map +1 -0
- package/dist/handlers/domain_tools.d.ts.map +1 -1
- package/dist/handlers/domain_tools.js +131 -137
- package/dist/handlers/domain_tools.js.map +1 -1
- package/dist/handlers/keyword_tools.d.ts +48 -0
- package/dist/handlers/keyword_tools.d.ts.map +1 -1
- package/dist/handlers/keyword_tools.js +626 -77
- package/dist/handlers/keyword_tools.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +8 -1
- package/dist/server.js.map +1 -1
- package/dist/services/backlinks_tools.d.ts +3 -2
- package/dist/services/backlinks_tools.d.ts.map +1 -1
- package/dist/services/backlinks_tools.js +17 -0
- package/dist/services/backlinks_tools.js.map +1 -1
- package/dist/services/base.js +2 -1
- package/dist/services/base.js.map +1 -1
- package/dist/services/keyword_tools.d.ts +8 -2
- package/dist/services/keyword_tools.d.ts.map +1 -1
- package/dist/services/keyword_tools.js +131 -0
- package/dist/services/keyword_tools.js.map +1 -1
- package/dist/types/serpstat.d.ts +156 -0
- package/dist/types/serpstat.d.ts.map +1 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +10 -5
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/constants.d.ts +58 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +113 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +6 -2
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/validation.d.ts +563 -22
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +321 -166
- package/dist/utils/validation.js.map +1 -1
- package/package.json +4 -3
package/.env.example
CHANGED
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
|
-
[](https://badge.fury.io/js/@serpstat%2Fserpstat-mcp-server)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
|
|
6
|
-
|
|
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
|
-
-
|
|
15
|
-
- Input parameter validation using Zod
|
|
16
|
-
- Event logging with Winston
|
|
17
|
-
- Flexible configuration
|
|
18
|
-
- Jest tests for parameter and logic
|
|
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
|
-
##
|
|
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
|
-
**
|
|
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": "
|
|
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
|
-
|
|
93
|
-
- "
|
|
94
|
-
- "
|
|
95
|
-
- "
|
|
96
|
-
|
|
97
|
-
|
|
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
|
|
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
|
|
247
|
-
|
|
248
|
-
|
|
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/
|
|
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
|
-
|
|
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;
|
|
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:
|
|
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:
|
|
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,
|
|
1
|
+
{"version":3,"file":"backlinks_tools.js","sourceRoot":"","sources":["../../src/handlers/backlinks_tools.ts"],"names":[],"mappings":"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"}
|
package/dist/handlers/base.js
CHANGED
|
@@ -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;
|
|
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"}
|