docs-search-engine
Allows searching documentation from GitHub repositories by downloading, indexing, and retrieving markdown content for use in AI assistant context.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@docs-search-engine Search for 'context' in the FastMCP docs."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Documentation Search Engine
A custom Model Context Protocol (MCP) server that acts as a documentation search engine.
This project attempts to build a simple, personal clone of Context7, unlocking the capability to access up-to-date documentation from GitHub repositories and web pages directly within your AI assistant's context.
š ļø Tech Stack
Python: Core programming language.
FastMCP: Framework for building MCP servers easily.
minsearch: Lightweight, in-memory full-text search engine.
uv: Fast Python package and environment manager.
Jina Reader: For turning web pages into LLM-friendly markdown.
requests: For handling HTTP requests and downloading zip files.
pytest: For comprehensive testing.
Related MCP server: CHECK-MODULE MCP Server
š Project Structure
docs-search-engine/
āāā main.py # Entry point: Defines MCP tools and server configuration
āāā search.py # Core logic: Zip download, extraction, indexing, and search
āāā scrape_web.py # Web scraping functionality (using Jina Reader)
āāā test_search.py # Tests for search functionality
āāā test_scrape_web.py # Tests for web scraping
āāā pyproject.toml # Project dependencies and configurationš Workflow
Ingestion: The server downloads documentation source code (e.g., as a
.zipfrom GitHub).Indexing: Markdown content (
.mdand.mdx) is extracted and indexed in-memory usingminsearch.Caching: Indexes are cached by URL to ensure fast subsequent searches without re-downloading.
Retrieval: Users query the system via MCP tools (
search_docs,scrape_web), and relevant context is returned to the LLM.
āļø MCP Configuration
Add the following configuration to your MCP client settings (e.g., mcp_config.json in Google Antigravity):
{
"mcpServers": {
"docs-search-engine": {
"command": "uv",
"args": [
"run",
"--directory",
"C:/Users/username/path/to/docs-search-engine",
"main.py"
]
}
}
}Note: Replace C:/Users/username/path/to/docs-search-engine with the actual absolute path to your project directory.
š” Example Usage
Once the MCP server is connected to your AI assistant (e.g., VSCode, Claude, Cursor, Antigravity), you can use natural language to interact with it.
1. Search Documentation
"Search for 'context' in the FastMCP docs.""Find information about 'indexing' in the minsearch docs (https://github.com/alexeygrigorev/minsearch)."2. Scrape Web Pages
"Scrape the content of https://example.com/blog/article and summarize it."3. Count Word Occurrences
"Count how many times the word 'LLM' appears on https://example.com/ai-trends."š» Setup & Execution
Prerequisites
Python 3.13+
uvinstalled (recommended)
Installation
Clone the repository and navigate to the directory:
cd docs-search-engineInstall dependencies:
uv sync
Running Locally
To run the server manually for debugging:
uv run main.pyTesting
Run the comprehensive test suite to ensure everything is working correctly:
# Run all tests
uv run pytest -v
# Run specific test files
uv run pytest test_search.py -v
uv run pytest test_scrape_web.py -v
# Run only integration tests
uv run pytest -m integration -vAvailable Tools
3 toolscount_word_occurrencesA
Count occurrences of a specific word on a web page.
This tool scrapes a web page and counts how many times a specific word appears in the content.
Args: url: The URL of the web page to analyze. word: The word to search for and count. case_insensitive: If True, count is case-insensitive (default: True).
Returns: A dictionary with the count and additional info.
Inputs: url (required), word (required), case_insensitive. Returns: object
scrape_webA
Scrape the content of a web page using Jina Reader.
This tool fetches the content of any web page and returns it in markdown format using the Jina Reader service.
Args: url: The URL of the web page to scrape (must be http or https).
Returns: The content of the web page in markdown format.
Inputs: url (required). Returns: result
search_docsA
Search documentation from a GitHub repository zip file.
This tool downloads documentation from a GitHub repository (as a zip), indexes the markdown files, and returns the most relevant documents matching the query. The index is cached for subsequent searches.
Args: query: The search query string. zip_url: URL to the GitHub zip file (default: FastMCP docs). Format: https://github.com/{owner}/{repo}/archive/refs/heads/{branch}.zip num_results: Maximum number of results to return (default: 5).
Returns: A list of matching documents with filename and content preview.
Examples: # Search FastMCP docs (default) search_docs("demo")
# Search minsearch docs
search_docs("index", zip_url="https://github.com/alexeygrigorev/minsearch/archive/refs/heads/main.zip")Inputs: query (required), zip_url, num_results. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogā¦
TDQS
Scored across 3 tools
scrape_web and count_word_occurrences both involve scraping a URL, so there is slight overlap, but count_word_occurrences is clearly a specialized analysis and search_docs is distinct. An agent can generally select the right tool from the stated purpose.
All three tool names use a consistent verb_noun snake_case pattern (scrape_web, count_word_occurrences, search_docs), making the set predictable and easy to navigate.
Three tools is a small but reasonable surface for a focused toolkit; only one tool actually performs documentation search, which feels slightly lean for a server named docs-search-engine, but no tool is redundant.
The core function of searching a GitHub repository's docs is implemented, but cache management and indexing of arbitrary scraped pages are not supported. These gaps are minor and can be worked around by passing a new zip_url or relying on the automatic index.
Maintenance
Related MCP Connectors
Turn a GitHub repo or docs site into agent-ready context: pack it or search it, over MCP.
Search and fetch AI agent skills, rules files and MCP servers indexed from GitHub.
An MCP server that gives your AI access to the source code and docs of all public github repos
Read-only MCP server for the OrchestKit docs: full-text search + Markdown fetch. No auth.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceIndexes documentation sites by base URL and serves keyword search, optional semantic search, and Markdown page retrieval as MCP tools, all from a single SQLite file.-
- AlicenseAqualityDmaintenanceEnables managing internal documentation with search and add capabilities, and fetching official documentation from 13+ popular libraries via MCP tools.69MIT
- AlicenseNot gradedqualityBmaintenanceSelf-hosted documentation and code indexing with MCP integration.24MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access up-to-date documentation by indexing GitHub repositories and official docs, providing semantic search through MCP.30 npm7MIT