Skip to main content
Glama
ampcome-mcps

CircleCI MCP Server

by ampcome-mcps

rerun_workflow

Rerun a CircleCI workflow from the beginning or restart from a failed job to address pipeline issues and complete builds.

Instructions

This tool is used to rerun a workflow from start or from the failed job.

Common use cases:

  • Rerun a workflow from a failed job

  • Rerun a workflow from start

Input options (EXACTLY ONE of these TWO options must be used):

Option 1 - Workflow ID:

  • workflowId: The ID of the workflow to rerun

  • fromFailed: true to rerun from failed, false to rerun from start. If omitted, behavior is based on workflow status. (optional)

Option 2 - Workflow URL:

  • workflowURL: The URL of the workflow to rerun

    • Workflow URL: https://app.circleci.com/pipelines/:vcsType/:orgName/:projectName/:pipelineNumber/workflows/:workflowId

    • Workflow Job URL: https://app.circleci.com/pipelines/:vcsType/:orgName/:projectName/:pipelineNumber/workflows/:workflowId/jobs/:buildNumber

  • fromFailed: true to rerun from failed, false to rerun from start. If omitted, behavior is based on workflow status. (optional)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
paramsNo

Implementation Reference

  • The main asynchronous handler function for the 'rerun_workflow' tool. It resolves the workflow ID from URL if provided, fetches the workflow status, validates conditions, and calls the CircleCI client to rerun the workflow, returning a message with the new workflow ID and URL.
    export const rerunWorkflow: ToolCallback<{
      params: typeof rerunWorkflowInputSchema;
    }> = async (args) => {
      let { workflowId } = args.params;
      const { fromFailed, workflowURL } = args.params;
      const baseURL = getAppURL();
      const circleci = getCircleCIClient();
    
      if (workflowURL) {
        workflowId = getWorkflowIdFromURL(workflowURL);
      }
    
      if (!workflowId) {
        return mcpErrorOutput(
          'workflowId is required and could not be determined from workflowURL.',
        );
      }
    
      const workflow = await circleci.workflows.getWorkflow({
        workflowId,
      });
    
      if (!workflow) {
        return mcpErrorOutput('Workflow not found');
      }
    
      const workflowFailed = workflow?.status?.toLowerCase() === 'failed';
    
      if (fromFailed && !workflowFailed) {
        return mcpErrorOutput('Workflow is not failed, cannot rerun from failed');
      }
    
      const newWorkflow = await circleci.workflows.rerunWorkflow({
        workflowId,
        fromFailed: fromFailed !== undefined ? fromFailed : workflowFailed,
      });
    
      const workflowUrl = `${baseURL}/pipelines/workflows/${newWorkflow.workflow_id}`;
      return {
        content: [
          {
            type: 'text',
            text: `New workflowId is ${newWorkflow.workflow_id} and [View Workflow in CircleCI](${workflowUrl})`,
          },
        ],
      };
    };
  • Zod schema defining the input parameters for the rerun_workflow tool: optional workflowId (UUID string), optional fromFailed (boolean), optional workflowURL (string).
    export const rerunWorkflowInputSchema = z.object({
      workflowId: z
        .string()
        .describe(
          'This should be the workflowId of the workflow that need rerun. The workflowId is an UUID. An example workflowId is a12145c5-90f8-4cc9-98f2-36cb85db9e4b',
        )
        .optional(),
      fromFailed: z
        .boolean()
        .describe(
          'If true, reruns the workflow from failed. If false, reruns the workflow from the start. If omitted, the rerun behavior is based on the workflow status.',
        )
        .optional(),
      workflowURL: z.string().describe(workflowUrlDescription).optional(),
    });
  • MCP tool object registration exporting the tool definition with name 'rerun_workflow', detailed description of usage, and reference to the input schema.
    export const rerunWorkflowTool = {
      name: 'rerun_workflow' as const,
      description: `
      This tool is used to rerun a workflow from start or from the failed job.
    
      Common use cases:
      - Rerun a workflow from a failed job
      - Rerun a workflow from start
    
    Input options (EXACTLY ONE of these TWO options must be used):
    
    Option 1 - Workflow ID:
    - workflowId: The ID of the workflow to rerun
    - fromFailed: true to rerun from failed, false to rerun from start. If omitted, behavior is based on workflow status. (optional)
    
    Option 2 - Workflow URL:
    - workflowURL: The URL of the workflow to rerun
      * Workflow URL: https://app.circleci.com/pipelines/:vcsType/:orgName/:projectName/:pipelineNumber/workflows/:workflowId
      * Workflow Job URL: https://app.circleci.com/pipelines/:vcsType/:orgName/:projectName/:pipelineNumber/workflows/:workflowId/jobs/:buildNumber
    - fromFailed: true to rerun from failed, false to rerun from start. If omitted, behavior is based on workflow status. (optional)
      `,
      inputSchema: rerunWorkflowInputSchema,
    };
  • Collection of all CircleCI tools including rerunWorkflowTool in CCI_TOOLS array (line 41) and handler mapping rerun_workflow: rerunWorkflow in CCI_HANDLERS object (line 69). This aggregates tools for MCP server registration.
    export const CCI_TOOLS = [
      getBuildFailureLogsTool,
      getFlakyTestLogsTool,
      getLatestPipelineStatusTool,
      getJobTestResultsTool,
      configHelperTool,
      createPromptTemplateTool,
      recommendPromptTemplateTestsTool,
      runPipelineTool,
      listFollowedProjectsTool,
      runEvaluationTestsTool,
      rerunWorkflowTool,
      analyzeDiffTool,
      runRollbackPipelineTool,
    ];
    
    // Extract the tool names as a union type
    type CCIToolName = (typeof CCI_TOOLS)[number]['name'];
    
    export type ToolHandler<T extends CCIToolName> = ToolCallback<{
      params: Extract<(typeof CCI_TOOLS)[number], { name: T }>['inputSchema'];
    }>;
    
    // Create a type for the tool handlers that directly maps each tool to its appropriate input schema
    type ToolHandlers = {
      [K in CCIToolName]: ToolHandler<K>;
    };
    
    export const CCI_HANDLERS = {
      get_build_failure_logs: getBuildFailureLogs,
      find_flaky_tests: getFlakyTestLogs,
      get_latest_pipeline_status: getLatestPipelineStatus,
      get_job_test_results: getJobTestResults,
      config_helper: configHelper,
      create_prompt_template: createPromptTemplate,
      recommend_prompt_template_tests: recommendPromptTemplateTests,
      run_pipeline: runPipeline,
      list_followed_projects: listFollowedProjects,
      run_evaluation_tests: runEvaluationTests,
      rerun_workflow: rerunWorkflow,
      analyze_diff: analyzeDiff,
      run_rollback_pipeline: runRollbackPipeline,
    } satisfies ToolHandlers;

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/ampcome-mcps/circleci-mcp'

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