LinkPulse
Check one web page for broken links, redirect chains hop by hop and mixed content. Free, no key.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"linkpulse": {
"url": "https://linkpulse.mike-tusa.workers.dev/mcp"
}
}
}Remote endpoints
https://linkpulse.mike-tusa.workers.dev/mcpstreamable-httpWhat it can do
Tool inventory
Tools (1)
🟢check_links(url, assets, max)
Fetch ONE public web page and check up to 200 of its links and assets: broken links (4xx/5xx, hosts that don't exist, connection errors, timeouts), redirect chains hop by hop (long chains, loops, https-to-http downgrades), mixed content and links that may just block bots (401/403/429, flagged maybe_bot_blocked). Not a crawler: other pages are not visited. Private/loopback/metadata targets are refused, including names that resolve to them. Takes up to about 45 seconds. Returns counts plus up to 25 problem links. Read-only. Same engine and limits as GET /api/check.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Public http(s) page URL, e.g. https://example.com/. A URL without a scheme is treated as https://.",
"minLength": 1,
"maxLength": 2048
},
"assets": {
"type": "boolean",
"description": "Also check images, scripts, stylesheets, iframes and media (default true). false = only <a>/<area> links."
},
"max": {
"type": "integer",
"description": "How many links to check, 1-200 (default 200).",
"minimum": 1,
"maximum": 200
}
},
"required": [
"url"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The page URL as requested."
},
"final_url": {
"type": "string"
},
"page_status": {
"type": "integer"
},
"page_redirects": {
"type": "integer"
},
"page_hops": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"status": {
"type": "integer"
},
"location": {
"type": "string"
}
},
"required": [
"url"
]
},
"maxItems": 11
},
"summary": {
"type": "object",
"description": "Counts: linksFound, uniqueLinks, checked, ok, redirected, broken, blocked, unchecked, mixedContent, insecureLinks, longChains, redirectLoops, maybeBotBlocked, resolvesPrivate.",
"additionalProperties": {
"type": "integer"
}
},
"truncated": {
"type": "boolean",
"description": "True when not every link on the page was checked (link cap, budget or time limit)."
},
"truncated_reasons": {
"type": "array",
"items": {
"type": "string"
}
},
"problems": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"category": {
"type": "string",
"enum": [
"broken",
"blocked",
"unchecked",
"redirect",
"ok"
]
},
"status": {
"type": "integer",
"description": "Final HTTP status (omitted when nothing was fetched)."
},
"final_url": {
"type": "string"
},
"redirects": {
"type": "integer"
},
"error_code": {
"type": "string"
},
"flags": {
"type": "array",
"items": {
"type": "string"
}
},
"kind": {
"type": "string"
}
},
"required": [
"url",
"category"
]
},
"maxItems": 25,
"description": "Links needing attention (broken first, then blocked, unchecked, redirects with flags such as long_chain or https_downgrade, then other flagged links). At most 25 here; see problems_total."
},
"problems_total": {
"type": "integer"
},
"problems_returned": {
"type": "integer"
},
"not_checked_count": {
"type": "integer"
},
"checked_at": {
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"url",
"page_status",
"summary",
"truncated",
"problems",
"problems_total"
]
}Community
Evidence