Skip to main content
Glama

get-pipeline-status

Check Azure DevOps pipeline or build status using build ID or definition ID, with optional timeline details for monitoring deployment progress.

Instructions

Get status of a specific build or pipeline

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
buildIdNoSpecific build ID to check status
definitionIdNoGet latest builds for this definition ID
includeTimelineNoInclude detailed timeline information

Implementation Reference

  • Main handler function implementing the get-pipeline-status tool. Fetches build details by buildId (with 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)
    Tool registration in MCP server, defining name, description, and input schema for get-pipeline-status.
    {
      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',
          },
        },
      },
    },
  • Switch case dispatcher that routes 'get-pipeline-status' tool calls to the getPipelineStatus handler method.
    case 'get-pipeline-status':
      return await this.getPipelineStatus(args || {});

Latest Blog Posts

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/wangkanai/devops-enhanced-mcp'

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