azure-devops-mcp

by RyanCardin15
Verified
# Tool Registration Guide This document provides instructions on how to register new tools in the Azure DevOps MCP integration. ## How to Register a New Tool To register a new tool, you need to add it to the `index.ts` file in the main source directory. Here's the basic template for registering a tool: ```typescript server.tool("toolName", "Tool description", { // Parameters schema using zod paramName: z.string().describe("Parameter description"), optionalParam: z.number().optional().describe("Optional parameter description") }, async (params, extra) => { // Call the appropriate tool method const result = await toolsInstance.toolMethod(params); return { content: result.content, rawData: result.rawData, isError: result.isError }; } ); ``` ## Example: Registering a New Work Item Tool ```typescript server.tool("updateWorkItemState", "Update the state of a work item", { id: z.number().describe("ID of the work item"), state: z.string().describe("New state for the work item"), comment: z.string().optional().describe("Comment explaining the state change") }, async (params, extra) => { const result = await workItemTools.updateWorkItemState(params); return { content: result.content, rawData: result.rawData, isError: result.isError }; } ); ``` ## Available Tool Instances The MCP server initializes four main tool instances, each handling different aspects of Azure DevOps: 1. `workItemTools` - For work item management operations 2. `boardsSprintsTools` - For board and sprint management operations 3. `projectTools` - For project management operations 4. `gitTools` - For Git repository operations ## Parameter Types Use the Zod library to define parameter types and validations: - `z.string()` - String parameter - `z.number()` - Number parameter - `z.boolean()` - Boolean parameter - `z.array(z.string())` - Array of strings - `z.record(z.any())` - Object with any values - `z.enum(['option1', 'option2'])` - Enumerated values - Add `.optional()` for optional parameters - Add `.describe("Description")` to describe the parameter ### Important: Using Enums for Type Safety When registering tools, always match the parameter types with the interface definitions in the `Interfaces` directory. For enum parameters, make sure to use `z.enum()` with the exact values expected by the interface. This ensures type safety and prevents TypeScript errors during build. Example: ```typescript server.tool("createProject", "Create a new project", { name: z.string().describe("Name of the project"), description: z.string().optional().describe("Description of the project"), // Use z.enum() with the exact values expected by CreateProjectParams visibility: z.enum(['private', 'public']).optional().describe("Visibility of the project"), capabilities: z.record(z.any()).optional().describe("Project capabilities") }, async (params, extra) => { const result = await projectTools.createProject(params); return { content: result.content, rawData: result.rawData, isError: result.isError }; } ); ``` ## Common Enum Values Here are some common enum values used in the Azure DevOps APIs: - Project state filter: `['all', 'createPending', 'deleted', 'deleting', 'new', 'unchanged', 'wellFormed']` - Project visibility: `['private', 'public']` - Pull request merge strategy: `['noFastForward', 'rebase', 'rebaseMerge', 'squash']` - Pull request status: `['abandoned', 'active', 'completed', 'notSet']` ## Complete List of Tools Here's a list of all the tools mentioned in the README.md file: ### Work Item Tools - `listWorkItems` - `getWorkItemById` - `searchWorkItems` - `getRecentlyUpdatedWorkItems` - `getMyWorkItems` - `createWorkItem` - `updateWorkItem` - `addWorkItemComment` - `updateWorkItemState` - `assignWorkItem` - `createLink` - `bulkCreateWorkItems` ### Boards & Sprints Tools - `getBoards` - `getBoardColumns` - `getBoardItems` - `moveCardOnBoard` - `getSprints` - `getCurrentSprint` - `getSprintWorkItems` - `getSprintCapacity` - `getTeamMembers` ### Project Tools - `listProjects` - `getProjectDetails` - `createProject` - `getAreas` - `getIterations` - `createArea` - `createIteration` - `getProcesses` - `getWorkItemTypes` - `getWorkItemTypeFields` ### Git Tools - `listRepositories` - `getRepository` - `createRepository` - `listBranches` - `searchCode` - `browseRepository` - `getFileContent` - `getCommitHistory` - `listPullRequests` - `createPullRequest` - `getPullRequest` - `getPullRequestComments` - `approvePullRequest` - `mergePullRequest` If you need to add more tools, make sure to implement them in the appropriate tools class first, and then register them in the `index.ts` file following the pattern shown above.