Hinzufügen eines MCP-Servers zu einer Erweiterung

Eine Azure Developer CLI (azd)-Erweiterung kann KI-Agents tools über einen MCP-Server (Model Context Protocol) zur Verfügung stellen. Wenn Sie die mcp-server Funktion hinzufügen, können Agents wie GitHub Copilot die Tools Ihrer Erweiterung ermitteln und aufrufen. In diesem Artikel wird gezeigt, wie Sie der Beispielerweiterung Contoso Resource Tagger einen MCP-Server aus der Schnellstartanleitung "Erstellen einer Beispielerweiterung" hinzufügen. Sie können dasselbe Muster auf jede Erweiterung anwenden.

Note

azd Erweiterungen befinden sich derzeit in der Betaversion.

Funktionsweise von MCP-Servern

Das Modellkontextprotokoll ist ein offener Standard, mit dem KI-Agents Tools erkennen und aufrufen können, die von externen Servern bereitgestellt werden. Wenn Ihre Erweiterung die mcp-server Funktion deklariert, azd können Sie Ihre Erweiterung als MCP-Server starten und Toolanforderungen von einem Agent an Ihre Erweiterung weiterleiten. Ihre Erweiterung implementiert Tools, die der Agent aufruft, um Aufgaben auszuführen, z. B. das Vorschlagen standardisierter Tags für ein Projekt.

Fähigkeit deklarieren

Fügen Sie Ihrem mcp-server Manifest die extension.yaml Funktion hinzu:

capabilities:
  - custom-commands
  - mcp-server

Sie können dem Manifest auch einen mcp Abschnitt hinzufügen, um zu konfigurieren, wie azd der MCP-Server gestartet wird. Die serve Eigenschaft unterstützt args und env; azd kennt bereits die ausführbare Erweiterung, sodass Sie keinen Befehl angeben:

mcp:
  serve:
    args:
      - mcp
      - start

Hinzufügen eines MCP-Befehls

Fügen Sie einen Befehl hinzu, der den MCP-Server startet. azd ruft diesen Befehl auf, um die Erweiterung als MCP-Server auszuführen. Verwenden Sie eine MCP-Serverbibliothek für Go, z. B. mcp-go, um das Protokoll zu verarbeiten.

  1. Erstellen Sie eine Datei mit dem Namen mcp.go in Ihrem internal/cmd Verzeichnis:

    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. Registrieren Sie den mcp Befehl in Ihrem Stammbefehl:

    rootCmd.AddCommand(newMcpCommand())
    

Implementieren eines Tools

Definieren Sie das Tool, das der KI-Agent aufruft. Fügen Sie das folgende suggest_tags Werkzeug zu derselben internal/cmd/mcp.go Datei hinzu, die Sie zuvor erstellt haben. Die mcp Und server Bezeichner stammen aus den Paketen, die bereits in dieser Datei importiert wurden (github.com/mark3labs/mcp-go/mcp und github.com/mark3labs/mcp-go/server), und der Handler verwendet auch die context und fmt importe. Durch das Hinzufügen der Funktion zu mcp.go werden diese Importe wiederverwendet, sodass der Code kompiliert:

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
}

Testen des MCP-Servers

Nachdem Sie den MCP-Server hinzugefügt haben, erstellen Sie die Erweiterung neu, und überprüfen Sie, ob der Server gestartet wird:

  1. Erstellen Sie die Erweiterung neu:

    azd x build
    
  2. Starten Sie den MCP-Server direkt, um zu überprüfen, ob er ohne Fehler ausgeführt wird:

    azd tagger mcp start
    

    Der Server startet und überwacht die Standardeingabe und -ausgabe. Ein MCP-Client, z. B. ein KI-Agent, der für die Verwendung Ihrer Erweiterung konfiguriert ist, stellt eine Verbindung mit diesem Server zum Aufrufen Ihrer Tools bereit.