Azure Developer CLI (azd) 拡張機能では、モデル コンテキスト プロトコル (MCP) サーバーを介して AI エージェントにツールを公開できます。
mcp-server機能を追加すると、GitHub Copilotなどのエージェントは拡張機能のツールを検出して呼び出すことができます。 この記事では、「 サンプル拡張機能のビルド」クイック スタートから、Contoso Resource Tagger サンプル拡張機能に MCP サーバーを追加する方法について説明します。 任意の拡張機能に同じパターンを適用できます。
Note
azd 拡張機能は現在ベータ版です。
MCP サーバーのしくみ
モデル コンテキスト プロトコルは、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 サーバーとして実行します。 MCP-go などの Go 用 MCP サーバー ライブラリを使用して、プロトコルを処理します。
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 buildMCP サーバーを直接起動して、エラーなしで実行されていることを確認します。
azd tagger mcp startサーバーが起動し、標準の入力と出力をリッスンします。 拡張機能を使用するように構成された AI エージェントなどの MCP クライアントは、このサーバーに接続してツールを呼び出します。