{
  "serverInfo": {
    "name": "linkpulse",
    "title": "LinkPulse",
    "version": "0.3.0"
  },
  "transport": {
    "type": "streamable-http",
    "url": "https://linkpulse.mike-tusa.workers.dev/mcp"
  },
  "authentication": {
    "required": false
  },
  "tools": [
    {
      "name": "check_links",
      "title": "Check one web page for broken links and redirect chains",
      "description": "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.",
      "inputSchema": {
        "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
      },
      "outputSchema": {
        "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"
        ]
      },
      "annotations": {
        "title": "Check links on a page",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    }
  ],
  "resources": [],
  "prompts": []
}