Menambahkan server MCP ke ekstensi

Ekstensi Azure Developer CLI (azd) dapat mengekspos alat ke agen AI melalui server Model Context Protocol (MCP). Saat Anda menambahkan kapabilitas mcp-server, agen seperti GitHub Copilot dapat menemukan dan memanggil alat pada ekstensi Anda. Artikel ini memperlihatkan kepada Anda cara menambahkan server MCP ke ekstensi sampel Contoso Resource Tagger dari mulai cepat Membuat ekstensi sampel. Anda dapat menerapkan pola yang sama ke ekstensi apa pun.

Nota

azd ekstensi saat ini dalam versi beta.

Cara kerja server MCP

Protokol Konteks Model adalah standar terbuka yang memungkinkan agen AI menemukan dan memanggil alat yang disediakan oleh server eksternal. Saat ekstensi Anda mendeklarasikan kapabilitas mcp-server, azd dapat menjalankan ekstensi Anda sebagai server MCP dan meneruskan permintaan alat dari agen ke ekstensi Anda. Ekstensi Anda menerapkan alat yang dipanggil agen untuk melakukan tugas, seperti menyarankan tag standar untuk proyek.

Mendeklarasikan kemampuan

Tambahkan kapabilitas mcp-server ke manifes extension.yaml Anda:

capabilities:
  - custom-commands
  - mcp-server

Anda juga dapat menambahkan mcp bagian ke manifes untuk mengonfigurasi cara azd memulai server MCP. Properti serve mendukung args dan env; azd sudah tahu ekstensi yang dapat dieksekusi, sehingga Anda tidak menentukan perintah:

mcp:
  serve:
    args:
      - mcp
      - start

Menambahkan perintah MCP

Tambahkan perintah yang memulai server MCP. azd memanggil perintah ini untuk menjalankan ekstensi Anda sebagai server MCP. Gunakan pustaka server MCP untuk Go, seperti mcp-go, untuk menangani protokol.

  1. Buat file bernama mcp.go di direktori Anda internal/cmd :

    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. Daftarkan mcp perintah pada perintah root Anda:

    rootCmd.AddCommand(newMcpCommand())
    

Menerapkan alat

Tentukan alat yang dipanggil oleh agen AI. Tambahkan suggest_tags alat berikut ke file yang sama internal/cmd/mcp.go yang Anda buat sebelumnya. Identifikator mcp dan server berasal dari paket yang sudah diimpor dalam file tersebut (github.com/mark3labs/mcp-go/mcp dan github.com/mark3labs/mcp-go/server), dan handler juga menggunakan impor context dan fmt. Menambahkan fungsi ke mcp.go akan menggunakan kembali impor tersebut sehingga kode dapat dikompilasi:

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
}

Menguji server MCP

Setelah Anda menambahkan server MCP, build ulang ekstensi Anda dan pastikan server berhasil dijalankan:

  1. Bangun ulang ekstensi:

    azd x build
    
  2. Mulai server MCP secara langsung untuk memverifikasi bahwa server berjalan tanpa kesalahan:

    azd tagger mcp start
    

    Server mulai berjalan dan mendengarkan masukan standar serta keluaran standar. Klien MCP, seperti agen AI yang dikonfigurasi untuk menggunakan ekstensi Anda, terhubung ke server ini untuk memanggil alat Anda.