get-pipeline-status
Retrieve the status of a specific build or pipeline in Azure DevOps using build or definition IDs, with optional detailed timeline information. Integrated with DevOps Enhanced MCP for automatic authentication handling.
Instructions
Get status of a specific build or pipeline
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| buildId | No | Specific build ID to check status | |
| definitionId | No | Get latest builds for this definition ID | |
| includeTimeline | No | Include detailed timeline information |
Input Schema (JSON Schema)
{
"properties": {
"buildId": {
"description": "Specific build ID to check status",
"type": "number"
},
"definitionId": {
"description": "Get latest builds for this definition ID",
"type": "number"
},
"includeTimeline": {
"description": "Include detailed timeline information",
"type": "boolean"
}
},
"type": "object"
}
Implementation Reference
- src/handlers/tool-handlers.ts:1146-1235 (handler)Executes the get-pipeline-status tool: fetches specific build details by buildId (including optional timeline) or recent builds by definitionId using Azure DevOps REST API.private async getPipelineStatus(args: any): Promise<any> { try { if (args.buildId) { // Get specific build details const build = await this.makeApiRequest(`/build/builds/${args.buildId}?api-version=7.1`); let timeline = null; if (args.includeTimeline) { try { timeline = await this.makeApiRequest(`/build/builds/${args.buildId}/timeline?api-version=7.1`); } catch (timelineError) { // Sanitize error message to prevent log injection const sanitizedError = timelineError instanceof Error ? timelineError.message.replace(/[\r\n\t]/g, '_') : 'Unknown timeline error'; console.error('Failed to get timeline:', sanitizedError); // Continue without timeline if it fails } } const buildInfo = { id: build.id, buildNumber: build.buildNumber, status: build.status, result: build.result, definition: { id: build.definition.id, name: build.definition.name }, sourceBranch: build.sourceBranch, sourceVersion: build.sourceVersion, queueTime: build.queueTime, startTime: build.startTime, finishTime: build.finishTime, url: build._links?.web?.href, requestedBy: { displayName: build.requestedBy?.displayName, uniqueName: build.requestedBy?.uniqueName }, ...(timeline && { timeline: timeline.records?.map((record: any) => ({ name: record.name, type: record.type, state: record.state, result: record.result, startTime: record.startTime, finishTime: record.finishTime, percentComplete: record.percentComplete })) }) }; return { content: [{ type: 'text', text: JSON.stringify(buildInfo, null, 2), }], }; } else if (args.definitionId) { // Get latest builds for a specific definition const builds = await this.makeApiRequest( `/build/builds?definitions=${args.definitionId}&$top=5&api-version=7.1` ); const buildsInfo = builds.value.map((build: any) => ({ id: build.id, buildNumber: build.buildNumber, status: build.status, result: build.result, sourceBranch: build.sourceBranch, queueTime: build.queueTime, startTime: build.startTime, finishTime: build.finishTime, url: build._links?.web?.href })); return { content: [{ type: 'text', text: JSON.stringify({ definitionId: args.definitionId, recentBuilds: buildsInfo }, null, 2), }], }; } else { throw new Error('Either buildId or definitionId must be provided'); } } catch (error) { throw new Error(`Failed to get pipeline status: ${error instanceof Error ? error.message : 'Unknown error'}`); } }
- src/index.ts:311-331 (registration)Registers the 'get-pipeline-status' tool with the MCP server in the listTools response, including input schema definition.{ name: 'get-pipeline-status', description: 'Get status of a specific build or pipeline', inputSchema: { type: 'object', properties: { buildId: { type: 'number', description: 'Specific build ID to check status', }, definitionId: { type: 'number', description: 'Get latest builds for this definition ID', }, includeTimeline: { type: 'boolean', description: 'Include detailed timeline information', }, }, }, },
- src/index.ts:314-331 (schema)Defines the input schema for the get-pipeline-status tool, specifying parameters like buildId, definitionId, and includeTimeline.inputSchema: { type: 'object', properties: { buildId: { type: 'number', description: 'Specific build ID to check status', }, definitionId: { type: 'number', description: 'Get latest builds for this definition ID', }, includeTimeline: { type: 'boolean', description: 'Include detailed timeline information', }, }, }, },
- src/handlers/tool-handlers.ts:49-53 (handler)Switch case dispatcher that routes 'get-pipeline-status' tool calls to the getPipelineStatus handler method.case 'get-pipeline-status': return await this.getPipelineStatus(args || {}); default: throw new Error(`Unknown tool: ${name}`); }