# LinkPulse > Free broken-link and redirect-chain checker for one web page at a time: fetches the page, checks up to 200 of its links and assets, and lists every redirect hop, broken link, redirect loop and mixed-content reference. Public JSON API plus a remote MCP server for AI agents. No account, no key. ## For AI agents - [MCP server](https://linkpulse.mike-tusa.workers.dev/mcp): remote MCP over Streamable HTTP (POST only, stateless, JSON responses). Protocol versions: 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05. Tools: `check_links` (url, assets, max). Read-only. Client config (most MCP clients accept this; some use a different format, for example VS Code uses a `servers` key): `{"mcpServers":{"linkpulse":{"type":"http","url":"https://linkpulse.mike-tusa.workers.dev/mcp"}}}` - [OpenAPI 3.1 spec](https://linkpulse.mike-tusa.workers.dev/openapi.json): machine-readable description of the JSON API - [Docs](https://linkpulse.mike-tusa.workers.dev/docs): human-readable API docs, response schema and a GitHub Action ## JSON API - `GET https://linkpulse.mike-tusa.workers.dev/api/check?url=https://example.com/` (optional `assets=false` = only / links, `max=1..200`), or `POST https://linkpulse.mike-tusa.workers.dev/api/check` with JSON `{"url": "...", "assets": true, "max": 200}` (body at most 8 KB). Only public http/https URLs on ports 80/443. - Result (schema `linkpulse.check.v1`): page (status, finalUrl, redirects, hops), summary counts (ok, redirected, broken, blocked, unchecked, mixedContent, longChains, redirectLoops, maybeBotBlocked, resolvesPrivate), links[] (category ok/redirect/broken/blocked/unchecked, status, every hop, flags), truncated + truncatedReasons, notChecked, limits, timings. - One page per check, up to 200 links, about 45 s at most. Not a crawler. Links added by JavaScript are not seen. - Errors: { "error": { "code", "message" } } with 400 (invalid_url, invalid_scheme, credentials_in_url, invalid_request), 403 (blocked_target, blocked_port, blocked_redirect), 404 (not_found), 405 (method_not_allowed), 413 (invalid_request: body over 8 KB), 422 (dns_not_found), 429 (rate_limited, with Retry-After and error.scope ip/global/burst), 500 (internal_error), 502 (page_fetch_failed, dns_error, bad_redirect, redirect_loop, too_many_redirects, budget_exceeded), 504 (page_timeout). - `GET https://linkpulse.mike-tusa.workers.dev/api/health`: version, limits and rate limits. ## Limits and keys - No API keys yet; everyone is anonymous. 20 checks per hour per IP plus a burst limit of about 10 per minute, and 400 checks per day shared by all users (HTTP 429 until 00:00 UTC when used up). The MCP endpoint uses the same counters: each `check_links` call is one check (it lists at most 25 problem links; the summary counts are complete). Identical checks within about 2 minutes are served from cache and don't count. Non-call MCP messages don't count as checks, but are capped at about 120/min per IP (HTTP 429 + Retry-After). Max MCP body 65536 bytes; max URL 2048 characters. - Free. There is no paid plan. ## Optional - [Privacy](https://linkpulse.mike-tusa.workers.dev/#privacy): checked URLs and results are not stored. A keyed hash of your IP is used for the hourly limit and deleted after the hour; a salted, daily-rotating hash of your network is kept for up to 9 days to count unique visitors per day. No IP address is stored. - Contact: digitalpromohub.support@gmail.com