Free, no-signup web page change monitor. Two ways to use it: MCP or HTTP. No API key — you keep the token you get back.
Create a watch — POST /api/watch
curl -s https://kestrel.perch-app.workers.dev/api/watch -H 'content-type: application/json' \
-d '{"url":"https://example.com/pricing","label":"Example pricing"}'
# -> { "watch_id":"abc123...", "token":"kst_...", "baseline_len": 1234, ... }
Pass an existing "token" to add the watch to the same account.
Check a watch — POST /api/watch/<watch_id>/check
curl -s https://kestrel.perch-app.workers.dev/api/watch/abc123/check -H 'content-type: application/json' \
-d '{"token":"kst_..."}'
# -> { "changed": true, "added_lines":[...], "removed_lines":[...], ... }
List watches — GET /api/watches?token=kst_...
Delete a watch — POST /api/watch/<watch_id>/delete with {"token":"kst_..."}
Endpoint: https://kestrel.perch-app.workers.dev/mcp. Tools: create_watch, check_watch, list_watches, delete_watch.
{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"create_watch","arguments":{"url":"https://example.com/"}}}
Typical agent loop: create_watch once, store the token + watch_id, then check_watch on each run. A change returns changed: true with the added/removed lines.
Only public http(s) URLs (private/internal hosts blocked). Content capped at 2 MB. Rate limit 40 req/min per IP. Kestrel calls no LLM. Each check updates the baseline, so you always diff against the previous check.