Plane MCP Server

officiel

Le serveur MCP officiel de Plane permet l'intégration avec les API de Plane, offrant une automatisation complète par IA des projets, éléments de travail, cycles et plus encore.

Documentation

Serveur Plane MCP

Un serveur Model Context Protocol (MCP) pour l'intégration avec Plane. Ce serveur fournit des outils et des ressources pour interagir avec Plane via des agents IA.

Fonctionnalités

  • 🔧 Intégration Plane : Interagissez avec les API et services Plane
  • 🔌 Transports multiples : Prend en charge les transports stdio, SSE et HTTP streamable
  • 🌐 Distant et local : Fonctionne à la fois localement et en tant que service distant
  • 🛠️ Extensible : Facile d'ajouter de nouveaux outils et ressources

Utilisation

Le serveur prend en charge trois méthodes de transport. Nous recommandons d'utiliser uvx car elle ne nécessite pas d'installation.

Prérequis :

  • Python 3.10+ (pour le transport stdio, via uvx)
  • Node.js 22+ (pour les transports distants, via npx)

1. Transport Stdio (pour usage local)

Configuration du client MCP (en utilisant uvx - recommandé) :

{
  "mcpServers": {
    "plane": {
      "command": "uvx",
      "args": ["plane-mcp-server", "stdio"],
      "env": {
        "PLANE_API_KEY": "<your-api-key>",
        "PLANE_WORKSPACE_SLUG": "<your-workspace-slug>",
        "PLANE_BASE_URL": "https://api.plane.so"
      }
    }
  }
}

2. Transport HTTP distant avec OAuth

Connectez-vous au serveur Plane MCP hébergé en utilisant l'authentification OAuth.

URL : https://mcp.plane.so/http/mcp

Configuration du client MCP (pour les outils comme Claude Desktop sans support natif MCP distant) :

{
  "mcpServers": {
    "plane": {
      "command": "npx",
      "args": ["mcp-remote@latest", "https://mcp.plane.so/http/mcp"]
    }
  }
}

Remarque : L'authentification OAuth sera gérée automatiquement lors de la connexion au serveur distant.

3. Transport HTTP distant avec jeton PAT

Connectez-vous au serveur Plane MCP hébergé en utilisant un jeton d'accès personnel (PAT).

URL : https://mcp.plane.so/http/api-key/mcp

En-têtes :

  • Authorization: Bearer <PAT_TOKEN>
  • X-Workspace-slug: <SLUG>

Configuration du client MCP (pour les outils comme Claude Desktop sans support natif MCP distant) :

{
  "mcpServers": {
    "plane": {
      "command": "npx",
      "args": ["mcp-remote@latest", "https://mcp.plane.so/http/api-key/mcp"],
      "headers": {
        "Authorization": "Bearer <PAT_TOKEN>",
        "X-Workspace-slug": "<SLUG>"
      }
    }
  }
}

4. Transport SSE (Hérité)

⚠️ Transport hérité : Le transport SSE (Server-Sent Events) est maintenu pour la rétrocompatibilité. Les nouvelles implémentations devraient plutôt utiliser le transport HTTP (sections 2 ou 3).

Connectez-vous au serveur Plane MCP hébergé en utilisant l'authentification OAuth via Server-Sent Events.

URL : https://mcp.plane.so/sse

Configuration du client MCP (pour les outils qui prennent en charge le transport SSE) :

{
  "mcpServers": {
    "plane": {
      "command": "npx",
      "args": ["mcp-remote@latest", "https://mcp.plane.so/sse"]
    }
  }
}

Remarque : L'authentification OAuth sera gérée automatiquement lors de la connexion au serveur distant. Ce transport est déprécié au profit du transport HTTP.

Configuration

Authentification

Le serveur nécessite une authentification via des variables d'environnement :

  • PLANE_BASE_URL : URL de base pour l'API Plane (par défaut : https://api.plane.so) - Optionnel
  • PLANE_API_KEY : Clé API pour l'authentification (requis pour le transport stdio)
  • PLANE_WORKSPACE_SLUG : Identifiant du slug de l'espace de travail (requis pour le transport stdio)
  • PLANE_ACCESS_TOKEN : Jeton d'accès pour l'authentification (alternative à la clé API)

