mcp-node-tasks-02-primitives
Click on "Install 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., "@mcp-node-tasks-02-primitivesAdd a high priority task: Prepare presentation"
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.
MCP node tasks 02 - primitives
Dette projekt er anden del af vores praktiske introduktion til Model Context Protocol, forkortet MCP.
I del 1 havde vi en almindelig Node.js-applikation, der læste tasks fra en JSON-fil.
I denne del laver vi projektet om til en MCP-server.
Serveren udstiller:
Type | Navn | Funktion |
Resource |
| Læser alle tasks |
Tool |
| Opretter en ny task |
Prompt |
| Giver en fast struktur til task-analyse |
Formål
Efter denne del skal du kunne forklare:
Hvad resources, tools og prompts er
Hvorfor resources normalt er read-only
Hvorfor tools kræver mere omtanke
Hvordan en lokal MCP-server kan køre med stdio
Hvorfor
console.log()kan give problemer i en stdio-baseret MCP-serverHvordan serveren kan testes med MCP Inspector
Hvordan serveren kan kobles på Claude Desktop eller Cursor
Related MCP server: task-manager-mcp
Projektstruktur
mcp-node-tasks-02-primitives/
├── data/
│ └── tasks.json
├── docs/
│ └── images/
│ ├── Screenshot-2025-05-28-182048-1.png
│ └── lifecyclemcp-1.svg
├── src/
│ ├── server.js
│ └── taskStore.js
├── package.json
└── README.mdBilleder
Kopier disse billeder fra zip-filen til projektet:
docs/images/Screenshot-2025-05-28-182048-1.png
docs/images/lifecyclemcp-1.svgMCP primitives
En MCP-server kan udstille capabilities.
I dette projekt bruger vi tre centrale capabilities:

