CircleCI

officiel

Permettre aux agents IA de corriger les échecs de build depuis CircleCI.

Que pouvez-vous faire avec CircleCI MCP ?

  • Valider la configuration CircleCI — Demandez de valider votre .circleci/config.yml pour les erreurs de syntaxe et sémantiques via config_helper.
  • Obtenir le statut du pipeline — Vérifiez le dernier statut de pipeline pour une branche avec get_latest_pipeline_status.
  • Déclencher et relancer des pipelines — Démarrez un nouveau pipeline avec run_pipeline ou relancez un workflow depuis le début ou depuis un job échoué via rerun_workflow.
  • Enquêter sur les échecs de build — Récupérez les journaux d'échec détaillés avec get_build_failure_logs et les résultats de tests via get_job_test_results.
  • Trouver les tests flaky — Identifiez les tests flaky en analysant l'historique d'exécution des tests à l'aide de find_flaky_tests.
  • Analyser l'utilisation et les coûts — Téléchargez les données d'utilisation avec download_usage_api_data et trouvez les classes de ressources sous-utilisées via find_underused_resource_classes.

Documentation

[!IMPORTANT] Ce package est obsolète. Veuillez migrer.

@circleci/mcp-server-circleci ne reçoit plus de travaux de fonctionnalités. Utilisez plutôt le serveur MCP hébergé de CircleCI ou le CircleCI CLI MCP — voir l'aperçu du MCP CircleCI.

Ce dépôt sera archivé. Les versions existantes restent installables via npm, mais l'exécution d'un serveur non maintenu qui détient un jeton API personnel CircleCI n'est pas recommandée.

Si vous exécutez le transport distant auto-géré (start=remote), migrez d'abord : le serveur hébergé est son remplacement direct et élimine la nécessité d'exploiter un service exposé au réseau qui négocie le jeton de votre organisation.

Serveur MCP CircleCI

License: Apache 2.0 CircleCI npm

Le Model Context Protocol (MCP) est un nouveau protocole standardisé pour gérer le contexte entre les grands modèles de langage (LLM) et les systèmes externes. Dans ce dépôt, nous fournissons un serveur MCP pour CircleCI.

Utilisez Cursor, Windsurf, Copilot, Claude ou tout client compatible MCP pour interagir avec CircleCI en langage naturel — sans quitter votre IDE.

Outils

OutilDescription
config_helperValider et obtenir des conseils pour votre configuration CircleCI
download_usage_api_dataTélécharger les données d'utilisation à partir de l'API Usage de CircleCI
find_flaky_testsIdentifier les tests instables en analysant l'historique d'exécution des tests
find_underused_resource_classesTrouver les tâches qui utilisent des ressources de calcul insuffisamment exploitées
get_build_failure_logsRécupérer les journaux d'échec détaillés des builds CircleCI
get_job_test_resultsRécupérer les métadonnées et les résultats des tests pour les tâches CircleCI
get_latest_pipeline_statusObtenir le statut du dernier pipeline pour une branche
list_artifactsLister les artefacts produits par une tâche CircleCI
list_component_versionsLister toutes les versions d'un composant CircleCI
list_followed_projectsLister tous les projets CircleCI que vous suivez
rerun_workflowRelancer un workflow depuis le début ou depuis la tâche en échec
run_pipelineDéclencher l'exécution d'un pipeline
run_rollback_pipelineDéclencher un rollback pour un projet

Installation

Déploiement équipe / centralisé : Pour exécuter un serveur distant partagé pour votre organisation (Kubernetes, Docker, etc.) avec des jetons CircleCI par développeur ou partagés, voir Serveur MCP distant auto-géré.

Cursor

Prérequis :

Utilisation de NPX dans un serveur MCP local

Ajoutez ce qui suit à votre configuration MCP Cursor :

{
  "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 est optionnel — requis uniquement pour les clients on-prem. MAX_MCP_OUTPUT_LENGTH est optionnel — longueur maximale de sortie pour les réponses MCP (défaut : 50000).

Utilisation de Docker dans un serveur MCP local

Ajoutez ce qui suit à votre configuration MCP Cursor :

{
  "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"
      }
    }
  }
}

Utilisation d'un serveur MCP distant auto-géré

