The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the MCP Server Circleci listing page.
[!IMPORTANT] This package is deprecated. Please migrate.
@circleci/mcp-server-circleciis no longer receiving feature work. Use CircleCI's hosted MCP server or the CircleCI CLI MCP instead — see the CircleCI MCP overview.This repository will be archived. Existing versions remain installable from npm, but running an unmaintained server that holds a CircleCI Personal API Token is not recommended.
If you are running the self-managed remote transport (
start=remote), migrate first: the hosted server is its direct replacement and removes the need to operate a network-facing service that brokers your org's token.
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.
| 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 |
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.
Prerequisites:
Add the following to your Cursor MCP config:
CIRCLECI_BASE_URLis optional — required for on-prem customers only.MAX_MCP_OUTPUT_LENGTHis optional — maximum output length for MCP responses (default: 50000).
Add the following to your Cursor MCP config:
See Self-Managed Remote MCP Server. Use the per-user client configuration and add it to your Cursor MCP config (Cursor Settings → MCP).
Prerequisites:
Add the following to .vscode/mcp.json in your project:
💡 Inputs are prompted on first server start, then stored securely by VS Code.
Add the following to .vscode/mcp.json in your project:
See Self-Managed Remote MCP Server. Use the per-user client configuration in .vscode/mcp.json.
Prerequisites:
Add the following to your claude_desktop_config.json:
Add the following to your claude_desktop_config.json:
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:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonFor more information: https://modelcontextprotocol.io/quickstart/user
Prerequisites:
See Self-Managed Remote MCP Server and the Claude Code client setup there.
Prerequisites:
Add the following to your Windsurf mcp_config.json:
Add the following to your Windsurf mcp_config.json:
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
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:
~/.aws/amazonq/mcp.json — applies to all workspaces.amazonq/mcp.json — specific to the current workspaceIf both files exist, their contents are merged. In case of conflict, the workspace config takes precedence.
Edit ~/.aws/amazonq/mcp.json or create .amazonq/mcp.json with the following:
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.
Prerequisites:
Edit ~/.aws/amazonq/mcp.json or create .amazonq/mcp.json with the following:
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:
circleci-remote-mcp)To install CircleCI MCP Server for Claude Desktop automatically via Smithery:
Run the MCP server centrally (for example on Kubernetes or Docker) so your team shares one deployment. Choose how developers authenticate:
| 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'sCIRCLECI_TOKENidentity with no credentials — including triggering pipelines with arbitrary config. Only enable it on a network you fully trust, and prefer per-user tokens otherwise. Terminating TLS at an ingress provides encryption, not authentication.Because that combination is unsafe on a public interface, the server refuses to start when
REQUIRE_REQUEST_TOKEN=falseis combined with a non-loopback bind address, unless you explicitly accept the risk withMCP_ALLOW_UNAUTHENTICATED_NETWORK_ACCESS=true. TheHost/Origincheck is not a substitute for authentication — see DNS-rebinding protection below.
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:
Per-user tokens (recommended) — accessed via mcp-remote from a public hostname:
Shared token (interim) — accessed via mcp-remote from a public hostname:
Because this mode serves the org's PAT to any caller with no credential, it must be run only where the published port is unreachable from untrusted networks, and you must acknowledge that explicitly or the server will refuse to start:
Prefer putting authentication in front of the port instead — an ingress that requires SSO, mTLS, or an API key — or switch to per-user tokens above.
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_ALLOW_UNAUTHENTICATED_NETWORK_ACCESS | Required (=true) to start with REQUIRE_REQUEST_TOKEN=false on a non-loopback bind address. Acknowledges that any peer able to reach the port acts as the server's CIRCLECI_TOKEN identity without a credential. Has no effect when request tokens are required. |
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) andfind_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_modulesand 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 —
/workspacein a container,/srv,/opt, a secondary volume such as/Volumes/work— setMCP_FILE_OUTPUT_ROOTSto 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 (not authentication): The remote transport validates the
Hostheader on every/mcprequest. By default only loopback addresses (localhost,127.0.0.1,[::1]) are accepted. Public deployments must setMCP_ALLOWED_HOSTSto the hostname clients use, or all/mcprequests will receive403 Forbidden. The/pinghealth-check endpoint is not guarded so load-balancer probes continue to work regardless ofHost.The
Originheader (sent by browsers) is also validated when present. Non-browser clients such asmcp-remotenever sendOrigin, so they are unaffected by this check.This check is not an access control and must not be relied on as one. Both headers are chosen by the caller, so any non-browser client — curl, a script, a raw socket — can send an allowed
Hostand omitOriginto satisfy it. Its only purpose is to stop a browser from being aimed at the server by attacker-controlled DNS, which is the DNS-rebinding threat. Authenticating callers is the job ofREQUIRE_REQUEST_TOKEN(or an authenticating proxy in front of the port). Requiring anOriginheader would break every legitimate CLI client while stopping no attacker.Behind a reverse proxy: If your proxy rewrites
Hostto the backend address (nginx's default), addproxy_set_header Host $host;to pass the original hostname through, then setMCP_ALLOWED_HOSTSto that public hostname. Alternatively, setMCP_ALLOWED_HOSTSto 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.
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/mcpwith--allow-httpfor local testing. In production, terminate TLS at your ingress/load balancer and usehttps://your-host/mcpwithout--allow-http.
Windows: Avoid spaces around the colon in
--headervalues. Put the fullBearer <token>value in an environment variable.
Security: Examples use
npxfor convenience. For production or team rollouts, pin a specific version in your MCP config (for examplemcp-remote@0.1.38instead ofmcp-remote). Do not use versions below0.1.16(CVE-2025-6514).
Each developer forwards their own CircleCI Personal API Token on every request:
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.
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, and a non-loopback bind additionally requires MCP_ALLOW_UNAUTHENTICATED_NETWORK_ACCESS=true), clients do not need to send a token:
Create a wrapper script (e.g. circleci-remote-mcp.sh):
Make it executable (chmod +x circleci-remote-mcp.sh), then reference it from your MCP config:
Omit --header and AUTH_HEADER when using a shared-token server.
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
config_helperAssists with CircleCI configuration tasks by providing guidance and validation.
.circleci/config.yml for syntax and semantic errorsdownload_usage_api_dataDownloads 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), outputDirOption 2: Check/download an existing export job by providing:
orgId, jobId, outputDirReturns a CSV file with CircleCI usage data for the specified time frame.
[!NOTE] Usage data can be fed into the
find_underused_resource_classestool for cost optimization analysis.
find_flaky_testsIdentifies 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:
Using Project Slug (Recommended):
list_followed_projects to get your projects, then:Using CircleCI Project URL:
Using Local Project Context:
Output modes:
FILE_OUTPUT_DIRECTORY env var): Creates a directory with flaky test detailsfind_underused_resource_classesAnalyzes 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.
get_build_failure_logsRetrieves detailed failure logs from CircleCI builds. This tool can be used in three ways:
Using Project Slug and Branch (Recommended):
list_followed_projects to get your projects, then:Using CircleCI URLs:
Using Local Project Context:
The tool returns formatted logs including:
get_job_test_resultsRetrieves test metadata for CircleCI jobs, allowing you to analyze test results without leaving your IDE. This tool can be used in three ways:
Using Project Slug and Branch (Recommended):
Using CircleCI URL:
https://app.circleci.com/pipelines/github/org/repo/123/workflows/abc-def/jobs/789https://app.circleci.com/pipelines/github/org/repo/123/workflows/abc-defhttps://app.circleci.com/pipelines/github/org/repo/123Using Local Project Context:
The tool returns:
[!NOTE] Test metadata must be configured in your CircleCI config. See Collect Test Data for setup instructions.
get_latest_pipeline_statusRetrieves the status of the latest pipeline for a given branch. This tool can be used in three ways:
Using Project Slug and Branch (Recommended):
Using CircleCI Project URL:
Using Local Project Context:
Example output:
list_artifactsRetrieves the list of artifacts produced by a CircleCI job. This tool can be used in three ways:
Using Project Slug and Branch (Recommended):
list_followed_projects to get your projects, then:Using CircleCI URL:
https://app.circleci.com/pipelines/gh/organization/project/123/workflows/abc-def/jobs/789https://app.circleci.com/pipelines/gh/organization/project/123/workflows/abc-defhttps://app.circleci.com/pipelines/gh/organization/project/123Using Local Project Context:
Useful for:
list_component_versionsLists 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:
list_followed_projectsLists all projects that the user is following on CircleCI.
projectSlugExample output:
[!NOTE] The
projectSlug(not the project name) is required for many other CircleCI tools.
rerun_workflowReruns a workflow from its start or from the failed job.
Returns the ID of the newly-created workflow and a link to monitor it.
run_pipelineTriggers a pipeline to run. This tool can be used in three ways:
Using Project Slug and Branch (Recommended):
Using CircleCI URL:
Using Local Project Context:
The tool returns a link to monitor the pipeline execution.
run_rollback_pipelineTriggers a rollback for a CircleCI project. The tool interactively guides you through:
Most common issues:
Clear package caches:
Force latest version: Add @latest to your config:
Restart your IDE completely (not just reload window)
CIRCLECI_TOKEN in Personal API Tokensecho $CIRCLECI_TOKEN (Mac/Linux) or echo %CIRCLECI_TOKEN% (Windows)CIRCLECI_BASE_URL is https://circleci.comnode --versionnpm --versionHanging processes — kill existing MCP processes:
Port conflicts: Restart your IDE if the connection seems blocked.
npx @circleci/mcp-server-circleci@latest --helpDEBUG=* npx @circleci/mcp-server-circleci@latestStill need help?
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 |
Clone the repository:
Install dependencies:
Build the project:
You can build the Docker container locally using:
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):
Remote mode (centralized server for a team): see Self-Managed Remote MCP Server.
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
Start the development server:
In a separate terminal, launch the inspector:
Configure the environment:
CIRCLECI_TOKEN to the Environment Variables section in the inspector UIhttps://circleci.com)Run the test suite:
Run tests in watch mode during development:
For more detailed contribution guidelines, see CONTRIBUTING.md