Featured

Deploy OpenClaw in 60 seconds — 20% off logoDeploy OpenClaw in 60 seconds — 20% off

Launch OpenClaw on Hostinger in about 60 seconds and keep your agent live 24/7. Our referral link gives you 20% off, no coupon code needed.

Launch on Hostinger
Run your Hermes agent on Hostinger, fully managed logoRun your Hermes agent on Hostinger, fully managed

Launch Hermes on Hostinger in one click, fully managed, no VPS knowledge needed. Use code ZACAARON10 for 10% off.

Launch on Hostinger
Crawl and scrape any site into clean data, 10% off logoCrawl and scrape any site into clean data, 10% off

Firecrawl crawls and scrapes any site into clean markdown for your agent. Get 1,000 free credits, and new users get 10% off their first purchase.

Try Firecrawl free
Your own AI agent, running 24/7 with QwikClaw logoYour own AI agent, running 24/7 with QwikClaw

QwikClaw sets up and runs an always-on OpenClaw agent for you. One click, no config files, no server setup.

Deploy now
One API to scrape, enrich, and extract the internet. logoOne API to scrape, enrich, and extract the internet.

Context.dev gives your agents a single API to scrape, enrich, and extract live web data — no proxies, no parsers, no maintenance.

Start building free
SetupClaw: done-for-you OpenClaw for founders & exec teams logoSetupClaw: done-for-you OpenClaw for founders & exec teams

White-glove OpenClaw for founders and exec teams (4–50+ employees): we install, harden, integrate your tools, and maintain it — secured from day one.

Get it set up for you
SEO data APIs for your agent, $1 free credit logoSEO data APIs for your agent, $1 free credit

DataForSEO gives your agent live access to SERP results, keyword data, backlinks, and on-page SEO data through one API. New accounts get a $1 credit, good for up to 20,000 keyword or backlink lookups.

Try DataForSEO free
Reach 47,000+ AI builders

A flat monthly placement in front of developers actively installing AI tools. No lock-in, cancel anytime.

Advertise here

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

Enable AI Agents to fix build failures from CircleCI.

README.md

[!IMPORTANT] This repository is deprecated. The CircleCI MCP server is now built into the CircleCI CLI. Visit cli.circleci.com to get started.

CircleCI MCP Server

![License: Apache 2.0](https://github.com/CircleCI-Public/mcp-server-circleci/blob/main/LICENSE) ![CircleCI](https://dl.circleci.com/status-badge/redirect/gh/CircleCI-Public/mcp-server-circleci/tree/main) ![npm](https://www.npmjs.com/package/@circleci/mcp-server-circleci)

Model Context Protocol (MCP) is a new, standardized protocol for managing context between large language models (LLMs) and external systems. In this repository, we provide an MCP Server for CircleCI.

Use Cursor, Windsurf, Copilot, Claude, or any MCP-compatible client to interact with CircleCI using natural language — without leaving your IDE.

Tools

| Tool | Description | |------|-------------| | config_helper | Validate and get guidance for your CircleCI configuration | | download_usage_api_data | Download usage data from the CircleCI Usage API | | find_flaky_tests | Identify flaky tests by analyzing test execution history | | find_underused_resource_classes | Find jobs with underused compute resources | | get_build_failure_logs | Retrieve detailed failure logs from CircleCI builds | | get_job_test_results | Retrieve test metadata and results for CircleCI jobs | | get_latest_pipeline_status | Get the status of the latest pipeline for a branch | | list_artifacts | List artifacts produced by a CircleCI job | | list_component_versions | List all versions for a CircleCI component | | list_followed_projects | List all CircleCI projects you're following | | rerun_workflow | Rerun a workflow from start or from the failed job | | run_pipeline | Trigger a pipeline to run | | run_rollback_pipeline | Trigger a rollback for a project |

Installation

Team / centralized deployment: To run one shared remote server for your org (Kubernetes, Docker, etc.) with per-developer or shared CircleCI tokens, see Self-Managed Remote MCP Server.

<details> <summary><strong>Cursor</strong></summary>

Prerequisites:

Using NPX in a local MCP Server

Add the following to your Cursor MCP config:

{
  "mcpServers": {
    "circleci-mcp-server": {
      "command": "npx",
      "args": ["-y", "@circleci/mcp-server-circleci@latest"],
      "env": {
        "CIRCLECI_TOKEN": "your-circleci-token",
        "CIRCLECI_BASE_URL": "https://circleci.com",
        "MAX_MCP_OUTPUT_LENGTH": "50000"
      }
    }
  }
}

CIRCLECI_BASE_URL is optional — required for on-prem customers only. MAX_MCP_OUTPUT_LENGTH is optional — maximum output length for MCP responses (default: 50000).

Using Docker in a local MCP Server

Add the following to your Cursor MCP config:

{
  "mcpServers": {
    "circleci-mcp-server": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "CIRCLECI_TOKEN",
        "-e",
        "CIRCLECI_BASE_URL",
        "-e",
        "MAX_MCP_OUTPUT_LENGTH",
        "circleci/mcp-server-circleci"
      ],
      "env": {
        "CIRCLECI_TOKEN": "your-circleci-token",
        "CIRCLECI_BASE_URL": "https://circleci.com",
        "MAX_MCP_OUTPUT_LENGTH": "50000"
      }
    }
  }
}

