This commit is contained in:
2026-06-17 07:15:32 +02:00
parent c023192113
commit ad8b25e70c
115 changed files with 6316 additions and 16971 deletions

View File

@@ -1,14 +1,14 @@
# Les 16: Model Context Protocol — Bouw je eigen MCP-server
# Les 16: RAG + Embeddings — Praat met je documenten
> ✅ **Deze les is volledig uitgewerkt**
## Lesmateriaal
- [Slide Overzicht](../Les16-MCP/Les16-Slide-Overzicht.md)
- [Docenttekst](../Les16-MCP/Les16-Docenttekst.md)
- [Lesstof](../Les16-MCP/Les16-Lesstof.md)
- [Lesopdracht](../Les16-MCP/Les16-Lesopdracht.md)
- [Huiswerk](../Les16-MCP/Les16-Huiswerk.md)
- [Slide Overzicht](../Les16-RAG-Embeddings/Les16-Slide-Overzicht.md)
- [Docenttekst](../Les16-RAG-Embeddings/Les16-Docenttekst.md)
- [Lesstof](../Les16-RAG-Embeddings/Les16-Lesstof.md)
- [Lesopdracht](../Les16-RAG-Embeddings/Les16-Lesopdracht.md)
- [Huiswerk](../Les16-RAG-Embeddings/Les16-Huiswerk.md)
---
@@ -16,65 +16,64 @@
**Deel 3 — AI Development** (Les 11-16)
## Beschrijving
MCP (Model Context Protocol) is de open standaard waarmee Anthropic, OpenAI en de community AI-clients koppelen aan tools en data. We bouwen een eigen MCP-server voor Polderfest-data en laden hem in Cursor én Claude Desktop.
Hoe laat je een LLM antwoorden op basis van documenten die hij nooit heeft gezien? Antwoord: Retrieval-Augmented Generation (RAG). We bouwen een PDF Q&A-app from scratch met embeddings, vector search (pgvector) en context-injectie.
---
## Te Behandelen
### Theorie
- Wat is MCP en waarom bestaat het?
- Het probleem: tools zitten nu vast aan één app
- MCP-architectuur: server, client, transport (stdio, HTTP)
- Tools vs. Resources vs. Prompts
- Bestaande MCP-ecosysteem (filesystem, git, Slack, GitHub)
- MCP vs. Tool Calling — wanneer welke?
- Het probleem: LLM kent jouw documenten niet
- Twee oplossingen: alles meesturen vs. RAG
- Wat zijn embeddings? (vectoren, semantische gelijkenis)
- pgvector in Supabase: tabel-setup + index
- De RAG-loop: chunk → embed → store → query → retrieve → answer
- Limieten en valkuilen (chunking, recall vs. precision)
### Live demo's
1. MCP SDK installeren + eerste server met 1 tool
2. Server laden in Cursor + in Claude Desktop
3. Eigen Polderfest MCP-server (search, stats, schedule)
4. Resources en Prompts toevoegen
5. Server publiceren op npm
1. Nieuwe Next.js-app + Supabase met pgvector
2. PDF parsen + chunking strategie
3. Embeddings genereren via OpenAI `text-embedding-3-small`
4. Vector-search route + top-K retrieval
5. Chat-interface met context-injectie
---
## Tools
- `@modelcontextprotocol/sdk` (TypeScript)
- Cursor (`.cursor/mcp.json`)
- Claude Desktop (`claude_desktop_config.json`)
- Node.js + TypeScript
- Vercel AI SDK v6
- Supabase + pgvector extension
- OpenAI embeddings API
- pdf-parse / unpdf voor PDF-extractie
---
## Lesopdracht (in-class, 60 min)
Studenten kijken mee. In-class oefening:
- Clone de Polderfest MCP-starter
- Voeg een eigen tool toe (`getBandByCountry`)
- Laad de server in Cursor of Claude Desktop
- Test of de AI je tool vindt en gebruikt
Studenten kijken klassikaal mee. In-class oefening:
- Upload een eigen PDF in de demo-app
- Stel 5 vragen — beoordeel de antwoorden
- Probeer een vraag die NIET in de PDF staat: wat gebeurt er?
**Inleveren:** Screenshot van werkende MCP-tool in Cursor/Claude.
**Inleveren:** Screenshot van Q&A-sessie + reflectie 1 alinea.
---
## Huiswerk (take-home)
Bouw een MCP-server voor je eigen domein:
- Minimaal 3 tools
- 1 resource (bijv. een doc-bestand)
- 1 prompt-template
- README met installatie-instructies voor Cursor
Bouw een eigen RAG-app:
- Eigen dataset (handleidingen, notities, eigen blog)
- Werkende vector-search met pgvector
- Chat-UI met source-attribution (welke chunks gebruikt?)
- Deploy naar Vercel
**Inleveren:** GitHub URL via Teams.
**Inleveren:** GitHub + Vercel URL.
---
## Leerdoelen
Na deze les kan de student:
- MCP uitleggen aan een collega (waarom + hoe)
- Een eigen MCP-server opzetten met de TypeScript SDK
- Een server laden in Cursor en/of Claude Desktop
- Het verschil tussen Tool, Resource en Prompt benoemen
- Bepalen wanneer een MCP-server vs. inline tool calling past
- Het RAG-pattern uitleggen aan een collega
- pgvector configureren in Supabase
- PDF-content chunken en embedden
- Een werkende vector-search query schrijven
- Bepalen wanneer RAG vs. alles-meesturen vs. fine-tuning past