Voir Serveur MCP distant auto-géré. Utilisez la configuration client par utilisateur et ajoutez-la à votre configuration MCP Cursor (Cursor Settings → MCP).

VS Code

Prérequis :

Utilisation de NPX dans un serveur MCP local

Ajoutez ce qui suit à .vscode/mcp.json dans votre projet :

{
  "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}"
      }
    }
  }
}

💡 Les entrées sont demandées au premier démarrage du serveur, puis stockées en toute sécurité par VS Code.

Utilisation de Docker dans un serveur MCP local

Ajoutez ce qui suit à .vscode/mcp.json dans votre projet :

{
  "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}"
      }
    }
  }
}

Utilisation d'un serveur MCP distant auto-géré

Voir Serveur MCP distant auto-géré. Utilisez la configuration client par utilisateur dans .vscode/mcp.json.

Claude Desktop

Prérequis :

Utilisation de NPX dans un serveur MCP local

Ajoutez ce qui suit à votre 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"
      }
    }
  }
}

Utilisation de Docker dans un serveur MCP local

Ajoutez ce qui suit à votre 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"
      }
    }
  }
}

Utilisation d'un serveur MCP distant auto-géré

Voir Serveur MCP distant auto-géré. Créez un script wrapper comme indiqué dans Clients Claude Desktop et CLI, puis pointez votre claude_desktop_config.json vers celui-ci.

Pour trouver ou créer votre fichier de configuration, ouvrez les paramètres de Claude Desktop, cliquez sur Developer dans la barre latérale gauche, puis sur Edit Config. Le fichier de configuration se trouve à :

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

Pour plus d'informations : https://modelcontextprotocol.io/quickstart/user

Claude Code

Prérequis :

Utilisation de NPX dans un serveur MCP local

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

Utilisation de Docker dans un serveur MCP local

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

Utilisation d'un serveur MCP distant auto-géré

Voir Serveur MCP distant auto-géré et la configuration du client Claude Code là-bas.

Windsurf

Prérequis :

Utilisation de NPX dans un serveur MCP local

Ajoutez ce qui suit à votre mcp_config.json Windsurf :

{
  "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"
      }
    }
  }
}

Utilisation de Docker dans un serveur MCP local

Ajoutez ce qui suit à votre mcp_config.json Windsurf :

{
  "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"
      }
    }
  }
}

Utilisation d'un serveur MCP distant auto-géré

Voir Serveur MCP distant auto-géré. Utilisez la configuration client par utilisateur dans votre mcp_config.json Windsurf.

Pour plus d'informations : https://docs.windsurf.com/windsurf/mcp

Amazon Q Developer CLI

Prérequis :

La configuration du client MCP dans Amazon Q Developer est stockée au format JSON dans un fichier nommé mcp.json. Deux niveaux de configuration sont pris en charge :

  • Global : ~/.aws/amazonq/mcp.json — s'applique à tous les espaces de travail
  • Espace de travail : .amazonq/mcp.json — spécifique à l'espace de travail actuel

Si les deux fichiers existent, leur contenu est fusionné. En cas de conflit, la configuration de l'espace de travail a priorité.

Utilisation de NPX dans un serveur MCP local

Modifiez ~/.aws/amazonq/mcp.json ou créez .amazonq/mcp.json avec ce qui suit :

{
  "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
    }
  }
}

Utilisation d'un serveur MCP distant auto-géré

Voir Serveur MCP distant auto-géré. Utilisez un script wrapper comme indiqué dans Clients Claude Desktop et CLI, puis enregistrez-le avec q mcp add.

Amazon Q Developer dans l'IDE

Prérequis :

Utilisation de NPX dans un serveur MCP local

Modifiez ~/.aws/amazonq/mcp.json ou créez .amazonq/mcp.json avec ce qui suit :

{
  "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
    }
  }
}

Utilisation d'un serveur MCP distant auto-géré

Voir Serveur MCP distant auto-géré. Utilisez un script wrapper comme indiqué dans Clients Claude Desktop et CLI, puis ajoutez-le via l'interface de configuration MCP :

  1. Accéder à l'interface de configuration MCP
  2. Choisissez le symbole +
  3. Sélectionnez la portée : global ou local
  4. Entrez un nom (par exemple circleci-remote-mcp)
  5. Sélectionnez le protocole de transport : stdio
  6. Entrez le chemin de commande de votre script
  7. Cliquez sur Enregistrer