Using a Self-Managed Remote MCP Server

See Self-Managed Remote MCP Server. Use the per-user client configuration and add it to your Cursor MCP config (Cursor Settings → MCP).

</details>

<details> <summary><strong>VS Code</strong></summary>

Prerequisites:

Using NPX in a local MCP Server

Add the following to .vscode/mcp.json in your project:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "circleci-token",
      "description": "CircleCI API Token",
      "password": true
    },
    {
      "type": "promptString",
      "id": "circleci-base-url",
      "description": "CircleCI Base URL",
      "default": "https://circleci.com"
    }
  ],
  "servers": {
    "circleci-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@circleci/mcp-server-circleci@latest"],
      "env": {
        "CIRCLECI_TOKEN": "${input:circleci-token}",
        "CIRCLECI_BASE_URL": "${input:circleci-base-url}"
      }
    }
  }
}

💡 Inputs are prompted on first server start, then stored securely by VS Code.

Using Docker in a local MCP Server

Add the following to .vscode/mcp.json in your project:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "circleci-token",
      "description": "CircleCI API Token",
      "password": true
    },
    {
      "type": "promptString",
      "id": "circleci-base-url",
      "description": "CircleCI Base URL",
      "default": "https://circleci.com"
    }
  ],
  "servers": {
    "circleci-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "CIRCLECI_TOKEN",
        "-e",
        "CIRCLECI_BASE_URL",
        "circleci/mcp-server-circleci"
      ],
      "env": {
        "CIRCLECI_TOKEN": "${input:circleci-token}",
        "CIRCLECI_BASE_URL": "${input:circleci-base-url}"
      }
    }
  }
}

Using a Self-Managed Remote MCP Server

See Self-Managed Remote MCP Server. Use the per-user client configuration in .vscode/mcp.json.

</details>

<details> <summary><strong>Claude Desktop</strong></summary>

Prerequisites:

Using NPX in a local MCP Server

Add the following to your claude_desktop_config.json:

{
  "mcpServers": {
    "circleci-mcp-server": {
      "command": "npx",
      "args": ["-y", "@circleci/mcp-server-circleci@latest"],
      "env": {
        "CIRCLECI_TOKEN": "your-circleci-token",
        "CIRCLECI_BASE_URL": "https://circleci.com",
        "MAX_MCP_OUTPUT_LENGTH": "50000"
      }
    }
  }
}

Using Docker in a local MCP Server

Add the following to your claude_desktop_config.json:

{
  "mcpServers": {
    "circleci-mcp-server": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "CIRCLECI_TOKEN",
        "-e",
        "CIRCLECI_BASE_URL",
        "-e",
        "MAX_MCP_OUTPUT_LENGTH",
        "circleci/mcp-server-circleci"
      ],
      "env": {
        "CIRCLECI_TOKEN": "your-circleci-token",
        "CIRCLECI_BASE_URL": "https://circleci.com",
        "MAX_MCP_OUTPUT_LENGTH": "50000"
      }
    }
  }
}

Using a Self-Managed Remote MCP Server

See Self-Managed Remote MCP Server. Create a wrapper script as shown in Claude Desktop and CLI clients, then point your claude_desktop_config.json at it.

To find or create your config file, open Claude Desktop settings, click Developer in the left sidebar, then click Edit Config. The config file is located at:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

For more information: https://modelcontextprotocol.io/quickstart/user

</details>

<details> <summary><strong>Claude Code</strong></summary>

Prerequisites:

