1. Conduid
  2. Scraping
  3. Doctor
MCP server · Scraping

Doctor

Doctor is a tool for discovering, crawl, and indexing web sites to be exposed as an MCP server for LLM agents.

Unclaimed MIT last commit a year ago scraping
52Fair

Scored 12 hours ago · breakdown

About Doctor

Doctor is an MCP server published by sisig-ai in the Scraping category: doctor is a tool for discovering, crawl, and indexing web sites to be exposed as an MCP server for LLM agents.

The repository has 458 stars and 67 forks, with the last commit a year ago. Six months or more without a commit doesn't mean the server is broken, but check the open issues before depending on it in production.

Install

From source
git clone https://github.com/sisig-ai/doctor

This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.

Ask AI

✦

Ask AI about Doctor

Powered by Claude · Grounded in docs

I know everything about Doctor. Ask me about installation, configuration, usage, or troubleshooting.

Security checks

Static checks derived from the repository 11 hours ago. Heuristics on the source, not an audit.

  • ✓README presentThe repository ships documentation.
  • ✓License declaredUsable under a stated license.
  • ✓Tests presentA test suite exists in the repository.
  • ✓Dependencies pinnedA lockfile pins dependency versions.
  • ✓No dynamic code executionSource scan found no eval, dynamic Function, or shell execution.

1 check has not been run yet.

Releases

v0.3.1v0.3.1 · 24 May 2025What's Changed Implement site map feature with domain grouping and legacy page support by @kix-sisigai in https://github.com/sisig-ai/doctor/pull/12 🎉 New Site Map Feature You can now see a map of sites you've crawled by going to `/map`.…
v0.3.0v0.3.0 · 23 May 2025What's Changed Fix DatabaseOperation wrapper by @kix-sisigai in https://github.com/sisig-ai/doctor/pull/6 Database optimizations, BM25 full-text search support by @kix-sisigai in https://github.com/sisig-ai/doctor/pull/11 This releases…
v0.2.2v0.2.2 · 21 May 2025What's Changed Remove missing scripts folder from Dockerfile by @kix-sisigai in https://github.com/sisig-ai/doctor/pull/5 Full Changelog: https://github.com/sisig-ai/doctor/compare/v0.2.1...v0.2.2
v0.2.1v0.2.1 · 20 May 2025Add experimental BM25 hybrid search, major database refactor. Full Changelog: https://github.com/sisig-ai/doctor/compare/v0.2.0...v0.2.1
v0.2.0v0.2.0 - Add MIT License, remove Qdrant · 13 May 2025What's Changed 🔪 Remove qdrant, move all vector storing to duckdb by @kix-sisigai in https://github.com/sisig-ai/doctor/pull/1 Remove VSS availability checks from tests by @kix-sisigai in https://github.com/sisig-ai/doctor/pull/2 Full…

README

Python Version License Python Tests codecov

A tool for discovering, crawl, and indexing web sites to be exposed as an MCP server for LLM agents for better and more up-to-date reasoning and code generation.


🔍 Overview

Doctor provides a complete stack for:

  • Crawling web pages using crawl4ai with hierarchy tracking
  • Chunking text with LangChain
  • Creating embeddings with OpenAI via litellm
  • Storing data in DuckDB with vector search support
  • Exposing search functionality via a FastAPI web service
  • Making these capabilities available to LLMs through an MCP server
  • Navigating crawled sites with hierarchical site maps

🏗️ Core Infrastructure

🗄️ DuckDB

  • Database for storing document data and embeddings with vector search capabilities
  • Managed by unified Database class

📨 Redis

  • Message broker for asynchronous task processing

🕸️ Crawl Worker

  • Processes crawl jobs
  • Chunks text
  • Creates embeddings

🌐 Web Server

  • FastAPI service exposing endpoints
  • Fetching, searching, and viewing data
  • Exposing the MCP server

💻 Setup

⚙️ Prerequisites

  • Docker and Docker Compose
  • Python 3.10+
  • uv (Python package manager)
  • OpenAI API key

📦 Installation

  1. Clone this repository
  2. Set up environment variables:
    export OPENAI_API_KEY=your-openai-key
    
  3. Run the stack:
    docker compose up
    

👁 Usage

  1. Go to http://localhost:9111/docs to see the OpenAPI docs
  2. Look for the /fetch_url endpoint and start a crawl job by providing a URL
  3. Use /job_progress to see the current job status
  4. Configure your editor to use http://localhost:9111/mcp as an MCP server

