Skip to content

Commit 57be8e9

Browse files
New: FetchSERP MCP server implementation (#65)
1 parent 1559cbe commit 57be8e9

17 files changed

+8754
-0
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"actorSpecification": 1,
3+
"name": "fetchserp-mcp-server",
4+
"title": "FetchSERP MCP server",
5+
"description": "A Model Context Protocol (MCP) server that exposes the FetchSERP API for SEO, SERP analysis, web scraping, and keyword research.",
6+
"version": "0.0",
7+
"buildTag": "latest",
8+
"usesStandbyMode": true,
9+
"meta": {
10+
"templateId": "ts-mcp-server"
11+
},
12+
"dockerfile": "../Dockerfile",
13+
"webServerMcpPath": "/mcp"
14+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
{
2+
"get_backlinks": {
3+
"eventTitle": "Get Backlinks",
4+
"eventDescription": "Get backlinks for a given domain.",
5+
"eventPriceUsd": 0.002
6+
},
7+
"get_domain_info": {
8+
"eventTitle": "Get Domain Info",
9+
"eventDescription": "Get domain info including DNS records, WHOIS data, SSL certificates, and technology stack.",
10+
"eventPriceUsd": 0.005
11+
},
12+
"get_domain_emails": {
13+
"eventTitle": "Get Domain Emails",
14+
"eventDescription": "Retrieve emails from a given domain.",
15+
"eventPriceUsd": 0.002
16+
},
17+
"get_playwright_mcp": {
18+
"eventTitle": "Get Playwright MCP",
19+
"eventDescription": "Use GPT-4.1 to remote control a browser via a Playwright MCP server.",
20+
"eventPriceUsd": 0.015
21+
},
22+
"get_webpage_seo_analysis": {
23+
"eventTitle": "Get Webpage SEO Analysis",
24+
"eventDescription": "Get SEO analysis for a given url.",
25+
"eventPriceUsd": 0.005
26+
},
27+
"get_webpage_ai_analysis": {
28+
"eventTitle": "Get Webpage AI Analysis",
29+
"eventDescription": "Analyze a web page with AI.",
30+
"eventPriceUsd": 0.01
31+
},
32+
"generate_content": {
33+
"eventTitle": "Generate content for WordPress or Socials",
34+
"eventDescription": "Generate content using AI with customizable prompts and models.",
35+
"eventPriceUsd": 0.1
36+
},
37+
"get_moz_analysis": {
38+
"eventTitle": "Get Moz Analysis",
39+
"eventDescription": "Get Moz domain analysis data.",
40+
"eventPriceUsd": 0.015
41+
},
42+
"get_keywords_search_volume": {
43+
"eventTitle": "Get Keywords Search Volume",
44+
"eventDescription": "Get search volume for given keywords.",
45+
"eventPriceUsd": 0.002
46+
},
47+
"get_keywords_suggestions": {
48+
"eventTitle": "Get Keywords Suggestions",
49+
"eventDescription": "Get keyword suggestions based on a url or a list of keywords.",
50+
"eventPriceUsd": 0.003
51+
},
52+
"get_long_tail_keywords": {
53+
"eventTitle": "Get Long-Tail Keywords",
54+
"eventDescription": "Generate long-tail keywords for a given keyword.",
55+
"eventPriceUsd": 0.01
56+
},
57+
"get_serp_results": {
58+
"eventTitle": "Get SERP Results",
59+
"eventDescription": "Get search engine results.",
60+
"eventPriceUsd": 0.002
61+
},
62+
"get_serp_ai_mode": {
63+
"eventTitle": "Get SERP AI Mode",
64+
"eventDescription": "Get SERP with AI Overview and AI Mode response.",
65+
"eventPriceUsd": 0.015
66+
},
67+
"check_page_indexation": {
68+
"eventTitle": "Check Page Indexation",
69+
"eventDescription": "Check if a domain is indexed for a given keyword.",
70+
"eventPriceUsd": 0.001
71+
},
72+
"get_domain_ranking": {
73+
"eventTitle": "Get Domain Ranking",
74+
"eventDescription": "Get domain ranking for a given keyword.",
75+
"eventPriceUsd": 0.001
76+
},
77+
"scrape_domain_or_webpage": {
78+
"eventTitle": "Scrape Domain or Webpage",
79+
"eventDescription": "Scrape a domain or a web page without JS.",
80+
"eventPriceUsd": 0.001
81+
},
82+
"scrape_webpage_js": {
83+
"eventTitle": "Scrape Webpage with JS",
84+
"eventDescription": "Scrape a web page with custom JavaScript.",
85+
"eventPriceUsd": 0.005
86+
},
87+
"scrape_webpage_js_proxy": {
88+
"eventTitle": "Scrape Webpage with JS and Proxy",
89+
"eventDescription": "Scrape a web page with JS and proxy.",
90+
"eventPriceUsd": 0.015
91+
}
92+
}

fetchserp-mcp-server/.editorconfig

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
root = true
2+
3+
[*]
4+
indent_style = space
5+
indent_size = 4
6+
charset = utf-8
7+
trim_trailing_whitespace = true
8+
insert_final_newline = true
9+
end_of_line = lf

fetchserp-mcp-server/.gitignore

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# This file tells Git which files shouldn't be added to source control
2+
3+
.idea
4+
.vscode
5+
.zed
6+
storage
7+
apify_storage
8+
crawlee_storage
9+
node_modules
10+
dist
11+
tsconfig.tsbuildinfo
12+
13+
# Added by Apify CLI
14+
.venv
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.prettierignore

fetchserp-mcp-server/.prettierrc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"printWidth": 120,
3+
"singleQuote": true,
4+
"tabWidth": 4
5+
}

