{
  "markdown": "# Linkinator MCP Server\n\n[![npm version](https://img.shields.io/npm/v/linkinator-mcp.svg)](https://www.npmjs.com/package/linkinator-mcp)\n[![CI](https://github.com/JustinBeckwith/linkinator-mcp/actions/workflows/ci.yaml/badge.svg)](https://github.com/JustinBeckwith/linkinator-mcp/actions/workflows/ci.yaml)\n[![Biome](https://img.shields.io/badge/code%20style-biome-60a5fa?style=flat&logo=biome)](https://biomejs.dev/)\n[![codecov](https://codecov.io/gh/JustinBeckwith/linkinator-mcp/branch/main/graph/badge.svg)](https://codecov.io/gh/JustinBeckwith/linkinator-mcp)\n\n![linkinator-mcp](https://raw.githubusercontent.com/JustinBeckwith/linkinator-mcp/main/site/linkinator-mcp.webp)\n\nA Model Context Protocol (MCP) server that provides link checking capabilities using [linkinator](https://github.com/JustinBeckwith/linkinator). This allows AI assistants like Claude to scan webpages and local files for broken links.\n\n## Features\n\n- **Comprehensive Link Checking**: Scan websites and local files for broken links\n- **Recursive Crawling**: Follow links within the same domain\n- **Multiple Content Types**: Check links in HTML, CSS, and Markdown files\n- **Fragment Validation**: Verify anchor links and URL fragments\n- **Flexible Configuration**: Extensive options for timeouts, retries, SSL, and more\n- **Detailed Reporting**: Get status codes, broken links grouped by error type, and parent page information\n\n## Quick Setup (Automatic)\n\nThe easiest way to get started is using the `install-mcp` tool, which automatically configures linkinator-mcp for Claude Desktop, Claude Code, Cursor, Cline, and other MCP clients:\n\n```bash\nnpx install-mcp linkinator-mcp --client claude\n```\n\nThis handles all configuration automatically. Restart your Claude client after installation.\n\n## Manual Configuration\n\nIf you prefer to configure the server manually, you can edit your MCP client's configuration file directly.\n\n### Claude Code\n\n#### macOS/Linux\n\nEdit `~/.config/claude-code/config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"linkinator\": {\n      \"command\": \"npx\",\n      \"args\": [\"linkinator-mcp\"]\n    }\n  }\n}\n```\n\n#### Windows\n\nEdit `%APPDATA%\\claude-code\\config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"linkinator\": {\n      \"command\": \"npx\",\n      \"args\": [\"linkinator-mcp\"]\n    }\n  }\n}\n```\n\n#### Alternative: Global Installation\n\nIf you prefer to install the package globally first with `npm install -g linkinator-mcp`, you can simplify the configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"linkinator\": {\n      \"command\": \"linkinator-mcp\"\n    }\n  }\n}\n```\n\n### Claude Desktop\n\n#### macOS/Linux\n\nEdit `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"linkinator\": {\n      \"command\": \"npx\",\n      \"args\": [\"linkinator-mcp\"]\n    }\n  }\n}\n```\n\n#### Windows\n\nEdit `%APPDATA%\\Claude\\claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"linkinator\": {\n      \"command\": \"npx\",\n      \"args\": [\"linkinator-mcp\"]\n    }\n  }\n}\n```\n\n### Restart Your Client\n\nAfter updating the configuration, restart your Claude client for the changes to take effect.\n\n## Usage Examples\n\nOnce configured, you can ask Claude to check links on any webpage or local file. Here are some example prompts:\n\n### Basic Link Checking\n\n```text\nCheck all the links on https://example.com\n```\n\n### Recursive Scanning\n\n```text\nScan https://example.com recursively and check all links on the same domain\n```\n\n### Local File Checking\n\n```text\nCheck the links in /path/to/my/documentation/index.html\n```\n\n### Advanced Options\n\n```text\nCheck https://example.com with the following options:\n- Recurse through all pages\n- Check CSS for URLs\n- Validate anchor fragments\n- Skip links to google.com and facebook.com\n- Use a 10 second timeout\n```\n\n## Available Options\n\nThe `scan_page` tool supports all of linkinator's CLI options:\n\n### Required\n\n- **path** (string): URL or local file path to scan\n\n### Connection Settings\n\n- **concurrency** (number): Number of simultaneous connections (default: 100)\n- **port** (number): Server port for local scanning (random port by default)\n- **timeout** (number): Request timeout in milliseconds (0 = no timeout)\n\n### Crawling Behavior\n\n- **recurse** (boolean): Follow links recursively on the same domain\n- **serverRoot** (string): Custom disk location where the server starts\n- **directoryListing** (boolean): Auto-serve directory index files\n- **cleanUrls** (boolean): Enable extensionless link resolution (e.g., /about → /about.html)\n\n### Content Parsing\n\n- **markdown** (boolean): Parse and scan markdown files\n- **checkCss** (boolean): Extract and validate URLs in CSS properties\n- **checkFragments** (boolean): Validate URL anchor identifiers\n\n### Filtering & Customization\n\n- **linksToSkip** (string[]): URL patterns to exclude (regex strings)\n- **userAgent** (string): Custom user agent header\n\n### Retry Logic\n\n- **retry** (boolean): Retry HTTP 429 responses with retry-after header\n- **retryErrors** (boolean): Retry 5xx errors\n- **retryErrorsCount** (number): Retry attempt limit\n- **retryErrorsJitter** (number): Random delay between retries in milliseconds\n\n### SSL & Security\n\n- **allowInsecureCerts** (boolean): Accept invalid SSL certificates\n\n## Output Format\n\nThe tool returns a formatted report showing:\n\n```text\nLinkinator Scan Results for: https://example.com\n\nSummary:\n  Status: ✓ PASSED / ✗ FAILED\n  Total Links: 150\n  OK: 145\n  Broken: 5\n  Skipped: 0\n\nBroken Links:\n\n  Status 404:\n    - https://example.com/missing-page\n      Found on: https://example.com/index.html\n    - https://example.com/old-blog-post\n      Found on: https://example.com/blog.html\n\n  Status 500:\n    - https://api.example.com/endpoint\n      Found on: https://example.com/docs.html\n```\n\n## Troubleshooting\n\n### Server Not Appearing in Claude Code\n\n1. Check that the path in `config.json` is absolute, not relative\n2. Verify the build directory exists: `ls /path/to/linkinator-mcp/build/index.js`\n3. Check Claude Code logs for errors\n4. Ensure Node.js is in your PATH\n\n### Permission Errors\n\nIf you get permission errors on macOS/Linux:\n\n```bash\nchmod +x /path/to/linkinator-mcp/build/index.js\n```\n\n### Port Already in Use\n\nIf scanning local files and getting port errors, try specifying a port:\n\n```text\nCheck /path/to/files with port 9000\n```\n\n## Contributing\n\nContributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to get started.\n\n## License\n\nMIT\n\n## Related Projects\n\n- [linkinator](https://github.com/JustinBeckwith/linkinator) - The underlying link checking library\n- [MCP Servers](https://github.com/modelcontextprotocol/servers) - Collection of MCP server implementations\n- [Claude Code](https://claude.ai/claude-code) - AI coding assistant that uses MCP\n\n## Author\n\nJustin Beckwith <justin.beckwith@gmail.com>\n\n## Acknowledgments\n\nBuilt with the [Model Context Protocol](https://modelcontextprotocol.io/) SDK.\n",
  "bytes": 6890,
  "sha": "3f759065759288cc97b755eb079ad5d91ee5a9b3b0e0a79638f663dbbb4d9a86",
  "repo_slug": "justinbeckwith/linkinator-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_justinbeckwith_linkinator_mcp_cad42f77/readme"
}