Skip to main content
Glama
CrawlForge MCP Server

CrawlForge MCP Server

track_changes

Use this to monitor a URL for content changes over time - competitor pricing, regulation updates, product availability. Start with operation:"create_baseline", then periodically use operation:"compare" to diff; repeated compare calls on…

Instructions

Use this to monitor a URL for content changes over time - competitor pricing, regulation updates, product availability. Start with operation:"create_baseline", then periodically use operation:"compare" to diff; repeated compare calls on the same URL are expected. Supports webhooks and scheduled monitoring, and scheduledMonitorOptions.hosted:true runs the monitor on CrawlForge's servers with email and signed webhooks. Not for a one-off read (scrape). A compare always uses the baseline's granularity/customSelectors/excludeSelectors; different values are reported in ignoredOptions. Cost: 3 credits. Example: track_changes({url: "https://example.com/pricing", operation: "create_baseline"})

Input Schema

NameRequiredDescriptionDefault
urlNoThe URL to track changes for. Required for create_baseline, compare, monitor, get_history and create_scheduled_monitor; stop_scheduled_monitor takes it or scheduledMonitorOptions.monitorId; the other operations run without one
htmlNoHTML content to compare against baseline
contentNoContent to compare against baseline
operationNoTracking operation to performcompare
user_agentNoOverride the outbound User-Agent. CrawlForge identifies itself honestly by default; use this only for targets you have your own agreement with.
queryOptionsNoQuery options for history and stats retrieval
exportOptionsNoExport options for change history data
respect_robotsNoRespect the target site's robots.txt (default: true). Setting this to false is honoured, returns a warning in the response, and is recorded against your API key — it is your decision, not a silent default.
storageOptionsNoStorage and history retention settings
trackingOptionsNoOptions for how changes are tracked and compared
alertRuleOptionsNoAlert rule configuration for change notifications
dashboardOptionsNoDashboard display options
max_inline_charsNoLargest result to return inline, in characters of its JSON. Over it, the call returns a preview plus a result_handle for read_result instead of the whole result (default 40,000; env CRAWLFORGE_MAX_INLINE_CHARS)
monitoringOptionsNoMonitoring schedule and notification settings
notificationOptionsNoNotification configuration for webhooks, Slack and email (email is sent by hosted monitors only)
scheduledMonitorOptionsNoScheduled monitoring: recurring compare + notify, optional plain-English goal

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv6.24.0
    • changedInput schema / properties / trackingOptions / properties / granularity / description
      Previous value: -"Default: section"New value: +"Default: section. Fixed when the baseline is created: a compare always diffs at the baseline's granularity (as with customSelectors and excludeSelectors), and one that asks for a different value gets ignoredOptions:[{option, requested, applied}] plus a warnings entry. Recreate the baseline to change it"
    • addedInput schema / properties / trackingOptions / properties / includeMarkupChanges
      Added value: +{
      +  "description": "Also return details.markupChanges, a diff of the raw HTML (tags, classes, attributes). details.textChanges always diffs the visible text only. Default: false",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / url / description
      Previous value: -"The URL to track changes for (optional for list_scheduled_monitors)"New value: +"The URL to track changes for. Required for create_baseline, compare, monitor, get_history and create_scheduled_monitor; stop_scheduled_monitor takes it or scheduledMonitorOptions.monitorId; the other operations run without one"
  2. Changed1 schema field changedv6.19.2
    • addedInput schema / properties / max_inline_chars
      Added value: +{
      +  "description": "Largest result to return inline, in characters of its JSON. Over it, the call returns a preview plus a result_handle for read_result instead of the whole result (default 40,000; env CRAWLFORGE_MAX_INLINE_CHARS)",
      +  "maximum": 10000000,
      +  "minimum": 1000,
      +  "type": "integer"
      +}
  3. Changed17 schema fields changedv6.18.1
    • addedInput schema / properties / alertRuleOptions / properties / condition / description
      Added value: +"significance <operator> <level>, e.g. significance >= \"moderate\" (default: significance === \"major\"). Operators: ===, ==, !==, !=, >=, <=, >, <. Levels: none, minor, moderate, major, critical; quotes optional. Anything else is rejected"
    • changedInput schema / properties / monitoringOptions / properties / enabled / default
      Previous value: -falseNew value: +true
    • addedInput schema / properties / monitoringOptions / properties / enabled / description
      Added value: +"operation:\"monitor\" starts polling the URL; false stops the URL's polling monitor and starts nothing"
    • changedInput schema / properties / scheduledMonitorOptions / properties / monitorId / description
      Previous value: -"Monitor id for stop_scheduled_monitor"New value: +"Monitor id for stop_scheduled_monitor, as list_scheduled_monitors shows it (poll:<url> for a polling monitor)"
    • addedInput schema / properties / scheduledMonitorOptions / properties / templateId / description
      Added value: +"Preset from get_monitoring_templates; it sets interval, goal, notificationThreshold and trackingOptions, and any of those passed explicitly wins"
    • removedInput schema / properties / trackingOptions / properties / granularity / default
      Removed value: -"section"
    • addedInput schema / properties / trackingOptions / properties / granularity / description
      Added value: +"Default: section"
    • removedInput schema / properties / trackingOptions / properties / ignoreCase / default
      Removed value: -false
    • addedInput schema / properties / trackingOptions / properties / ignoreCase / description
      Added value: +"Default: false"
    • removedInput schema / properties / trackingOptions / properties / ignoreWhitespace / default
      Removed value: -true
    • addedInput schema / properties / trackingOptions / properties / ignoreWhitespace / description
      Added value: +"Default: true"
    • removedInput schema / properties / trackingOptions / properties / trackLinks / default
      Removed value: -true
    • addedInput schema / properties / trackingOptions / properties / trackLinks / description
      Added value: +"Default: true"
    • removedInput schema / properties / trackingOptions / properties / trackStructure / default
      Removed value: -true
    • addedInput schema / properties / trackingOptions / properties / trackStructure / description
      Added value: +"Default: true"
    • removedInput schema / properties / trackingOptions / properties / trackText / default
      Removed value: -true
    • addedInput schema / properties / trackingOptions / properties / trackText / description
      Added value: +"Default: true"
  4. Changed9 schema fields changedv6.5.0
    • addedInput schema / properties / monitoringOptions / default
      Added value: +{}
    • changedInput schema / properties / notificationOptions / description
      Previous value: -"Notification configuration for webhooks and Slack"New value: +"Notification configuration for webhooks, Slack and email (email is sent by hosted monitors only)"
    • addedInput schema / properties / notificationOptions / properties / email
      Added value: +{
      +  "properties": {
      +    "enabled": {
      +      "default": false,
      +      "type": "boolean"
      +    },
      +    "includeDetails": {
      +      "default": true,
      +      "type": "boolean"
      +    },
      +    "recipients": {
      +      "items": {
      +        "format": "email",
      +        "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "subject": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / queryOptions / default
      Added value: +{}
    • addedInput schema / properties / scheduledMonitorOptions / properties / hosted
      Added value: +{
      +  "default": false,
      +  "description": "Run the monitor on CrawlForge's servers: it fires from the hosted scheduler whether or not this process is alive and sends email and signed webhooks. Each check bills 3 credits per compared target from the account; blocked and errored targets are free. Default false = local, in-process.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / scheduledMonitorOptions / properties / name
      Added value: +{
      +  "description": "Display name for a hosted monitor (default: the URL host)",
      +  "maxLength": 80,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / storageOptions / default
      Added value: +{}
    • addedInput schema / properties / trackingOptions / default
      Added value: +{}
    • addedInput schema / properties / trackingOptions / properties / excludeSelectors / default
      Added value: +[
      +  "script",
      +  "style",
      +  "noscript",
      +  ".advertisement",
      +  ".ad",
      +  "#comments"
      +]
  5. Changed14 schema fields changedv6.0.0
    • removedInput schema / additionalProperties
      Removed value: -false
    • removedInput schema / properties / alertRuleOptions / additionalProperties
      Removed value: -false
    • removedInput schema / properties / dashboardOptions / additionalProperties
      Removed value: -false
    • removedInput schema / properties / exportOptions / additionalProperties
      Removed value: -false
    • removedInput schema / properties / monitoringOptions / additionalProperties
      Removed value: -false
    • removedInput schema / properties / notificationOptions / additionalProperties
      Removed value: -false
    • removedInput schema / properties / notificationOptions / properties / slack / additionalProperties
      Removed value: -false
    • removedInput schema / properties / notificationOptions / properties / webhook / additionalProperties
      Removed value: -false
    • addedInput schema / properties / notificationOptions / properties / webhook / properties / headers / propertyNames
      Added value: +{
      +  "type": "string"
      +}
    • removedInput schema / properties / queryOptions / additionalProperties
      Removed value: -false
    • removedInput schema / properties / scheduledMonitorOptions / additionalProperties
      Removed value: -false
    • removedInput schema / properties / storageOptions / additionalProperties
      Removed value: -false
    • removedInput schema / properties / trackingOptions / additionalProperties
      Removed value: -false
    • removedInput schema / properties / trackingOptions / properties / significanceThresholds / additionalProperties
      Removed value: -false
  6. Changed2 schema fields changedv5.4.0
    • addedInput schema / properties / respect_robots
      Added value: +{
      +  "description": "Respect the target site's robots.txt (default: true). Setting this to false is honoured, returns a warning in the response, and is recorded against your API key — it is your decision, not a silent default.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / user_agent
      Added value: +{
      +  "description": "Override the outbound User-Agent. CrawlForge identifies itself honestly by default; use this only for targets you have your own agreement with.",
      +  "type": "string"
      +}
  7. Changed1 schema field changedv5.0.4
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  8. First observedv4.10.0

TDQS

A4.6/5.0
Behavior4/5

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

The annotations already declare non-read-only, non-destructive, open-world, and non-idempotent behavior. The description adds valuable operational context: 3-credit cost, hosted execution via scheduledMonitorOptions.hosted, email and signed webhooks, and the fact that compare inherits baseline granularity/selectors with mismatches reported in ignoredOptions. It stops short of explaining local monitor lifecycle or the side effects of stop/export/alert operations, so it is strong but not exhaustive.

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

Conciseness5/5

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

The description is dense but front-loaded: tool purpose, workflow, key caveats, cost, and an example. Each sentence earns its place by adding a constraint, routing cue, or cost signal, and the example aids correct first invocation.

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?

For a complex 16-parameter, 13-operation tool, the description covers the primary baseline→compare workflow and important caveats like cost and hosted monitoring. It leaves secondary operations such as get_history, export_history, create_alert_rule, and generate_trend_report unmentioned, but the rich schema’s operation enum and option descriptions compensate enough for correct use.

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?

Schema description coverage is 100%, so the schema already carries most parameter meaning. The description adds useful semantics beyond the schema by explaining the create_baseline → compare sequence, baseline configuration lock-in, and ignoredOptions reporting for mismatched granularity/selectors. It also clarifies that hosted:true moves monitoring to CrawlForge servers, though most of the other 16 parameters are left to the schema.

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?

States a specific verb and resource — monitor a URL for content changes over time — and gives concrete use cases like competitor pricing and product availability. It explicitly distinguishes itself from the sibling scrape tool for one-off reads, so an agent can route correctly.

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

Usage Guidelines5/5

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

Gives an explicit workflow: start with operation:"create_baseline", then periodically use operation:"compare", and notes repeated compare calls are expected. It also states when not to use it (one-off reads) and points to the alternative, scrape.

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