Skip to main content
Glama

Monitor a web page for changes

create_monitor
Destructive

Create a scheduled web-change monitor whose detected changes arrive as an ordinary followed source — query, watch, and mutate it like any feed. Naming a collection that does not exist creates it. Active monitor limits are Free 3, Patron 10, and Pro 100; scheduled monthly credits are 150, 720, and 7,200, respectively. Page and sitemap runs reserve 1 credit; extract runs reserve 10. The shortest interval is 60 minutes and the default schedule is daily. The response reports remaining slots and scheduled credits. Example: {"name":"Example page changes","target":{"type":"page","url":"https://example.com"},"collection":"Research"}

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYes
tagsNo
targetYes"page" watches one URL, "sitemap" watches URL additions/removals, "extract" watches for meaningful site-wide changes per your instructions.
scheduleNoDefault: daily. Shortest interval: 60 minutes.
collectionNoCollection id or name. A new name is created. Omit for Unsorted.
change_detectionNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitsYes
monitorYes
subscriptionYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • changedInput schema / properties / collection / anyOf
      Previous value: -[
      -  {
      -    "anyOf": [
      -      {
      -        "default": 0,
      -        "type": "string"
      -      },
      -      {
      -        "maximum": 9007199254740991,
      -        "minimum": 1,
      -        "type": "integer"
      -      }
      -    ]
      -  },
      -  {
      -    "maxLength": 100,
      -    "minLength": 1,
      -    "type": "string"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 9007199254740991,
      +    "minimum": 1,
      +    "type": "integer"
      +  },
      +  {
      +    "maxLength": 100,
      +    "minLength": 1,
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / schedule / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "frequency": {
      -        "anyOf": [
      -          {
      -            "default": 0,
      -            "type": "string"
      -          },
      -          {
      -            "maximum": 43200,
      -            "minimum": 60,
      -            "type": "integer"
      -          }
      -        ]
      -      },
      -      "type": {
      -        "const": "interval",
      -        "type": "string"
      -      },
      -      "unit": {
      -        "const": "minutes",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "unit"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "frequency": {
      -        "anyOf": [
      -          {
      -            "default": 0,
      -            "type": "string"
      -          },
      -          {
      -            "maximum": 720,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        ]
      -      },
      -      "type": {
      -        "const": "interval",
      -        "type": "string"
      -      },
      -      "unit": {
      -        "const": "hours",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "unit"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "frequency": {
      -        "anyOf": [
      -          {
      -            "default": 0,
      -            "type": "string"
      -          },
      -          {
      -            "maximum": 30,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        ]
      -      },
      -      "type": {
      -        "const": "interval",
      -        "type": "string"
      -      },
      -      "unit": {
      -        "const": "days",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "unit"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "frequency": {
      +        "maximum": 43200,
      +        "minimum": 60,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "interval",
      +        "type": "string"
      +      },
      +      "unit": {
      +        "const": "minutes",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "frequency",
      +      "unit"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "frequency": {
      +        "maximum": 720,
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "interval",
      +        "type": "string"
      +      },
      +      "unit": {
      +        "const": "hours",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "frequency",
      +      "unit"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "frequency": {
      +        "maximum": 30,
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "interval",
      +        "type": "string"
      +      },
      +      "unit": {
      +        "const": "days",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "frequency",
      +      "unit"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / target / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "instructions": {
      -        "maxLength": 2000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "normalize_whitespace": {
      -        "type": "boolean"
      -      },
      -      "type": {
      -        "const": "page",
      -        "type": "string"
      -      },
      -      "url": {
      -        "description": "A public http(s) URL.",
      -        "maxLength": 2048,
      -        "minLength": 8,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "url"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "exclude": {
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 50,
      -        "type": "array"
      -      },
      -      "include": {
      -        "items": {
      -          "maxLength": 200,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 50,
      -        "type": "array"
      -      },
      -      "max_urls": {
      -        "anyOf": [
      -          {
      -            "default": 0,
      -            "type": "string"
      -          },
      -          {
      -            "maximum": 10000,
      -            "minimum": 1,
      -            "type": "integer"
      -          }
      -        ]
      -      },
      -      "type": {
      -        "const": "sitemap",
      -        "type": "string"
      -      },
      -      "url": {
      -        "description": "A public http(s) URL.",
      -        "maxLength": 2048,
      -        "minLength": 8,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "url"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "instructions": {
      -        "maxLength": 2000,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "type": {
      -        "const": "extract",
      -        "type": "string"
      -      },
      -      "url": {
      -        "description": "A public http(s) URL.",
      -        "maxLength": 2048,
      -        "minLength": 8,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "url",
      -      "instructions"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "instructions": {
      +        "maxLength": 2000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "normalize_whitespace": {
      +        "type": "boolean"
      +      },
      +      "type": {
      +        "const": "page",
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "A public http(s) URL.",
      +        "maxLength": 2048,
      +        "minLength": 8,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "url"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "exclude": {
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 50,
      +        "type": "array"
      +      },
      +      "include": {
      +        "items": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 50,
      +        "type": "array"
      +      },
      +      "max_urls": {
      +        "maximum": 10000,
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "sitemap",
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "A public http(s) URL.",
      +        "maxLength": 2048,
      +        "minLength": 8,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "url"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "instructions": {
      +        "maxLength": 2000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "type": {
      +        "const": "extract",
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "A public http(s) URL.",
      +        "maxLength": 2048,
      +        "minLength": 8,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "url",
      +      "instructions"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed12 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / change_detection
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "type": {
      +          "const": "exact",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "type"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "confidence_threshold": {
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "type": {
      +          "const": "semantic",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "type"
      +      ],
      +      "type": "object"
      +    }
      +  ]
      +}
    • addedInput schema / properties / collection
      Added value: +{
      +  "anyOf": [
      +    {
      +      "anyOf": [
      +        {
      +          "default": 0,
      +          "type": "string"
      +        },
      +        {
      +          "maximum": 9007199254740991,
      +          "minimum": 1,
      +          "type": "integer"
      +        }
      +      ]
      +    },
      +    {
      +      "maxLength": 100,
      +      "minLength": 1,
      +      "type": "string"
      +    }
      +  ],
      +  "description": "Collection id or name. A new name is created. Omit for Unsorted."
      +}
    • addedInput schema / properties / name
      Added value: +{
      +  "maxLength": 200,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / schedule
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "frequency": {
      +          "anyOf": [
      +            {
      +              "default": 0,
      +              "type": "string"
      +            },
      +            {
      +              "maximum": 43200,
      +              "minimum": 60,
      +              "type": "integer"
      +            }
      +          ]
      +        },
      +        "type": {
      +          "const": "interval",
      +          "type": "string"
      +        },
      +        "unit": {
      +          "const": "minutes",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "type",
      +        "unit"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "frequency": {
      +          "anyOf": [
      +            {
      +              "default": 0,
      +              "type": "string"
      +            },
      +            {
      +              "maximum": 720,
      +              "minimum": 1,
      +              "type": "integer"
      +            }
      +          ]
      +        },
      +        "type": {
      +          "const": "interval",
      +          "type": "string"
      +        },
      +        "unit": {
      +          "const": "hours",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "type",
      +        "unit"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "frequency": {
      +          "anyOf": [
      +            {
      +              "default": 0,
      +              "type": "string"
      +            },
      +            {
      +              "maximum": 30,
      +              "minimum": 1,
      +              "type": "integer"
      +            }
      +          ]
      +        },
      +        "type": {
      +          "const": "interval",
      +          "type": "string"
      +        },
      +        "unit": {
      +          "const": "days",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "type",
      +        "unit"
      +      ],
      +      "type": "object"
      +    }
      +  ],
      +  "description": "Default: daily. Shortest interval: 60 minutes."
      +}
    • addedInput schema / properties / tags
      Added value: +{
      +  "items": {
      +    "maxLength": 50,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "maxItems": 18,
      +  "type": "array"
      +}
    • addedInput schema / properties / target
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "instructions": {
      +          "maxLength": 2000,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "normalize_whitespace": {
      +          "type": "boolean"
      +        },
      +        "type": {
      +          "const": "page",
      +          "type": "string"
      +        },
      +        "url": {
      +          "description": "A public http(s) URL.",
      +          "maxLength": 2048,
      +          "minLength": 8,
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "type",
      +        "url"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "exclude": {
      +          "items": {
      +            "maxLength": 200,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "maxItems": 50,
      +          "type": "array"
      +        },
      +        "include": {
      +          "items": {
      +            "maxLength": 200,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "maxItems": 50,
      +          "type": "array"
      +        },
      +        "max_urls": {
      +          "anyOf": [
      +            {
      +              "default": 0,
      +              "type": "string"
      +            },
      +            {
      +              "maximum": 10000,
      +              "minimum": 1,
      +              "type": "integer"
      +            }
      +          ]
      +        },
      +        "type": {
      +          "const": "sitemap",
      +          "type": "string"
      +        },
      +        "url": {
      +          "description": "A public http(s) URL.",
      +          "maxLength": 2048,
      +          "minLength": 8,
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "type",
      +        "url"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "instructions": {
      +          "maxLength": 2000,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "type": {
      +          "const": "extract",
      +          "type": "string"
      +        },
      +        "url": {
      +          "description": "A public http(s) URL.",
      +          "maxLength": 2048,
      +          "minLength": 8,
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "type",
      +        "url",
      +        "instructions"
      +      ],
      +      "type": "object"
      +    }
      +  ],
      +  "description": "\"page\" watches one URL, \"sitemap\" watches URL additions/removals, \"extract\" watches for meaningful site-wide changes per your instructions."
      +}
    • removedInput schema / properties / title
      Removed value: -{
      -  "maxLength": 200,
      -  "minLength": 1,
      -  "type": "string"
      -}
    • removedInput schema / properties / url
      Removed value: -{
      -  "format": "uri",
      -  "type": "string"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "url"
      -]New value: +[
      +  "name",
      +  "target"
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": {},
      +  "properties": {
      +    "limits": {
      +      "patternProperties": {
      +        "^(.*)$": {}
      +      },
      +      "type": "object"
      +    },
      +    "monitor": {
      +      "patternProperties": {
      +        "^(.*)$": {}
      +      },
      +      "type": "object"
      +    },
      +    "subscription": {
      +      "patternProperties": {
      +        "^(.*)$": {}
      +      },
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "monitor",
      +    "subscription",
      +    "limits"
      +  ],
      +  "type": "object"
      +}
  3. First observed

TDQS

A3.5/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states 'Create a scheduled web-change monitor' and uses 'mutate it like any feed', implying creation and later mutation but no deletion or destructive action. This directly contradicts the annotation destructiveHint: true, which suggests destructive behavior. The description fails to disclose any destructive side effects, creating an annotation contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description packs a lot of useful detail into a single paragraph followed by a JSON example. It is information-dense but not redundant; the structure flows logically from creation to constraints to response. Slightly verbose due to listing all limits and credits, but justified given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core functionality, constraints (limits, credits), and the response content ('reports remaining slots and scheduled credits'). It includes an example. However, it does not mention error scenarios, authentication, or edge cases, which might be relevant for a fully comprehensive description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains several parameter behaviors: target types and their differences, schedule limits and defaults, collection naming/creation, and credit costs. The schema itself provides descriptions for target and schedule. However, parameters like tags and change_detection are not elaborated in the description, leaving some gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Create a scheduled web-change monitor'. It also details the three monitor types (page, sitemap, extract) and provides a concrete example, leaving no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives substantial operational guidance (limits, credits, schedule defaults, collection creation) but does not explicitly compare this tool to alternatives like create_news_query or discover_feed_inputs. It lacks a direct 'use this when...' statement relative to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources