Skip to main content
Glama
LeoW19

Deep Learning with Python MCP Knowledge Base

by LeoW19
README.md
# Deep Learning with Python — MCP Knowledge Base

An MCP (Model Context Protocol) server that turns the book *Deep Learning
with Python* (François Chollet) into a searchable knowledge base, so Claude
can act as a deep-learning/ML expert grounded in the book's content.

The server runs locally over **stdio**. It reads the PDF in [input/](input/)
and builds an in-memory index of the book's ~200 leaf sections (down to
subsections like `3.4.3`) from the PDF's own bookmark outline. The book has to be put in place manually.

## Roadmap
- [x] Create MCP MVP
- [ ] Connect and validate
- [ ] Add error handling
- [ ] Add MCP inspector

## Setup

```powershell
# from the project root
pip install -r requirements.txt
```

Requires the book PDF at `input/Deep_Learning_with_Python_Chollet.pdf`

## Running standalone

```powershell
.venv\Scripts\python.exe server.py
```

This blocks, speaking MCP over stdio — it's meant to be launched by an MCP
client, not run interactively. Ctrl+C to stop.

## Connecting to a client

**Claude Code** (from the project root):

```powershell
claude mcp add dl-python-expert -- "C:\Users\leowa\Projekte\mcp_deepLearning\.venv\Scripts\python.exe" "C:\Users\leowa\Projekte\mcp_deepLearning\server.py"
```

**Claude Desktop** — add to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "dl-python-expert": {
      "command": "C:\\Users\\leowa\\Projekte\\mcp_deepLearning\\.venv\\Scripts\\python.exe",
      "args": ["C:\\Users\\leowa\\Projekte\\mcp_deepLearning\\server.py"]
    }
  }
}
```

## What's registered

**Tools**
- `search_book(query, top_k=5)` — keyword-ranked search over all book
  sections; returns id, title, breadcrumb, page, and a snippet.
- `get_section(section_id)` — full text of one section by id (e.g. `3.4.3`,
  `6.2.2`), as returned by `search_book` or `list_sections`. Only leaf
  sections are addressable; a heading with subsections (e.g. `5.1`) is not
  itself fetchable — use its children instead.
- `list_sections(chapter=None)` — no argument lists chapters/appendices;
  passing one of those exact strings lists its sections and ids.

**Resource**
- `book://toc` — the full table of contents with section ids and page
  numbers, for browsing structure without a tool call.

**Prompt**
- `explain_concept(topic)` — instructs Claude to search the book, cite
  section id and page for claims, and include the book's Keras code
  examples where relevant.

## Example usage

Once connected, ask Claude things like:

> Using the DL knowledge base, explain how dropout fights overfitting, with
> the book's code example.

Claude will call `search_book`, pull the relevant section(s) via
`get_section`, and answer citing e.g. `[4.4.3] Adding dropout (p. 130)`.

## Design notes / known limitations

- **Search** is simple keyword/term-overlap scoring (stdlib only) — no
  embeddings. Good enough for retrieval-then-explain; Claude does the actual
  reasoning.
- **Section granularity** is leaf-only. A few sentences of "chapter intro"
  text that sits between a parent heading and its first subsection isn't
  attached to any section and is effectively skipped.
- The index is rebuilt from the PDF on every server start (~3s for 384
  pages); there's no persistent cache, by design, so book content never
  lands in a file that could accidentally get committed.
- Indexed scope is the book's technical content only (chapters 1–9 +
  appendices A/B) — front matter and the back-of-book index are excluded.

## Files

- `server.py` — entry point; creates the `MCPServer`, registers tools from
  `tools.py`, runs over stdio.
- `tools.py` — tool/resource/prompt definitions.
- `knowledge_base.py` — PDF loading, outline-based section indexing, and
  search.
- `input/` — source PDF (gitignored).