changedetection-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@changedetection-mcpShow me recent changes to my watched pages"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ChangeDetection.io MCP Server
An MCP (Model Context Protocol) server that gives AI agents native access to ChangeDetection.io — the open-source website change detection and monitoring platform.
Features
Watch Management — Create, list, update, delete, and trigger rechecks on watches
Change History — Browse snapshot history and get diffs between any two points in time
Per-watch action fuse —
get_snapshot_diffarms a configurable limit on follow-up mutating actions for that watch so one noisy page cannot cascade into unlimited rechecks or editsTag Management — Organise watches with tags/groups
Search — Full-text search through watches by URL or title
System Info — Quick health and stats readout
Related MCP server: mult-fetch-mcp-server
Why This Exists
No MCP server existed for ChangeDetection.io despite it being one of the most popular self-hosted tools (31k+ GitHub stars). This server fills that gap, letting AI agents:
"Watch this product page and notify me when it changes"
"Show me all my failed watches"
"What changed on this page yesterday?"
"Set up a watch for this job listing"
Quick Start
Prerequisites
A running ChangeDetection.io instance (self-hosted or SaaS)
An API key from Settings → API
Installation
pip install changedetection-mcpConfiguration
Add to your MCP client config (Claude Desktop, Cursor, Hermes Agent, etc.):
{
"mcpServers": {
"changedetection": {
"command": "changedetection-mcp",
"env": {
"CHANGEDETECTION_BASE_URL": "http://localhost:5000",
"CHANGEDETECTION_API_KEY": "your-api-key-here"
}
}
}
}Usage with Hermes Agent
Create ~/.hermes/skills/changedetection/SKILL.md (see skill/ directory) or configure as an MCP server:
hermes mcp add changedetection --command "changedetection-mcp"
hermes config set changedetection.base_url "http://localhost:5000"
hermes config set changedetection.api_key "your-api-key"API Coverage
Tool | Description |
| List all watches (optional tag filter, limit/offset) |
| Get full details of a single watch |
| Create a new watch from a URL |
| Update an existing watch (pause, rename, change schedule, etc.) |
| Delete a watch and all its history |
| Trigger an immediate recheck |
| List change history snapshots for a watch |
| Get diff between two snapshots |
| Full-text search by URL or title |
| List all tags/groups |
| Create a tag for organisation |
| Get server stats (watch count, uptime, version) |
Safety Fuse: Per-Watch Action Limit
When an agent asks for a page diff, that diff can prompt follow-up actions such as immediate rechecks, watch edits, or deletes. To stop one noisy site from triggering a cascade, get_snapshot_diff arms a per-watch fuse before returning.
By default, each diff allows 3 mutating MCP actions for that watch. The fuse applies to:
recheck_watchupdate_watchdelete_watch
After the budget is exhausted, those tools return a clear blocked message instead of calling the ChangeDetection.io API. The fuse is in-process and per watch UUID; watches without an armed fuse are unaffected.
Configuration:
# Default: 3. Set 0 to disable the fuse globally.
export CHANGEDETECTION_MCP_ACTION_LIMIT_PER_WATCH=3Per call, override the default with the optional action_limit argument on get_snapshot_diff:
get_snapshot_diff(uuid="...", from_timestamp="previous", to_timestamp="latest", action_limit=1)Use action_limit=0 to disable the fuse for that watch, or call get_snapshot_diff again with a higher value to re-arm it.
Development
git clone https://github.com/rusty4444/changedetection-mcp.git
cd changedetection-mcp
uv venv
source .venv/bin/activate
uv pip install -e ".[dev]"License
MIT — see LICENSE.
Available Tools
12 toolscreate_tagB
Create a new tag/group for organising watches.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | The tag display name |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. For a mutating tool it discloses nothing about whether duplicate titles are rejected, whether the caller needs prior tag permissions, or whether the new tag is returned immediately, leaving the agent to discover these by trial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the verb and resource, containing no redundant or padded text. Appropriate for a single-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because an output schema exists, return values need not be described. However, for a mutation tool with zero annotations and no stated failure modes or identifier rules, the description is only minimally complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is fully documented in the schema ('The tag display name'), so the baseline is 3. The description's 'tag/group' phrasing adds a small conceptual hint but no format, length, or uniqueness constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create) and resource (tag/group), with the added scope note that tags organise watches. It is clearly distinguishable from list_tags and the watch-* siblings by verb alone, though it never names a sibling or clarifies when creating versus other tag operations applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as list_tags for discovering existing tags before creating a duplicate. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_watchC
Create a new URL watch to monitor for changes.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Optional tag/group name to organise this watch under | |
| url | Yes | The URL to watch for changes | |
| title | No | Optional human-readable title for the watch | |
| paused | No | Start paused (True) or active immediately (False, default) | |
| minutes_between_checks | No | Check interval in minutes (default: 60). Set null for server default. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure, and it says nothing about side effects, auth requirements, duplicate-URL handling, or whether the watch starts active or paused. The paused/interval defaults live only in the schema, so the description adds almost no behavioral context for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence with the verb and resource front-loaded and zero waste. It is efficient, though its brevity reflects under-specification rather than pure conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return-value explanation is correctly omitted, and all parameters are covered by the schema. However, for an unannotated mutation tool the description is thin on behavior and routing, leaving an agent without enough to call it confidently in edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter is self-documented (url, tag, title, paused, minutes_between_checks), so the schema does the heavy lifting. The description adds no format, constraint, or default detail beyond what is already structured.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new URL watch') plus the resource's purpose ('monitor for changes'). Clear enough that an agent distinguishes it from update_watch/delete_watch, but it offers no explicit differentiation from sibling create tools like create_tag.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative guidance. Nothing tells the agent when to create a watch versus using list_watches/search_watches or how this relates to create_tag. Usage is only inferred from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_watchB
Permanently delete a watch and all its history.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | The watch UUID to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the two safety-critical traits: deletion is permanent and cascades to all watch history. However, it omits permissions/auth requirements, any confirmation or recovery semantics, and whether related resources (e.g., snapshots or tags) are affected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the destructive scope stated immediately and zero filler. Nothing is padded or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one fully documented parameter) and an output schema exists, so return values need no explanation. What is missing for a no-annotation destructive tool is any usage context or preconditions, leaving the agent to infer them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% ('The watch UUID to delete'), so the single parameter is fully documented in structured data. The description adds nothing beyond restating the operation, which is the expected baseline when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (delete) plus resource (watch) with a scope qualifier ('and all its history'), so the agent knows exactly what is removed. It is distinguishable from create_watch/update_watch/list_watches by the verb alone, but it never names or contrasts a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no precondition (e.g., look up the watch first via get_watch), and no note on when to prefer update_watch or recheck_watch instead. Usage is only inferable from the verb and the word 'Permanently'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_snapshot_diffC
Get the diff between two snapshots of a watched URL.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | The watch UUID | |
| action_limit | No | Maximum mutating actions this MCP server will allow for this watch after returning the diff. Defaults to CHANGEDETECTION_MCP_ACTION_LIMIT_PER_WATCH (3). Set 0 to disable. | |
| to_timestamp | Yes | Later snapshot timestamp. Use 'latest' or 'previous' as shortcuts. | |
| from_timestamp | Yes | Earlier snapshot timestamp. Use 'latest' or 'previous' as shortcuts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and falls short. Critically, it says nothing about the action_limit parameter's semantics — that this tool consumes a budget of *mutating* actions after returning the diff — so an agent could reasonably assume this is a pure read. It also omits auth requirements, error behavior when a timestamp is invalid, and any rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is efficient, though its brevity edges toward under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the 100% schema coverage handles parameters. However, for a tool with an undocumented side-effect budget (action_limit) and no annotations, the description is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 uuid, from_timestamp, to_timestamp, and action_limit (including the 'latest'/'previous' shortcuts). The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'get the diff between two snapshots of a watched URL' clearly states what the tool returns. It does not, however, distinguish itself from the sibling get_watch_history, which an agent could plausibly confuse with snapshot comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use guidance, no prerequisites (e.g., snapshots must already exist), and never names an alternative such as get_watch_history for listing snapshots. Usage is only faintly inferable from the phrase 'between two snapshots'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_infoA
Get ChangeDetection.io server stats and health.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Get' implies a read-only operation and the output schema documents the returned stats, but the description says nothing about authentication/permission requirements (e.g. admin API key) or any rate limiting. It is a minimal disclosure for a no-parameter diagnostic tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero filler, front-loaded with the verb and the exact resource. Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and an output schema covering return values, the description needs only to name the resource and scope, which it does. The one gap is the absence of any note on access requirements for a server-diagnostics endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and a specific resource ('ChangeDetection.io server stats and health'), so the agent knows exactly what it returns. It doesn't explicitly differentiate itself from the watch/tag siblings, but the system-level scope makes the distinction self-evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the tool for checking server health, but the description gives no explicit when-to-use trigger, no prerequisites, and no mention of alternatives. For a zero-parameter read tool this is adequate but not helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_watchC
Get detailed information about a specific watch.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | The watch UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Get' implies a read, but it says nothing about permissions, behavior for an unknown/invalid UUID, or what 'detailed information' actually encompasses — a vague phrase for a tool whose output schema the agent cannot see in the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero filler. It is efficient, though its brevity borders on under-specification rather than tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a simple single-record getter that is minimally adequate, but with no annotations and no usage context, the definition stops short of what an agent needs to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single 'uuid' parameter documented as 'The watch UUID'. The description adds no format, source, or acquisition guidance for that identifier, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('a specific watch') with the scope narrowed to a single record, which implicitly separates it from list_watches. However, it does not name or distinguish itself from near-neighbors like get_watch_history or get_snapshot_diff.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus list_watches or search_watches, and no mention of prerequisites such as needing a UUID from a prior listing call. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_watch_historyB
List the snapshot history (timestamps) for a watched URL.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | The watch UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden, and it only reveals that the return contains timestamps. It says nothing about ordering (newest first?), pagination, or whether history grows unbounded, though the read-only nature is strongly implied by "List". The presence of an output schema lowers the bar for return-shape disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the action front-loaded and the parenthetical adding real clarification. Nothing is wasted, though the sentence is so short that there was little to trim in the first place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with an output schema, the description covers the core purpose adequately. It omits ordering/pagination expectations and any hint of how this history relates to get_snapshot_diff, which is the main gap given the dense sibling set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (uuid) with 100% schema description coverage, so the schema already documents it as "The watch UUID". The description adds matching scope ("a watched URL") but no format, lookup, or failure semantics beyond that. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (snapshot history) scoped to "a watched URL", which is more precise than the bare name. It does not explicitly contrast itself with nearby siblings like get_watch or get_snapshot_diff, so an agent must infer the boundary. Clear but not sibling-differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus get_watch (current state) or get_snapshot_diff (change comparison), and no note that the uuid must reference an existing watch. Usage is only implied by the name and purpose. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsA
List all tag groups used to organise watches.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read-only operation via the verb 'List' and scope via 'all', but does not disclose pagination, ordering, authentication, or rate-limit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that states the action and scope without wasted words. Nothing is repeated or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of a zero-parameter list tool and the presence of an output schema, the description covers what an agent needs to invoke it. Its gaps are minor: no indication of ordering or pagination, but the output schema handles return-value details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics to explain. The baseline for zero parameters is 4, and the description adds no misleading parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('tag groups used to organise watches'), making clear what the tool returns and distinguishing it from siblings like list_watches or create_tag. An agent can tell this tool apart without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance and names no alternatives. It simply states the tool's function, leaving the agent to infer that this is the route for retrieving tag groups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_watchesB
List all watched URLs with their current status.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Optional tag name to filter by |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'List' reasonably implies a read-only operation and 'with their current status' hints at the payload, but pagination, result limits, and whether status history is included are all unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is efficient, though perhaps slightly under-specified rather than genuinely concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because an output schema exists, the description needn't explain return values, and it names what is returned. The remaining gap is the failure to position this against search_watches, which an agent will need in order to pick the right tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single optional 'tag' parameter is documented in the schema itself. The description adds nothing about filtering semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List all watched URLs') plus the returned payload ('their current status'), so the operation is unambiguous. It does not, however, distinguish itself from the sibling search_watches, leaving a potential overlap for the agent to resolve.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of the neighboring alternatives such as search_watches or get_watch. The agent must infer that this is the unfiltered enumeration path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recheck_watchB
Trigger an immediate recheck of a watch URL.
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | The watch UUID to recheck |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says only 'trigger an immediate recheck' and discloses nothing about whether the call blocks or is async, whether it can be rate-limited, what permissions are required, or whether the recheck changes stored data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, which is appropriate for a one-parameter action tool. It is efficient, though it leaves room for one more sentence of behavioral context without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the single required parameter is fully documented. The remaining gap is behavioral — for a state-changing trigger with no annotations, the description says nothing about effects, permissions, or rate limits, leaving it only minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With one parameter at 100% schema description coverage, the schema already documents 'uuid' as 'The watch UUID to recheck'. The description's phrase 'a watch URL' adds slight framing but no format, source, or validation detail beyond what the schema supplies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb ('trigger') with a specific resource ('a watch URL') and the action is clearly a state-changing recheck, distinct from the read/CRUD siblings like get_watch or update_watch. It does not, however, explicitly name any sibling or contrast itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the tool to call when it wants an on-demand refresh rather than a scheduled one, but the description states no conditions, prerequisites, or alternatives (e.g. when to prefer it over get_watch_history).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_watchesB
Search watches by URL or title.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Optional tag name to narrow results | |
| query | Yes | Search term |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Search' implies a read-only operation, but nothing is said about pagination, result caps, matching semantics, or ordering. For a tool with zero annotation coverage this is a significant gap, though an output schema exists to handle return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that front-loads the verb and resource with no wasted words. Appropriately sized for a two-parameter search tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and both parameters are covered by the schema. What is missing is routing context against the many sibling watch tools, particularly list_watches, leaving the definition just barely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented (query = 'Search term', tag = 'Optional tag name to narrow results'). The description's 'by URL or title' marginally informs what query matches but omits the tag parameter entirely, adding little beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Search watches') plus the matching fields ('by URL or title'), which lets an agent understand the operation. However, it does not distinguish itself from the sibling list_watches, so an agent cannot tell from the description alone which of the two to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus list_watches, which is the obvious alternative for enumerating watches. It also doesn't note that the tag parameter can constrain results, so the routing logic is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_watchC
Update an existing watch's settings.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | New tag / group assignment | |
| url | No | New URL to monitor | |
| uuid | Yes | The watch UUID | |
| title | No | New title for the watch | |
| paused | No | Pause (True) or resume (False) the watch | |
| minutes_between_checks | No | New check interval in minutes. Set null to keep existing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose whether updates are partial or full, whether omitted fields are preserved, what permissions are required, or whether the change is reversible — all relevant for a mutation tool. The only partial-update hint ('Set null to keep existing') lives in the schema, not the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that front-loads the verb and resource with no filler. It is efficient, though the brevity reflects under-specification rather than tight coverage of necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with no annotations, the description omits critical behavioral context: update semantics, permission requirements, and any side effects. An output schema exists so return values need not be explained, but the mutation behavior itself is left entirely to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 every parameter (tag, url, title, paused, minutes_between_checks, uuid). The description adds no syntax, format, or constraint detail beyond it, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (update) and resource (watch) with the scope 'existing watch's settings', which is clear enough to distinguish from create_watch and delete_watch. It stops short of naming or contrasting those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'existing watch' implies the tool targets already-created watches, but there is no guidance on when to use this versus create_watch, delete_watch, or recheck_watch, and no prerequisites (e.g., needing the UUID) are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v0.1.0- First observed
create_tag - First observed
create_watch - First observed
delete_watch - First observed
get_snapshot_diff - First observed
get_system_info - First observed
get_watch - First observed
get_watch_history - First observed
list_tags - First observed
list_watches - First observed
recheck_watch - First observed
search_watches - First observed
update_watch
TDQS
Scored across 12 tools
Each tool maps to a distinct resource/action (watch CRUD, recheck, history/diff, tags, search, system info). The only near-overlap is list_watches vs search_watches, but descriptions clearly delineate filtering versus listing all.
All names follow a consistent snake_case verb_noun pattern (list_, get_, create_, update_, delete_, recheck_, search_). No stylistic deviations.
12 tools is well-scoped for a change-detection server, covering the essential watch lifecycle, snapshots, tags, and health without bloat.
Core watch lifecycle (CRUD + recheck + history/diff) and search are present, but tag management only supports list/create (no update/delete) and there is no direct snapshot content retrieval beyond diff. These are minor gaps.
Maintenance
Related MCP Connectors
AI-powered website change monitoring - manage monitors and alerts via MCP.
Turn any public website into an MCP server for agents to search, read and navigate.
An MCP server that integrates with Discord to provide AI-powered features.
Official MCP server for Agentwork — delegate tasks to AI agents with human-in-the-loop
Related MCP Servers
- AlicenseCqualityDmaintenanceAn MCP server that integrates with the Agent.ai API to provide web text extraction, web screenshots, and YouTube transcript capabilities through a dynamic function loading system.10014 npm4MIT
- AlicenseAqualityBmaintenanceAn MCP server that enables AI assistants to fetch web content in multiple formats (HTML, JSON, text, Markdown) with intelligent content extraction, chunk management, and browser automation support.578 npm15MIT
- AlicenseNot gradedqualityAmaintenanceMCP server that lets AI agents use your real browser as an API, accessing any website with your login state, no keys or scrapers needed.1MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server for monitoring website changes. Enables tracking URLs, detecting content changes, comparing snapshots, and extracting content with CSS selectors from an AI assistant.5 npmMIT