Lägga till en MCP-server i ett tillägg

Ett Azure Developer CLI-tillägg (azd) kan exponera verktyg för AI-agenter via en MCP-server (Model Context Protocol). När du lägger till mcp-server funktionen kan agenter som GitHub Copilot identifiera och anropa tilläggets verktyg. Den här artikeln visar hur du lägger till en MCP-server i contoso Resource Tagger-exempeltillägget från snabbstarten Skapa ett exempeltillägg. Du kan använda samma mönster för alla tillägg.

Note

azd tillägg är för närvarande i betaversion.

Så här fungerar MCP-servrar

Model Context Protocol är en öppen standard som gör att AI-agenter kan identifiera och anropa verktyg som tillhandahålls av externa servrar. När tillägget deklarerar mcp-server funktionen azd kan du starta tillägget som en MCP-server och dirigera verktygsbegäranden från en agent till ditt tillägg. Tillägget implementerar verktyg som agenten anropar för att utföra uppgifter, till exempel att föreslå standardiserade taggar för ett projekt.

Deklarera kapaciteten

Lägg till funktionen mcp-server i ditt extension.yamlmanifest:

capabilities:
  - custom-commands
  - mcp-server

Du kan också lägga till ett mcp avsnitt i manifestet för att konfigurera hur azd startar MCP-servern. Egenskapen serve stöder args och env, azd känner redan till tillägget som kan köras, så du anger inte något kommando:

mcp:
  serve:
    args:
      - mcp
      - start

Lägga till ett MCP-kommando

Lägg till ett kommando som startar MCP-servern. azd anropar det här kommandot för att köra tillägget som en MCP-server. Använd ett MCP-serverbibliotek för Go, till exempel mcp-go, för att hantera protokollet.

  1. Skapa en fil med namnet mcp.go i din internal/cmd katalog:

    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. Registrera kommandot på ditt rotkommando:

    rootCmd.AddCommand(newMcpCommand())
    

Implementera ett verktyg

Definiera det verktyg som AI-agenten anropar. Lägg till följande suggest_tags verktyg i samma internal/cmd/mcp.go fil som du skapade tidigare. Identifierarna mcp och server kommer från de paket som redan har importerats i filen (github.com/mark3labs/mcp-go/mcp och github.com/mark3labs/mcp-go/server), och hanteraren använder även importerna context och fmt . Om du lägger till funktionen i mcp.go återanvänds dessa importer så att koden kompileras:

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
}

Testa MCP-servern

När du har lagt till MCP-servern återskapar du tillägget och kontrollerar att servern startar:

  1. Bygg om tillägget:

    azd x build
    
  2. Starta MCP-servern direkt för att verifiera att den körs utan fel:

    azd tagger mcp start
    

    Servern startar och lyssnar på standardindata och utdata. En MCP-klient, till exempel en AI-agent som konfigurerats för att använda ditt tillägg, ansluter till den här servern för att anropa dina verktyg.