On-Prem Azure DevOps with your own MCP Server directly accessible by AI LLM such as Claude Code extension in VS Code Editor
Organizing large LLM coding projects can be a challenge, especially when you want to keep your code repository on-premises. The Azure DevOps MCP Server bridges this gap by enabling Claude Code to interact directly with your on-premises Azure DevOps environment. This solution brings the power of Model Context Protocol (MCP) to your work items, Git repositories, and pipelines, making project management seamless and efficient.
- On-Premises Friendly: Designed for organizations that prefer to keep their code and project data behind their own firewall.
- Integrated Workflow: Connects Claude Code to Azure DevOps for unified work item management, Git integration, and pipeline automation.
- Streamlined Collaboration: Link commits to work items, manage pull requests, and track build status—all from your local setup.
- Work Item Management: Create, query, update, and link Epics, Features, User Stories, Tasks, and Bugs.
- Git Integration: Link commits, view history, and manage pull requests directly.
- Pipeline Automation: Trigger builds, monitor status, and retrieve logs with ease.
This solution is perfect for teams seeking robust, secure, and centralized project management for their LLM-driven coding workflows.
Model Context Protocol server for Azure DevOps, enabling Claude Code to interact with work items, Git repositories, and pipelines.
- Get, query, create, update work items
- Manage Epics, Features, User Stories, Tasks, Bugs
- Link and organize work items
- Track progress and assignments
- Link commits to work items
- View commit history
- Create and manage pull requests
- Check PR status and reviews
- Trigger builds
- Monitor pipeline status
- Retrieve build logs
- .NET 10 Runtime
- Azure DevOps Server (on-premises) or Azure DevOps Services
- Claude Desktop with MCP support
-
Clone and build:
git clone <repository-url> cd AzureDevOpsMCP dotnet build
-
Configure Azure DevOps connection:
Edit
src/AzureDevOpsMcp.Server/appsettings.json:{ "AzureDevOps": { "ServerUrl": "http://your-server/DefaultCollection/", "ProjectName": "YourProject", "UseWindowsAuth": true, "TimeoutSeconds": 30 } } -
Configure Claude Desktop:
Add to your Claude Desktop MCP configuration:
{ "mcpServers": { "azure-devops": { "command": "dotnet", "args": ["run", "--project", "path/to/src/AzureDevOpsMcp.Server"] } } } -
Start using with Claude!
| Tool | Description |
|---|---|
devops_get_work_item |
Get work item details by ID |
devops_query_work_items |
Execute WIQL query |
devops_get_my_work |
Get items assigned to current user |
devops_get_next_task |
Get next task to work on |
devops_get_epics |
Get all Epics |
devops_get_stories |
Get all User Stories |
devops_get_tasks |
Get all Tasks |
devops_create_work_item |
Create new work item |
devops_update_work_item |
Update work item fields |
devops_change_state |
Change work item state |
devops_link_work_items |
Link two work items |
devops_unlink_work_items |
Remove link between items |
| Tool | Description |
|---|---|
devops_link_commit_to_work_item |
Link commit to work item |
devops_get_commits |
Get commit history |
devops_create_pull_request |
Create pull request |
devops_get_pull_request_status |
Get PR status and reviews |
| Tool | Description |
|---|---|
devops_trigger_pipeline |
Trigger a pipeline build |
devops_get_pipeline_status |
Get build status |
devops_get_build_logs |
Get build logs |
See docs/tools.md for complete tool reference with parameters.
Get work item:
Show me work item #25
Create task:
Create a task called "Implement login validation" under user story #10
Query work:
What tasks are assigned to me?
Link commit:
Link commit a3f5c2d to work item #25
Create PR:
Create a pull request from feature/auth to main
Check build:
What's the status of build #123?
{
"AzureDevOps": {
"ServerUrl": "http://192.168.0.57/DefaultCollection/",
"ProjectName": "Test001",
"UseWindowsAuth": true,
"TimeoutSeconds": 30
}
}# Override PAT (switches to PAT auth)
$env:DEVOPS_PAT="your-token-here"
# Override server URL
$env:DEVOPS_SERVER_URL="http://different-server/Collection/"
# Override project
$env:DEVOPS_PROJECT="AnotherProject"dotnet builddotnet testdotnet run --project src/AzureDevOpsMcp.Server- MCP Protocol: stdio transport
- Authentication: Windows Authentication or PAT
- Azure DevOps Client: Official Microsoft libraries
- Framework: .NET 10
AzureDevOpsMCP/
├── src/
│ └── AzureDevOpsMcp.Server/
│ ├── Configuration/ # Settings classes
│ ├── Connection/ # Azure DevOps connection
│ ├── Models/ # Data models
│ ├── Tools/ # MCP tool implementations
│ │ ├── WorkItems/ # Work item tools (12 tools)
│ │ ├── Git/ # Git tools (4 tools)
│ │ └── Pipelines/ # Pipeline tools (3 tools)
│ └── Program.cs # Entry point
├── tests/
│ ├── AzureDevOpsMcp.Tests/ # Unit tests
│ └── AzureDevOpsMcp.IntegrationTests/ # Integration tests
├── deployment/ # CI/CD configuration
│ └── azure-pipelines.yml
└── docs/
└── tools.md # Tool reference
- Verify server URL in
appsettings.json - Check network access to DevOps server
- Ensure Windows Authentication is configured
- Try accessing DevOps web UI to verify credentials
- Verify project name matches exactly (case-sensitive)
- Check you have access to the project
- Verify collection name in URL
- Ensure .NET 10 SDK installed:
dotnet --version - Restore packages:
dotnet restore - Clean build:
dotnet clean && dotnet build
MIT License
Contributions welcome! See CONTRIBUTING.md for guidelines.


