MCP Node Tasks 05 - Sampling

MCP Node Tasks 05 - Sampling

An MCP server that demonstrates sampling, enabling the server to request LLM completions from the client to assist in workflow tasks like planning work sessions.

Category
访问服务器

README

MCP node tasks 05 - sampling

Dette projekt er femte del af vores praktiske introduktion til Model Context Protocol, forkortet MCP.

I de tidligere dele har vi arbejdet med:

  • Del 1: Arkitektur og begreber
  • Del 2: MCP-server med resource, tool og prompt
  • Del 3: Custom MCP-client
  • Del 4: Samlet workflow med tools, resources og prompts
  • Del 5: Sampling

I denne del ser vi på sampling.

Sampling betyder, at en MCP-server kan bede clientens LLM om hjælp midt i et workflow.

Vigtig pointe

I de første dele gik flowet primært denne vej:

Client -> server

Med sampling kan serveren også spørge tilbage:

Server -> clientens LLM -> server

Det betyder, at serveren kan bruge modelhjælp uden selv at have en LLM API-nøgle.

Formål

Efter denne del skal du kunne forklare:

  • Hvad sampling er
  • Hvorfor sampling kræver client-support
  • Hvordan sampling adskiller sig fra almindelige tool calls
  • Hvordan en server kan bede clienten om modelhjælp
  • Hvordan en client-side sampling handler fungerer
  • Hvorfor fallback og fejlhåndtering er vigtigt
  • Hvorfor sampling kan give sikkerheds- og privatlivsproblemer

Projektstruktur

mcp-node-tasks-05-sampling/
├── data/
│   ├── project-guide.md
│   └── tasks.json
├── docs/
│   └── images/
│       ├── image-26.png
│       ├── image-28.png
│       └── image-29.png
├── src/
│   ├── server.js
│   ├── samplingClient.js
│   └── taskStore.js
├── package.json
└── README.md

## Hvad er sampling?

Sampling er en MCP-mekanisme, hvor serveren kan bede clienten om en LLM-completion.

Eksempel:

1. Clienten kalder et tool på serveren.
2. Serveren læser data.
3. Serveren har brug for en AI-formuleret analyse.
4. Serveren sender en sampling request til clienten.
5. Clienten bruger sin LLM eller sampling handler.
6. Serveren modtager svaret.
7. Serveren returnerer det endelige tool-resultat.

## Hvorfor bruger vi en custom client?

Claude Desktop og Cursor kan være gode til tools, men sampling afhænger af, om hosten understøtter MCP sampling.

Derfor tester vi sampling med en custom client:

