scrapi-mcp
projectother official build verified scannedMCP server for using ScrAPI to scrape web pages.
run it
on your own machines, one way per deploy method# once, as root:
docker build -t mcp-local/scrapi:86f9f976610683a4512aa7a68dae266d97b73638 https://github.com/deventerprisesoftware/scrapi-mcp.git#86f9f976610683a4512aa7a68dae266d97b73638
#!/usr/bin/env bash
# scrapi (io.github.deventerprisesoftware/scrapi-mcp), recipe docker (worker, verified 2026-10-17 on v, run r-20261017T193500Z-cb5c4b1327c6).
# Generated by Hub for toolset "my-agent"; started by mcp-my-agent-scrapi.service.
set -euo pipefail
export HOST=127.0.0.1 PORT=8101
exec docker run --rm --name mcp-my-agent-scrapi -p 127.0.0.1:${PORT}:5000 --env-file /etc/mcp/my-agent.env mcp-local/scrapi:86f9f976610683a4512aa7a68dae266d97b73638
[Unit]
Description=MCP server scrapi (toolset my-agent), generated by Hub
After=network-online.target docker.service
Wants=network-online.target
[Service]
Type=simple
User=mcp
Group=mcp
SupplementaryGroups=docker
EnvironmentFile=/etc/mcp/my-agent.env
Environment=HOME=/var/lib/mcp/scrapi
WorkingDirectory=/var/lib/mcp/scrapi
ExecStart=/opt/mcp/my-agent/bin/scrapi.sh
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/var/lib/mcp/scrapi
[Install]
WantedBy=multi-user.target
docker build -t scrapi https://github.com/deventerprisesoftware/scrapi-mcp.git#86f9f976610683a4512aa7a68dae266d97b73638 docker run --rm -p 127.0.0.1:8101:5000 scrapi
# Generated by Hub for toolset "my-agent" (2026-10-17T20:37:49+00:00).
# Each package server runs behind a stdio->HTTP bridge and listens on localhost only.
# cp .env.example .env # fill the ${VAR}s
# docker compose up -d && bash smoke.sh
# Remote servers are not here: clients reach them directly (see clients/).
name: mcp-my-agent
services:
scrapi:
build:
context: https://github.com/deventerprisesoftware/scrapi-mcp.git#86f9f976610683a4512aa7a68dae266d97b73638
ports:
- 127.0.0.1:8101:5000
restart: unless-stopped
volumes:
npm-cache: {}
uv-cache: {}
# Generated by Hub for toolset "my-agent" (2026-10-17T20:37:49+00:00).
# kubectl create namespace mcp
# kubectl -n mcp create secret generic mcp-credentials --from-env-file=.env
# kubectl apply -f kubernetes.yaml
# Services are cluster-internal: <name>.mcp.svc.cluster.local:8000/mcp. Put an ingress
# with auth in front before exposing any of them.
apiVersion: v1
kind: Namespace
metadata:
name: mcp
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: scrapi
namespace: mcp
labels: &id001
app: scrapi
spec:
replicas: 1
selector:
matchLabels: *id001
template:
metadata:
labels: *id001
spec:
containers:
- name: scrapi
image: CHANGE_ME
ports:
- containerPort: 5000
name: http
env: []
---
apiVersion: v1
kind: Service
metadata:
name: scrapi
namespace: mcp
spec:
selector:
app: scrapi
ports:
- port: 5000
targetPort: http
name: http
# Generated by Hub for toolset "my-agent" (2026-10-17T20:37:49+00:00).
# Credentials come from the Secret 'mcp-credentials' (kubectl create secret generic ... --from-env-file=.env).
# Each server under `servers` is one Deployment + Service; the keys after it configure
# upstream charts a worker verified.
servers:
scrapi:
enabled: true
replicas: 1
port: 5000
path: /mcp
container:
name: scrapi
image: CHANGE_ME
ports:
- containerPort: 5000
name: http
env: []
# helm install my-agent helm/my-agent -n mcp
Scanned github.com/deventerprisesoftware/scrapi-mcp at 86f9f9766106 with [email protected][email protected] on 2026-10-17 before the build: 1 dependencies, 1 known vulnerabilities (1 high), nothing in the code that looks malicious.
in the cloud
one click: the provider's deploy form opens filled in, in your own account- koyeb
-
Koyeb builds the repository's Dockerfile from branch main, not commit 86f9f9766106, the one the worker scanned and built (it takes branches only); change the branch in the form if the default one has another name.
Clients connect to the service's https://…koyeb.app address plus /mcp.
- cloud run
-
Cloud Shell clones the repository, builds its Dockerfile and deploys it to Cloud Run.
scrapi: Cloud Shell clones the default branch, not the commit the worker scanned and built (it takes branches only).
Cloud Run sends requests to $PORT (8080); the recipe expects :5000, so the server has to read PORT, or set the container port on the service afterwards.
connect to it
copy what your client needs{
"mcpServers": {
"scrapi": {
"command": "CHANGE_ME",
"args": []
}
}
}
#!/usr/bin/env bash # Registers every server with Claude Code (run once; `claude mcp list` to check). set -euo pipefail set -a; [ -f .env ] && source .env; set +a claude mcp add scrapi -- CHANGE_ME
{
"mcpServers": {
"scrapi": {
"command": "CHANGE_ME",
"args": []
}
}
}
{
"servers": {
"scrapi": {
"type": "stdio",
"command": "CHANGE_ME",
"args": []
}
}
}
name: my-agent target: local servers: - hub: io.github.deventerprisesoftware/scrapi-mcp
- no tested recipe for target 'local' yet: build it from https://github.com/DevEnterpriseSoftware/scrapi-mcp by hand, or wait for the worker
tools · 2
scrape_url_htmlUse a URL to scrape a website using the ScrAPI service and retrieve the result as HTML. Use this for scraping website content that is difficult to access because of bot detection, captchas or even geolocation restrictions. The result will be in HTML which is preferable if advanced parsing is required. BROWSER COMMANDS: You can optionally provide browser commands to interact with the page before scraping (e.g., clicking buttons, filling forms, scrolling). Provide commands as a JSON array string. Available commands: - Click: {"click": "#buttonId"} - Click an element using CSS selector - Input: {"input": {"input[name='email']": "value"}} - Fill an input field - Select: {"select": {"select[name='country']": "USA"}} - Select from dropdown - Scroll: {"scroll": 1000} - Scroll down (negative values scroll up) - Wait: {"wait": 5000} - Wait milliseconds (max 15000) - WaitFor: {"waitfor": "#elementId"} - Wait for element to appear - JavaScript: {"javascript": "console.log('test')"} - Execute custom JS Example: [{"click": "#accept-cookies"}, {"wait": 2000}, {"input": {"input[name='search']": "query"}}]Use a URL to scrape a website using the ScrAPI service and retrieve the result as HTML. Use this for scraping website content that is difficult to access because of bot detection, captchas or even geolocation restrictions. The result will be in HTML which is preferable if advanced parsing is required. BROWSER COMMANDS: You can optionally provide browser commands to interact with the page before scraping (e.g., clicking buttons, filling forms, scrolling). Provide commands as a JSON array string. Available commands: - Click: {"click": "#buttonId"} - Click an element using CSS selector - Input: {"input": {"input[name='email']": "value"}} - Fill an input field - Select: {"select": {"select[name='country']": "USA"}} - Select from dropdown - Scroll: {"scroll": 1000} - Scroll down (negative values scroll up) - Wait: {"wait": 5000} - Wait milliseconds (max 15000) - WaitFor: {"waitfor": "#elementId"} - Wait for element to appear - JavaScript: {"javascript": "console.log('test')"} - Execute custom JS Example: [{"click": "#accept-cookies"}, {"wait": 2000}, {"input": {"input[name='search']": "query"}}]
pin b741da6069fdb2754330819c33cd59e0da7f4319c6720b701b57f799ebb0f184scrape_url_markdownUse a URL to scrape a website using the ScrAPI service and retrieve the result as Markdown. Use this for scraping website content that is difficult to access because of bot detection, captchas or even geolocation restrictions. The result will be in Markdown which is preferable if the text content of the webpage is important and not the structural information of the page. BROWSER COMMANDS: You can optionally provide browser commands to interact with the page before scraping (e.g., clicking buttons, filling forms, scrolling). Provide commands as a JSON array string. Available commands: - Click: {"click": "#buttonId"} - Click an element using CSS selector - Input: {"input": {"input[name='email']": "value"}} - Fill an input field - Select: {"select": {"select[name='country']": "USA"}} - Select from dropdown - Scroll: {"scroll": 1000} - Scroll down (negative values scroll up) - Wait: {"wait": 5000} - Wait milliseconds (max 15000) - WaitFor: {"waitfor": "#elementId"} - Wait for element to appear - JavaScript: {"javascript": "console.log('test')"} - Execute custom JS Example: [{"click": "#accept-cookies"}, {"wait": 2000}, {"input": {"input[name='search']": "query"}}]Use a URL to scrape a website using the ScrAPI service and retrieve the result as Markdown. Use this for scraping website content that is difficult to access because of bot detection, captchas or even geolocation restrictions. The result will be in Markdown which is preferable if the text content of the webpage is important and not the structural information of the page. BROWSER COMMANDS: You can optionally provide browser commands to interact with the page before scraping (e.g., clicking buttons, filling forms, scrolling). Provide commands as a JSON array string. Available commands: - Click: {"click": "#buttonId"} - Click an element using CSS selector - Input: {"input": {"input[name='email']": "value"}} - Fill an input field - Select: {"select": {"select[name='country']": "USA"}} - Select from dropdown - Scroll: {"scroll": 1000} - Scroll down (negative values scroll up) - Wait: {"wait": 5000} - Wait milliseconds (max 15000) - WaitFor: {"waitfor": "#elementId"} - Wait for element to appear - JavaScript: {"javascript": "console.log('test')"} - Execute custom JS Example: [{"click": "#accept-cookies"}, {"wait": 2000}, {"input": {"input[name='search']": "query"}}]
pin 03586d0125a20d423520db7b11dd660bd002f4319021ea6613d70d75bca9e599
runs · 1
the latest tests of this entry by the hub and its workers, newest first| date | worker | method | status | sandbox | reason |
|---|---|---|---|---|---|
| 2026-10-17 19:35 | local-mac-vm | dockermcp 2025-11-25 | ok2 tools | gvisor | — |