Azure DevOps 작업을 위한 .NET 라이브러리 및 MCP 서버 프로젝트
요약
이 프로젝트는 AI 에이전트가 Azure DevOps의 다양한 기능을 자동화할 수 있도록 돕는 .NET 라이브러리 세트와 Model Context Protocol (MCP) 서버를 제공합니다. Boards, Repos, Pipelines, Artifacts 등 Azure DevOps의 주요 서비스 영역을 단순화된 인터페이스로 래핑하여 통합된 MCP 엔드포인트를 통해 접근할 수 있게 합니다. 현재 커뮤니티 피드백을 위한 퍼블릭 프리뷰 단계로, API 구조가 변경될 수 있습니다.
핵심 포인트
- AI 에이전트가 Azure DevOps 작업을 수행할 수 있도록 MCP 서버 및 .NET 라이브러리 제공
- Boards, Repos, Pipelines, Artifacts 등 주요 서비스 영역에 대한 통합된 인터페이스 지원
- .NET 10 기반의 멀티 프로젝트 워크스페이스 구조
- 공식 SDK 및 REST API를 래핑하여 MCP 서버와 Azure DevOps 간의 디커플링 구현
- 현재 프리릴리스(pre-release) 단계로 향후 중대한 변경 사항이 발생할 수 있음
이 저장소는 Azure DevOps 작업을 노출하는 .NET 라이브러리 세트와 Model Context Protocol (MCP) 서버를 포함하고 있습니다. 목표는 작업 항목(work items) 생성, 풀 리퀘스트(pull requests) 관리, 빌드 대기열(queuing builds) 등록, 아티팩트(artifacts) 작업 등 일반적인 작업들을 통일된 MCP 엔드포인트를 통해 제공함으로써 AI 에이전트가 Azure DevOps 자동화에 접근할 수 있도록 하는 것입니다.
현재 프리릴리스(pre-release) 단계에 있습니다.
미리보기 안내 (Preview Notice)
이 저장소는 커뮤니티의 피드백을 수집하기 위해 퍼블릭 프리뷰(public preview)로 공개됩니다. API 표면(API surface)과 전반적인 구조는 아직 형성되는 과정에 있으며, 개발이 진행됨에 따라 실질적으로 변경될 수 있습니다. 향후 업데이트 시 사전 통지 없이 중대한 변경(breaking changes)이 도입될 수 있으며, 현재 사용 가능한 기능이 리팩터링되거나 제거될 수 있습니다.
프리뷰 단계에서 이 프로젝트를 기반으로 구축하기로 선택했다면, 저장소와 정기적으로 동기화하고 이러한 변경 사항에 맞춰 코드를 조정할 준비를 해야 합니다.
| 빌드 (Build) | 통합 테스트 (Integration Tests) | 엔드 투 엔드 (End to End) |
|---|
| SonarCloud 정적 분석 (static analysis) |
|---|
이 저장소는 Microsoft Azure DevOps SDK 및 REST API를 래핑(wrap)하는 여러 C# 프로젝트를 포함하고 있습니다. Boards, Repos, Pipelines, Artifacts 등 각 Azure DevOps 탭은 /src/ 아래에 프로젝트를 가지고 있으며, 단순화된 클라이언트 인터페이스를 노출합니다. 이러한 얇은 래퍼(thin wrappers)들은 Dotnet.AzureDevOps.Mcp.Server에 의해 소비되어 Model Context Protocol (MCP) 도구들을 노출합니다. 대부분의 호출은 공식 SDK나 필요한 경우 REST 엔드포인트로 전달되지만, 이 계층은 MCP 서버를 Azure DevOps로부터 분리(decoupled)하여 서버가 독립적으로 진화하거나 향후 구현을 교체할 수 있도록 유지합니다.
솔루션은 .NET 10을 대상으로 하는 멀티 프로젝트 워크스페이스로 구성되어 있습니다. Azure DevOps의 각 서비스 영역은 자체 클라이언트 라이브러리를 가집니다:
-
Overview – 위키(wikis) 및 페이지 관리
- 위키 생성, 읽기, 목록 조회 및 삭제
- 페이지 생성 또는 업데이트, 페이지 목록 조회 및 페이지 텍스트 가져오기
Boards – 작업 항목 (Work items) 및 보드 (Boards) 관리
- Epic, Feature, Story 및 Task 생성 및 업데이트
- 작업 항목 쿼리, 댓글, 첨부 파일 및 링크 관리
- 일괄 업데이트 및 내보내기, 보드, 열 (Columns) 및 반복 주기 (Iterations) 목록 조회
- 반복 주기 및 영역 (Areas) 관리 및 작업 항목 수 조회
Repos – 풀 리퀘스트 (Pull request) 및 리포지토리 (Repository) 관리
- 레이블 및 댓글을 포함한 풀 리퀘스트 생성, 완료 및 목록 조회
- 태그 생성, 브랜치 및 차이점 (Diffs) 목록 조회, 리포지토리 생성 및 삭제
- 풀 리퀘스트 반복 주기 업데이트 및 커밋 (Commits) 검색
Pipelines – 빌드 (Build) 및 파이프라인 (Pipeline) 작업
- 빌드 대기열 추가, 취소 및 재시도, 실행 목록 조회 및 로그 다운로드
- 변경 사항, 로그 및 빌드 보고서 검색
- 정의 (Definitions) 목록 조회 및 전체 파이프라인 CRUD
Artifacts – 피드 (Feeds) 및 패키지 (Packages) 관리
- 피드 생성, 업데이트, 목록 조회 및 삭제
- 패키지 목록 조회, 권한 및 보존 정책 (Retention policies) 확인
- 피드 뷰 (Views) 관리 및 패키지 및 업스트리밍 (Upstreaming) 작업 시도
Test Plans – 테스트 계획 (Test plans) 및 스위트 (Suites) 작업
- 테스트 계획 및 스위트 생성, 읽기, 목록 조회 및 삭제
- 테스트 케이스 생성, 스위트에 추가 및 테스트 결과 가져오기
Project Settings – 팀 및 프로세스 구성
- 팀 생성, 업데이트 및 삭제
- 보드 설정 및 반복 주기 조회
- 상속된 프로세스 (Inherited processes) 생성 및 삭제
Search – Azure DevOps 아티팩트 (Artifacts) 검색
- 위키 페이지 검색
- 작업 항목 검색
Dotnet.AzureDevOps.Mcp.Server 프로젝트는 이러한 라이브러리들을 하나로 모아 MCP 도구 (Tools)로 노출합니다. 이 서버는 ModelContextProtocol 패키지를 사용하여 ASP.NET Core 웹 서버를 호스팅하는 콘솔 애플리케이션으로 구현되었습니다. 이를 직접 실행하거나 컨테이너 이미지, Azure Functions 또는 Windows 서비스와 같이 선호하는 호스팅 환경에 맞게 조정하여 사용할 수 있습니다.
MCP 서버는 /mcp 경로에서 MCP 도구를 제공함으로써 Model Context Protocol 사양을 따릅니다.
HTTP 상의 Server-Sent Events (SSE)를 사용하는 엔드포인트(endpoint)를 통해 제공됩니다. AI 어시스턴트는 이 엔드포인트에 연결하여 런타임(runtime)에 사용 가능한 도구들을 발견할 수 있으며, 구조화된 함수 호출(structured function calls)을 사용하여 이를 호출할 수 있습니다.
통합 테스트(Integration tests)는 실제 Azure DevOps 조직을 대상으로 각 클라이언트를 실행합니다. 또 다른 테스트 스위트(test suite)는 Semantic Kernel을 사용하여 엔드-투-엔드(end-to-end) 에이전트 상호작용을 검증하며, 이를 통해 LLM이 게시된 도구들을 자동으로 호출할 수 있음을 보여줍니다.
src – 클라이언트 라이브러리 및 MCP 서버를 구현하는 소스 프로젝트.
test – 단위(unit), 통합(integration) 및 엔드-투-엔드(end-to-end) 테스트.
Dotnet.AzureDevOps.sln – 모든 프로젝트를 연결하는 솔루션(solution) 파일.
- 최신 .NET 10 릴리스를 설치하세요.
- 이 저장소(repository)를 클론(clone)하세요.
# 빌드 및 실행
dotnet build
dotnet run --project src/Dotnet.AzureDevOps.Mcp.Server
# 컨테이너에서 빌드 및 실행
docker build -t azure-devops-mcp-server .
docker run -p 5050:5050 azure-devops-mcp-server
개발 및 테스트를 위해:
-
종속성 복원(Restore dependencies) 및 빌드:
dotnet build -
테스트 실행:
dotnet test -
MCP 서버 시작:
dotnet run --project src/Dotnet.AzureDevOps.Mcp.Server
서버는 기본적으로 http://localhost:5050 에서 대기합니다.
MCP 엔드포인트는 /mcp (http://localhost:5050/mcp)에서 사용할 수 있습니다.
/health를 방문하여 서버가 실행 중인지 확인하세요.
엔드-투-엔드 테스트는 Semantic Kernel 에이전트가 MCP 서버에 의해 게시된 도구를 호출하는 방법을 보여줍니다. 새로운 콘솔 애플리케이션을 통해 동일한 워크플로(workflow)를 재현할 수 있습니다:
- .NET 10 SDK 설치됨
- URL을 통해 접근 가능한 실행 중인 MCP 서버
- OpenAI API 키 및 모델 이름
- 구성된 환경 변수(environment variables):
MCP_SERVER_URL
OPENAI_API_KEY
OPENAI_MODEL
dotnet new console -n MyMcpClient
cd MyMcpClient
dotnet add package Microsoft.SemanticKernel --version 1.59.0
...
Program.cs를 다음 내용으로 교체하고, MCP 서버 URL과 OpenAI 자격 증명(credentials)을 환경 변수로 구성하세요:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Agents;
...
이 프로그램을 실행하면 에이전트가 MCP 서버에서 제공하는 echo 도구 (tool)를 호출할 때 Hello MCP!가 출력됩니다.
Azure DevOps MCP 서버는 두 가지 배포 방식을 지원합니다:
개발 및 테스트를 위해 로컬 머신에서 서버를 직접 실행하기:
# 직접 빌드 및 실행
dotnet run --project src/Dotnet.AzureDevOps.Mcp.Server
# 또는 제공된 스크립트 사용
...
서버는 기본적으로 http://localhost:5050에서 대기합니다.
MCP 엔드포인트 (endpoint)는 /mcp (http://localhost:5050/mcp)에서 사용할 수 있습니다.
/health를 방문하여 서버가 정상적으로 실행 중인지 확인하세요.
일관되고 격리된 배포를 위해 Docker 컨테이너에서 서버를 실행하기:
# Docker 이미지 빌드
docker build -t azure-devops-mcp-server .
# 컨테이너 실행
...
컨테이너화된 서버는 http://localhost:5050에서 사용할 수 있습니다.
MCP 엔드포인트 (endpoint)는 /mcp (http://localhost:5050/mcp)에서 접근 가능합니다.
격리 (Isolation): 자체 환경에서 실행
일관성 (Consistency): 서로 다른 머신에서도 동일한 동작 보장
운영 환경 준비 완료 (Production-ready): 상태 확인 (health checks) 및 적절한 로깅 (logging) 포함
쉬운 배포 (Easy deployment): 어디에서나 배포 가능한 단일 컨테이너
두 배포 방식 모두 동일한 설정 옵션을 지원합니다:
설정은 appsettings.json 및 MCP_ 접두사가 붙은 환경 변수 (environment variables)에서 읽어옵니다.
MCP_McpServer__Port=5050
- 서버 포트 (기본값: 5050)
MCP_McpServer__LogLevel=Information - 로그 레벨 (Log level)
MCP_McpServer__EnableOpenTelemetry=true - OpenTelemetry 활성화
MCP_McpServer__EnableApplicationInsights=false - Application Insights 활성화
ASPNETCORE_ENVIRONMENT=Production - ASP.NET Core 환경
Azure DevOps 서비스에 연결하려면 다음 환경 변수를 설정하세요:
AZURE_DEVOPS_ORG
- Azure DevOps 조직 이름 (예: "mycompany")
AZURE_DEVOPS_PAT - 적절한 권한을 가진 개인 액세스 토큰 (Personal Access Token)
AZURE_DEVOPS_SEARCH_ENDPOINT
(선택 사항) - 사용자 지정 검색 엔드포인트 (endpoint) URL
예시:
export AZURE_DEVOPS_ORG=mycompany
export AZURE_DEVOPS_PAT=your_personal_access_token_here
# 선택 사항: 사용자 지정 검색 엔드포인트
...
사용자 지정 포트를 사용하는 로컬 서버 (Local server with custom port):
MCP_McpServer__Port=7070 dotnet run --project src/Dotnet.AzureDevOps.Mcp.Server
사용자 지정 설정을 사용하는 Docker 컨테이너 (Docker container with custom configuration):
docker run -d \
--name azure-devops-mcp-server \
-p 7070:7070 \
...
Set-Local-Test-Dev-Env-Vars.ps1 스크립트는 테스트 및 예제에서 사용되는 환경 변수 (environment variables)를 정의하는 데 도움을 줄 수 있습니다.
이 프로젝트는 MIT 라이선스 (MIT License) 하에 라이선스가 부여됩니다. 자세한 내용은 LICENSE를 참조하십시오.
이 프로젝트는 Microsoft 오픈 소스 행동 강령 (Microsoft Open Source Code of Conduct)을 채택했습니다.
자세한 내용은 행동 강령 FAQ를 참조하거나, 추가 질문 또는 의견이 있는 경우 opencode@microsoft.com으로 문의하십시오.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Claude Ecosystem의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기