Files

🔧 Modul 3: Avancerad MCP-utveckling med Microsoft Foundry Toolkit

Duration Microsoft Foundry Toolkit Python MCP SDK Inspector

🎯 Läromål

I slutet av denna labb kommer du att kunna:

  • Skapa anpassade MCP-servrar med Microsoft Foundry Toolkit
  • Konfigurera och använda den senaste MCP Python SDK (v1.9.3)
  • Ställa in och använda MCP Inspector för felsökning
  • Felsöka MCP-servrar i både Agent Builder och Inspector-miljöer
  • Förstå avancerade arbetsflöden för MCP-serverutveckling

📋 Förkunskaper

  • Slutfört Lab 2 (MCP Fundamentals)
  • VS Code med Microsoft Foundry Toolkit-tillägg installerat
  • Python 3.10+ miljö
  • Node.js och npm för Inspector-installation

🏗️ Vad du kommer att bygga

I denna labb kommer du att skapa en Weather MCP Server som demonstrerar:

  • Anpassad MCP-serverimplementation
  • Integration med Microsoft Foundry Toolkit Agent Builder
  • Professionella felsökningsarbetsflöden
  • Moderna MCP SDK-användningsmönster

🔧 Översikt av kärnkomponenter

🐍 MCP Python SDK

Model Context Protocol Python SDK tillhandahåller grunden för att bygga anpassade MCP-servrar. Du använder version 1.9.3 med utökade felsökningsmöjligheter.

🔍 MCP Inspector

Ett kraftfullt felsökningsverktyg som erbjuder:

  • Realtidsövervakning av servern
  • Visualisering av verktygskörningar
  • Inspektion av nätverksförfrågningar/svar
  • Interaktiv testmiljö

📖 Steg-för-steg-implementering

Steg 1: Skapa en WeatherAgent i Agent Builder

  1. Starta Agent Builder i VS Code via Microsoft Foundry Toolkit-tillägget
  2. Skapa en ny agent med följande konfiguration:
    • Agentnamn: WeatherAgent

Agent Creation

Steg 2: Initiera MCP Server-projekt

  1. Navigera till ToolsAdd Tool i Agent Builder
  2. Välj "MCP Server" bland alternativen
  3. Välj "Create A new MCP Server"
  4. Välj templaten python-weather
  5. Döp din server: weather_mcp

Python Template Selection

Steg 3: Öppna och granska projektet

  1. Öppna det genererade projektet i VS Code
  2. Granska projektstrukturen:
    weather_mcp/
    ├── src/
    │   ├── __init__.py
    │   └── server.py
    ├── inspector/
    │   ├── package.json
    │   └── package-lock.json
    ├── .vscode/
    │   ├── launch.json
    │   └── tasks.json
    ├── pyproject.toml
    └── README.md
    

Steg 4: Uppgradera till senaste MCP SDK

🔍 Varför uppgradera? Vi vill använda senaste MCP SDK (v1.9.3) och Inspector-tjänsten (0.14.0) för förbättrade funktioner och bättre felsökningsmöjligheter.

4a. Uppdatera Python-beroenden

Redigera pyproject.toml: uppdatera ./code/weather_mcp/pyproject.toml

4b. Uppdatera Inspector-konfiguration

Redigera inspector/package.json: uppdatera ./code/weather_mcp/inspector/package.json

4c. Uppdatera Inspector-beroenden

Redigera inspector/package-lock.json: uppdatera ./code/weather_mcp/inspector/package-lock.json

📝 Observera: Denna fil innehåller omfattande beroendedefinitioner. Nedan visas den viktiga strukturen - hela innehållet säkerställer korrekt beroendehantering.

Full Package Lock: Den kompletta package-lock.json innehåller ~3000 rader med beroendedefinitioner. Ovan visas huvudsaklig struktur - använd den tillhandahållna filen för fullständig beroendehantering.

Steg 5: Konfigurera felsökning i VS Code

Obs: Vänligen kopiera filen till angiven sökväg för att ersätta motsvarande lokala fil

5a. Uppdatera lanseringskonfiguration

Redigera .vscode/launch.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
    }
  ]
}

Redigera .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"
    }
  ]
}

🚀 Köra och testa din MCP-server

Steg 6: Installera beroenden

Efter konfigurationsändringarna, kör följande kommandon:

Installera Python-beroenden:

uv sync

Installera Inspector-beroenden:

cd inspector
npm install

Steg 7: Felsök med Agent Builder

  1. Tryck på F5 eller använd konfigurationen "Debug in Agent Builder"
  2. Välj sammansatt konfiguration från felsökningspanelen
  3. Vänta på att servern startar och att Agent Builder öppnas
  4. Testa din väder-MCP-server med naturliga språkfrågor

Skriv in en prompt som denna

SYSTEM_PROMPT

You are my weather assistant

USER_PROMPT

How's the weather like in Seattle

Agent Builder Debug Result

Steg 8: Felsök med MCP Inspector

  1. Använd konfigurationen "Debug in Inspector" (Edge eller Chrome)
  2. Öppna Inspector-gränssnittethttp://localhost:6274
  3. Utforska den interaktiva testmiljön:
    • Visa tillgängliga verktyg
    • Testa körning av verktyg
    • Övervaka nätverksförfrågningar
    • Felsök serversvar

MCP Inspector Interface


🎯 Viktiga lärandemål

Genom att slutföra denna labb har du:

  • Skapat en anpassad MCP-server med Microsoft Foundry Toolkit-templates
  • Uppgraderat till senaste MCP SDK (v1.9.3) för förbättrad funktionalitet
  • Konfigurerat professionella felsökningsarbetsflöden för både Agent Builder och Inspector
  • Ställt in MCP Inspector för interaktiv servertestning
  • Behärskat VS Code felsökningskonfigurationer för MCP-utveckling

🔧 Avancerade funktioner som utforskats

Funktion Beskrivning Användningsfall
MCP Python SDK v1.9.3 Senaste protokollimplementationen Modern serverutveckling
MCP Inspector 0.14.0 Interaktivt felsökningsverktyg Realtidstestning av server
VS Code Debugging Integrerad utvecklingsmiljö Professionellt felsökningsflöde
Agent Builder Integration Direkt Microsoft Foundry Toolkit-anslutning End-to-end agenttestning

📚 Ytterligare resurser


🎉 Grattis! Du har framgångsrikt slutfört Lab 3 och kan nu skapa, felsöka och distribuera anpassade MCP-servrar med professionella utvecklingsarbetsflöden.

🔜 Fortsätt till nästa modul

Redo att tillämpa dina MCP-kunskaper i ett verkligt utvecklingsflöde? Fortsätt till Modul 4: Praktisk MCP-utveckling - Anpassad GitHub Clone-server där du kommer att:

  • Bygga en produktionsredo MCP-server som automatiserar GitHub-repositorieoperationer
  • Implementera funktionalitet för att klona GitHub-repositorier via MCP
  • Integrera anpassade MCP-servrar med VS Code och GitHub Copilot Agent Mode
  • Testa och distribuera anpassade MCP-servrar i produktionsmiljöer
  • Lära dig praktisk arbetsflödesautomation för utvecklare

Ansvarsfriskrivning: Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Även om vi strävar efter noggrannhet, var vänlig notera att automatiska översättningar kan innehålla fel eller brister. Det ursprungliga dokumentet på dess modersmål bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för några missförstånd eller feltolkningar som uppstår till följd av användningen av denna översättning.