
Official MCP RegistryListed
DiffiCat
Compare a website before and after a migration: missing pages, content changes, visual diffs.
First seen 2 Oct 2026. Evidence as of 6 Oct 2026.
12
Tools
From an anonymous probe
1
Source listings
Each with its own history
18
Recorded changes
Since first seen
Tools
| Tool | Description | Behaviour |
|---|---|---|
| cancel_comparison | Stop a running job; the job reports cancelled within a minute, with the pages compared so far in its report. Free. | Destructive |
| capture_screenshot | Free 3 times a day per client address, no key needed. Full-page PNG of one URL at the given viewport width, returned inline when small, else as links.file to fetch with the jobToken. Call it for a one-off look at a page or a mobile-width check. Do not call it for pages a comparison job covers: get_report names their screenshots for get_screenshot. Example: { "url": "https://new.example/pricing", "viewportWidth": 375 }. Answers with jobId, jobToken, filename, url, dimensions, bytes, links.file and, on a free run, sample and allowanceRemaining. | Changes data |
| discover_pages | Free 3 times a day per client address (at most 50 pages each), no key needed. Lists the pages of Site A (sitemap, robots.txt or crawl), mapped onto Site B when given. Call it to see which pages a comparison would cover or to pick pairs for urls. Do not call it before start_comparison only to price a job: a job without urls discovers for itself. Lists at most maxPages pages, 500 without it (up to 5000 when paid); truncated: true means the ceiling cut the list. Example: { "sourceUrl": "https://old.example", "targetUrl": "https://new.example", "maxPages": 50 }. Answers with pages (sourceUrl, targetUrl, path), strategy, truncated and, on a free run, sample and allowanceRemaining. | Changes data |
| get_balance | The prepaid balance and the last 20 ledger entries of the key the request carries in its Authorization: Bearer or X-DiffiCat-Key header. Call it to check what a key can still pay for; request_prepaid_key is the way to obtain a key. For a Pro account’s key the balance is 0.00 and allowance (included pages, pages used, reset time) and overage (amount this period, cap) are returned instead. Free. | Read-only |
| get_comparison | Status and progress of a job and, once it is terminal, its summary: passed, failed and issuesBySeverity. To wait for the end, call wait_for_comparison instead. Free. | Read-only |
| get_report | The finished report. Call it first with failedOnly: true: results, total and nextOffset then cover only the pages that failed, while summary still covers every page. Each result is { path, status, failedChecks } by default; responseFormat: "detailed" returns the full per-check fields, diffs and screenshot names. Without failedOnly, a slice of every page's result (offset and limit, default 50 a call, at most 5000; nextOffset points at the next slice). The text block is the plain-text report over the slice; includeText: true also puts it in structuredContent.text. limit: 1 returns the summary with one result. view: "digest" returns one small object per page with its issues and diff percentage and a one-line-per-page text block. Do not call it while the job runs: wait_for_comparison first. Free. | Read-only |
| get_screenshot | Fetch one screenshot PNG by filename. Call it when a get_report page result or a capture_screenshot result names a screenshot you want to see; a PNG over the inline cap comes back as links.file to fetch with the jobToken. Free. | Read-only |
| recover_comparison | Returns the job or screenshot the payment credential in _meta paid for, with a new jobToken that replaces the old one; or, when the request carries a key and _meta no credential, the latest job that key paid for (no jobToken: the key reads it). Call it when a paid call’s result never arrived. Do not call it for a free run, which records no credential. Free. | Changes data |
| request_prepaid_key | Mints a prepaid key and a Checkout link for a human to pay by card, so later paid calls are debited from its balance instead of challenged. Call it when a call was refused for payment and your human prefers a card to a wallet; with a key already on the request it tops that key up instead. Do not call it to learn a price (use start_comparison with dryRun) or while the free allowance still covers the work. Example: { "amountUsd": 10 }. Free. | Changes data |
| send_feedback | Sends one message to the people who run this service: why a price, a payment path or a result did not fit. Call it when you stop short of a paid call or a result was not what the task needed; a person reads every message. Do not call it to report a job failure you can retry. Example: { "topic": "price", "message": "Too expensive for 200 pages", "quotedAmount": "3.00", "pages": 200 }. Free. | Changes data |
| start_comparison | Free up to 10 pages a day per client address, no key needed; sample report: https://difficat.com/agents/sample/report.json. Compares Site A against Site B on page existence, content and visual regression, priced on the pages it compares. Call it for a migration or redesign check: sourceUrl and targetUrl let discovery pick the pages (maxPages caps them), or urls names the pairs; then wait_for_comparison until it ends and get_report with failedOnly: true. Not for one page you only want to see: that is capture_screenshot. dryRun: true answers the page count and price (0.02 USD a page, 0.01 beyond 1000) without charging; a job above the remaining free allowance is refused with a payment challenge carrying nextSteps for your human. maxPriceUsd refuses a dearer job before any challenge. Example: { "urls": [{ "source": "https://old.example/a", "target": "https://new.example/a" }] }. Answers with jobId, jobToken, status, pagesCharged and, on a free run, sample and allowanceRemaining. | Changes data |
| wait_for_comparison | Waits until the job reaches a terminal status (completed, failed or cancelled) or timeoutSeconds pass (default 60, at most 300), then answers like get_comparison: status, progress and, once terminal, the summary with passed, failed and issuesBySeverity. A wait that runs out answers status "running"; call it again. Free. | Read-only |
Change history
- wait_for_comparison: input schema changed
- start_comparison: input schema changed (+checkMode, +idempotencyKey)
- start_comparison: description changed (+"Free up to 10 pages a day per client address, no key needed; sample report: https://difficat.com/agents/sample/report.json. Compares" +"regression, priced on" +"pages it compares. Call it for a migration")
- send_feedback: tool added
- request_prepaid_key: tool added
- recover_comparison: input schema changed
- recover_comparison: description changed (+"one; or, when the request carries a key and _meta no credential, the latest job that key paid for (no jobToken: the key reads it). Call it when" +"call’s" +"Do not call it for a free run, which records no credential.")
- get_screenshot: input schema changed
- get_report: input schema changed (+responseFormat, +view)
- get_report: description changed (+"Each result is { path, status, failedChecks } by default; responseFormat: "detailed" returns the full per-check fields, diffs and screenshot names." +"failedOnly," +"view: "digest" returns one small object per page with its issues and diff percentage and a one-line-per-page text block. Do not call it while the job runs: wait_for_comparison first.")
- get_comparison: input schema changed
- get_balance: description changed (+"in its" +"X-DiffiCat-Key header. Call it to check what a key can still pay for; request_prepaid_key is the way to obtain a key." -"as")
- discover_pages: input schema changed
- discover_pages: description changed (+"Free 3 times a day per client address (at most 50 pages each), no key needed. Lists" +"robots.txt" +"Call it to see which pages a comparison would cover")
- capture_screenshot: input schema changed (+idempotencyKey)
- capture_screenshot: description changed (+"Free 3 times a day per client address, no key needed." +"URL at" +"given viewport width, returned inline when small, else as")
- cancel_comparison: input schema changed
- server instructions changed (+"returns concise entries ({ path, status, failedChecks }) unless responseFormat: "detailed" is passed and" +"separate call" +"or screenshot")
| Source | Listing | First seen | Last seen | Versions |
|---|---|---|---|---|
| Official MCP Registry | com.difficat/difficat | 2 Oct 2026 | 6 Oct 2026 | 1 |