Using NPX in a local MCP Server

claude mcp add circleci-mcp-server -e CIRCLECI_TOKEN=your-circleci-token -- npx -y @circleci/mcp-server-circleci@latest

Using Docker in a local MCP Server

claude mcp add circleci-mcp-server -e CIRCLECI_TOKEN=your-circleci-token -e CIRCLECI_BASE_URL=https://circleci.com -- docker run --rm -i -e CIRCLECI_TOKEN -e CIRCLECI_BASE_URL circleci/mcp-server-circleci

Using a Self-Managed Remote MCP Server

See Self-Managed Remote MCP Server and the Claude Code client setup there.

</details>

<details> <summary><strong>Windsurf</strong></summary>

Prerequisites:

Using NPX in a local MCP Server

Add the following to your Windsurf mcp_config.json:

{
  "mcpServers": {
    "circleci-mcp-server": {
      "command": "npx",
      "args": ["-y", "@circleci/mcp-server-circleci@latest"],
      "env": {
        "CIRCLECI_TOKEN": "your-circleci-token",
        "CIRCLECI_BASE_URL": "https://circleci.com",
        "MAX_MCP_OUTPUT_LENGTH": "50000"
      }
    }
  }
}

Using Docker in a local MCP Server

Add the following to your Windsurf mcp_config.json:

{
  "mcpServers": {
    "circleci-mcp-server": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "CIRCLECI_TOKEN",
        "-e",
        "CIRCLECI_BASE_URL",
        "-e",
        "MAX_MCP_OUTPUT_LENGTH",
        "circleci/mcp-server-circleci"
      ],
      "env": {
        "CIRCLECI_TOKEN": "your-circleci-token",
        "CIRCLECI_BASE_URL": "https://circleci.com",
        "MAX_MCP_OUTPUT_LENGTH": "50000"
      }
    }
  }
}

Using a Self-Managed Remote MCP Server

See Self-Managed Remote MCP Server. Use the per-user client configuration in your Windsurf mcp_config.json.

For more information: https://docs.windsurf.com/windsurf/mcp

</details>

<details> <summary><strong>Amazon Q Developer CLI</strong></summary>

Prerequisites:

MCP client configuration in Amazon Q Developer is stored in JSON format in a file named mcp.json. Two levels of configuration are supported:

  • Global: ~/.aws/amazonq/mcp.json — applies to all workspaces
  • Workspace: .amazonq/mcp.json — specific to the current workspace

If both files exist, their contents are merged. In case of conflict, the workspace config takes precedence.

Using NPX in a local MCP Server

Edit ~/.aws/amazonq/mcp.json or create .amazonq/mcp.json with the following:

{
  "mcpServers": {
    "circleci-local": {
      "command": "npx",
      "args": [
        "-y",
        "@circleci/mcp-server-circleci@latest"
      ],
      "env": {
        "CIRCLECI_TOKEN": "YOUR_CIRCLECI_TOKEN",
        "CIRCLECI_BASE_URL": "https://circleci.com",
        "MAX_MCP_OUTPUT_LENGTH": "50000"
      },
      "timeout": 60000
    }
  }
}

Using a Self-Managed Remote MCP Server

See Self-Managed Remote MCP Server. Use a wrapper script as shown in Claude Desktop and CLI clients, then register it with q mcp add.

</details>

<details> <summary><strong>Amazon Q Developer in the IDE</strong></summary>

Prerequisites:

Using NPX in a local MCP Server

Edit ~/.aws/amazonq/mcp.json or create .amazonq/mcp.json with the following:

{
  "mcpServers": {
    "circleci-local": {
      "command": "npx",
      "args": [
        "-y",
        "@circleci/mcp-server-circleci@latest"
      ],
      "env": {
        "CIRCLECI_TOKEN": "YOUR_CIRCLECI_TOKEN",
        "CIRCLECI_BASE_URL": "https://circleci.com",
        "MAX_MCP_OUTPUT_LENGTH": "50000"
      },
      "timeout": 60000
    }
  }
}

Using a Self-Managed Remote MCP Server

See Self-Managed Remote MCP Server. Use a wrapper script as shown in Claude Desktop and CLI clients, then add it via the MCP configuration UI:

  1. Access the MCP configuration UI
  2. Choose the + symbol
  3. Select scope: global or local
  4. Enter a name (e.g. circleci-remote-mcp)
  5. Select transport protocol: stdio
  6. Enter the command path to your script
  7. Click Save

