Azure Developer CLI (azd) 擴充功能可透過模型情境協定(MCP)伺服器將工具暴露給 AI 代理。 當你新增此功能mcp-server時,像 GitHub Copilot 這類代理程式就能發現並呼叫你的擴充功能工具。 本文說明如何將 MCP 伺服器新增至 建置範例擴充功能快速入門中的 Contoso Resource Tagger 範例擴充功能。 你可以把同樣的模式套用到任何擴充功能上。
Note
azd 擴展目前處於測試階段。
MCP 伺服器的運作原理
模型情境協定(Model Context Protocol)是一項開放標準,允許 AI 代理發現並呼叫外部伺服器提供的工具。 當你的擴充套件宣告 mcp-server 功能時,azd 可以將你的擴充套件啟動為 MCP 伺服器,並將工具請求從代理轉送至你的擴充套件。 你的擴充功能實作供代理呼叫以執行任務的工具,例如為專案建議標準化標籤。
宣告此能力
將 mcp-server 功能新增至你的 extension.yaml 資訊清單中:
capabilities:
- custom-commands
- mcp-server
你也可以在清單中新增 mcp 一個區段,來設定 MCP 伺服器的啟動 azd 方式。
serve 屬性支援 args 和 env;azd 已經知道擴充功能的可執行檔,因此您不需要指定命令:
mcp:
serve:
args:
- mcp
- start
新增 MCP 指令
新增一個指令來啟動 MCP 伺服器。
azd 會叫用這個命令,以 MCP 伺服器的形式執行你的擴充功能。 使用適用於 Go 的 MCP 伺服器函式庫,例如 mcp-go,來處理該協定。
在你的
mcp.go目錄中建立一個檔案名稱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) }, } }在你的根指令上註冊該
mcp指令:rootCmd.AddCommand(newMcpCommand())
實作一個工具
定義 AI 代理所呼叫的工具。 將以下 suggest_tags 工具加入你先前建立的同一個 internal/cmd/mcp.go 檔案中。
mcp 和 server 這兩個識別碼來自該檔案中已匯入的套件(github.com/mark3labs/mcp-go/mcp 和 github.com/mark3labs/mcp-go/server),而處理器也會使用 context 和 fmt 匯入。 將該函式加入 mcp.go 中會重複使用那些匯入,因此程式碼能夠編譯:
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 伺服器
加入 MCP 伺服器後,重新建置擴充功能,並確認伺服器已啟動:
重新建置擴充功能:
azd x build直接啟動 MCP 伺服器以確認其運作無錯誤:
azd tagger mcp start伺服器啟動並監聽標準輸入與輸出。 MCP 用戶端,例如設定為使用你擴充功能的 AI 代理,會連接到這台伺服器來呼叫你的工具。