MCP-kiszolgáló hozzáadása bővítményhez

A Azure fejlesztői parancssori felület (azdCLI) bővítmények a Model Context Protocol (MCP) kiszolgálón keresztül tehetik elérhetővé az eszközöket az AI-ügynökök számára. Amikor hozzáadja a(z) mcp-server képességet, az olyan ügynökök, mint a GitHub Copilot, felismerhetik és meghívhatják a bővítmény eszközeit. Ez a cikk bemutatja, hogyan vehet fel MCP-kiszolgálót a Contoso Resource Tagger mintabővítménybe a Mintabővítmény létrehozása rövid útmutatóból. Ugyanezt a mintát bármely bővítményre alkalmazhatja.

Megjegyzés:

azd bővítmények jelenleg bétaverzióban érhetők el.

Az MCP-kiszolgálók működése

A Model Context Protocol egy nyílt szabvány, amely lehetővé teszi, hogy az AI-ügynökök felderíthessék és meghívják a külső kiszolgálók által biztosított eszközöket. Amikor a bővítmény deklarálja a mcp-server képességet, elindíthatja a bővítményt MCP-kiszolgálóként, azd és átirányíthatja az eszközkérelmeket egy ügynöktől a bővítményhez. A bővítmény olyan eszközöket implementál, amelyeket az ügynök a feladatok végrehajtásához hív meg, például szabványosított címkéket javasol egy projekthez.

A képesség deklarálása

Adja hozzá a mcp-server képességet a extension.yaml jegyzékhez:

capabilities:
  - custom-commands
  - mcp-server

Hozzáadhat egy mcp szakaszt is a manifestumhoz annak konfigurálásához, hogy a(z) azd hogyan indítja el az MCP-kiszolgálót. A serve tulajdonság támogatja args és env; azd már ismeri a végrehajtható bővítményt, ezért nem ad meg parancsot:

mcp:
  serve:
    args:
      - mcp
      - start

MCP-parancs hozzáadása

Adjon hozzá egy parancsot, amely elindítja az MCP-kiszolgálót. azd meghívja ezt a parancsot a bővítmény MCP-kiszolgálóként való futtatásához. A protokoll kezeléséhez használjon egy MCP-kiszolgálókódtárat a Go-hoz, például az mcp-go-hoz.

  1. Hozzon létre egy fájlt mcp.go a internal/cmd címtárban:

    package cmd
    
    import (
        "context"
        "fmt"
    
        "github.com/mark3labs/mcp-go/mcp"
        "github.com/mark3labs/mcp-go/server"
        "github.com/spf13/cobra"
    )
    
    func newMcpCommand() *cobra.Command {
        mcpCmd := &cobra.Command{
            Use:    "mcp",
            Short:  "Model Context Protocol server commands.",
            Hidden: true,
        }
    
        mcpCmd.AddCommand(newMcpStartCommand())
        return mcpCmd
    }
    
    func newMcpStartCommand() *cobra.Command {
        return &cobra.Command{
            Use:   "start",
            Short: "Starts the MCP server.",
            RunE: func(cmd *cobra.Command, args []string) error {
                s := server.NewMCPServer(
                    "Contoso Resource Tagger",
                    "0.1.0",
                )
    
                // Register the suggest_tags tool.
                s.AddTool(newSuggestTagsTool())
    
                // Serve over stdio so azd and agents can connect.
                return server.ServeStdio(s)
            },
        }
    }
    
  2. Regisztrálja a mcp parancsot a gyökérparancson:

    rootCmd.AddCommand(newMcpCommand())
    

Eszköz implementálása

Határozza meg az AI-ügynök által hívott eszközt. Adja hozzá a következő suggest_tags eszközt az előzőleg létrehozott internal/cmd/mcp.go fájlhoz. A mcp és server azonosítók az ebben a fájlban már importált csomagokból származnak (github.com/mark3labs/mcp-go/mcp és github.com/mark3labs/mcp-go/server), és a kezelő a context- és fmt-importokat is használja. A függvény hozzáadása a(z) mcp.go elemhez újra felhasználja ezeket az importokat, így a kód lefordul:

func newSuggestTagsTool() (mcp.Tool, server.ToolHandlerFunc) {
    tool := mcp.NewTool(
        "suggest_tags",
        mcp.WithDescription("Suggests standardized Azure resource tags for a project."),
        mcp.WithString("environment",
            mcp.Description("The target environment, such as dev or prod."),
            mcp.Required(),
        ),
    )

    handler := func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
        environment, err := request.RequireString("environment")
        if err != nil {
            return mcp.NewToolResultError(err.Error()), nil
        }

        suggestion := fmt.Sprintf(
            "Suggested tags: environment=%s, managed-by=azd, cost-center=<required>",
            environment,
        )

        return mcp.NewToolResultText(suggestion), nil
    }

    return tool, handler
}

Az MCP-kiszolgáló tesztelése

Az MCP-kiszolgáló hozzáadása után építse újra a bővítményt, és ellenőrizze, hogy a kiszolgáló elindul-e:

  1. A bővítmény újraépítése:

    azd x build
    
  2. Indítsa el közvetlenül az MCP-kiszolgálót, és ellenőrizze, hogy hiba nélkül fut-e:

    azd tagger mcp start
    

    A kiszolgáló elindítja és figyeli a szabványos bemenetet és kimenetet. Egy MCP-ügyfél, például a bővítmény használatára konfigurált AI-ügynök csatlakozik ehhez a kiszolgálóhoz, hogy meghívja az eszközöket.