</details>

<details> <summary><strong>Smithery</strong></summary>

To install CircleCI MCP Server for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install @CircleCI-Public/mcp-server-circleci --client claude

</details>

Self-Managed Remote MCP Server

Run the MCP server centrally (for example on Kubernetes or Docker) so your team shares one deployment. Choose how developers authenticate:

Choose a deployment mode

| Mode | When to use | Server setup | Client setup | CircleCI audit trail | |------|-------------|--------------|--------------|----------------------| | Per-user tokens (recommended) | Teams with SSO-backed Personal API Tokens | REQUIRE_REQUEST_TOKEN=true, no server PAT | Each dev forwards their PAT | Per developer | | Shared token (interim) | Quick rollout, single service identity OK | CIRCLECI_TOKEN on server, REQUIRE_REQUEST_TOKEN=false (explicit opt-out) | No auth header needed | Single shared identity |

Security: Request authentication is on by default in remote mode. The shared-token mode disables it (REQUIRE_REQUEST_TOKEN=false), making every caller able to act as the server's CIRCLECI_TOKEN identity with no credentials. Only enable it on a network you fully trust, and prefer per-user tokens otherwise. Terminating TLS at an ingress provides encryption, not authentication.

1. Deploy the server

Both modes use remote HTTP mode (start=remote). Publish port 8000 (or your chosen port).

Per-user tokens (recommended) — accessed via mcp-remote from localhost:

docker run --rm -p 8000:8000 \
  -e start=remote \
  -e port=8000 \
  -e REQUIRE_REQUEST_TOKEN=true \
  circleci/mcp-server-circleci

Per-user tokens (recommended) — accessed via mcp-remote from a public hostname:

docker run --rm -p 8000:8000 \
  -e start=remote \
  -e port=8000 \
  -e REQUIRE_REQUEST_TOKEN=true \
  -e MCP_ALLOWED_HOSTS=my-mcp.example.com \
  circleci/mcp-server-circleci

Shared token (interim) — accessed via mcp-remote from a public hostname:

docker run --rm -p 8000:8000 \
  -e start=remote \
  -e port=8000 \
  -e CIRCLECI_TOKEN=your-shared-circleci-pat \
  -e REQUIRE_REQUEST_TOKEN=false \
  -e MCP_ALLOWED_HOSTS=my-mcp.example.com \
  circleci/mcp-server-circleci

Environment variables:

