397 lines
13 KiB
Markdown
397 lines
13 KiB
Markdown
# 🔧 Moduł 3: Zaawansowany rozwój MCP z Microsoft Foundry Toolkit
|
||
|
||

|
||

|
||

|
||

|
||

|
||
|
||
## 🎯 Cele nauki
|
||
|
||
Na koniec tego laboratorium będziesz potrafił:
|
||
|
||
- ✅ Tworzyć niestandardowe serwery MCP przy użyciu Microsoft Foundry Toolkit
|
||
- ✅ Konfigurować i używać najnowszego SDK MCP dla Pythona (wersja 1.9.3)
|
||
- ✅ Konfigurować i korzystać z MCP Inspector do debugowania
|
||
- ✅ Debugować serwery MCP zarówno w środowisku Agent Builder, jak i Inspector
|
||
- ✅ Rozumieć zaawansowane przepływy pracy przy tworzeniu serwerów MCP
|
||
|
||
## 📋 Wymagania wstępne
|
||
|
||
- Ukończenie Laboratorium 2 (Podstawy MCP)
|
||
- VS Code z zainstalowanym rozszerzeniem Microsoft Foundry Toolkit
|
||
- Środowisko Python 3.10 lub nowsze
|
||
- Node.js i npm do konfiguracji Inspector
|
||
|
||
## 🏗️ Co zbudujesz
|
||
|
||
W tym laboratorium stworzysz **Weather MCP Server**, który demonstruje:
|
||
- Implementację niestandardowego serwera MCP
|
||
- Integrację z Microsoft Foundry Toolkit Agent Builder
|
||
- Profesjonalne przepływy debugowania
|
||
- Wzorce nowoczesnego wykorzystania SDK MCP
|
||
|
||
---
|
||
|
||
## 🔧 Przegląd kluczowych komponentów
|
||
|
||
### 🐍 MCP Python SDK
|
||
Model Context Protocol Python SDK stanowi podstawę do budowy niestandardowych serwerów MCP. Będziesz korzystać z wersji 1.9.3 z rozszerzonymi możliwościami debugowania.
|
||
|
||
### 🔍 MCP Inspector
|
||
Potężne narzędzie do debugowania oferujące:
|
||
- Monitorowanie serwera w czasie rzeczywistym
|
||
- Wizualizację wykonywania narzędzi
|
||
- Inspekcję żądań i odpowiedzi sieciowych
|
||
- Interaktywne środowisko testowe
|
||
|
||
---
|
||
|
||
## 📖 Implementacja krok po kroku
|
||
|
||
### Krok 1: Utwórz WeatherAgent w Agent Builder
|
||
|
||
1. **Uruchom Agent Builder** w VS Code przez rozszerzenie Microsoft Foundry Toolkit
|
||
2. **Utwórz nowego agenta** z następującą konfiguracją:
|
||
- Nazwa agenta: `WeatherAgent`
|
||
|
||

|
||
|
||
### Krok 2: Zainicjuj projekt serwera MCP
|
||
|
||
1. **Przejdź do Narzędzia** → **Dodaj narzędzie** w Agent Builder
|
||
2. **Wybierz "MCP Server"** z dostępnych opcji
|
||
3. **Wybierz "Utwórz nowy serwer MCP"**
|
||
4. **Wybierz szablon `python-weather`**
|
||
5. **Nazwij swój serwer:** `weather_mcp`
|
||
|
||

