Azure DevOps MCP Server with PAT Authentication
Enables deployment of the MCP server as a web service on Render.com's cloud platform, providing HTTP API endpoints for Azure DevOps integration accessible via web applications
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Azure DevOps MCP Server with PAT Authentication show me my assigned work items for this sprint"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Azure DevOps MCP Server with PAT Authentication
A Model Context Protocol (MCP) server for Azure DevOps that uses Personal Access Token (PAT) authentication instead of Azure CLI. This server provides both CLI and HTTP API interfaces for interacting with Azure DevOps services.
โจ Features
๐ PAT Authentication: Uses Personal Access Tokens instead of Azure CLI
๐ HTTP API: REST API endpoints for web applications
๐ก MCP Protocol: Full Model Context Protocol support
๐ Deploy Ready: Configured for Render.com deployment
๐ ๏ธ 75 Tools: Comprehensive Azure DevOps functionality
Related MCP server: Azure DevOps MCP Server
๐๏ธ Architecture
This server provides two interfaces:
CLI Interface (
src/index.ts) - Traditional MCP server via stdin/stdoutWeb Interface (
src/server-web.ts) - HTTP REST API for web deployment
๐ง Available Tools (75 Total)
Work Items (19 tools)
wit_get_work_item- Get work item by IDwit_create_work_item- Create new work itemwit_update_work_item- Update work item fieldswit_my_work_items- Get user's assigned work itemswit_add_work_item_comment- Add commentswit_list_backlogs- List team backlogswit_link_work_item_to_pull_request- Link work items to PRsAnd 12 more...
Builds (9 tools)
build_get_builds- List buildsbuild_run_build- Trigger new buildbuild_get_log- Get build logsbuild_get_status- Check build statusAnd 5 more...
Repositories (18 tools)
repo_create_pull_request- Create pull requestsrepo_list_pull_requests_by_repo- List PRsrepo_get_pull_request_by_id- Get PR detailsrepo_list_branches_by_repo- List branchesrepo_search_commits- Search commitsAnd 13 more...
Search (3 tools)
search_code- Search repositoriessearch_wiki- Search wiki pagessearch_workitem- Search work items
Other Categories
Work Management (3 tools): Iterations and teams
Releases (2 tools): Release definitions and deployments
Wiki (5 tools): Wiki page management
Test Plans (6 tools): Test management
Core (3 tools): Projects and teams
Advanced Security (2 tools): Security alerts
๐ Quick Start
Option 1: Deploy to Render.com (Recommended)
Fork this repository
Deploy to Render:
Go to render.com
Create new Web Service
Connect your forked repository
Set environment variables (see below)
Set Environment Variables:
AZURE_DEVOPS_ORG=your-organization-name AZURE_DEVOPS_PAT=your-personal-access-tokenDeploy and get your URL:
https://your-service.onrender.com
Option 2: Local Development
# Clone repository
git clone https://github.com/ennuiii/DevOpsMcpPAT.git
cd DevOpsMcpPAT
# Install dependencies
npm install
# Set environment variables
export AZURE_DEVOPS_ORG="your-org"
export AZURE_DEVOPS_PAT="your-pat-token"
# Build and start
npm run build
npm start
# Server will be available at http://localhost:3000๐ Environment Variables
Required
Variable | Description | Example |
| Your Azure DevOps organization name |
|
| Personal Access Token |
|
Optional
Variable | Description | Default |
| HTTP server port |
|
| Node.js environment |
|
๐ซ Creating a Personal Access Token
Go to Azure DevOps:
https://dev.azure.com/{your-organization}Click User Settings โ Personal Access Tokens
Click "New Token"
Configure scopes:
โ Work Items: Read & Write
โ Code: Read & Write
โ Build: Read & Execute
โ Release: Read, Write & Execute
โ Project and Team: Read
โ Analytics: Read
โ Test Management: Read & Write
๐ก API Endpoints
Health & Info
GET /- API documentationGET /health- Health check
Tools
GET /api/tools- List all available toolsPOST /api/tools/{toolName}- Call specific tool
MCP Protocol
POST /mcp- JSON-RPC 2.0 endpoint
๐งช Example Usage
Get Work Item
curl -X POST https://your-service.onrender.com/api/tools/wit_get_work_item \
-H "Content-Type: application/json" \
-d '{"id": 123, "project": "MyProject"}'List Projects
curl -X POST https://your-service.onrender.com/api/tools/core_list_projects \
-H "Content-Type: application/json" \
-d '{}'Search Code
curl -X POST https://your-service.onrender.com/api/tools/search_code \
-H "Content-Type: application/json" \
-d '{"searchText": "function", "project": ["MyProject"]}'๐๏ธ Project Structure
โโโ src/
โ โโโ index.ts # CLI MCP server (PAT auth)
โ โโโ server-web.ts # HTTP server wrapper
โ โโโ tools/ # Tool implementations
โ โ โโโ workitems.ts # Work item tools
โ โ โโโ builds.ts # Build tools
โ โ โโโ repos.ts # Repository tools
โ โ โโโ ... # Other tool categories
โ โโโ prompts.ts # MCP prompts
โ โโโ utils.ts # Utilities
โโโ package.json # Dependencies & scripts
โโโ tsconfig.json # TypeScript config
โโโ render.yaml # Render deployment config
โโโ Dockerfile # Container config
โโโ README.md # This file๐ Differences from Original
Feature | Original Azure DevOps MCP | This PAT Version |
Authentication | Azure CLI / DefaultAzureCredential | Personal Access Token |
Dependencies | Requires @azure/identity | No Azure Identity SDK |
Setup | Requires | Just needs PAT token |
Multi-tenant | Yes (via --tenant flag) | No (PAT is org-specific) |
Web Interface | No | Yes (HTTP API) |
Deployment | Local only | Render.com ready |
๐ ๏ธ Development
Build
npm run buildDevelopment Mode
npm run devTesting
# Test CLI version
export AZURE_DEVOPS_PAT="your-token"
echo '{}' | node dist/index.js your-org
# Test web version
npm start
curl http://localhost:3000/health๐ Complete Tool Reference
Work Items (19 tools)
wit_list_backlogs- List team backlogswit_list_backlog_work_items- List backlog work itemswit_my_work_items- Get user's work itemswit_get_work_items_batch_by_ids- Batch get work itemswit_get_work_item- Get single work itemwit_list_work_item_comments- List work item commentswit_add_work_item_comment- Add work item commentwit_add_child_work_items- Create child work itemswit_link_work_item_to_pull_request- Link to PRwit_get_work_items_for_iteration- Get iteration work itemswit_update_work_item- Update work itemwit_get_work_item_type- Get work item typewit_create_work_item- Create work itemwit_get_query- Get query definitionwit_get_query_results_by_id- Execute querywit_update_work_items_batch- Batch updatewit_work_items_link- Link work itemswit_work_item_unlink- Unlink work itemswit_add_artifact_link- Link artifacts
Builds (9 tools)
build_get_definitions- List build definitionsbuild_get_definition_revisions- Get definition historybuild_get_builds- List buildsbuild_get_log- Get build logsbuild_get_log_by_id- Get specific logbuild_get_changes- Get build changesbuild_run_build- Trigger buildbuild_get_status- Get build statusbuild_update_build_stage- Update build stage
Repositories (18 tools)
repo_create_pull_request- Create PRrepo_update_pull_request- Update PRrepo_update_pull_request_reviewers- Manage reviewersrepo_list_repos_by_project- List repositoriesrepo_list_pull_requests_by_repo- List PRs by reporepo_list_pull_requests_by_project- List PRs by projectrepo_list_pull_request_threads- List PR threadsrepo_list_pull_request_thread_comments- List thread commentsrepo_list_branches_by_repo- List branchesrepo_list_my_branches_by_repo- List my branchesrepo_get_repo_by_name_or_id- Get repositoryrepo_get_branch_by_name- Get branchrepo_get_pull_request_by_id- Get PRrepo_reply_to_comment- Reply to PR commentrepo_create_pull_request_thread- Create PR threadrepo_resolve_comment- Resolve PR commentrepo_search_commits- Search commitsrepo_list_pull_requests_by_commits- Find PRs by commits
Search (3 tools)
search_code- Search code repositoriessearch_wiki- Search wiki pagessearch_workitem- Search work items
Work Management (3 tools)
work_list_team_iterations- List team iterationswork_create_iterations- Create iterationswork_assign_iterations- Assign iterations to team
Releases (2 tools)
release_get_definitions- List release definitionsrelease_get_releases- List releases
Wiki (5 tools)
wiki_list_wikis- List wikiswiki_get_wiki- Get wiki detailswiki_list_pages- List wiki pageswiki_get_page_content- Get page contentwiki_create_or_update_page- Create/update page
Test Plans (6 tools)
testplan_list_test_plans- List test planstestplan_create_test_plan- Create test plantestplan_add_test_cases_to_suite- Add test casestestplan_create_test_case- Create test casetestplan_list_test_cases- List test casestestplan_show_test_results_from_build_id- Get test results
Core (3 tools)
core_list_project_teams- List project teamscore_list_projects- List projectscore_get_identity_ids- Get identity IDs
Advanced Security (2 tools)
advsec_get_alerts- Get security alertsadvsec_get_alert_details- Get alert details
๐ Troubleshooting
Common Issues
Authentication Failed
Verify PAT token is valid and not expired
Check token has required scopes
Ensure organization name is correct
Service Won't Start
Check environment variables are set
Verify Node.js version >= 20.0.0
Check logs for specific error messages
Tool Execution Fails
Ensure PAT has permissions for the specific operation
Check project/repository names are correct
Verify work item IDs exist
๐ License
MIT License - see LICENSE file for details.
๐ค Contributing
Fork the repository
Create a feature branch
Make your changes
Add tests if applicable
Submit a pull request
๐ Links
โญ Star History
If this project helped you, please consider giving it a star! โญ
Available Tools
70 toolsadvsec_get_alert_detailsB
Get detailed information about a specific Advanced Security alert.
Inputs: alertId (required), project (required), repository (required), ref.
advsec_get_alertsC
Retrieve Advanced Security alerts for a repository.
Inputs: confidenceLevels (required), project (required), repository (required), alertType, +11 more.
build_get_buildsC
Retrieves a list of builds for a given project.
Inputs: project (required), branchName, buildIds, buildNumber, +17 more.
build_get_changesC
Get the changes associated with a specific build.
Inputs: buildId (required), project (required), continuationToken, includeSourceChange, +1 more.
build_get_definition_revisionsC
Retrieves a list of revisions for a specific build definition.
Inputs: definitionId (required), project (required).
build_get_definitionsB
Retrieves a list of build definitions for a given project.
Inputs: project (required), builtAfter, continuationToken, definitionIds, +13 more.
build_get_logC
Retrieves the logs for a specific build.
Inputs: buildId (required), project (required).
build_get_log_by_idC
Get a specific build log by log ID.
Inputs: buildId (required), logId (required), project (required), endLine, +1 more.
build_get_statusB
Fetches the status of a specific build.
Inputs: buildId (required), project (required).
build_run_buildC
Triggers a new build for a specified definition.
Inputs: definitionId (required), project (required), parameters, sourceBranch.
build_update_build_stageC
Updates the stage of a specific build.
Inputs: buildId (required), project (required), stageName (required), status (required), +1 more.
core_get_identity_idsB
Retrieve Azure DevOps identity IDs for a provided search filter.
Inputs: searchFilter (required).
core_list_projectsB
Retrieve a list of projects in your Azure DevOps organization.
Inputs: continuationToken, projectNameFilter, skip, stateFilter, +1 more.
core_list_project_teamsC
Retrieve a list of teams for the specified Azure DevOps project.
Inputs: project (required), mine, skip, top.
release_get_definitionsC
Retrieves list of release definitions for a given project.
Inputs: project (required), artifactSourceId, artifactType, continuationToken, +11 more.
release_get_releasesC
Retrieves a list of releases for a given project.
Inputs: artifactTypeId, artifactVersionId, continuationToken, createdBy, +18 more.
repo_create_pull_requestC
Create a new pull request.
Inputs: repositoryId (required), sourceRefName (required), targetRefName (required), title (required), +4 more.
repo_create_pull_request_threadC
Creates a new comment thread on a pull request.
Inputs: content (required), pullRequestId (required), repositoryId (required), filePath, +6 more.
repo_get_branch_by_nameC
Get a branch by its name.
Inputs: branchName (required), repositoryId (required).
repo_get_pull_request_by_idB
Get a pull request by its ID.
Inputs: pullRequestId (required), repositoryId (required), includeWorkItemRefs.
repo_get_repo_by_name_or_idB
Get the repository by project and repository name or ID.
Inputs: project (required), repositoryNameOrId (required).
repo_list_branches_by_repoB
Retrieve a list of branches for a given repository.
Inputs: repositoryId (required), top.
repo_list_my_branches_by_repoB
Retrieve a list of my branches for a given repository Id.
Inputs: repositoryId (required), top.
repo_list_pull_requests_by_commitsB
Lists pull requests by commit IDs to find which pull requests contain specific commits
Inputs: commits (required), project (required), repository (required), queryType.
repo_list_pull_requests_by_projectB
Retrieve a list of pull requests for a given project Id or Name.
Inputs: project (required), created_by_me, i_am_reviewer, skip, +2 more.
repo_list_pull_requests_by_repoC
Retrieve a list of pull requests for a given repository.
Inputs: repositoryId (required), created_by_me, i_am_reviewer, skip, +2 more.
repo_list_pull_request_thread_commentsB
Retrieve a list of comments in a pull request thread.
Inputs: pullRequestId (required), repositoryId (required), threadId (required), fullResponse, +3 more.
repo_list_pull_request_threadsB
Retrieve a list of comment threads for a pull request.
Inputs: pullRequestId (required), repositoryId (required), baseIteration, fullResponse, +4 more.
repo_list_repos_by_projectB
Retrieve a list of repositories for a given project
Inputs: project (required), repoNameFilter, skip, top.
repo_reply_to_commentB
Replies to a specific comment on a pull request.
Inputs: content (required), pullRequestId (required), repositoryId (required), threadId (required), +2 more.
repo_resolve_commentC
Resolves a specific comment thread on a pull request.
Inputs: pullRequestId (required), repositoryId (required), threadId (required), fullResponse.
repo_search_commitsC
Searches for commits in a repository
Inputs: project (required), repository (required), fromCommit, includeLinks, +6 more.
repo_update_pull_requestC
Update a Pull Request by ID with specified fields.
Inputs: pullRequestId (required), repositoryId (required), description, isDraft, +3 more.
repo_update_pull_request_reviewersC
Add or remove reviewers for an existing pull request.
Inputs: action (required), pullRequestId (required), repositoryId (required), reviewerIds (required).
search_codeC
Search Azure DevOps Repositories for a given search text
Inputs: searchText (required), branch, includeFacets, path, +4 more.
search_wikiC
Search Azure DevOps Wiki for a given search text
Inputs: searchText (required), includeFacets, project, skip, +2 more.
search_workitemC
Get Azure DevOps Work Item search results for a given search text
Inputs: searchText (required), areaPath, assignedTo, includeFacets, +5 more.
testplan_add_test_cases_to_suiteC
Adds existing test cases to a test suite.
Inputs: planId (required), project (required), suiteId (required), testCaseIds (required).
testplan_create_test_caseB
Creates a new test case work item.
Inputs: project (required), title (required), areaPath, iterationPath, +2 more.
testplan_create_test_planC
Creates a new test plan in the project.
Inputs: iteration (required), name (required), project (required), areaPath, +3 more.
testplan_list_test_casesC
Gets a list of test cases in the test plan.
Inputs: planid (required), project (required), suiteid (required).
testplan_list_test_plansC
Retrieve a paginated list of test plans from an Azure DevOps project. Allows filtering for active plans and toggling detailed information.
Inputs: project (required), continuationToken, filterActivePlans, includePlanDetails.
testplan_show_test_results_from_build_idB
Gets a list of test results for a given project and build ID.
Inputs: buildid (required), project (required).
wiki_create_or_update_pageC
Create or update a wiki page with content.
Inputs: content (required), path (required), wikiIdentifier (required), etag, +1 more.
wiki_get_page_contentC
Retrieve wiki page content by wikiIdentifier and path.
Inputs: path (required), project (required), wikiIdentifier (required).
wiki_get_wikiC
Get the wiki by wikiIdentifier
Inputs: wikiIdentifier (required), project.
wiki_list_pagesB
Retrieve a list of wiki pages for a specific wiki and project.
Inputs: project (required), wikiIdentifier (required), continuationToken, pageViewsForDays, +1 more.
wiki_list_wikisB
Retrieve a list of wikis for an organization or project.
Inputs: project.
wit_add_artifact_linkA
Add artifact links (repository, branch, commit, builds) to work items. You can either provide the full vstfs URI or the individual components to build it automatically.
Inputs: project (required), workItemId (required), artifactUri, branchName, +7 more.
wit_add_child_work_itemsC
Create one or many child work items from a parent by work item type and parent id.
Inputs: items (required), parentId (required), project (required), workItemType (required).
wit_add_work_item_commentC
Add comment to a work item by ID.
Inputs: comment (required), project (required), workItemId (required), format.
wit_create_work_itemC
Create a new work item in a specified project and work item type.
Inputs: fields (required), project (required), workItemType (required).
wit_get_queryC
Get a query by its ID or path.
Inputs: project (required), query (required), depth, expand, +2 more.
wit_get_query_results_by_idB
Retrieve the results of a work item query given the query ID.
Inputs: id (required), project, team, timePrecision, +1 more.
wit_get_work_itemB
Get a single work item by ID.
Inputs: id (required), project (required), asOf, expand, +1 more.
wit_get_work_items_batch_by_idsC
Retrieve list of work items by IDs in batch.
Inputs: ids (required), project (required), fields.
wit_get_work_items_for_iterationC
Retrieve a list of work items for a specified iteration.
Inputs: iterationId (required), project (required), team.
wit_get_work_item_typeC
Get a specific work item type.
Inputs: project (required), workItemType (required).
wit_link_work_item_to_pull_requestB
Link a single work item to an existing pull request.
Inputs: projectId (required), pullRequestId (required), repositoryId (required), workItemId (required), +1 more.
wit_list_backlogsC
Revieve a list of backlogs for a given project and team.
Inputs: project (required), team (required).
wit_list_backlog_work_itemsB
Retrieve a list of backlogs of for a given project, team, and backlog category
Inputs: backlogId (required), project (required), team (required).
wit_list_work_item_commentsC
Retrieve list of comments for a work item by ID.
Inputs: project (required), workItemId (required), top.
wit_my_work_itemsC
Retrieve a list of work items relevent to the authenticated user.
Inputs: project (required), includeCompleted, top, type.
wit_update_work_itemC
Update a work item by ID with specified fields.
Inputs: id (required), updates (required).
wit_update_work_items_batchC
Update work items in batch
Inputs: updates (required).
wit_work_items_linkC
Link work items together in batch.
Inputs: project (required), updates (required).
wit_work_item_unlinkB
Remove one or many links from a single work item
Inputs: id (required), project (required), type, url.
work_assign_iterationsC
Assign existing iterations to a specific team in a project.
Inputs: iterations (required), project (required), team (required).
work_create_iterationsC
Create new iterations in a specified Azure DevOps project.
Inputs: iterations (required), project (required).
work_list_team_iterationsC
Retrieve a list of iterations for a specific team in a project.
Inputs: project (required), team (required), timeframe.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogโฆ
TDQS
Scored across 70 tools
Most tools are well-differentiated by resource type and action, but there is some overlap in search functionality (search_code, search_wiki, search_workitem) and multiple PR listing tools (repo_list_pull_requests_by_project, repo_list_pull_requests_by_repo, repo_list_pull_requests_by_commits) that could cause minor confusion. The descriptions help clarify, but the sheer number of tools increases the risk of misselection.
Tool names follow a highly consistent pattern throughout: all use snake_case with a clear prefix indicating the domain (e.g., 'build_', 'repo_', 'wit_'), followed by a verb_noun structure. This predictability makes it easy for agents to understand and navigate the toolset without ambiguity.
With 70 tools, this server is excessively large for typical MCP usage, making it overwhelming and difficult for agents to manage effectively. While Azure DevOps is a broad platform, this count feels bloated and could hinder usability, as many tools might be rarely used or redundant.
The toolset provides comprehensive coverage across Azure DevOps domains, including builds, repositories, work items, test plans, wikis, and more, with full CRUD operations and lifecycle management. There are no obvious gaps; agents can perform complex workflows without dead ends.
Maintenance
Related MCP Connectors
327 dev tools via REST API and MCP. Generate Dockerfiles, schemas, K8s, APIs, and more.
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
30+ deterministic dev and delivery tools: linting, metrics, diagrams, model advice, AI-text checks.
300+ offline developer utilities, plus 21 AI tools with a free API key. JSON, JWT, regex, cron, SQL.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Azure DevOps through Personal Access Token authentication. Supports work item management, wiki operations, project/repository listing, and build pipeline access through natural language.958 npmMIT
- AlicenseNot gradedqualityFmaintenanceEnables interaction with Azure DevOps through Cursor chat, providing tools to manage builds, pipelines, work items, sprints, and board operations. Supports secure authentication via Personal Access Tokens and allows natural language-driven DevOps task management.1MIT

Azure DevOps MCP Serverofficial
AlicenseNot gradedqualityAmaintenanceProvides Azure DevOps tooling for AI agents, enabling interaction with projects, work items, repositories, and pipelines through natural language.132,683 npm2,087MIT- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with Azure DevOps through an MCP server with 34 tools for PRs, work items, repos, and branches, optimized for token efficiency and agent-first workflows.4 npmMIT