| Variable | Description | |----------|-------------| | start=remote | Starts the HTTP+SSE MCP server instead of stdio | | port | Listening port inside the container (default: 8000) | | REQUIRE_REQUEST_TOKEN | Reject requests without Authorization: Bearer or Circle-Token header. Defaults to required; set REQUIRE_REQUEST_TOKEN=false to allow unauthenticated requests (shared-token mode) | | CIRCLECI_TOKEN | Shared fallback PAT for all requests when per-user headers are not sent | | CIRCLECI_BASE_URL | Optional — required for on-prem only (default: https://circleci.com) | | DISABLE_TELEMETRY=true | Opt out of usage metrics export | | MCP_ALLOWED_HOSTS | Comma-separated list of additional Host header values to allow (e.g. my-mcp.example.com,my-mcp.example.com:443). Loopback hostnames are always allowed. Required for any non-loopback deployment. | | MCP_ALLOWED_ORIGINS | Comma-separated list of additional Origin header values to allow (e.g. https://my-app.example.com). Loopback origins are always allowed. Only needed when a browser directly reaches this server (not via mcp-remote). | | MCP_BIND_HOST | Network interface to bind to (default: 0.0.0.0). Set to 127.0.0.1 to restrict to loopback only (not compatible with Docker -p port mapping). | | MCP_FILE_OUTPUT_ROOTS | Comma-separated list of additional directories that file-reading/writing tools may use (e.g. /srv/reports,/data/exports). The working directory, home directory and temp directory are always allowed. See the note below. |

File output locations (applies to both stdio and remote transports): Tools that accept a filesystem path — get_build_failure_logs (outputDir), download_usage_api_data (outputDir) and find_underused_resource_classes (csvFilePath) — may only read and write inside the server's working directory, the user's home directory, and the system temp directory. Within those roots, hidden configuration directories (~/.ssh, ~/.aws, ~/.config, .git, …), node_modules and launch-agent directories are rejected, as are symlinks resolving outside the permitted roots. System directories (/etc, /usr, /bin, /System, /Library, %SystemRoot%, …) are refused unconditionally and cannot be re-enabled. Output files are never written through a symlink. If your checkout lives outside those roots — /workspace in a container, /srv, /opt, a secondary volume such as /Volumes/work — set MCP_FILE_OUTPUT_ROOTS to that directory, otherwise those paths are rejected. For a stdio server the working directory is usually already the project root, so no configuration is needed. This matters most for the remote transport, where the paths come from network clients rather than the local user.

DNS-rebinding protection: The remote transport validates the Host header on every /mcp request. By default only loopback addresses (localhost, 127.0.0.1, [::1]) are accepted. Public deployments must set MCP_ALLOWED_HOSTS to the hostname clients use, or all /mcp requests will receive 403 Forbidden. The /ping health-check endpoint is not guarded so load-balancer probes continue to work regardless of Host. The Origin header (sent by browsers) is also validated when present. Non-browser clients such as mcp-remote never send Origin, so they are unaffected by this check. Behind a reverse proxy: If your proxy rewrites Host to the backend address (nginx's default), add proxy_set_header Host $host; to pass the original hostname through, then set MCP_ALLOWED_HOSTS to that public hostname. Alternatively, set MCP_ALLOWED_HOSTS to whatever hostname the proxy does forward.

The server accepts per-request tokens via:

  • Authorization: Bearer <circleci-pat>
  • Circle-Token: <circleci-pat>

If a client sends a header token, it takes precedence over CIRCLECI_TOKEN on the server.

Telemetry metrics recorded during a request are exported using the same token as that request.

2. Configure clients

Most MCP clients only support local (stdio) processes. Use mcp-remote, a third-party stdio-to-HTTP bridge, to connect them to your remote server.

URL scheme: Use http://localhost:8000/mcp with --allow-http for local testing. In production, terminate TLS at your ingress/load balancer and use https://your-host/mcp without --allow-http.

Windows: Avoid spaces around the colon in --header values. Put the full Bearer <token> value in an environment variable.

Security: Examples use npx for convenience. For production or team rollouts, pin a specific version in your MCP config (for example mcp-remote@0.1.38 instead of mcp-remote). Do not use versions below 0.1.16 (CVE-2025-6514).

Client configuration: per-user tokens

Each developer forwards their own CircleCI Personal API Token on every request:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "circleci-token",
      "description": "CircleCI API Token",
      "password": true
    }
  ],
  "mcpServers": {
    "circleci-mcp-server-remote": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "http://localhost:8000/mcp",
        "--allow-http",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer ${input:circleci-token}"
      }
    }
  }
}

Replace http://localhost:8000/mcp with your team's server URL. Cursor and VS Code support ${input:...} prompts; other clients can set AUTH_HEADER directly.

Client configuration: shared token

When the server has CIRCLECI_TOKEN set and is started with REQUIRE_REQUEST_TOKEN=false (request auth is on by default and must be explicitly disabled), clients do not need to send a token:

{
  "mcpServers": {
    "circleci-mcp-server-remote": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "http://localhost:8000/mcp",
        "--allow-http"
      ]
    }
  }
}

Claude Desktop and CLI clients

Create a wrapper script (e.g. circleci-remote-mcp.sh):

#!/bin/bash
export AUTH_HEADER="Bearer your-circleci-token"
npx mcp-remote http://localhost:8000/mcp --allow-http --header "Authorization:${AUTH_HEADER}"

Make it executable (chmod +x circleci-remote-mcp.sh), then reference it from your MCP config:

{
  "mcpServers": {
    "circleci-remote-mcp-server": {
      "command": "/full/path/to/circleci-remote-mcp.sh"
    }
  }
}

Claude Code

claude mcp add circleci-mcp-server \
  -e AUTH_HEADER="Bearer your-circleci-token" \
  -- npx mcp-remote http://localhost:8000/mcp --allow-http --header "Authorization:${AUTH_HEADER}"

Omit --header and AUTH_HEADER when using a shared-token server.

3. Verify the deployment

# Health check (no auth required)
curl http://localhost:8000/ping

# Should return 401 when REQUIRE_REQUEST_TOKEN=true and no token is sent
curl -s -o /dev/null -w "%{http_code}\n" -X POST http://localhost:8000/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

# Should return 200 with a valid Bearer token and MCP Accept headers
curl -s -o /dev/null -w "%{http_code}\n" -X POST http://localhost:8000/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer your-circleci-pat" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