|
||
|
||
### Krok 3: Otwórz i przejrzyj projekt
|
||
|
||
1. **Otwórz wygenerowany projekt** w VS Code
|
||
2. **Przejrzyj strukturę projektu:**
|
||
```
|
||
weather_mcp/
|
||
├── src/
|
||
│ ├── __init__.py
|
||
│ └── server.py
|
||
├── inspector/
|
||
│ ├── package.json
|
||
│ └── package-lock.json
|
||
├── .vscode/
|
||
│ ├── launch.json
|
||
│ └── tasks.json
|
||
├── pyproject.toml
|
||
└── README.md
|
||
```
|
||
|
||
### Krok 4: Aktualizacja do najnowszego SDK MCP
|
||
|
||
> **🔍 Dlaczego aktualizować?** Chcemy korzystać z najnowszego SDK MCP (wersja 1.9.3) oraz usługi Inspector (0.14.0) dla udoskonalonych funkcji i lepszych możliwości debugowania.
|
||
|
||
#### 4a. Aktualizacja zależności Pythona
|
||
|
||
**Edytuj `pyproject.toml`:** aktualizacja [./code/weather_mcp/pyproject.toml](../../../../10-StreamliningAIWorkflowsBuildingAnMCPServerWithAIToolkit/lab3/code/weather_mcp/pyproject.toml)
|
||
|
||
|
||
#### 4b. Aktualizacja konfiguracji Inspector
|
||
|
||
**Edytuj `inspector/package.json`:** aktualizacja [./code/weather_mcp/inspector/package.json](../../../../10-StreamliningAIWorkflowsBuildingAnMCPServerWithAIToolkit/lab3/code/weather_mcp/inspector/package.json)
|
||
|
||
#### 4c. Aktualizacja zależności Inspector
|
||
|
||
**Edytuj `inspector/package-lock.json`:** aktualizacja [./code/weather_mcp/inspector/package-lock.json](../../../../10-StreamliningAIWorkflowsBuildingAnMCPServerWithAIToolkit/lab3/code/weather_mcp/inspector/package-lock.json)
|
||
|
||
> **📝 Uwaga:** Ten plik zawiera rozległe definicje zależności. Poniżej znajduje się istotna struktura – pełna zawartość zapewnia prawidłowe rozwiązywanie zależności.
|
||
|
||
|
||
> **⚡ Pełen package lock:** Pełny plik package-lock.json zawiera około 3000 linii definicji zależności. Powyżej pokazano kluczową strukturę – użyj dostarczonego pliku dla kompletnych zależności.
|
||
|
||
### Krok 5: Konfiguracja debugowania w VS Code
|
||
|
||
*Uwaga: proszę skopiować plik do wskazanej ścieżki, zastępując odpowiedni lokalny plik*
|
||
|
||
#### 5a. Aktualizacja konfiguracji uruchamiania
|
||
|
||
**Edytuj `.vscode/launch.json`:**
|
||
|
||
```json
|
||
{
|
||
"version": "0.2.0",
|
||
"configurations": [
|
||
{
|
||
"name": "Attach to Local MCP",
|
||
"type": "debugpy",
|
||
"request": "attach",
|
||
"connect": {
|
||
"host": "localhost",
|
||
"port": 5678
|
||
},
|
||
"presentation": {
|
||
"hidden": true
|
||
},
|
||
"internalConsoleOptions": "neverOpen",
|
||
"postDebugTask": "Terminate All Tasks"
|
||
},
|
||
{
|
||
"name": "Launch Inspector (Edge)",
|
||
"type": "msedge",
|
||
"request": "launch",
|
||
"url": "http://localhost:6274?timeout=60000&serverUrl=http://localhost:3001/sse#tools",
|
||
"cascadeTerminateToConfigurations": [
|
||
"Attach to Local MCP"
|
||
],
|
||
"presentation": {
|
||
"hidden": true
|
||
},
|
||
"internalConsoleOptions": "neverOpen"
|
||
},
|
||
{
|
||
"name": "Launch Inspector (Chrome)",
|
||
"type": "chrome",
|
||
"request": "launch",
|
||
"url": "http://localhost:6274?timeout=60000&serverUrl=http://localhost:3001/sse#tools",
|
||
"cascadeTerminateToConfigurations": [
|
||
"Attach to Local MCP"
|
||
],
|
||
"presentation": {
|
||
"hidden": true
|
||
},
|
||
"internalConsoleOptions": "neverOpen"
|
||
}
|
||
],
|
||
"compounds": [
|
||
{
|
||
"name": "Debug in Agent Builder",
|
||
"configurations": [
|
||
"Attach to Local MCP"
|
||
],
|
||
"preLaunchTask": "Open Agent Builder",
|
||
},
|
||
{
|
||
"name": "Debug in Inspector (Edge)",
|
||
"configurations": [
|
||
"Launch Inspector (Edge)",
|
||
"Attach to Local MCP"
|
||
],
|
||
"preLaunchTask": "Start MCP Inspector",
|
||
"stopAll": true
|
||
},
|
||
{
|
||
"name": "Debug in Inspector (Chrome)",
|
||
"configurations": [
|
||
"Launch Inspector (Chrome)",
|
||
"Attach to Local MCP"
|
||
],
|
||
"preLaunchTask": "Start MCP Inspector",
|
||
"stopAll": true
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**Edytuj `.vscode/tasks.json`:**
|
||
|
||
```
|
||
{
|
||
"version": "2.0.0",
|
||
"tasks": [
|
||
{
|
||
"label": "Start MCP Server",
|
||
"type": "shell",
|
||
"command": "python -m debugpy --listen 127.0.0.1:5678 src/__init__.py sse",
|
||
"isBackground": true,
|
||
"options": {
|
||
"cwd": "${workspaceFolder}",
|
||
"env": {
|
||
"PORT": "3001"
|
||
}
|
||
},
|
||
"problemMatcher": {
|
||
"pattern": [
|
||
{
|
||
"regexp": "^.*$",
|
||
"file": 0,
|
||
"location": 1,
|
||
"message": 2
|
||
}
|
||
],
|
||
"background": {
|
||
"activeOnStart": true,
|
||
"beginsPattern": ".*",
|
||
"endsPattern": "Application startup complete|running"
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"label": "Start MCP Inspector",
|
||
"type": "shell",
|
||
"command": "npm run dev:inspector",
|
||
"isBackground": true,
|
||
"options": {
|
||
"cwd": "${workspaceFolder}/inspector",
|
||
"env": {
|
||
"CLIENT_PORT": "6274",
|
||
"SERVER_PORT": "6277",
|
||
}
|
||
},
|
||
"problemMatcher": {
|
||
"pattern": [
|
||
{
|
||
"regexp": "^.*$",
|
||
"file": 0,
|
||
"location": 1,
|
||
"message": 2
|
||
}
|
||
],
|
||
"background": {
|
||
"activeOnStart": true,
|
||
"beginsPattern": "Starting MCP inspector",
|
||
"endsPattern": "Proxy server listening on port"
|
||
}
|
||
},
|
||
"dependsOn": [
|
||
"Start MCP Server"
|
||
]
|
||
},
|
||
{
|
||
"label": "Open Agent Builder",
|
||
"type": "shell",
|
||
"command": "echo ${input:openAgentBuilder}",
|
||
"presentation": {
|
||
"reveal": "never"
|
||
},
|
||
"dependsOn": [
|
||
"Start MCP Server"
|
||
],
|
||
},
|
||
{
|
||
"label": "Terminate All Tasks",
|
||
"command": "echo ${input:terminate}",
|
||
"type": "shell",
|
||
"problemMatcher": []
|
||
}
|
||
],
|
||
"inputs": [
|
||
{
|
||
"id": "openAgentBuilder",
|
||
"type": "command",
|
||
"command": "ai-mlstudio.agentBuilder",
|
||
"args": {
|
||
"initialMCPs": [ "local-server-weather_mcp" ],
|
||
"triggeredFrom": "vsc-tasks"
|
||
}
|
||
},
|
||
{
|
||
"id": "terminate",
|
||
"type": "command",
|
||
"command": "workbench.action.tasks.terminate",
|
||
"args": "terminateAll"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
|
||
---
|
||
|
||
## 🚀 Uruchamianie i testowanie Twojego serwera MCP
|
||
|
||
### Krok 6: Instalacja zależności
|
||
|
||
Po dokonaniu zmian konfiguracyjnych, wykonaj następujące polecenia:
|
||
|
||
**Instalacja zależności Pythona:**
|
||
```bash
|
||
uv sync
|
||
```
|
||
|
||
**Instalacja zależności Inspector:**
|
||
```bash
|
||
cd inspector
|
||
npm install
|
||
```
|
||
|
||
### Krok 7: Debugowanie za pomocą Agent Builder
|
||
|
||
1. **Naciśnij F5** lub użyj konfiguracji **„Debuguj w Agent Builder”**
|
||
2. **Wybierz konfigurację związaną z compound w panelu debugowania**
|
||
3. **Poczekaj na uruchomienie serwera i otwarcie Agent Builder**
|
||
4. **Przetestuj swój serwer weather MCP** naturalnymi zapytaniami językowymi
|
||
|
||
Wpisz prompt taki jak poniżej
|
||
|
||
SYSTEM_PROMPT
|
||
|
||
```
|
||
You are my weather assistant
|
||
```
|
||
|
||
USER_PROMPT
|
||
|
||
```
|
||
How's the weather like in Seattle
|
||
```
|
||
|
||

|
||
|
||
### Krok 8: Debugowanie z użyciem MCP Inspector
|
||
|
||
1. **Użyj konfiguracji „Debuguj w Inspector”** (Edge lub Chrome)
|
||
2. **Otwórz interfejs Inspector** pod adresem `http://localhost:6274`
|
||
3. **Eksploruj interaktywne środowisko testowe:**
|
||
- Przeglądaj dostępne narzędzia
|
||
- Testuj wykonywanie narzędzi
|
||
- Monitoruj żądania sieciowe
|
||
- Debuguj odpowiedzi serwera
|
||
|
||

|
||
|
||
---
|
||
|
||
## 🎯 Kluczowe rezultaty nauki
|
||
|
||
Po ukończeniu tego laboratorium:
|
||
|
||
- [x] **Utworzyłeś niestandardowy serwer MCP** korzystając z szablonów Microsoft Foundry Toolkit
|
||
- [x] **Zaktualizowałeś do najnowszego SDK MCP** (wersja 1.9.3) dla rozszerzonej funkcjonalności
|
||
- [x] **Skonfigurowałeś profesjonalne przepływy debugowania** dla Agent Builder i Inspector
|
||
- [x] **Skonfigurowałeś MCP Inspector** dla interaktywnego testowania serwera
|
||
- [x] **Opanowałeś konfigurację debugowania w VS Code** do rozwoju MCP
|
||
|
||
## 🔧 Zaawansowane funkcje, które omówiono
|
||
|
||
| Funkcja | Opis | Przypadek użycia |
|
||
|---------|-------|------------------|
|
||
| **MCP Python SDK v1.9.3** | Najnowsza implementacja protokołu | Nowoczesny rozwój serwerów |
|
||
| **MCP Inspector 0.14.0** | Narzędzie do interaktywnego debugowania | Testowanie serwera w czasie rzeczywistym |
|
||
| **Debugowanie VS Code** | Zintegrowane środowisko programistyczne | Profesjonalne przepływy debugowania |
|
||
| **Integracja z Agent Builder** | Bezpośrednie połączenie z Microsoft Foundry Toolkit | Testowanie agenta end-to-end |
|
||
|
||
## 📚 Dodatkowe zasoby
|
||
|
||
- [Dokumentacja MCP Python SDK](https://modelcontextprotocol.io/docs/sdk/python)
|
||
- [Przewodnik po rozszerzeniu Microsoft Foundry Toolkit](https://code.visualstudio.com/docs/ai/ai-toolkit)
|
||
- [Dokumentacja debugowania w VS Code](https://code.visualstudio.com/docs/editor/debugging)
|
||
- [Specyfikacja Model Context Protocol](https://modelcontextprotocol.io/docs/concepts/architecture)
|
||
|
||
---
|
||
|
||
**🎉 Gratulacje!** Pomyślnie ukończyłeś Laboratorium 3 i teraz potrafisz tworzyć, debugować oraz wdrażać niestandardowe serwery MCP korzystając z profesjonalnych przepływów rozwojowych.
|
||
|
||
### 🔜 Przejdź do następnego modułu
|
||
|
||
Gotowy, aby zastosować swoje umiejętności MCP w rzeczywistym środowisku rozwojowym? Przejdź do **[Moduł 4: Praktyczny rozwój MCP - niestandardowy serwer klonowania GitHub](../lab4/README.md)**, gdzie:
|
||
- Zbudujesz produkcyjny serwer MCP automatyzujący operacje na repozytoriach GitHub
|
||
- Wdrożysz funkcjonalność klonowania repozytoriów GitHub przez MCP
|
||
- Zintegrujesz niestandardowe serwery MCP z VS Code i trybem agenta GitHub Copilot
|
||
- Przetestujesz i wdrożysz serwery MCP w środowiskach produkcyjnych
|
||
- Nauczysz się praktycznej automatyzacji przepływów pracy dla programistów
|
||
|
||
---
|
||
|
||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||
**Zastrzeżenie**:
|
||
Niniejszy dokument został przetłumaczony za pomocą usługi tłumaczenia AI [Co-op Translator](https://github.com/Azure/co-op-translator). Choć dążymy do dokładności, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w jego języku źródłowym należy uznawać za autorytatywne źródło. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.
|
||
<!-- CO-OP TRANSLATOR DISCLAIMER END --> |