Skip to main content
Glama
mysleekdesigns

CrawlForge MCP Server

track_changes

Monitor a URL for content changes: create a baseline, then compare periodically to detect competitor pricing, regulation, or availability updates.

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). Cost: 3 credits. Example: track_changes({url: "https://example.com/pricing", operation: "create_baseline"})

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNoThe URL to track changes for (optional for list_scheduled_monitors)
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. 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"
      +}
  2. 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"
  3. 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"
      +]
  4. 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
  5. 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"
      +}
  6. 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"
  7. First observedv4.10.0

TDQS

A4.4/5.0
Behavior4/5

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

The annotations declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the description doesn't need to re-state safety. It does add valuable behavioral context beyond annotations: webhook/scheduled monitoring support, hosted execution on CrawlForge's servers with email and signed webhooks, a cost of 3 credits, and that repeated compares are expected. It does not discuss rate limits, auth prerequisites, or result-size behavior in depth, so it falls just short of a 5.

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 front-loaded with the primary purpose, then workflow, then differentiation, then cost, then example. No sentence is wasted; it covers a complex tool efficiently in a compact block of text.

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?

Given 16 parameters, deep nested objects, and no output schema, the description does a good job covering the operational workflow and the hosted-versus-local distinction. It doesn't explain return shapes (acceptable since no output schema exists, though some hint of result format would help) and omits coverage of less-common operations like get_history, export_history, or create_alert_rule that appear in the schema union. Adequate for most calls but not exhaustive.

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

Parameters3/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 documents all 16 parameters in detail (including nested objects like monitoringOptions, scheduledMonitorOptions, trackingOptions). The description adds a small amount of meaning by naming two specific operations (create_baseline, compare) and the hosted option semantics, but largely repeats what the schema already provides. Baseline 3 is appropriate when the schema does the heavy lifting.

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 states a specific verb+resource: monitor a URL for content changes over time, with concrete use cases (competitor pricing, regulation updates, product availability). It explicitly distinguishes itself from the sibling 'scrape' by stating 'Not for a one-off read (scrape)', which is the key differentiator an agent needs.

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?

The description provides explicit workflow guidance: start with operation:"create_baseline", then periodically use operation:"compare", and notes that repeated compare calls are expected. It also names the alternative for one-off reads ('scrape') and gives exclusion guidance, which is exactly the when-to-use/when-not-to-use clarity that helps an agent select correctly.

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