Demo

<details> <summary><strong>Watch it in action</strong></summary>

Example: "Find the latest failed pipeline on my branch and get logs" — see the wiki for more examples.

https://github.com/user-attachments/assets/3c765985-8827-442a-a8dc-5069e01edb74

</details>

Tool Details

<details> <summary id="config_helper"><strong><code>config_helper</code></strong></summary>

Assists with CircleCI configuration tasks by providing guidance and validation.

  • Validates your .circleci/config.yml for syntax and semantic errors
  • Provides detailed validation results and configuration recommendations
  • Example: "Validate my CircleCI config"

</details>

<details> <summary id="download_usage_api_data"><strong><code>download_usage_api_data</code></strong></summary>

Downloads usage data from the CircleCI Usage API for a given organization. Accepts flexible date input (e.g., "March 2025" or "last month"). Cloud-only feature.

Option 1: Start a new export job by providing:

  • orgId, startDate, endDate (max 32 days), outputDir

Option 2: Check/download an existing export job by providing:

  • orgId, jobId, outputDir

Returns a CSV file with CircleCI usage data for the specified time frame.

[!NOTE] Usage data can be fed into the find_underused_resource_classes tool for cost optimization analysis.

</details>

<details> <summary id="find_flaky_tests"><strong><code>find_flaky_tests</code></strong></summary>

Identifies flaky tests in your CircleCI project by analyzing test execution history. Leverages the flaky test detection feature in CircleCI.

This tool can be used in three ways:

  1. Using Project Slug (Recommended):
  • First use list_followed_projects to get your projects, then:
  • Example: "Get flaky tests for my-project"
  1. Using CircleCI Project URL:
  • Example: "Find flaky tests in https://app.circleci.com/pipelines/github/org/repo"
  1. Using Local Project Context:
  • Works from your local workspace by providing workspace root and git remote URL
  • Example: "Find flaky tests in my current project"

Output modes:

  • Text (default): Returns flaky test details in text format
  • File (requires FILE_OUTPUT_DIRECTORY env var): Creates a directory with flaky test details

</details>

<details> <summary id="find_underused_resource_classes"><strong><code>find_underused_resource_classes</code></strong></summary>

Analyzes a CircleCI usage data CSV file to find jobs with average or max CPU/RAM usage below a given threshold (default: 40%).

Provide a CSV file obtained from download_usage_api_data.

Returns a markdown list of underused jobs organized by project and workflow — useful for identifying cost optimization opportunities.

</details>

<details> <summary id="get_build_failure_logs"><strong><code>get_build_failure_logs</code></strong></summary>

Retrieves detailed failure logs from CircleCI builds. This tool can be used in three ways:

  1. Using Project Slug and Branch (Recommended):
  • First use list_followed_projects to get your projects, then:
  • Example: "Get build failures for my-project on the main branch"
  1. Using CircleCI URLs:
  • Provide a failed job URL or pipeline URL directly
  • Example: "Get logs from https://app.circleci.com/pipelines/github/org/repo/123"
  1. Using Local Project Context:
  • Works from your local workspace by providing workspace root, git remote URL, and branch name
  • Example: "Find the latest failed pipeline on my current branch"

The tool returns formatted logs including:

  • Job names
  • Step-by-step execution details
  • Failure messages and context

</details>

<details> <summary id="get_job_test_results"><strong><code>get_job_test_results</code></strong></summary>

Retrieves test metadata for CircleCI jobs, allowing you to analyze test results without leaving your IDE. This tool can be used in three ways:

  1. Using Project Slug and Branch (Recommended):
  • Example: "Get test results for my-project on the main branch"
  1. Using CircleCI URL:
  • Job URL: https://app.circleci.com/pipelines/github/org/repo/123/workflows/abc-def/jobs/789
  • Workflow URL: https://app.circleci.com/pipelines/github/org/repo/123/workflows/abc-def
  • Pipeline URL: https://app.circleci.com/pipelines/github/org/repo/123
  1. Using Local Project Context:
  • Works from your local workspace by providing workspace root, git remote URL, and branch name

The tool returns:

  • Summary of all tests (total, successful, failed)
  • Detailed info on failed tests: name, class, file, error message, duration
  • List of successful tests with timing
  • Filter by test result

[!NOTE] Test metadata must be configured in your CircleCI config. See Collect Test Data for setup instructions.

