A Model Context Protocol (MCP) server for web content scanning and analysis. This server provides tools for fetching, analyzing, and extracting information from web pages.
- Page Fetching: Convert web pages to Markdown for easy analysis
- Link Extraction: Extract and analyze links from web pages
- Site Crawling: Recursively crawl websites to discover content
- Link Checking: Identify broken links on web pages
- Pattern Matching: Find URLs matching specific patterns
- Sitemap Generation: Generate XML sitemaps for websites
To install Webscan for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install mcp-server-webscan --client claude
# Clone the repository
git clone <repository-url>
cd mcp-server-webscan
# Install dependencies
npm install
# Build the project
npm run build
npm start
The server runs on stdio transport, making it compatible with MCP clients like Claude Desktop.
-
fetch-page
- Fetches a web page and converts it to Markdown.
- Parameters:
url
(required): URL of the page to fetch.selector
(optional): CSS selector to target specific content.
-
extract-links
- Extracts all links from a web page with their text.
- Parameters:
url
(required): URL of the page to analyze.baseUrl
(optional): Base URL to filter links.limit
(optional, default: 100): Maximum number of links to return.
-
crawl-site
- Recursively crawls a website up to a specified depth.
- Parameters:
url
(required): Starting URL to crawl.maxDepth
(optional, default: 2): Maximum crawl depth (0-5).
-
check-links
- Checks for broken links on a page.
- Parameters:
url
(required): URL to check links for.
-
find-patterns
- Finds URLs matching a specific pattern.
- Parameters:
url
(required): URL to search in.pattern
(required): JavaScript-compatible regex pattern to match URLs against.
-
generate-site-map
- Generates a simple XML sitemap by crawling.
- Parameters:
url
(required): Root URL for sitemap crawl.maxDepth
(optional, default: 2): Maximum crawl depth for discovering URLs (0-5).limit
(optional, default: 1000): Maximum number of URLs to include in the sitemap.
- Configure the server in your Claude Desktop settings:
{
"mcpServers": {
"webscan": {
"command": "node",
"args": ["path/to/mcp-server-webscan/build/index.js"], // Corrected path
"env": {
"NODE_ENV": "development",
"LOG_LEVEL": "info" // Example: Set log level via env var
}
}
}
}
- Use the tools in your conversations:
Could you fetch the content from https://example.com and convert it to Markdown?
- Node.js >= 18
- npm
mcp-server-webscan/
├── src/
│ ├── config/
│ │ └── ConfigurationManager.ts
│ ├── services/
│ │ ├── CheckLinksService.ts
│ │ ├── CrawlSiteService.ts
│ │ ├── ExtractLinksService.ts
│ │ ├── FetchPageService.ts
│ │ ├── FindPatternsService.ts
│ │ ├── GenerateSitemapService.ts
│ │ └── index.ts
│ ├── tools/
│ │ ├── checkLinksTool.ts
│ │ ├── checkLinksToolParams.ts
│ │ ├── crawlSiteTool.ts
│ │ ├── crawlSiteToolParams.ts
│ │ ├── extractLinksTool.ts
│ │ ├── extractLinksToolParams.ts
│ │ ├── fetchPageTool.ts
│ │ ├── fetchPageToolParams.ts
│ │ ├── findPatterns.ts
│ │ ├── findPatternsToolParams.ts
│ │ ├── generateSitemapTool.ts
│ │ ├── generateSitemapToolParams.ts
│ │ └── index.ts
│ ├── types/
│ │ ├── checkLinksTypes.ts
│ │ ├── crawlSiteTypes.ts
│ │ ├── extractLinksTypes.ts
│ │ ├── fetchPageTypes.ts
│ │ ├── findPatternsTypes.ts
│ │ ├── generateSitemapTypes.ts
│ │ └── index.ts
│ ├── utils/
│ │ ├── errors.ts
│ │ ├── index.ts
│ │ ├── logger.ts
│ │ ├── markdownConverter.ts
│ │ └── webUtils.ts
│ ├── initialize.ts
│ └── index.ts # Main server entry point
├── build/ # Compiled JavaScript (Corrected)
├── node_modules/
├── .clinerules
├── .gitignore
├── Dockerfile
├── LICENSE
├── mcp-consistant-servers-guide.md
├── package.json
├── package-lock.json
├── README.md
├── RFC-2025-001-Refactor.md
├── smithery.yaml
└── tsconfig.json
npm run build
npm run dev
The server implements comprehensive error handling:
- Invalid parameters
- Network errors
- Content parsing errors
- URL validation
All errors are properly formatted according to the MCP specification.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
MIT License - see the LICENSE file for details