Smithery

Pour installer automatiquement le serveur MCP CircleCI pour Claude Desktop via Smithery :

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

Serveur MCP distant auto-géré

Exécutez le serveur MCP de manière centralisée (par exemple sur Kubernetes ou Docker) afin que votre équipe partage un seul déploiement. Choisissez comment les développeurs s'authentifient :

Choisir un mode de déploiement

ModeQuand l'utiliserConfiguration serveurConfiguration clientPiste d'audit CircleCI
Jetons par utilisateur (recommandé)Équipes avec des jetons API personnels adossés au SSOREQUIRE_REQUEST_TOKEN=true, pas de PAT serveurChaque développeur transmet son PATPar développeur
Jeton partagé (intérimaire)Déploiement rapide, identité de service unique acceptableCIRCLECI_TOKEN sur le serveur, REQUIRE_REQUEST_TOKEN=false (refus explicite)Aucun en-tête d'auth requisIdentité partagée unique

Sécurité : L'authentification des requêtes est activée par défaut en mode distant. Le mode jeton partagé la désactive (REQUIRE_REQUEST_TOKEN=false), ce qui permet à tout appelant d'agir en tant qu'identité CIRCLECI_TOKEN du serveur sans identifiants — y compris pour déclencher des pipelines avec une configuration arbitraire. Activez-le uniquement sur un réseau que vous contrôlez entièrement, et préférez les jetons par utilisateur sinon. La terminaison TLS à une passerelle fournit le chiffrement, pas l'authentification.

Parce que cette combinaison est dangereuse sur une interface publique, le serveur refuse de démarrer lorsque REQUIRE_REQUEST_TOKEN=false est combiné avec une adresse de liaison non-loopback, sauf si vous acceptez explicitement le risque avec MCP_ALLOW_UNAUTHENTICATED_NETWORK_ACCESS=true. La vérification Host/Origin n'est pas un substitut à l'authentification — voir Protection contre la liaison DNS ci-dessous.

1. Déployer le serveur

Les deux modes utilisent le mode HTTP distant (start=remote). Publiez le port 8000 (ou votre port choisi).

Jetons par utilisateur (recommandé) — accès via mcp-remote depuis localhost :

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

Jetons par utilisateur (recommandé) — accès via mcp-remote depuis un nom d'hôte public :

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

Jeton partagé (intérimaire) — accès via mcp-remote depuis un nom d'hôte public :

Parce que ce mode sert le PAT de l'organisation à tout appelant sans identifiants, il doit être exécuté uniquement là où le port publié est inaccessible depuis les réseaux non fiables, et vous devez le reconnaître explicitement, sinon le serveur refusera de démarrer :

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_ALLOW_UNAUTHENTICATED_NETWORK_ACCESS=true \
  -e MCP_ALLOWED_HOSTS=my-mcp.example.com \
  circleci/mcp-server-circleci

Préférez placer une authentification devant le port à la place — une passerelle qui exige SSO, mTLS, ou une clé API — ou passez aux jetons par utilisateur ci-dessus.

Variables d'environnement :

