What it checks
Broken links
Each link gets a HEAD request, with a GET retry when HEAD fails. 4xx/5xx, hosts that don't exist in DNS, connection errors and timeouts are marked broken.
Redirect chains
Every hop is listed with its status and Location, up to 10 hops. Loops are detected, and chains of 3 or more redirects are flagged.
Mixed content
On HTTPS pages, LinkPulse flags http:// scripts, stylesheets and iframes (active) and images and media (passive). It also flags plain-HTTP links and HTTPS→HTTP downgrades.
JSON API + CI
The same check is available at /api/check with a documented, versioned schema. There's also a GitHub Action example that fails a job on broken links.
Limits (honest version)
- One page per check. LinkPulse does not crawl your site and does not run scheduled checks.
- At most 200 links are fetched per check, and a check stops after about 45 seconds. The result says
truncated: truewhen links were left out. On pages with more than 200 links, about half the slots go to hyperlinks and half to images, scripts and stylesheets. - There's a shared daily limit on checks across all users. When it's used up, the API returns HTTP 429 until 00:00 UTC.
- Some sites block or rate-limit cloud IPs and answer 401/403/429. Those links are flagged maybe bot-blocked because they may work fine in a browser.
- Only public http/https URLs on ports 80/443 are checked. Private, loopback and metadata addresses are refused, including public hostnames that resolve to them (checked with DNS before every request).
- Links are read from the HTML as served. Links added later by JavaScript aren't seen.
For AI agents (MCP)
LinkPulse is also a remote Model Context Protocol (MCP) server with one read-only tool, check_links (same engine and limits as the API). Most MCP clients accept this config; some use a different format (for example, VS Code uses a servers key). Clients with a settings screen just need the URL https://linkpulse.mike-tusa.workers.dev/mcp.
{ "mcpServers": { "linkpulse": { "type": "http", "url": "https://linkpulse.mike-tusa.workers.dev/mcp" } } }
Machine-readable docs: llms.txt · OpenAPI 3.1 spec · server card
Privacy
We don't store the URLs you check or the results. Results are cached in memory for about 2 minutes so repeat checks are fast. To enforce the hourly limit, a counter is kept under a keyed one-way hash of your IP (never the IP itself) and deleted after the hour is up. A service-wide daily total of checks is also kept, with no IP attached. To count unique visitors per day, we keep a salted hash of your network address and the date (it changes every day and can't be linked back to an address without our secret key) for 9 days; no IP address is stored with it. No cookies, no third-party analytics, no third-party scripts. Hosted on Cloudflare Workers.