Capability | Forklaring | Eksempel i projektet |
Resource | Read-only data |
|
Tool | En handling |
|
Prompt | En arbejdsgang |
|
Den vigtigste huskeregel er:
Resources giver AI'en noget at vide.
Tools får AI'en til at gøre noget.
Prompts giver AI'en en arbejdsform.Resource: tasks://all
En resource er data, som kan læses uden at ændre noget.
I dette projekt er resource:
tasks://allDen læser alle tasks fra:
data/tasks.jsonResource-koden ændrer ikke filen. Den giver kun AI’en kontekst.
Tool: add_task
Et tool er en funktion, der udfører en handling.
I dette projekt er tool:
add_taskDet opretter en ny task i:
data/tasks.jsonTool’et tager to input:
Parameter | Forklaring |
| Titlen på den nye task |
|
|
Eksempel på input:
{
"title": "Lav demo til undervisning",
"priority": "high"
}Fordi tool’et ændrer data, er det mere følsomt end en resource.
Prompt: analyze_tasks
En prompt er en genbrugelig promptskabelon eller arbejdsgang.
I dette projekt er prompten:
analyze_tasksDen beder AI’en om at læse tasklisten og analysere, hvilke opgaver der bør prioriteres først.
Prompten ændrer ikke data. Den giver modellen en arbejdsform.
Resource, tool og prompt i samme case
Behov | MCP-type | Hvorfor |
AI’en skal kende tasklisten | Resource | Det er viden |
AI’en skal oprette en ny task | Tool | Det er en handling |
AI’en skal analysere opgaverne | Prompt | Det er en arbejdsgang |
Hvordan hænger Claude, MCP og koden sammen?
flowchart TD
A["Claude Desktop<br>MCP host"]
B["claude_desktop_config.json<br>Starter serveren"]
C["src/server.js<br>MCP-server"]
D["Resource: tasks://all<br>Læs alle tasks"]
E["Tool: add_task<br>Opret ny task"]
F["Prompt: analyze_tasks<br>Fast analyse"]
G["src/taskStore.js<br>Node.js fil-logik"]
H["data/tasks.json<br>Projektets data"]
A --> B
B -->|"node src/server.js"| C
C --> D
C --> E
C --> F
D --> G
E --> G
G --> H
F --> ADiagrammet viser, at Claude ikke læser tasks.json direkte.
Claude starter først vores MCP-server ud fra claude_desktop_config.json.
src/server.js er MCP-laget. Her definerer vi, hvad Claude må bruge:
tasks://allsom resourceadd_tasksom toolanalyze_taskssom prompt
src/taskStore.js indeholder den almindelige Node.js-logik til at læse og skrive tasks.
data/tasks.json er kun datafilen.
Det vigtige er opdelingen af ansvar:
Del | Ansvar |
Claude Desktop | Host, hvor brugeren arbejder |
Claude config | Starter MCP-serveren |
| Udstiller MCP capabilities |
| Håndterer fil-logik |
| Indeholder data |
Claude taler altså med MCP-serveren. MCP-serveren bruger derefter vores Node.js-kode til at læse eller ændre data.
Lifecycle
Et typisk MCP-flow kan forklares i fire faser:
Fase | Hvad sker der? |
Initialization | Client og server etablerer forbindelse |
Discovery | Clienten spørger serveren, hvilke capabilities der findes |
Execution | Clienten kalder en resource, et tool eller en prompt |
Termination | Forbindelsen lukkes pænt |
Discovery er vigtig, fordi clienten kan spørge serveren, hvad den kan, i stedet for at alt er hardcoded.
Installation
Kør:
npm installVigtig pointe om npm start
Du kan godt køre:
npm startMen serveren vil se ud som om, den ikke gør noget.
Det er normalt.
En MCP-server med stdio venter på, at en MCP-client taler med den. Derfor tester vi den med MCP Inspector, Claude Desktop eller Cursor.
Test med MCP Inspector
Kør:
npm run inspectI Inspector kan du teste:
Resource:
tasks://allTool:
add_taskPrompt:
analyze_tasks
Denne server bruger stdio
Stdio betyder, at MCP-clienten og MCP-serveren kommunikerer via standard input og standard output.
Derfor må serveren ikke skrive almindelige logs med:
console.log("Server startet");Det kan ødelægge MCP-kommunikationen, fordi stdout bruges til MCP-beskeder.
Brug i stedet:
console.error("Server startet");console.error() skriver til stderr og forstyrrer ikke MCP-kommunikationen.
Claude eller Cursor konfiguration
Når projektet virker i MCP Inspector, kan det kobles på Claude Desktop eller Cursor.
Eksempel:
{
"mcpServers": {
"mcp-node-tasks-02": {
"command": "node",
"args": [
"C:\\Users\\mikc\\IdeaProjects\\mcp-node-tasks-02-primitives\\src\\server.js"
]
}
}
}Ret stien, så den passer til din egen computer.
På Windows skal du enten bruge dobbelt backslash:
C:\\Users\\mikc\\IdeaProjects\\mcp-node-tasks-02-primitives\\src\\server.jseller forward slashes:
C:/Users/mikc/IdeaProjects/mcp-node-tasks-02-primitives/src/server.jsMiniøvelse
Åbn src/server.js.
Find:
Resource-koden
Tool-koden
Prompt-koden
Svar derefter på:
Hvad er resource i projektet?
Hvad er tool i projektet?
Hvad er prompt i projektet?
Hvorfor er
add_taskmere risikabel endtasks://all?Hvorfor er det en god idé at starte med stdio?
Forslag til svar
tasks://all er en resource, fordi den kun læser data.
add_task er et tool, fordi det ændrer data.
analyze_tasks er en prompt, fordi den giver AI’en en fast arbejdsgang.
add_task er mere risikabel end tasks://all, fordi den skriver til data/tasks.json.
Stdio er godt til lokal undervisning, fordi det ikke kræver port, Express-server eller deployment.
Ekstra øvelse
Tilføj en ny task med MCP Inspector.
Kontroller bagefter, at filen er ændret:
data/tasks.jsonSpørgsmål:
Hvor kan du se side effect?
Hvorfor er det vigtigt, at tool’et har tydelige input?
Hvad kunne gå galt, hvis
priorityikke blev valideret?
Næste trin
I næste del bygger vi en custom MCP-client i Node.js.
Den skal kunne:
Starte MCP-serveren via stdio
Lave discovery
Liste tools, resources og prompts
Kalde
tasks://allKalde
add_taskHente prompten
analyze_tasks
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Tools
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/krollchristensen/mcp-node-tasks-02-primitives'
If you have feedback or need assistance with the MCP directory API, please join our Discord server