VariableDescription
start=remoteDémarre le serveur MCP HTTP+SSE au lieu de stdio
portPort d'écoute dans le conteneur (défaut : 8000)
REQUIRE_REQUEST_TOKENRejette les requêtes sans en-tête Authorization: Bearer ou Circle-Token. Requis par défaut ; définissez REQUIRE_REQUEST_TOKEN=false pour autoriser les requêtes non authentifiées (mode jeton partagé)
CIRCLECI_TOKENJeton PAT de secours partagé pour toutes les requêtes lorsque les en-têtes par utilisateur ne sont pas envoyés
CIRCLECI_BASE_URLFacultatif — requis uniquement pour on-prem (défaut : https://circleci.com)
DISABLE_TELEMETRY=trueDésactive l'export des métriques d'utilisation
MCP_ALLOWED_HOSTSListe séparée par des virgules de valeurs d'en-tête Host supplémentaires à autoriser (p. ex. my-mcp.example.com,my-mcp.example.com:443). Les noms d'hôte en boucle locale sont toujours autorisés. Requis pour tout déploiement non en boucle locale.
MCP_ALLOWED_ORIGINSListe séparée par des virgules de valeurs d'en-tête Origin supplémentaires à autoriser (p. ex. https://my-app.example.com). Les origines en boucle locale sont toujours autorisées. Nécessaire uniquement lorsqu'un navigateur accède directement à ce serveur (pas via mcp-remote).
MCP_BIND_HOSTInterface réseau à laquelle se lier (défaut : 0.0.0.0). Définissez 127.0.0.1 pour restreindre à la boucle locale uniquement (incompatible avec le mappage de ports Docker -p).
MCP_ALLOW_UNAUTHENTICATED_NETWORK_ACCESSRequis (=true) pour démarrer avec REQUIRE_REQUEST_TOKEN=false sur une adresse de liaison non en boucle locale. Atteste que toute pair capable d'atteindre le port agit comme l'identité CIRCLECI_TOKEN du serveur sans identifiant. Sans effet lorsque des jetons de requête sont requis.
MCP_FILE_OUTPUT_ROOTSListe séparée par des virgules de répertoires supplémentaires que les outils de lecture/écriture de fichiers peuvent utiliser (p. ex. /srv/reports,/data/exports). Le répertoire de travail, le répertoire personnel et le répertoire temporaire sont toujours autorisés. Voir la note ci-dessous.

Emplacements de sortie des fichiers (s'applique aux transports stdio et distant) : Les outils qui acceptent un chemin de système de fichiers — get_build_failure_logs (outputDir), download_usage_api_data (outputDir) et find_underused_resource_classes (csvFilePath) — ne peuvent lire et écrire qu'à l'intérieur du répertoire de travail du serveur, du répertoire personnel de l'utilisateur et du répertoire temporaire du système. Dans ces racines, les répertoires de configuration cachés (~/.ssh, ~/.aws, ~/.config, .git, …), node_modules et les répertoires de l'agent de lancement sont rejetés, de même que les liens symboliques qui résolvent hors des racines autorisées. Les répertoires système (/etc, /usr, /bin, /System, /Library, %SystemRoot%, …) sont refusés inconditionnellement et ne peuvent pas être réactivés. Les fichiers de sortie ne sont jamais écrits via un lien symbolique.

Si votre copie de travail se trouve hors de ces racines — /workspace dans un conteneur, /srv, /opt, un volume secondaire tel que /Volumes/work — définissez MCP_FILE_OUTPUT_ROOTS sur ce répertoire, sinon ces chemins sont rejetés. Pour un serveur stdio, le répertoire de travail est généralement déjà la racine du projet, donc aucune configuration n'est nécessaire. Cela importe surtout pour le transport distant, où les chemins proviennent de clients réseau plutôt que de l'utilisateur local.

Protection contre le rebinding DNS (pas une authentification) : Le transport distant valide l'en-tête Host sur chaque requête /mcp. Par défaut, seules les adresses en boucle locale (localhost, 127.0.0.1, [::1]) sont acceptées. Les déploiements publics doivent définir MCP_ALLOWED_HOSTS sur le nom d'hôte que les clients utilisent, sinon toutes les requêtes /mcp recevront 403 Forbidden. Le point de terminaison de contrôle de santé /ping n'est pas protégé, de sorte que les sondes des équilibreurs de charge continuent de fonctionner indépendamment de Host.

L'en-tête Origin (envoyé par les navigateurs) est également validé lorsqu'il est présent. Les clients non-navigateurs tels que mcp-remote n'envoient jamais Origin, ils ne sont donc pas affectés par ce contrôle.

Ce contrôle n'est pas un contrôle d'accès et ne doit pas être utilisé comme tel. Les deux en-têtes sont choisis par l'appelant, donc tout client non-navigateur — curl, un script, une socket brute — peut envoyer un Host autorisé et omettre Origin pour le satisfaire. Son seul but est d'empêcher un navigateur d'être dirigé vers le serveur par un DNS contrôlé par un attaquant, ce qui constitue la menace de rebinding DNS. Authentifier les appelants est le rôle de REQUIRE_REQUEST_TOKEN (ou d'un proxy d'authentification devant le port). Exiger un en-tête Origin casserait tous les clients CLI légitimes sans arrêter aucun attaquant.

Derrière un proxy inverse : Si votre proxy réécrit Host vers l'adresse du backend (comportement par défaut de nginx), ajoutez proxy_set_header Host $host; pour faire passer le nom d'hôte d'origine, puis définissez MCP_ALLOWED_HOSTS sur ce nom d'hôte public. Sinon, définissez MCP_ALLOWED_HOSTS sur le nom d'hôte que le proxy transmet.

Le serveur accepte les jetons par requête via :

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

Si un client envoie un jeton d'en-tête, il a priorité sur CIRCLECI_TOKEN sur le serveur.

Les métriques de télémétrie enregistrées pendant une requête sont exportées avec le même jeton que cette requête.

2. Configurer les clients

La plupart des clients MCP ne prennent en charge que les processus locaux (stdio). Utilisez mcp-remote, un pont stdio-vers-HTTP tiers, pour les connecter à votre serveur distant.

Schéma d'URL : Utilisez http://localhost:8000/mcp avec --allow-http pour les tests locaux. En production, terminez TLS à votre point d'entrée/équilibreur de charge et utilisez https://your-host/mcp sans --allow-http.

Windows : Évitez les espaces autour des deux-points dans les valeurs --header. Placez la valeur complète de Bearer <token> dans une variable d'environnement.

Sécurité : Les exemples utilisent npx pour plus de commodité. Pour une production ou un déploiement en équipe, épinglez une version spécifique dans votre configuration MCP (par exemple mcp-remote@0.1.38 au lieu de mcp-remote). N'utilisez pas de versions inférieures à 0.1.16 (CVE-2025-6514).

Configuration du client : jetons par utilisateur

Chaque développeur transmet son propre jeton personnel API CircleCI sur chaque requête :

{
  "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}"
      }
    }
  }
}

