azure devops mcp server
Integrates Cline with Azure DevOps services, enabling access to work items, repositories, and pull requests through configurable MCP tools.
Integrates Cline with Azure DevOps services, enabling access to work items, repositories, and pull requests through configurable MCP tools.
This Model Context Protocol (MCP) server provides integration with Azure DevOps, allowing Cline to interact with Azure DevOps services.
To install Azure DevOps Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @stefanskiasan/azure-devops-mcp-server --client claude
Clone this repository:
git clone https://github.com/stefanskiasan/azure-devops-mcp-server.git
cd azure-devops-mcp-server
Install dependencies:
npm install
Build the server:
npm run build
Note: The build output (build/
directory) is not included in version control. You must run the build command after cloning the repository.
Code (read, write)
- For Pull Request operationsWork Items (read, write)
- For Work Item managementBuild (read, execute)
- For Pipeline operationsWiki (read, write)
- For Wiki operationsProject and Team (read)
- For Project and Board informationAdd the server configuration to your Cline MCP settings file:
%APPDATA%/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json
%LOCALAPPDATA%/Claude/claude_desktop_config.json
Add the following configuration to the mcpServers
object:
{
"mcpServers": {
"azure-devops": {
"command": "node",
"args": ["/absolute/path/to/azure-devops-server/build/index.js"],
"env": {
"AZURE_DEVOPS_ORG": "your-organization",
"AZURE_DEVOPS_PAT": "your-personal-access-token",
"AZURE_DEVOPS_PROJECT": "your-project-name"
},
"disabled": false,
"autoApprove": []
}
}
}
Replace the following values:
- /absolute/path/to/azure-devops-server
: The absolute path to where you cloned this repository
- your-organization
: Your Azure DevOps organization name
- your-project-name
: Your Azure DevOps project name
- your-personal-access-token
: The PAT you generated in step 1
get_work_item
: Get a work item by IDlist_work_items
: Query work items using WIQLcreate_work_item
: Create a new work item (Bug, Task, User Story)update_work_item
: Update an existing work itemget_boards
: Get available boards in the projectlist_pipelines
: List all pipelines in the projecttrigger_pipeline
: Execute a pipelinelist_pull_requests
: List pull requestscreate_pull_request
: Create a new pull requestupdate_pull_request
: Update a pull requestget_pull_request
: Get pull request detailsget_wikis
: List all wikis in the projectget_wiki_page
: Get a wiki pagecreate_wiki
: Create a new wikiupdate_wiki_page
: Create or update a wiki pagelist_projects
: List all projects in the Azure DevOps organizationnpm run inspector
Check the Cline logs for any error messages
If you get authentication errors:
Double-check the organization and project names
For other issues:
To modify or extend the server:
src
directorynpm run watch
for developmentnpm run build
when readynpm run inspector
MIT License - See LICENSE for details
[
{
"description": "Get work items by IDs",
"inputSchema": {
"properties": {
"$expand": {
"description": "Expand options (None=0, Relations=1, Fields=2, Links=3, All=4)",
"enum": [
0,
1,
2,
3,
4
],
"type": "number"
},
"asOf": {
"description": "As of a specific date (ISO 8601)",
"format": "date-time",
"type": "string"
},
"errorPolicy": {
"description": "Error policy (Fail=1, Omit=2)",
"enum": [
1,
2
],
"type": "number"
},
"fields": {
"description": "Fields to include (e.g., "System.Title", "System.State")",
"items": {
"type": "string"
},
"type": "array"
},
"ids": {
"description": "Work item IDs",
"items": {
"type": "number"
},
"type": "array"
}
},
"required": [
"ids"
],
"type": "object"
},
"name": "get_work_item"
},
{
"description": "List work items from a board",
"inputSchema": {
"properties": {
"query": {
"description": "WIQL query to filter work items",
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "list_work_items"
},
{
"description": "Create a new work item using JSON patch operations",
"inputSchema": {
"properties": {
"document": {
"description": "Array of JSON patch operations to apply",
"items": {
"properties": {
"op": {
"description": "The patch operation to perform",
"enum": [
"add",
"remove",
"replace",
"move",
"copy",
"test"
],
"type": "string"
},
"path": {
"description": "The path for the operation (e.g., /fields/System.Title)",
"type": "string"
},
"value": {
"description": "The value for the operation"
}
},
"required": [
"op",
"path"
],
"type": "object"
},
"type": "array"
},
"type": {
"description": "Work item type (e.g., "Bug", "Task", "User Story")",
"type": "string"
}
},
"required": [
"type",
"document"
],
"type": "object"
},
"name": "create_work_item"
},
{
"description": "Update an existing work item using JSON patch operations",
"inputSchema": {
"properties": {
"document": {
"description": "Array of JSON patch operations to apply",
"items": {
"properties": {
"op": {
"description": "The patch operation to perform",
"enum": [
"add",
"remove",
"replace",
"move",
"copy",
"test"
],
"type": "string"
},
"path": {
"description": "The path for the operation (e.g., /fields/System.Title)",
"type": "string"
},
"value": {
"description": "The value for the operation"
}
},
"required": [
"op",
"path"
],
"type": "object"
},
"type": "array"
},
"id": {
"description": "ID of the work item to update",
"type": "number"
}
},
"required": [
"id",
"document"
],
"type": "object"
},
"name": "update_work_item"
},
{
"description": "List available boards in the project",
"inputSchema": {
"properties": {
"team": {
"description": "Team name (optional)",
"type": "string"
}
},
"type": "object"
},
"name": "get_boards"
},
{
"description": "List all wikis in the project",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_wikis"
},
{
"description": "Get a wiki page by path",
"inputSchema": {
"properties": {
"includeContent": {
"description": "Include page content (optional, defaults to true)",
"type": "boolean"
},
"path": {
"description": "Page path",
"type": "string"
},
"version": {
"description": "Version (optional, defaults to main)",
"type": "string"
},
"wikiIdentifier": {
"description": "Wiki identifier",
"type": "string"
}
},
"required": [
"wikiIdentifier",
"path"
],
"type": "object"
},
"name": "get_wiki_page"
},
{
"description": "Create a new wiki",
"inputSchema": {
"properties": {
"mappedPath": {
"description": "Mapped path (optional, defaults to /)",
"type": "string"
},
"name": {
"description": "Wiki name",
"type": "string"
},
"projectId": {
"description": "Project ID (optional, defaults to current project)",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "create_wiki"
},
{
"description": "Create or update a wiki page",
"inputSchema": {
"properties": {
"comment": {
"description": "Comment for the update (optional)",
"type": "string"
},
"content": {
"description": "Page content in markdown format",
"type": "string"
},
"path": {
"description": "Page path",
"type": "string"
},
"wikiIdentifier": {
"description": "Wiki identifier",
"type": "string"
}
},
"required": [
"wikiIdentifier",
"path",
"content"
],
"type": "object"
},
"name": "update_wiki_page"
},
{
"description": "List all projects in the Azure DevOps organization",
"inputSchema": {
"properties": {},
"required": [],
"type": "object"
},
"name": "list_projects"
},
{
"description": "List all pipelines in the project",
"inputSchema": {
"properties": {
"folder": {
"description": "Filter pipelines by folder path (optional)",
"type": "string"
},
"name": {
"description": "Filter pipelines by name (optional)",
"type": "string"
}
},
"type": "object"
},
"name": "list_pipelines"
},
{
"description": "Trigger a pipeline run",
"inputSchema": {
"properties": {
"branch": {
"description": "Branch to run the pipeline on (optional, defaults to default branch)",
"type": "string"
},
"pipelineId": {
"description": "Pipeline ID to trigger",
"type": "number"
},
"variables": {
"additionalProperties": {
"type": "string"
},
"description": "Pipeline variables to override (optional)",
"type": "object"
}
},
"required": [
"pipelineId"
],
"type": "object"
},
"name": "trigger_pipeline"
},
{
"description": "List all pull requests in the project",
"inputSchema": {
"properties": {
"creatorId": {
"description": "Filter by creator ID (optional)",
"type": "string"
},
"repositoryId": {
"description": "Filter by repository ID (optional)",
"type": "string"
},
"status": {
"description": "Filter by PR status (active, completed, abandoned)",
"enum": [
"active",
"completed",
"abandoned"
],
"type": "string"
}
},
"type": "object"
},
"name": "list_pull_requests"
},
{
"description": "Create a new pull request",
"inputSchema": {
"properties": {
"description": {
"description": "Pull request description",
"type": "string"
},
"repositoryId": {
"description": "Repository ID",
"type": "string"
},
"reviewers": {
"description": "List of reviewer IDs (optional)",
"items": {
"type": "string"
},
"type": "array"
},
"sourceRefName": {
"description": "Source branch name (e.g. refs/heads/feature)",
"type": "string"
},
"targetRefName": {
"description": "Target branch name (e.g. refs/heads/main)",
"type": "string"
},
"title": {
"description": "Pull request title",
"type": "string"
}
},
"required": [
"repositoryId",
"sourceRefName",
"targetRefName",
"title"
],
"type": "object"
},
"name": "create_pull_request"
},
{
"description": "Update an existing pull request",
"inputSchema": {
"properties": {
"description": {
"description": "New description (optional)",
"type": "string"
},
"mergeStrategy": {
"description": "Merge strategy (optional)",
"enum": [
"squash",
"rebase",
"merge"
],
"type": "string"
},
"pullRequestId": {
"description": "Pull Request ID",
"type": "number"
},
"status": {
"description": "New status (active, abandoned, completed)",
"enum": [
"active",
"abandoned",
"completed"
],
"type": "string"
},
"title": {
"description": "New title (optional)",
"type": "string"
}
},
"required": [
"pullRequestId"
],
"type": "object"
},
"name": "update_pull_request"
}
]