Uzantıya MCP sunucusu ekleme

Azure Geliştirici CLI (azd) uzantısı, bir Model Bağlam Protokolü (MCP) sunucusu aracılığıyla yapay zeka aracılarına araçları kullanıma açabilir. Özelliği eklediğinizdemcp-server, GitHub Copilot gibi aracılar uzantınızın araçlarını bulabilir ve çağırabilir. Bu makale, Bir örnek uzantı oluşturma hızlı başlangıcında yer alan Contoso Resource Tagger örnek uzantısına nasıl MCP sunucusu ekleyeceğinizi gösterir. Aynı deseni herhangi bir uzantıya uygulayabilirsiniz.

Note

azd uzantılar şu anda beta sürümündedir.

MCP sunucuları nasıl çalışır?

Model Bağlam Protokolü, yapay zeka aracılarının dış sunucular tarafından sağlanan araçları bulmasını ve çağırmasını sağlayan açık bir standarttır. Uzantınız mcp-server yeteneğini bildirdiğinde, azd uzantınızı bir MCP sunucusu olarak başlatabilir ve bir aracıdan gelen araç isteklerini uzantınıza yönlendirebilir. Uzantınız, bir proje için standartlaştırılmış etiketler önerme gibi görevleri gerçekleştirmek üzere aracının çağırdiği araçları uygular.

Yeteneği tanımlayın

mcp-server Bildiriminize extension.yaml özelliği ekleyin:

capabilities:
  - custom-commands
  - mcp-server

azd öğesinin MCP sunucusunu nasıl başlatacağını yapılandırmak için manifeste ayrıca bir mcp bölümü ekleyebilirsiniz. serve özelliği args ve env destekler; azd uzantının yürütülebilir dosyasını zaten bilir, bu nedenle bir komut belirtmeniz gerekmez:

mcp:
  serve:
    args:
      - mcp
      - start

MCP komutu ekleme

MCP sunucusunu başlatan bir komut ekleyin. azd uzantınızı BIR MCP sunucusu olarak çalıştırmak için bu komutu çağırır. Protokolü işlemek için Go için mcp-go gibi bir MCP sunucu kitaplığı kullanın.

  1. Dizininizde mcp.go adlı internal/cmd bir dosya oluşturun:

    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. mcp Komutunu kök komutunuzda kaydedin:

    rootCmd.AddCommand(newMcpCommand())
    

Bir araç uygulayın

Yapay zeka aracısının çağırdığı aracı tanımlayın. Aşağıdaki suggest_tags aracı daha önce oluşturduğunuz aynı internal/cmd/mcp.go dosyasına ekleyin. mcp ve server tanımlayıcıları, bu dosyada zaten içe aktarılmış olan paketlerden (github.com/mark3labs/mcp-go/mcp ve github.com/mark3labs/mcp-go/server) gelir; işleyici de context ve fmt içe aktarmalarını kullanır. İşlevi mcp.go öğesine eklemek, böylece kod derlenir, bu içe aktarmaları yeniden kullanır:

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
}

MCP sunucusunu test edin

MCP sunucusunu ekledikten sonra uzantınızı yeniden derleyin ve sunucunun başladığını doğrulayın:

  1. Uzantıyı yeniden oluşturun:

    azd x build
    
  2. MCP sunucusunu doğrudan başlatarak hatasız çalıştığını doğrulayın:

    azd tagger mcp start
    

    Sunucu, standart giriş ve çıkışları başlatır ve dinler. Uzantınızı kullanmak üzere yapılandırılmış yapay zeka aracısı gibi bir MCP istemcisi, araçlarınızı çağırmak için bu sunucuya bağlanır.