Remplacez http://localhost:8000/mcp par l'URL du serveur de votre équipe. Cursor et VS Code prennent en charge les invites ${input:...} ; les autres clients peuvent définir AUTH_HEADER directement.

Configuration du client : jeton partagé

Lorsque le serveur a CIRCLECI_TOKEN défini et est démarré avec REQUIRE_REQUEST_TOKEN=false (l'authentification de requête est activée par défaut et doit être explicitement désactivée, et une liaison non en boucle locale requiert en outre MCP_ALLOW_UNAUTHENTICATED_NETWORK_ACCESS=true), les clients n'ont pas besoin d'envoyer de jeton :

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

Claude Desktop et clients CLI

Créez un script d'encapsulation (par ex. 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}"

Rendez-le exécutable (chmod +x circleci-remote-mcp.sh), puis référencez-le depuis votre configuration MCP :

{
  "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}"

Omettez --header et AUTH_HEADER lors de l'utilisation d'un serveur à jeton partagé.

3. Vérifier le déploiement

# 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"}}}'

Démo

Regardez-le en action

Exemple : « Trouver le dernier pipeline en échec sur ma branche et obtenir les journaux » — voir le wiki pour plus d'exemples.

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

Détails des outils

config_helper

Assiste les tâches de configuration CircleCI en fournissant des conseils et une validation.

  • Valide votre .circleci/config.yml pour les erreurs de syntaxe et sémantiques
  • Fournit des résultats de validation détaillés et des recommandations de configuration
  • Exemple : « Valider ma configuration CircleCI »
download_usage_api_data

Télécharge les données d'utilisation depuis l'API d'utilisation CircleCI pour une organisation donnée. Accepte une saisie de date flexible (p. ex., « mars 2025 » ou « le mois dernier »). Fonctionnalité cloud uniquement.

Option 1 : Démarrer un nouveau travail d'export en fournissant :

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

Option 2 : Vérifier/télécharger un travail d'export existant en fournissant :

  • orgId, jobId, outputDir

Renvoie un fichier CSV avec les données d'utilisation CircleCI pour la période spécifiée.

[!NOTE] Les données d'utilisation peuvent être alimentées dans l'outil find_underused_resource_classes pour l'analyse d'optimisation des coûts.

find_flaky_tests

Identifie les tests instables dans votre projet CircleCI en analysant l'historique d'exécution des tests. Exploite la fonctionnalité de détection des tests instables de CircleCI.

Cet outil peut être utilisé de trois manières :

  1. Utilisation du slug de projet (recommandé) :

    • Utilisez d'abord list_followed_projects pour obtenir vos projets, puis :
    • Exemple : « Obtenir les tests instables pour mon-projet »
  2. Utilisation de l'URL du projet CircleCI :

  3. Utilisation du contexte de projet local :

    • Fonctionne depuis votre espace de travail local en fournissant la racine de l'espace de travail et l'URL du dépôt git distant
    • Exemple : « Trouver les tests instables dans mon projet actuel »

Modes de sortie :

  • Texte (défaut) : Renvoie les détails des tests instables au format texte
  • Fichier (requiert la variable d'environnement FILE_OUTPUT_DIRECTORY) : Crée un répertoire avec les détails des tests instables
find_underused_resource_classes

Analyse un fichier CSV de données d'utilisation CircleCI pour trouver les tâches dont l'utilisation CPU/RAM moyenne ou maximale est inférieure à un seuil donné (défaut : 40 %).

Fournissez un fichier CSV obtenu depuis download_usage_api_data.

Renvoie une liste Markdown de tâches sous-utilisées organisée par projet et workflow — utile pour identifier les opportunités d'optimisation des coûts.

get_build_failure_logs

Récupère les journaux d'échec détaillés des builds CircleCI. Cet outil peut être utilisé de trois manières :

  1. Utilisation du slug de projet et de la branche (recommandé) :

    • Utilisez d'abord list_followed_projects pour obtenir vos projets, puis :
    • Exemple : « Obtenir les échecs de build pour mon-projet sur la branche principale »
  2. Utilisation des URL CircleCI :

  3. Utilisation du contexte de projet local :

    • Fonctionne depuis votre espace de travail local en fournissant la racine de l'espace de travail, l'URL du dépôt git distant et le nom de la branche
    • Exemple : « Trouver le dernier pipeline en échec sur ma branche actuelle »

L'outil renvoie des journaux formatés comprenant :

  • Les noms des tâches
  • Les détails d'exécution étape par étape
  • Les messages d'échec et le contexte
get_job_test_results

Récupère les métadonnées de test pour les tâches CircleCI, vous permettant d'analyser les résultats de test sans quitter votre IDE. Cet outil peut être utilisé de trois manières :

  1. Utilisation du slug de projet et de la branche (recommandé) :

    • Exemple : « Obtenir les résultats de test pour mon-projet sur la branche principale »
  2. Utilisation de l'URL CircleCI :

    • URL de tâche : https://app.circleci.com/pipelines/github/org/repo/123/workflows/abc-def/jobs/789
    • URL de workflow : https://app.circleci.com/pipelines/github/org/repo/123/workflows/abc-def
    • URL de pipeline : https://app.circleci.com/pipelines/github/org/repo/123
  3. Utilisation du contexte de projet local :

    • Fonctionne depuis votre espace de travail local en fournissant la racine de l'espace de travail, l'URL du dépôt git distant et le nom de la branche

L'outil renvoie :

  • Un résumé de tous les tests (total, réussis, échoués)
  • Des informations détaillées sur les tests échoués : nom, classe, fichier, message d'erreur, durée
  • La liste des tests réussis avec leur durée
  • Filtrer par résultat de test

[!NOTE] Les métadonnées de test doivent être configurées dans votre configuration CircleCI. Voir Collecter les données de test pour les instructions de configuration.

get_latest_pipeline_status Récupère le statut du dernier pipeline pour une branche donnée. Cet outil peut être utilisé de trois manières :
  1. Utilisation du slug de projet et de la branche (recommandé) :

    • Exemple : « Obtenir le statut du dernier pipeline pour mon-projet sur la branche principale »
  2. Utilisation de l'URL du projet CircleCI :

  3. Utilisation du contexte de projet local :

    • Fonctionne depuis votre espace de travail local en fournissant la racine de l'espace de travail, l'URL du dépôt git et le nom de la branche

Exemple de sortie :

---
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
list_artifacts

Récupère la liste des artefacts produits par un travail CircleCI. Cet outil peut être utilisé de trois manières :

  1. Utilisation du slug de projet et de la branche (recommandé) :

    • Utilisez d'abord list_followed_projects pour obtenir vos projets, puis :
    • Exemple : « Lister les artefacts pour mon-projet sur la branche principale »
  2. Utilisation de l'URL CircleCI :

    • URL du travail : https://app.circleci.com/pipelines/gh/organization/project/123/workflows/abc-def/jobs/789
    • URL du workflow : https://app.circleci.com/pipelines/gh/organization/project/123/workflows/abc-def
    • URL du pipeline : https://app.circleci.com/pipelines/gh/organization/project/123
  3. Utilisation du contexte de projet local :

    • Fonctionne depuis votre espace de travail local en fournissant la racine de l'espace de travail, l'URL du dépôt git et le nom de la branche

Utile pour :

  • Trouver les URL de téléchargement des artefacts de build (binaires, rapports, journaux)
  • Vérifier quels artefacts ont été produits par une exécution de pipeline
list_component_versions

Liste toutes les versions d'un composant CircleCI spécifique dans un environnement. Inclut le statut de déploiement, les informations de commit et les horodatages.

L'outil vous demandera de sélectionner le composant et l'environnement s'ils ne sont pas fournis.

Utile pour :

  • Identifier quelle version est actuellement en production
  • Sélectionner les versions cibles pour les opérations de rollback
  • Obtenir les détails de déploiement (pipeline, workflow, travail)
list_followed_projects

Liste tous les projets que l'utilisateur suit sur CircleCI.

  • Affiche tous les projets auxquels vous avez accès avec leur projectSlug
  • Exemple : « Lister mes projets CircleCI »

Exemple de sortie :

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

[!NOTE] Le projectSlug (pas le nom du projet) est requis pour de nombreux autres outils CircleCI.

rerun_workflow

Relance un workflow depuis son début ou depuis le travail ayant échoué.

Renvoie l'ID du workflow nouvellement créé et un lien pour le surveiller.

run_pipeline

Déclenche l'exécution d'un pipeline. Cet outil peut être utilisé de trois manières :

  1. Utilisation du slug de projet et de la branche (recommandé) :

    • Exemple : « Exécuter le pipeline pour mon-projet sur la branche principale »
  2. Utilisation de l'URL CircleCI :

  3. Utilisation du contexte de projet local :

    • Fonctionne depuis votre espace de travail local en fournissant la racine de l'espace de travail, l'URL du dépôt git et le nom de la branche

L'outil renvoie un lien pour surveiller l'exécution du pipeline.

run_rollback_pipeline

Déclenche un rollback pour un projet CircleCI. L'outil vous guide de manière interactive à travers :

  1. Sélection du projet — liste les projets suivis pour que vous choisissiez
  2. Sélection de l'environnement — liste les environnements disponibles (sélection automatique s'il n'y en a qu'un)
  3. Sélection du composant — liste les composants disponibles (sélection automatique s'il n'y en a qu'un)
  4. Sélection de la version — affiche les versions disponibles ; vous sélectionnez la cible pour le rollback
  5. Détection du mode de rollback — vérifie si un pipeline de rollback est configuré
  6. Exécution du rollback — deux options :
    • Rollback de pipeline : déclenche le pipeline de rollback
    • Relance de workflow : relance un workflow précédent en utilisant son ID de workflow
  7. Confirmation — résume et confirme avant l'exécution

Dépannage

Correctifs rapides

Problèmes les plus courants :

  1. Vider les caches de packages :

    npx clear-npx-cache
    npm cache clean --force
    
  2. Forcer la dernière version : Ajoutez @latest à votre configuration :

    "args": ["-y", "@circleci/mcp-server-circleci@latest"]
    
  3. Redémarrez complètement votre IDE (pas seulement recharger la fenêtre)

Problèmes d'authentification
  • Erreurs de jeton invalide : Vérifiez votre CIRCLECI_TOKEN dans Jetons API personnels
  • Erreurs de permission : Assurez-vous que le jeton a un accès en lecture à vos projets
  • Variables d'environnement non chargées : Testez avec echo $CIRCLECI_TOKEN (Mac/Linux) ou echo %CIRCLECI_TOKEN% (Windows)
Problèmes de connexion et de réseau
  • URL de base : Confirmez que CIRCLECI_BASE_URL est https://circleci.com
  • Réseaux d'entreprise : Configurez les paramètres de proxy npm si vous êtes derrière un pare-feu
  • Blocage par pare-feu : Vérifiez si un logiciel de sécurité bloque les téléchargements de packages
Configuration système requise
  • Version de Node.js : Assurez-vous d'avoir >= 18.0.0 avec node --version
  • Mise à jour de Node.js : Envisagez la dernière LTS si vous rencontrez des problèmes de compatibilité
  • Gestionnaire de packages : Vérifiez que npm/pnpm fonctionne : npm --version
Problèmes spécifiques à l'IDE
  • Emplacement du fichier de configuration : Vérifiez à nouveau le chemin pour votre système d'exploitation
  • Erreurs de syntaxe : Validez la syntaxe JSON dans votre fichier de configuration
  • Journaux de la console : Consultez la console de développement de l'IDE pour des erreurs spécifiques
  • Essayez un autre IDE : Testez dans un autre éditeur pris en charge pour isoler le problème
Problèmes de processus

Processus bloqués — tuez les processus MCP existants :

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

# Windows:
taskkill /f /im node.exe

Conflits de ports : Redémarrez votre IDE si la connexion semble bloquée.

Débogage avancé
  • Testez le package directement : npx @circleci/mcp-server-circleci@latest --help
  • Journalisation verbeuse : DEBUG=* npx @circleci/mcp-server-circleci@latest
  • Solution de repli Docker : Essayez l'installation Docker si npx échoue systématiquement

Besoin d'aide supplémentaire ?

  1. Consultez Problèmes GitHub pour des problèmes similaires
  2. Incluez votre système d'exploitation, la version de Node et l'IDE lors du signalement de problèmes
  3. Partagez les messages d'erreur pertinents de la console de l'IDE

Télémétrie

Le serveur prend en charge les métriques OpenTelemetry pour le suivi de l'utilisation des outils. Les métriques sont exportées sauf si vous définissez DISABLE_TELEMETRY=true. Sur les déploiements distants, les métriques utilisent le même jeton que la requête (PAT par utilisateur ou PAT de serveur partagé).

MétriqueDescription
circleci.mcp.tool.invocationsNombre d'invocations d'outils
circleci.mcp.tool.duration_msTemps d'exécution en ms
circleci.mcp.tool.errorsNombre d'erreurs

Développement

Pour commencer

  1. Clonez le dépôt :

    git clone https://github.com/CircleCI-Public/mcp-server-circleci.git
    cd mcp-server-circleci
    
  2. Installez les dépendances :

    pnpm install
    
  3. Compilez le projet :

    pnpm build
    

Construction du conteneur Docker

Vous pouvez construire le conteneur Docker localement en utilisant :

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

Cela créera une image Docker étiquetée comme circleci:mcp-server-circleci que vous pourrez utiliser avec n'importe quel client MCP.

Mode stdio local (développeur unique, jeton sur le client) :

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

Mode distant (serveur centralisé pour une équipe) : voir Serveur MCP distant auto-géré.

Développement avec MCP Inspector

Le moyen le plus simple d'itérer sur le serveur MCP est d'utiliser l'inspecteur MCP. Vous pouvez en savoir plus sur l'inspecteur MCP à https://modelcontextprotocol.io/docs/tools/inspector

  1. Démarrez le serveur de développement :

    pnpm watch # Keep this running in one terminal
    
  2. Dans un terminal séparé, lancez l'inspecteur :

    pnpm inspector
    
  3. Configurez l'environnement :

    • Ajoutez votre CIRCLECI_TOKEN à la section Variables d'environnement dans l'interface de l'inspecteur
    • Le jeton doit avoir un accès en lecture à vos projets CircleCI
    • Optionnellement, définissez votre URL de base CircleCI (par défaut https://circleci.com)

Tests

  • Exécutez la suite de tests :

    pnpm test
    
  • Exécutez les tests en mode surveillance pendant le développement :

    pnpm test:watch
    

Pour des directives de contribution plus détaillées, consultez CONTRIBUTING.md