Azure 개발자 CLI() 확장은 MCP(azd모델 컨텍스트 프로토콜) 서버를 통해 AI 에이전트에 도구를 노출할 수 있습니다.
mcp-server 기능을 추가하면 GitHub Copilot 같은 에이전트가 확장 프로그램의 도구를 찾아 호출할 수 있습니다. 이 문서에서는 샘플 확장 빌드 빠른 시작의 Contoso Resource Tagger 샘플 확장에 MCP 서버를 추가하는 방법을 설명합니다. 모든 확장에 동일한 패턴을 적용할 수 있습니다.
Note
azd 확장은 현재 베타 버전입니다.
MCP 서버 작동 방식
모델 컨텍스트 프로토콜은 AI 에이전트가 외부 서버에서 제공하는 도구를 검색하고 호출할 수 있는 개방형 표준입니다. 확장이 mcp-server 기능을 선언하면 azd가 확장을 MCP 서버로 시작하고 에이전트의 도구 요청을 확장으로 라우팅할 수 있습니다. 확장은 프로젝트에 대한 표준화된 태그 제안과 같은 작업을 수행하기 위해 에이전트가 호출하는 도구를 구현합니다.
기능을 선언합니다
extension.yaml 매니페스트에 mcp-server 기능을 추가합니다:
capabilities:
- custom-commands
- mcp-server
매니페스트에 mcp 섹션을 추가하여 azd MCP 서버를 시작하는 방식을 구성할 수도 있습니다.
serve 속성은 args 및 env를 지원합니다. azd는 이미 확장 실행 파일을 알고 있으므로 명령을 지정할 필요가 없습니다.
mcp:
serve:
args:
- mcp
- start
MCP 명령 추가
MCP 서버를 시작하는 명령을 추가합니다.
azd 는 이 명령을 호출하여 확장을 MCP 서버로 실행합니다.
mcp-go와 같은 Go용 MCP 서버 라이브러리를 사용하여 프로토콜을 처리합니다.
디렉터리에 이름이 지정된
mcp.gointernal/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에 해당 함수를 추가하면 그 import문을 재사용하게 되어 코드가 컴파일됩니다.
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 클라이언트는 이 서버에 연결하여 도구를 호출합니다.