fetchserp-mcp-server/Dockerfile

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Specify the base Docker image. You can read more about
2+
# the available images at https://docs.apify.com/sdk/js/docs/guides/docker-images
3+
# You can also use any other image from Docker Hub.
4+
FROM apify/actor-node:22 AS builder
5+
6+
# Check preinstalled packages
7+
RUN npm ls crawlee apify puppeteer playwright
8+
9+
# Copy just package.json and package-lock.json
10+
# to speed up the build using Docker layer cache.
11+
COPY package*.json ./
12+
13+
# Install all dependencies. Don't audit to speed up the installation.
14+
RUN npm install --include=dev --audit=false
15+
16+
# Next, copy the source files using the user set
17+
# in the base image.
18+
COPY . ./
19+
20+
# Install all dependencies and build the project.
21+
# Don't audit to speed up the installation.
22+
RUN npm run build
23+
24+
# Create final image
25+
FROM apify/actor-node:22
26+
27+
# Install git
28+
RUN apk update && apk add git
29+
30+
# Check preinstalled packages
31+
RUN npm ls crawlee apify puppeteer playwright
32+
33+
# Copy just package.json and package-lock.json
34+
# to speed up the build using Docker layer cache.
35+
COPY package*.json ./
36+
37+
# Install NPM packages, skip optional and development dependencies to
38+
# keep the image small. Avoid logging too much and print the dependency
39+
# tree for debugging
40+
RUN npm --quiet set progress=false \
41+
&& npm install --omit=dev --omit=optional \
42+
&& echo "Installed NPM packages:" \
43+
&& (npm list --omit=dev --all || true) \
44+
&& echo "Node.js version:" \
45+
&& node --version \
46+
&& echo "NPM version:" \
47+
&& npm --version \
48+
&& rm -r ~/.npm
49+
50+
# Copy built JS files from builder image
51+
COPY --from=builder /usr/src/app/dist ./dist
52+
53+
# Next, copy the remaining files and directories with the source code.
54+
# Since we do this after NPM install, quick build will be really fast
55+
# for most source file changes.
56+
COPY . ./
57+
58+
# Run the image.
59+
CMD npm run start:prod --silent

0 commit comments

Comments
 (0)