Skip to main content
Glama

azure-devops-mcp

WorkItemTools.ts6.24 kB
import { AzureDevOpsConfig } from '../Interfaces/AzureDevOps'; import { WorkItemService } from '../Services/WorkItemService'; import { formatMcpResponse, formatErrorResponse, McpResponse } from '../Interfaces/Common'; import { WorkItemByIdParams, SearchWorkItemsParams, RecentWorkItemsParams, MyWorkItemsParams, CreateWorkItemParams, UpdateWorkItemParams, AddWorkItemCommentParams, UpdateWorkItemStateParams, AssignWorkItemParams, CreateLinkParams, BulkWorkItemParams } from '../Interfaces/WorkItems'; import getClassMethods from "../utils/getClassMethods"; export class WorkItemTools { private workItemService: WorkItemService; constructor(config: AzureDevOpsConfig) { this.workItemService = new WorkItemService(config); } /** * List work items based on a WIQL query */ public async listWorkItems(params: { query: string }): Promise<McpResponse> { try { const response = await this.workItemService.listWorkItems(params.query); return formatMcpResponse(response, `Found ${response.workItems?.length || 0} work items.`); } catch (error) { console.error('Error in listWorkItems tool:', error); return formatErrorResponse(error); } } /** * Get a work item by ID */ public async getWorkItemById(params: WorkItemByIdParams): Promise<McpResponse> { try { const workItem = await this.workItemService.getWorkItemById(params); return formatMcpResponse(workItem, `Work item ${params.id} details`); } catch (error) { console.error('Error in getWorkItemById tool:', error); return formatErrorResponse(error); } } /** * Search work items */ public async searchWorkItems(params: SearchWorkItemsParams): Promise<McpResponse> { try { const results = await this.workItemService.searchWorkItems(params); return formatMcpResponse(results, `Found ${results.workItems?.length || 0} matching work items`); } catch (error) { console.error('Error in searchWorkItems tool:', error); return formatErrorResponse(error); } } /** * Get recently updated work items */ public async getRecentlyUpdatedWorkItems(params: RecentWorkItemsParams): Promise<McpResponse> { try { const results = await this.workItemService.getRecentWorkItems(params); return formatMcpResponse(results, `Found ${results.workItems?.length || 0} recently updated work items`); } catch (error) { console.error('Error in getRecentlyUpdatedWorkItems tool:', error); return formatErrorResponse(error); } } /** * Get work items assigned to current user */ public async getMyWorkItems(params: MyWorkItemsParams): Promise<McpResponse> { try { const results = await this.workItemService.getMyWorkItems(params); return formatMcpResponse(results, `Found ${results.workItems?.length || 0} work items assigned to you`); } catch (error) { console.error('Error in getMyWorkItems tool:', error); return formatErrorResponse(error); } } /** * Create a work item */ public async createWorkItem(params: CreateWorkItemParams): Promise<McpResponse> { try { const workItem = await this.workItemService.createWorkItem(params); return formatMcpResponse(workItem, `Created work item: ${workItem.id}`); } catch (error) { console.error('Error in createWorkItem tool:', error); return formatErrorResponse(error); } } /** * Update a work item */ public async updateWorkItem(params: UpdateWorkItemParams): Promise<McpResponse> { try { const workItem = await this.workItemService.updateWorkItem(params); return formatMcpResponse(workItem, `Updated work item: ${params.id}`); } catch (error) { console.error('Error in updateWorkItem tool:', error); return formatErrorResponse(error); } } /** * Add a comment to a work item */ public async addWorkItemComment(params: AddWorkItemCommentParams): Promise<McpResponse> { try { const comment = await this.workItemService.addWorkItemComment(params); return formatMcpResponse(comment, `Comment added to work item: ${params.id}`); } catch (error) { console.error('Error in addWorkItemComment tool:', error); return formatErrorResponse(error); } } /** * Update work item state */ public async updateWorkItemState(params: UpdateWorkItemStateParams): Promise<McpResponse> { try { const workItem = await this.workItemService.updateWorkItemState(params); return formatMcpResponse(workItem, `Updated state of work item ${params.id} to "${params.state}"`); } catch (error) { console.error('Error in updateWorkItemState tool:', error); return formatErrorResponse(error); } } /** * Assign work item to a user */ public async assignWorkItem(params: AssignWorkItemParams): Promise<McpResponse> { try { const workItem = await this.workItemService.assignWorkItem(params); return formatMcpResponse(workItem, `Assigned work item ${params.id} to ${params.assignedTo}`); } catch (error) { console.error('Error in assignWorkItem tool:', error); return formatErrorResponse(error); } } /** * Create a link between work items */ public async createLink(params: CreateLinkParams): Promise<McpResponse> { try { const workItem = await this.workItemService.createLink(params); return formatMcpResponse(workItem, `Created ${params.linkType} link from work item ${params.sourceId} to ${params.targetId}`); } catch (error) { console.error('Error in createLink tool:', error); return formatErrorResponse(error); } } /** * Bulk create or update work items */ public async bulkCreateWorkItems(params: BulkWorkItemParams): Promise<McpResponse> { try { const results = await this.workItemService.bulkUpdateWorkItems(params); return formatMcpResponse(results, `Processed ${results.count} work items`); } catch (error) { console.error('Error in bulkCreateWorkItems tool:', error); return formatErrorResponse(error); } } } export const WorkItemToolMethods = getClassMethods(WorkItemTools.prototype);

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/RyanCardin15/AzureDevOps-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server