Skip to main content
Glama

watch

Destructive

Schedule URL re-checks to detect content changes and surface diffs, with persistent jobs that survive server restarts and fire lazily on explicit checks or other tool calls.

Instructions

Schedule lazy re-checks of a URL and surface diffs on change. Persistent across sessions — jobs survive MCP server restarts.

LAZY EXECUTION — NOT CRON. There is no background daemon. Checks fire ONLY when:

  1. You explicitly call watch({ action: 'check', job_id }), OR

  2. Any OTHER wigolo tool runs and the job's interval has elapsed (overdue jobs are triggered fire-and-forget in the background). A job on an idle MCP server will not fire until the next tool call. Do not expect cron-like accuracy.

Key parameters:

  • action: 'create' | 'list' | 'check' | 'pause' | 'resume' | 'delete'.

  • url (create-only): must be a public http/https URL. Loopback, RFC 1918 ranges, link-local, and non-http(s) schemes are rejected at registration.

  • interval_seconds (create-only): minimum 60 — sub-minute polling is refused to respect target-site rate limits.

  • selector (create-only, optional): CSS selector for future selector-scoped diffs. Persisted now for forward compatibility; the diff is currently full-page.

  • notification (create-only, optional): 'inline' (default — change reports come back on the next action: 'check') or a public webhook URL. Same SSRF guard as url. Webhook delivery is best-effort POST — no retry / no queue / no backoff.

  • job_id (check/pause/resume/delete).

list returns each job's staleness_seconds so you can see how overdue each check is: negative = not yet due, positive = overdue by N seconds. Pair with action: 'check' to force one immediately.

Idempotent create: identical url + interval + selector returns the existing job_id — does not duplicate the row.

Input Schema

NameRequiredDescriptionDefault
urlNoSingle-URL create: the URL to watch. Response carries `job` (singular) and `jobs:[job]` (legacy). Mutually exclusive with `urls`.
urlsNoBatch create: register multiple jobs in one call. Response carries `jobs[]` only (no `job`). Mutually exclusive with `url`.
actionYesWatch-job action.
job_idNoRequired for action=check|pause|resume|delete.
selectorNoOptional CSS selector to scope the diff to a subtree (create-only).
notificationNo"inline" (return on next check) or a webhook URL. Default: inline.
interval_secondsNoRequired for action=create. Minimum check interval (min 60).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.3.0
  2. Removedv0.2.0
  3. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Rich disclosure beyond annotations: persistence across restarts, fire-and-forget triggering on sibling tool calls, SSRF rejection at registration, a 60-second floor for target-site rate limits, and best-effort webhook delivery with no retry/queue/backoff. One nuance conflicts with annotations — the description says `create` is idempotent while `idempotentHint=false` — though that hint remains defensible for `check`/`delete`, so this is a clarification rather than a hard 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?

Front-loaded with the single most important fact ('LAZY EXECUTION — NOT CRON') before any parameter detail, and the bulleted parameter block is scannable. A few lines merely restate the schema's action enum and create-only flags, which is the only mild redundancy in an otherwise dense, purposeful text.

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

Completeness5/5

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

Given seven parameters, six actions, no output schema, and an unusual lazy-execution model, the description covers lifecycle, trigger conditions, failure modes, idempotency, and the one return field that matters (`staleness_seconds`). An agent could invoke every action correctly from this text alone.

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

Parameters5/5

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

Schema coverage is already 100%, so the baseline would be 3; the description goes well past it by adding constraints (public http/https only, loopback/RFC 1918/link-local rejected, interval min 60), the forward-compatibility caveat that `selector` is persisted but diffs are currently full-page, and the meaning of `staleness_seconds` (negative = not due, positive = overdue by N).

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

Purpose4/5

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

Opens with a specific verb+resource+outcome: 'Schedule lazy re-checks of a URL and surface diffs on change,' which immediately separates it from the one-shot `fetch`, `crawl`, and `diff` siblings. It does not, however, explicitly name any sibling and contrast itself with `diff` (which presumably does a one-shot comparison), leaving a small inference gap.

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?

Explicitly states when checks fire ('ONLY when: 1... 2...'), what does NOT happen ('no background daemon', 'not cron'), and pairs `list` with `check` to force immediate execution. The action enumerations are each given a context of use rather than left to inference.

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