PageWatch - page-to-data extraction and change monitoring

Extract prices, lists, tables, events from static pages and watch them for changes.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
88%
Naming quality
87%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~732Tokens (tool definitions)
~2.2 KBTypical response size
Moderate attention impact (0.57% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "pagewatch": {
      "url": "https://pagewatch.zenith-ops.workers.dev/mcp"
    }
  }
}

Remote endpoints

https://pagewatch.zenith-ops.workers.dev/mcpstreamable-http

What it can do

Tool inventory

Tools (3)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢extract_page(url, mode, selector, attr, fields, ...)

Fetch one public static web page and extract structured data from it (text, attr, list, table, price, events, page, links, json). Free tier: 30 calls per day per client. No JavaScript rendering.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    },
    "mode": {
      "type": "string",
      "enum": [
        "text",
        "attr",
        "list",
        "table",
        "price",
        "events",
        "page",
        "links",
        "json"
      ],
      "description": "What to extract. Default text for extract_page, page for watch_page."
    },
    "selector": {
      "type": "string",
      "description": "CSS selector (required for text, attr, list)."
    },
    "attr": {
      "type": "string",
      "description": "Attribute name for mode=attr."
    },
    "fields": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "description": "mode=list: {\"name\": \"css\" or \"css@attr\"}."
    },
    "match": {
      "type": "string",
      "description": "mode=links: regular expression filter."
    },
    "jsonpath": {
      "type": "string",
      "description": "mode=json: JSONPath-lite such as $.a.b[0]."
    },
    "sameHost": {
      "type": "boolean"
    },
    "all": {
      "type": "boolean"
    },
    "tableIndex": {
      "type": "integer",
      "minimum": 0
    },
    "paid": {
      "type": "boolean",
      "description": "true: use the paid endpoint (x402). The result is the payment requirements unless a payment header is sent."
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false
}
🟡watch_page(url, mode, selector, attr, fields, ...)

Create a monitor that checks a public page on a schedule and records changes. Returns monitor id, manage token (shown once), feed and events URLs. Free plan: checks every 60 minutes or slower, 3 active monitors per client, 30 days.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    },
    "mode": {
      "type": "string",
      "enum": [
        "text",
        "attr",
        "list",
        "table",
        "price",
        "events",
        "page",
        "links",
        "json"
      ],
      "description": "What to extract. Default text for extract_page, page for watch_page."
    },
    "selector": {
      "type": "string",
      "description": "CSS selector (required for text, attr, list)."
    },
    "attr": {
      "type": "string",
      "description": "Attribute name for mode=attr."
    },
    "fields": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "description": "mode=list: {\"name\": \"css\" or \"css@attr\"}."
    },
    "match": {
      "type": "string",
      "description": "mode=links: regular expression filter."
    },
    "jsonpath": {
      "type": "string",
      "description": "mode=json: JSONPath-lite such as $.a.b[0]."
    },
    "sameHost": {
      "type": "boolean"
    },
    "all": {
      "type": "boolean"
    },
    "tableIndex": {
      "type": "integer",
      "minimum": 0
    },
    "interval_minutes": {
      "type": "integer",
      "minimum": 15
    },
    "webhook_url": {
      "type": "string",
      "description": "https URL for signed change notifications."
    },
    "paid": {
      "type": "boolean",
      "description": "true: use the paid endpoint (x402). The result is the payment requirements unless a payment header is sent."
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false
}
🟢get_changes(id, limit)

Read the latest state and the change log of a monitor by id.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded3 tools