4.2 KiB
Les 15 — Huiswerk
Voeg een eigen tool toe aan je Polderfest MCP server
Vak: AI-Assisted Development Opleiding: NOVI Hogeschool Utrecht Werkvorm: take-home (±1–2 uur) Deadline: vóór Les 16
Doel
Je breidt je Polderfest MCP server uit met minimaal één eigen tool. Daarmee laat je zien dat je het patroon van server.tool() zelf kunt toepassen — en je geeft Cursor een nieuwe mogelijkheid die er niet eerder was.
Wat je gaat doen
Stap 1 — Bedenk een tool
Kies één van de voorbeelden hieronder, of bedenk er zelf één.
Voorbeeld A — findBandsByVibe
Input: een vibe-omschrijving (string, bv. "donker en stoer" of "vrolijk zonnig"). Output: 5 bands die bij die vibe passen.
Implementatie-hint: gebruik searchBands onderliggend met een keyword-mapping, of vraag de AI om de vibe te interpreteren als genre.
Voorbeeld B — comparePerformances
Input: twee dagen (day1, day2).
Output: vergelijking — hoeveel bands per stage, populairste genres, schema-conflicten.
Voorbeeld C — recommendForGenres
Input: een lijst favoriete genres (string array). Output: aanbevolen bands die in die genres vallen, gegroepeerd per dag.
Voorbeeld D — getBandDetails
Input: bandnaam (string). Output: alle info over die band — stage, dag, tijd, genre, eventueel duurtijd-berekening.
Voorbeeld E — searchByTimeSlot
Input: dag + tijdsblok (day, from, to).
Output: welke bands spelen er in dat blok.
Stap 2 — Implementeer
Open app/api/mcp/route.ts in je Polderfest MCP folder. Voeg je tool toe onder de bestaande tools.
Template:
server.tool(
"naamVanTool",
"Korte beschrijving — wat doet hij. Goede beschrijvingen helpen de AI te beslissen wanneer hij de tool aanroept.",
{
// Zod input-schema
arg1: z.string(),
arg2: z.enum(["optie1", "optie2"]).optional(),
},
async ({ arg1, arg2 }) => {
// Jouw logica — meestal een Supabase-query
const { data } = await supabase.from("bands")./* ... */;
return {
content: [
{ type: "text", text: JSON.stringify(data, null, 2) },
],
};
},
);
Stap 3 — Lokaal testen
npm run dev
In Cursor: stel een vraag die je nieuwe tool zou moeten aanroepen. Check dat:
- De MCP-indicator je tool laat zien
- Cursor de tool aanroept (zie tool-call output in chat)
- De output zinvol is
Stap 4 — Pushen + deployen
git add .
git commit -m "feat: <jouw tool-naam>"
git push
Vercel deploy't automatisch zodra je naar main pusht. Wacht ±45 seconden.
Stap 5 — Test op productie
In Cursor (mcp.json wijst al naar productie-URL), stel dezelfde vraag. Check dat het ook live werkt.
Op te leveren (via Teams)
- GitHub repo URL met je nieuwe tool
- Korte beschrijving (3–5 zinnen):
- Welke tool heb je gebouwd?
- Welke probleem lost hij op?
- Met welke prompt heb je hem in Cursor getest?
- Twee screenshots:
- Cursor chat waar je tool aangeroepen wordt (zichtbaar in tool-call output)
- De output die Cursor met je tool gaf
Deadline: vóór Les 16 (volgende week).
Beoordeling
| Criterium | Punten |
|---|---|
Tool is gedefinieerd met juiste server.tool() signature |
25% |
Input-schema gebruikt Zod correct (geen any) |
15% |
Tool returnt valide MCP-output ({ content: [...] }) |
15% |
| Tool werkt lokaal én op productie | 25% |
| Beschrijving + screenshots compleet | 20% |
Tips
- Hou de tool focused. Eén ding goed doen is beter dan vijf dingen half.
- Schrijf een goede description. De AI leest die om te beslissen wanneer hij hem aanroept. Zwakke beschrijving = tool wordt niet gebruikt.
- Test met meerdere prompts. Sommige tools worden alleen aangeroepen bij heel specifieke woorden — probeer variaties.
- Gebruik Cursor om Cursor te bouwen. Vraag in een aparte Cursor chat: "Schrijf een MCP tool voor X gebaseerd op de patronen in @file:app/api/mcp/route.ts". Meta!
Vooruitblik
In Les 16 (RAG + Embeddings) ga je verder met je Supabase project, dus zorg dat:
- Je MCP server live blijft staan
- Je huiswerk-tool werkt (we komen erop terug)
- Je
.cursor/mcp.jsoncorrect wijst naar productie
Veel succes!