</details>

<details> <summary id="get_latest_pipeline_status"><strong><code>get_latest_pipeline_status</code></strong></summary>

Retrieves the status of the latest pipeline for a given branch. This tool can be used in three ways:

  1. Using Project Slug and Branch (Recommended):
  • Example: "Get the status of the latest pipeline for my-project on the main branch"
  1. Using CircleCI Project URL:
  • Example: "Get the status of the latest pipeline for https://app.circleci.com/pipelines/github/org/repo"
  1. Using Local Project Context:
  • Works from your local workspace by providing workspace root, git remote URL, and branch name

Example output:

---
Workflow: build
Status: success
Duration: 5 minutes
Created: 4/20/2025, 10:15:30 AM
Stopped: 4/20/2025, 10:20:45 AM
---
Workflow: test
Status: running
Duration: unknown
Created: 4/20/2025, 10:21:00 AM
Stopped: in progress

</details>

<details> <summary id="list_artifacts"><strong><code>list_artifacts</code></strong></summary>

Retrieves the list of artifacts produced by a CircleCI job. This tool can be used in three ways:

  1. Using Project Slug and Branch (Recommended):
  • First use list_followed_projects to get your projects, then:
  • Example: "List artifacts for my-project on the main branch"
  1. Using CircleCI URL:
  • Job URL: https://app.circleci.com/pipelines/gh/organization/project/123/workflows/abc-def/jobs/789
  • Workflow URL: https://app.circleci.com/pipelines/gh/organization/project/123/workflows/abc-def
  • Pipeline URL: https://app.circleci.com/pipelines/gh/organization/project/123
  1. Using Local Project Context:
  • Works from your local workspace by providing workspace root, git remote URL, and branch name

Useful for:

  • Finding download URLs for build artifacts (binaries, reports, logs)
  • Checking what artifacts were produced by a pipeline run

</details>

<details> <summary id="list_component_versions"><strong><code>list_component_versions</code></strong></summary>

Lists all versions for a specific CircleCI component in an environment. Includes deployment status, commit information, and timestamps.

The tool will prompt you to select the component and environment if not provided.

Useful for:

  • Identifying which version is currently live
  • Selecting target versions for rollback operations
  • Getting deployment details (pipeline, workflow, job)

</details>

<details> <summary id="list_followed_projects"><strong><code>list_followed_projects</code></strong></summary>

Lists all projects that the user is following on CircleCI.

  • Shows all projects you have access to with their projectSlug
  • Example: "List my CircleCI projects"

Example output:

Projects followed:
1. my-project (projectSlug: gh/organization/my-project)
2. another-project (projectSlug: gh/organization/another-project)

[!NOTE] The projectSlug (not the project name) is required for many other CircleCI tools.

</details>

<details> <summary id="rerun_workflow"><strong><code>rerun_workflow</code></strong></summary>

Reruns a workflow from its start or from the failed job.

Returns the ID of the newly-created workflow and a link to monitor it.

</details>

<details> <summary id="run_pipeline"><strong><code>run_pipeline</code></strong></summary>

Triggers a pipeline to run. This tool can be used in three ways:

  1. Using Project Slug and Branch (Recommended):
  • Example: "Run the pipeline for my-project on the main branch"
  1. Using CircleCI URL:
  • Pipeline URL, Workflow URL, Job URL, or Project URL with branch
  • Example: "Run the pipeline for https://app.circleci.com/pipelines/github/org/repo/123"
  1. Using Local Project Context:
  • Works from your local workspace by providing workspace root, git remote URL, and branch name

The tool returns a link to monitor the pipeline execution.

</details>

<details> <summary id="run_rollback_pipeline"><strong><code>run_rollback_pipeline</code></strong></summary>

Triggers a rollback for a CircleCI project. The tool interactively guides you through:

  1. Project Selection — lists followed projects for you to choose from
  2. Environment Selection — lists available environments (auto-selects if only one)
  3. Component Selection — lists available components (auto-selects if only one)
  4. Version Selection — displays available versions; you select the target for rollback
  5. Rollback Mode Detection — checks if a rollback pipeline is configured
  6. Execute Rollback — two options:
  • Pipeline Rollback: triggers the rollback pipeline
  • Workflow Rerun: reruns a previous workflow using its workflow ID
  1. Confirmation — summarizes and confirms before execution

</details>

Troubleshooting

<details> <summary><strong>Quick Fixes</strong></summary>

