x=hub

your toolset

    build deployment
    sign in

    scrapi-mcp

    projectother official build verified scanned
    io.github.deventerprisesoftware/scrapi-mcp · v
    deploy just this

    MCP server for using ScrAPI to scrape web pages.

    run it

    on your own machines, one way per deploy method
    verified 2026-10-17 · r-20261017T193500Z-cb5c4b1327c6
    # 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
    
    verified 2026-10-17 · r-20261017T193500Z-cb5c4b1327c6
    docker build -t scrapi https://github.com/deventerprisesoftware/scrapi-mcp.git#86f9f976610683a4512aa7a68dae266d97b73638
    docker run --rm -p 127.0.0.1:8101:5000 scrapi
    
    verified 2026-10-17 · r-20261017T193500Z-cb5c4b1327c6
    # 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: {}
    
    verified 2026-10-17 · r-20261017T193500Z-cb5c4b1327c6
    # 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
    
    verified 2026-10-17 · r-20261017T193500Z-cb5c4b1327c6
    # 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 b741da6069fdb2754330819c33cd59e0da7f4319c6720b701b57f799ebb0f184
    • scrape_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
    dateworkermethodstatussandboxreason
    2026-10-17 19:35 local-mac-vm dockermcp 2025-11-25 ok2 tools gvisor —