Přidání serveru MCP do rozšíření

Rozšíření Azure Developer CLI (azd) může zpřístupnit nástroje agentům AI prostřednictvím serveru MCP (Model Context Protocol). Když přidáte funkci mcp-server, agenti, jako je GitHub Copilot, mohou vyhledat a volat nástroje vašeho rozšíření. V tomto článku se dozvíte, jak přidat server MCP do ukázkového rozšíření Contoso Resource Tagger z rychlého startu Sestavení ukázkového rozšíření. Stejný vzor můžete použít u libovolného rozšíření.

Note

azd rozšíření jsou aktuálně v beta verzi.

Jak fungují servery MCP

Model Context Protocol je otevřený standard, který umožňuje agentům AI zjišťovat a volat nástroje poskytované externími servery. Když vaše rozšíření deklaruje mcp-server schopnost, azd můžete rozšíření spustit jako server MCP a směrovat žádosti o nástroje od agenta do vašeho rozšíření. Vaše rozšíření implementuje nástroje, které agent volá k provádění úkolů, jako je například navrhování standardizovaných značek pro projekt.

Deklarujte schopnost

Přidejte do manifestu extension.yaml oprávnění mcp-server:

capabilities:
  - custom-commands
  - mcp-server

Do manifestu můžete také přidat mcp oddíl, který nakonfiguruje způsob azd spuštění serveru MCP. Vlastnost serve podporuje args a env; azd už zná spustitelný soubor rozšíření, takže není třeba zadávat příkaz:

mcp:
  serve:
    args:
      - mcp
      - start

Přidání příkazu MCP

Přidejte příkaz, který spustí server MCP. azd pomocí tohoto příkazu spustí vaše rozšíření jako server MCP. Ke zpracování protokolu použijte knihovnu serveru MCP pro Go, například mcp-go.

  1. Vytvořte soubor s názvem mcp.go v internal/cmd adresáři:

    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. Zaregistrujte příkaz mcp u svého kořenového příkazu:

    rootCmd.AddCommand(newMcpCommand())
    

Implementace nástroje

Definujte nástroj, který agent AI volá. Do stejného suggest_tags souboru, který jste vytvořili dříve, přidejte následující internal/cmd/mcp.go nástroj. Identifikátory mcp a server pocházejí z balíčků, které jsou v tomto souboru již naimportované (github.com/mark3labs/mcp-go/mcp a github.com/mark3labs/mcp-go/server), a obslužná funkce také používá importy context a fmt. Přidání funkce do mcp.go znovu použije tyto importy, takže se kód zkompiluje:

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
}

Otestování serveru MCP

Po přidání serveru MCP znovu sestavte rozšíření a ověřte, že se server spustí:

  1. Znovu zkompilujte rozšíření:

    azd x build
    
  2. Spusťte server MCP přímo a ověřte, že běží bez chyb:

    azd tagger mcp start
    

    Server se spustí a naslouchá standardnímu vstupu a výstupu. Klient MCP, například agent AI nakonfigurovaný pro použití vašeho rozšíření, se připojí k tomuto serveru, aby volal vaše nástroje.