Exemple (pour le transport stdio) :

export PLANE_BASE_URL="https://api.plane.so"
export PLANE_API_KEY="your-api-key"
export PLANE_WORKSPACE_SLUG="your-workspace-slug"

Remarque : Pour les transports HTTP distants (OAuth ou PAT), l'authentification est gérée via la méthode de connexion (flux OAuth ou en-têtes PAT) et ne nécessite pas ces variables d'environnement.

URI de redirection OAuth

Pour les transports HTTP/SSE OAuth, le serveur valide l'URI de redirection de chaque client par rapport à une liste autorisée. Les clients MCP courants (Cursor, VS Code, Claude.ai, connecteurs ChatGPT, localhost) sont autorisés par défaut.

Pour intégrer un nouveau client sans modification de code ni publication, ajoutez des motifs supplémentaires via une variable d'environnement :

  • PLANE_OAUTH_ALLOWED_REDIRECT_URIS : Motifs d'URI de redirection séparés par des virgules, ajoutés à la liste autorisée intégrée.
export PLANE_OAUTH_ALLOWED_REDIRECT_URIS="https://newclient.com/cb,https://other.app/oauth/*"

Les motifs prennent en charge la correspondance glob (* correspond à n'importe quel port, segment de chemin ou sous-domaine). Pour des raisons de sécurité, gardez l'hôte fixe et utilisez les caractères génériques uniquement pour le port/chemin.

Journalisation

Le serveur émet des logs JSON structurés. Chaque appel d'outil est journalisé avec son nom d'outil, sa durée, son statut et (lorsqu'ils sont disponibles) l'identifiant utilisateur opaque et le slug de l'espace de travail.

  • LOG_USER_INFO : Lorsque true, inclut les informations utilisateur (PII telles que le nom d'affichage) dans les logs à côté de l'identifiant utilisateur opaque. Par défaut false afin que les PII ne soient jamais journalisées sauf consentement explicite. Seuls les transports HTTP OAuth et PAT (en-tête) portent un nom d'affichage ; stdio n'est pas affecté.
export LOG_USER_INFO="true"

Outils disponibles

Le serveur fournit des outils complets pour interagir avec Plane. Tous les outils utilisent des modèles Pydantic du SDK Plane pour la sécurité des types et la validation.

Projets

Nom de l'outilDescription
list_projectsLister tous les projets dans un espace de travail avec pagination et filtrage optionnels
create_projectCréer un nouveau projet avec nom, identifiant et configuration optionnelle
retrieve_projectRécupérer un projet par ID
update_projectMettre à jour un projet avec des données partielles
delete_projectSupprimer un projet par ID
get_project_worklog_summaryObtenir le résumé du journal de travail pour un projet
get_project_membersObtenir tous les membres d'un projet
update_project_featuresMettre à jour la configuration des fonctionnalités d'un projet

Éléments de travail

Nom de l'outilDescription
list_work_itemsLister tous les éléments de travail dans un projet avec filtrage et pagination optionnels
create_work_itemCréer un nouvel élément de travail avec nom, assignés, étiquettes et autres attributs
retrieve_work_itemRécupérer un élément de travail par ID avec expansion de champ optionnelle
retrieve_work_item_by_identifierRécupérer un élément de travail par identifiant de projet et numéro de séquence de ticket
update_work_itemMettre à jour un élément de travail avec des données partielles
delete_work_itemSupprimer un élément de travail par ID
search_work_itemsRechercher des éléments de travail dans un espace de travail avec une chaîne de requête

Cycles

Nom de l'outilDescription
list_cyclesLister les cycles dans un projet (mettre archived=true pour les archivés)
create_cycleCréer un nouveau cycle avec nom, dates et propriétaire
retrieve_cycleRécupérer un cycle par ID
update_cycleMettre à jour un cycle avec des données partielles
delete_cycleSupprimer un cycle par ID
manage_cycle_work_itemsAjouter et/ou supprimer des éléments de travail sur un cycle
list_cycle_work_itemsLister les éléments de travail dans un cycle
transfer_cycle_work_itemsTransférer des éléments de travail d'un cycle à un autre
manage_cycle_archiveArchiver ou désarchiver un cycle

Modules

Nom de l'outilDescription
list_modulesLister les modules dans un projet (mettre archived=true pour les archivés)
create_moduleCréer un nouveau module avec nom, dates, statut et membres
retrieve_moduleRécupérer un module par ID
update_moduleMettre à jour un module avec des données partielles
delete_moduleSupprimer un module par ID
manage_module_work_itemsAjouter et/ou supprimer des éléments de travail sur un module
list_module_work_itemsLister les éléments de travail dans un module
manage_module_archiveArchiver ou désarchiver un module

Initiatives

Nom de l'outilDescription
list_initiativesLister toutes les initiatives dans un espace de travail
create_initiativeCréer une nouvelle initiative avec nom, dates, état et responsable
retrieve_initiativeRécupérer une initiative par ID
update_initiativeMettre à jour une initiative avec des données partielles
delete_initiativeSupprimer une initiative par ID

Éléments de travail d'admission

Nom de l'outilDescription
list_intake_work_itemsLister tous les éléments de travail d'admission dans un projet avec pagination optionnelle
create_intake_work_itemCréer un nouvel élément de travail d'admission dans un projet
retrieve_intake_work_itemRécupérer un élément de travail d'admission par ID d'élément de travail avec expansion de champ optionnelle
update_intake_work_itemMettre à jour un élément de travail d'admission avec des données partielles
delete_intake_work_itemSupprimer un élément de travail d'admission par ID d'élément de travail

Propriétés des éléments de travail

Nom de l'outilDescription
list_work_item_propertiesLister les propriétés d'élément de travail pour un type d'élément de travail
create_work_item_propertyCréer une nouvelle propriété d'élément de travail avec type, paramètres et règles de validation
retrieve_work_item_propertyRécupérer une propriété d'élément de travail par ID
update_work_item_propertyMettre à jour une propriété d'élément de travail avec des données partielles
delete_work_item_propertySupprimer une propriété d'élément de travail par ID

Jalons

Nom de l'outilDescription
list_milestonesLister tous les jalons dans un projet
create_milestoneCréer un nouveau jalon
retrieve_milestoneRécupérer un jalon par ID
update_milestoneMettre à jour un jalon par ID
delete_milestoneSupprimer un jalon par ID
manage_milestone_work_itemsAjouter et/ou supprimer des éléments de travail sur un jalon
list_milestone_work_itemsLister les éléments de travail dans un jalon

Étiquettes

Nom de l'outilDescription
list_labelsLister toutes les étiquettes dans un projet
create_labelCréer une nouvelle étiquette
retrieve_labelRécupérer une étiquette par ID
update_labelMettre à jour une étiquette par ID
delete_labelSupprimer une étiquette par ID

États

Nom de l'outilDescription
list_statesLister tous les états dans un projet
create_stateCréer un nouvel état
retrieve_stateRécupérer un état par ID
update_stateMettre à jour un état par ID
delete_stateSupprimer un état par ID

Commentaires d'élément de travail

Nom de l'outilDescription
list_work_item_commentsLister les commentaires pour un élément de travail
retrieve_work_item_commentRécupérer un commentaire spécifique pour un élément de travail
create_work_item_commentCréer un commentaire pour un élément de travail
update_work_item_commentMettre à jour un commentaire pour un élément de travail
delete_work_item_commentSupprimer un commentaire pour un élément de travail

Liens d'élément de travail

Nom de l'outilDescription
list_work_item_linksLister les liens pour un élément de travail
retrieve_work_item_linkRécupérer un lien spécifique pour un élément de travail
create_work_item_linkCréer un lien pour un élément de travail
update_work_item_linkMettre à jour un lien pour un élément de travail
delete_work_item_linkSupprimer un lien pour un élément de travail

Types d'élément de travail

Nom de l'outilDescription
list_work_item_typesLister tous les types d'élément de travail dans un projet
create_work_item_typeCréer un nouveau type d'élément de travail
retrieve_work_item_typeRécupérer un type d'élément de travail par ID
update_work_item_typeMettre à jour un type d'élément de travail par ID
delete_work_item_typeSupprimer un type d'élément de travail par ID
import_work_item_types_to_projectLier en masse des types d'élément de travail au niveau de l'espace de travail à un projet
resolve_work_item_typeTrouver ou créer un type nommé pour un projet, en gérant automatiquement la portée espace de travail vs projet et l'importation

Relations d'élément de travail

Nom de l'outilDescription
list_work_item_relationsLister les relations pour un élément de travail
create_work_item_relationCréer des relations pour un élément de travail
remove_work_item_relationSupprimer une relation d'un élément de travail

Définitions de relation d'élément de travail

Nom de l'outilDescription
list_work_item_relation_definitionsLister les définitions de relation personnalisées de l'espace de travail
create_work_item_relation_definitionCréer une définition de relation d'espace de travail
update_work_item_relation_definitionMettre à jour une définition de relation
delete_work_item_relation_definitionSupprimer une définition de relation

Activités d'élément de travail

Nom de l'outilDescription
list_work_item_activitiesLister les activités pour un élément de travail
retrieve_work_item_activityRécupérer une activité spécifique pour un élément de travail

Journaux de travail

Nom de l'outilDescription
list_work_logsLister les journaux de travail pour un élément de travail
create_work_logCréer un journal de travail pour un élément de travail
update_work_logMettre à jour un journal de travail pour un élément de travail
delete_work_logSupprimer un journal de travail pour un élément de travail

Pages

Nom de l'outilDescription
list_pagesLister les pages (espace de travail, ou celles d'un projet si project_id fourni)
retrieve_pageRécupérer une page par ID (espace de travail, ou projet si project_id fourni)
create_pageCréer une page d'espace de travail ou de projet

Espaces de travail

Nom de l'outilDescription
get_workspace_membersObtenir tous les membres de l'espace de travail actuel
get_featuresObtenir les indicateurs de fonctionnalité (espace de travail, ou ceux d'un projet si project_id fourni)
update_workspace_featuresMettre à jour les fonctionnalités de l'espace de travail actuel

Utilisateurs

Nom de l'outilDescription
get_meObtenir les informations de l'utilisateur authentifié actuel

Total des outils : Plus de 100 outils répartis dans 20 catégories

Développement

Exécution des tests

pytest

Formatage du code

black plane_mcp/
ruff check plane_mcp/

Licence

Licence MIT - voir le fichier LICENSE pour plus de détails.

Contribution

Les contributions sont les bienvenues ! N'hésitez pas à soumettre une Pull Request.

Avis de dépréciation

⚠️ La version Node.js de plane-mcp-server est dépréciée et n'est plus maintenue.

Ce dépôt représente la nouvelle implémentation Python+FastMCP du serveur Plane MCP. Si vous utilisiez l'ancienne version Node.js, veuillez migrer vers cette version basée sur Python pour continuer à bénéficier du support et des mises à jour.

La nouvelle implémentation offre :

  • Une meilleure sécurité de typage grâce aux modèles Pydantic
  • Des performances améliorées avec FastMCP
  • Une couverture d'outils étendue
  • Une maintenance et un développement actifs

Pour une aide à la migration, veuillez consulter les exemples de configuration dans ce README ou ouvrir une issue pour obtenir du support.

Ancienne configuration Node.js (dépréciée) :

Si vous utilisiez l'ancienne version Node.js de @makeplane/plane-mcp-server, votre configuration ressemblait à ceci :

{
  "mcpServers": {
    "plane": {
      "command": "npx",
      "args": [
        "-y",
        "@makeplane/plane-mcp-server"
      ],
      "env": {
        "PLANE_API_KEY": "<YOUR_API_KEY>",
        "PLANE_API_HOST_URL": "<HOST_URL_FOR_SELF_HOSTED>",
        "PLANE_WORKSPACE_SLUG": "<YOUR_WORKSPACE_SLUG>"
      }
    }
  }
}

Veuillez migrer vers la nouvelle configuration basée sur Python présentée dans la section Utilisation ci-dessus.