Most common issues:

  1. Clear package caches:
   npx clear-npx-cache
   npm cache clean --force
  1. Force latest version: Add @latest to your config:
   "args": ["-y", "@circleci/mcp-server-circleci@latest"]
  1. Restart your IDE completely (not just reload window)

</details>

<details> <summary><strong>Authentication Issues</strong></summary>

  • Invalid token errors: Verify your CIRCLECI_TOKEN in Personal API Tokens
  • Permission errors: Ensure the token has read access to your projects
  • Environment variables not loading: Test with echo $CIRCLECI_TOKEN (Mac/Linux) or echo %CIRCLECI_TOKEN% (Windows)

</details>

<details> <summary><strong>Connection and Network Issues</strong></summary>

  • Base URL: Confirm CIRCLECI_BASE_URL is https://circleci.com
  • Corporate networks: Configure npm proxy settings if behind a firewall
  • Firewall blocking: Check if security software blocks package downloads

</details>

<details> <summary><strong>System Requirements</strong></summary>

  • Node.js version: Ensure >= 18.0.0 with node --version
  • Update Node.js: Consider latest LTS if experiencing compatibility issues
  • Package manager: Verify npm/pnpm is working: npm --version

</details>

<details> <summary><strong>IDE-Specific Issues</strong></summary>

  • Config file location: Double-check the path for your OS
  • Syntax errors: Validate JSON syntax in your config file
  • Console logs: Check the IDE developer console for specific errors
  • Try a different IDE: Test in another supported editor to isolate the issue

</details>

<details> <summary><strong>Process Issues</strong></summary>

Hanging processes — kill existing MCP processes:

# Mac/Linux:
pkill -f "mcp-server-circleci"

# Windows:
taskkill /f /im node.exe

Port conflicts: Restart your IDE if the connection seems blocked.

</details>

<details> <summary><strong>Advanced Debugging</strong></summary>

  • Test package directly: npx @circleci/mcp-server-circleci@latest --help
  • Verbose logging: DEBUG=* npx @circleci/mcp-server-circleci@latest
  • Docker fallback: Try Docker installation if npx fails consistently

Still need help?

  1. Check GitHub Issues for similar problems
  2. Include your OS, Node version, and IDE when reporting issues
  3. Share relevant error messages from the IDE console

</details>

Telemetry

The server supports OpenTelemetry metrics for tracking tool usage. Metrics are exported unless you set DISABLE_TELEMETRY=true. On remote deployments, metrics use the same token as the request (per-user PAT or shared server PAT).

| Metric | Description | |--------|-------------| | circleci.mcp.tool.invocations | Tool invocation count | | circleci.mcp.tool.duration_ms | Execution time in ms | | circleci.mcp.tool.errors | Error count |

Development

Getting Started

  1. Clone the repository:
   git clone https://github.com/CircleCI-Public/mcp-server-circleci.git
   cd mcp-server-circleci
  1. Install dependencies:
   pnpm install
  1. Build the project:
   pnpm build

Building Docker Container

You can build the Docker container locally using:

docker build -t circleci:mcp-server-circleci .

This will create a Docker image tagged as circleci:mcp-server-circleci that you can use with any MCP client.

Local stdio mode (single developer, token on the client):

docker run --rm -i \
  -e CIRCLECI_TOKEN=your-circleci-token \
  -e CIRCLECI_BASE_URL=https://circleci.com \
  circleci/mcp-server-circleci

Remote mode (centralized server for a team): see Self-Managed Remote MCP Server.

Development with MCP Inspector

The easiest way to iterate on the MCP Server is using the MCP inspector. You can learn more about the MCP inspector at https://modelcontextprotocol.io/docs/tools/inspector

  1. Start the development server:
   pnpm watch # Keep this running in one terminal
  1. In a separate terminal, launch the inspector:
   pnpm inspector
  1. Configure the environment:
  • Add your CIRCLECI_TOKEN to the Environment Variables section in the inspector UI
  • The token needs read access to your CircleCI projects
  • Optionally set your CircleCI Base URL (defaults to https://circleci.com)

Testing

  • Run the test suite:
  pnpm test
  • Run tests in watch mode during development:
  pnpm test:watch

For more detailed contribution guidelines, see CONTRIBUTING.md

See related servers & alternatives →

Related MCP servers

Browse all →

Related guides

Hand-picked reading to help you choose and use AI & ML servers.