☁️ Web API

Core Endpoints

  • POST /fetch_url: Start crawling a URL
  • GET /search_docs: Search indexed documents
  • GET /job_progress: Check crawl job progress
  • GET /list_doc_pages: List indexed pages
  • GET /get_doc_page: Get full text of a page

Site Map Feature

The Maps feature provides a hierarchical view of crawled websites, making it easy to navigate and explore the structure of indexed sites.

Endpoints:

  • GET /map: View an index of all crawled sites
  • GET /map/site/{root_page_id}: View the hierarchical tree structure of a specific site
  • GET /map/page/{page_id}: View a specific page with navigation (parent, siblings, children)
  • GET /map/page/{page_id}/raw: Get the raw markdown content of a page

Features:

  • Hierarchical Navigation: Pages maintain parent-child relationships, allowing you to navigate through the site structure
  • Domain Grouping: Pages from the same domain crawled individually are automatically grouped together
  • Automatic Title Extraction: Page titles are extracted from HTML or markdown content
  • Breadcrumb Navigation: Easy navigation with breadcrumbs showing the path from root to current page
  • Sibling Navigation: Quick access to pages at the same level in the hierarchy
  • Legacy Page Support: Pages crawled before hierarchy tracking are grouped by domain for easy access
  • No JavaScript Required: All navigation works with pure HTML and CSS for maximum compatibility

Usage Example:

  1. Crawl a website using the /fetch_url endpoint
  2. Visit /map to see all crawled sites
  3. Click on a site to view its hierarchical structure
  4. Navigate through pages using the provided links

🔧 MCP Integration

Ensure that your Docker Compose stack is up, and then add to your Cursor or VSCode MCP Servers configuration:

"doctor": {
    "type": "sse",
    "url": "http://localhost:9111/mcp"
}

🧪 Testing

Running Tests

To run all tests:

# Run all tests with coverage report
pytest

To run specific test categories:

# Run only unit tests
pytest -m unit

# Run only async tests
pytest -m async_test

# Run tests for a specific component
pytest tests/lib/test_crawler.py

Test Coverage

The project is configured to generate coverage reports automatically:

# Run tests with detailed coverage report
pytest --cov=src --cov-report=term-missing

Test Structure

  • tests/conftest.py: Common fixtures for all tests
  • tests/lib/: Tests for library components
    • test_crawler.py: Tests for the crawler module
    • test_crawler_enhanced.py: Tests for enhanced crawler with hierarchy tracking
    • test_chunker.py: Tests for the chunker module
    • test_embedder.py: Tests for the embedder module
    • test_database.py: Tests for the unified Database class
    • test_database_hierarchy.py: Tests for database hierarchy operations
  • tests/common/: Tests for common modules
  • tests/services/: Tests for service layer
    • test_map_service.py: Tests for the map service
  • tests/api/: Tests for API endpoints
    • test_map_api.py: Tests for map API endpoints
  • tests/integration/: Integration tests
    • test_processor_enhanced.py: Tests for enhanced processor with hierarchy

🐞 Code Quality

Pre-commit Hooks

The project is configured with pre-commit hooks that run automatically before each commit:

  • ruff check --fix: Lints code and automatically fixes issues
  • ruff format: Formats code according to project style
  • Trailing whitespace removal
  • End-of-file fixing
  • YAML validation
  • Large file checks

Setup Pre-commit

To set up pre-commit hooks:

# Install pre-commit
uv pip install pre-commit

# Install the git hooks
pre-commit install

Running Pre-commit Manually

You can run the pre-commit hooks manually on all files:

# Run all pre-commit hooks
pre-commit run --all-files

Or on staged files only:

# Run on staged files
pre-commit run

⚖️ License

This project is licensed under the MIT License - see the LICENSE.md file for details.

README fetched from the repository 11 hours ago. The original is authoritative.

Questions

About Doctor

How do I install Doctor?

No package has been published for this server, so install it from source: clone the repository and follow its README.

Is Doctor safe to use with an AI agent?

Its trust score is 52 out of 100 (fair). It passes 5 of the 5 static security checks run so far. It has no ConduID identity yet, so agent calls to it are not receipted.

Is Doctor still maintained?

The last commit was a year ago and 9 open issues. That's long enough that you should check whether the maintainer is responding to issues before depending on it.