```text
src/samplingClient.js

Den starter serveren og registrerer en sampling handler.

Hvad er en sampling handler?

En sampling handler er en funktion på client-siden.

Den kaldes, når serveren sender en sampling request.

I et rigtigt setup kan handleren kalde en LLM.

I dette undervisningseksempel bruger vi en simpel lokal handler uden API-nøgle.

Det gør flowet lettere at forstå.

Serverens capabilities

Serveren udstiller både tidligere capabilities og et nyt sampling-tool.

Type Navn Funktion
Resource tasks://all Læser alle tasks
Resource tasks://open Læser kun åbne tasks
Resource project://guide Læser projektets prioriteringsguide
Tool add_task Opretter en ny task
Tool complete_task Markerer en task som færdig
Tool sample_next_work_session Bruger sampling til at foreslå næste arbejdssession

Samlet sampling-flow

flowchart TD
    A["npm run sampling"]
    B["src/samplingClient.js<br>Custom MCP client"]
    C["Sampling handler<br>Simuleret LLM-svar"]
    D["src/server.js<br>MCP-server"]
    E["Tool<br>sample_next_work_session"]
    F["Resource data<br>project-guide + open tasks"]
    G["sampling/createMessage<br>Server spørger clienten"]
    H["Tool-resultat<br>Plan for næste session"]
    I["data/project-guide.md"]
    J["data/tasks.json"]

    A --> B
    B --> D
    B --> C
    B --> E
    E --> D
    D --> F
    F --> I
    F --> J
    D --> G
    G --> C
    C --> D
    D --> H
    H --> B

Almindeligt tool call vs sampling

Flow Hvad sker der?
Almindeligt tool call Clienten kalder serveren, og serveren returnerer resultat
Sampling tool call Clienten kalder serveren, serveren spørger clientens LLM, og serveren returnerer derefter resultat

Kort sagt:

Almindeligt tool:
Client -> server -> resultat

Sampling:
Client -> server -> clientens LLM -> server -> resultat

Installation

Kør:

npm install

Kør serveren alene

Du kan køre serveren alene:

npm start

Serveren bruger stdio og kan se ud som om, den ikke gør noget.

Det er normalt.

Den venter på en MCP-client.

Test med MCP Inspector

Kør:

npm run inspect

Test især dette tool:

sample_next_work_session

Vigtig pointe:

Hvis MCP Inspector eller hosten ikke understøtter sampling, bruger serveren fallback-logik og returnerer en simpel regelbaseret plan.

Kør sampling-client

Sampling testes bedst med den custom client:

npm run sampling

samplingClient.js gør dette:

  1. Starter MCP-serveren
  2. Registrerer en sampling handler
  3. Laver discovery
  4. Kalder sample_next_work_session
  5. Modtager sampling request fra serveren
  6. Returnerer et simuleret LLM-svar
  7. Viser serverens endelige resultat

Claude Desktop

Denne del er primært lavet til custom client.

Claude Desktop kan stadig bruges til almindelige tools, men sampling afhænger af, om Claude Desktop understøtter sampling i den aktuelle version.

Brug derfor Claude til de almindelige tools fra del 4:

prepare_next_work_session
prepare_status_report
add_task
complete_task

Brug custom client til sampling:

npm run sampling

Claude-konfiguration

Hvis du vil koble serveren til Claude Desktop, kan du bruge:

{
  "mcpServers": {
    "mcp-node-tasks-05": {
      "command": "node",
      "args": [
        "C:\\Users\\mikc\\WebstormProjects\\mcp-node-tasks-05-sampling\\src\\server.js"
      ]
    }
  }
}

Ret stien, så den passer til din computer.

På Windows kan du også bruge forward slashes:

C:/Users/mikc/WebstormProjects/mcp-node-tasks-05-sampling/src/server.js

Forslag til test i Claude

Hvis serveren er koblet på Claude, kan du prøve:

Vis hvilke tools denne MCP-server stiller til rådighed.
Brug tool’et sample_next_work_session med fokus på MCP-undervisning.

Hvis Claude eller hosten ikke understøtter sampling, bør serveren bruge fallback og stadig give et svar.

Sikkerhed og fallback

Sampling kan sende data fra serveren til clientens LLM.

Det kan være fint i et lokalt undervisningsprojekt, men i rigtige systemer skal man være opmærksom på:

  • følsomme data
  • prompt injection
  • for store prompts
  • rate limiting
  • brugeraccept
  • fejl i clientens sampling handler
  • om clienten understøtter sampling

I dette projekt bruger vi derfor fallback.

Hvis sampling fejler, returnerer serveren en simpel regelbaseret prioritering.

Miniøvelse

Åbn src/server.js.

Find tool’et:

sample_next_work_session

Svar på:

  1. Hvilke data læser tool’et?
  2. Hvor sendes sampling requesten?
  3. Hvad sker der, hvis sampling fejler?
  4. Hvorfor bør der være fallback?
  5. Hvilke data ville være problematiske at sende til en ekstern LLM?

Ekstra øvelse

Udvid sampling handleren i src/samplingClient.js, så den svarer forskelligt afhængigt af fokus.

Eksempel:

fokus: dokumentation

bør give et andet svar end:

fokus: demo

Næste trin

Næste naturlige skridt er testing og security.

Her bliver spørgsmålene:

  • Hvordan tester vi MCP tools?
  • Hvordan tester vi fallback?
  • Hvordan undgår vi farlige tools?
  • Hvordan logger vi tool calls?
  • Hvordan beskytter vi følsomme data?

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选