Plane MCP Server
oficialEl servidor oficial MCP de Plane proporciona integración con las APIs de Plane, permitiendo la automatización completa con IA de proyectos, elementos de trabajo, ciclos y más en Plane.
Documentación
Servidor MCP de Plane
Un servidor del Protocolo de Contexto de Modelo (MCP) para la integración con Plane. Este servidor proporciona herramientas y recursos para interactuar con Plane a través de agentes de IA.
Características
- 🔧 Integración con Plane: Interactúa con las APIs y servicios de Plane
- 🔌 Múltiples Transportes: Soporta transportes stdio, SSE y HTTP transmitible
- 🌐 Remoto y Local: Funciona tanto localmente como servicio remoto
- 🛠️ Extensible: Fácil de añadir nuevas herramientas y recursos
Uso
El servidor soporta tres métodos de transporte. Recomendamos usar uvx ya que no requiere instalación.
Requisitos:
- Python 3.10+ (para transporte stdio, vía
uvx) - Node.js 22+ (para transportes remotos, vía
npx)
1. Transporte Stdio (para uso local)
Configuración del Cliente MCP (usando uvx - recomendado):
{
"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. Transporte HTTP Remoto con OAuth
Conéctate al servidor MCP de Plane alojado usando autenticación OAuth.
URL: https://mcp.plane.so/http/mcp
Configuración del Cliente MCP (para herramientas como Claude Desktop sin soporte nativo MCP remoto):
{
"mcpServers": {
"plane": {
"command": "npx",
"args": ["mcp-remote@latest", "https://mcp.plane.so/http/mcp"]
}
}
}
Nota: La autenticación OAuth se manejará automáticamente al conectar con el servidor remoto.
3. Transporte HTTP Remoto usando Token PAT
Conéctate al servidor MCP de Plane alojado usando un Token de Acceso Personal (PAT).
URL: https://mcp.plane.so/http/api-key/mcp
Cabeceras:
Authorization: Bearer <PAT_TOKEN>X-Workspace-slug: <SLUG>
Configuración del Cliente MCP (para herramientas como Claude Desktop sin soporte nativo MCP remoto):
{
"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. Transporte SSE (Legado)
⚠️ Transporte Legado: El transporte SSE (Server-Sent Events) se mantiene por compatibilidad con versiones anteriores. Las nuevas implementaciones deben usar el transporte HTTP (secciones 2 o 3) en su lugar.
Conéctate al servidor MCP de Plane alojado usando autenticación OAuth mediante Server-Sent Events.
URL: https://mcp.plane.so/sse
Configuración del Cliente MCP (para herramientas que soporten transporte SSE):
{
"mcpServers": {
"plane": {
"command": "npx",
"args": ["mcp-remote@latest", "https://mcp.plane.so/sse"]
}
}
}
Nota: La autenticación OAuth se manejará automáticamente al conectar con el servidor remoto. Este transporte está obsoleto en favor del transporte HTTP.
Configuración
Autenticación
El servidor requiere autenticación mediante variables de entorno:
PLANE_BASE_URL: URL base para la API de Plane (por defecto:https://api.plane.so) - OpcionalPLANE_API_KEY: Clave API para autenticación (requerida para transporte stdio)PLANE_WORKSPACE_SLUG: Identificador de slug del espacio de trabajo (requerido para transporte stdio)PLANE_ACCESS_TOKEN: Token de acceso para autenticación (alternativa a la clave API)
Ejemplo (para transporte stdio):
export PLANE_BASE_URL="https://api.plane.so"
export PLANE_API_KEY="your-api-key"
export PLANE_WORKSPACE_SLUG="your-workspace-slug"
Nota: Para transportes HTTP remotos (OAuth o PAT), la autenticación se maneja mediante el método de conexión (flujo OAuth o cabeceras PAT) y no requiere estas variables de entorno.
URIs de redirección OAuth
Para los transportes OAuth HTTP/SSE, el servidor valida la URI de redirección de cada cliente contra una lista permitida. Los clientes MCP comunes (Cursor, VS Code, Claude.ai, conectores ChatGPT, localhost) están permitidos por defecto.
Para incorporar un nuevo cliente sin un cambio de código o lanzamiento, añade patrones adicionales mediante una variable de entorno:
PLANE_OAUTH_ALLOWED_REDIRECT_URIS: Patrones de URI de redirección separados por comas que se añaden a la lista permitida integrada.
export PLANE_OAUTH_ALLOWED_REDIRECT_URIS="https://newclient.com/cb,https://other.app/oauth/*"
Los patrones soportan coincidencia glob (* coincide con cualquier puerto, segmento de ruta o subdominio). Por seguridad, mantén el host fijo y usa comodín solo para el puerto/ruta.
Registro
El servidor emite registros JSON estructurados. Cada llamada a herramienta se registra con su nombre de herramienta, duración, estado y (cuando está disponible) el id de usuario opaco y el slug del espacio de trabajo.
LOG_USER_INFO: Cuando estrue, incluye información del usuario (PII como el nombre para mostrar) en los registros junto al id de usuario opaco. Por defecto esfalsepara que la PII nunca se registre a menos que se opte explícitamente. Solo los transportes HTTP OAuth y PAT (cabecera) llevan un nombre para mostrar; stdio no se ve afectado.
export LOG_USER_INFO="true"
Herramientas Disponibles
El servidor proporciona herramientas completas para interactuar con Plane. Todas las herramientas usan modelos Pydantic del SDK de Plane para seguridad de tipos y validación.
Proyectos
| Nombre de Herramienta | Descripción |
|---|---|
list_projects | Listar todos los proyectos en un espacio de trabajo con paginación y filtrado opcionales |
create_project | Crear un nuevo proyecto con nombre, identificador y configuración opcional |
retrieve_project | Recuperar un proyecto por ID |
update_project | Actualizar un proyecto con datos parciales |
delete_project | Eliminar un proyecto por ID |
get_project_worklog_summary | Obtener resumen de registro de trabajo para un proyecto |
get_project_members | Obtener todos los miembros de un proyecto |
update_project_features | Actualizar configuración de características de un proyecto |
Elementos de Trabajo
| Nombre de Herramienta | Descripción |
|---|---|
list_work_items | Listar todos los elementos de trabajo en un proyecto con filtrado y paginación opcionales |
create_work_item | Crear un nuevo elemento de trabajo con nombre, asignados, etiquetas y otros atributos |
retrieve_work_item | Recuperar un elemento de trabajo por ID con expansión de campos opcional |
retrieve_work_item_by_identifier | Recuperar un elemento de trabajo por identificador de proyecto y número de secuencia de incidencia |
update_work_item | Actualizar un elemento de trabajo con datos parciales |
delete_work_item | Eliminar un elemento de trabajo por ID |
search_work_items | Buscar elementos de trabajo en un espacio de trabajo con cadena de consulta |
Ciclos
| Nombre de Herramienta | Descripción |
|---|---|
list_cycles | Listar ciclos en un proyecto (establecer archived=true para archivados) |
create_cycle | Crear un nuevo ciclo con nombre, fechas y propietario |
retrieve_cycle | Recuperar un ciclo por ID |
update_cycle | Actualizar un ciclo con datos parciales |
delete_cycle | Eliminar un ciclo por ID |
manage_cycle_work_items | Añadir y/o eliminar elementos de trabajo en un ciclo |
list_cycle_work_items | Listar elementos de trabajo en un ciclo |
transfer_cycle_work_items | Transferir elementos de trabajo de un ciclo a otro |
manage_cycle_archive | Archivar o desarchivar un ciclo |
Módulos
| Nombre de Herramienta | Descripción |
|---|---|
list_modules | Listar módulos en un proyecto (establecer archived=true para archivados) |
create_module | Crear un nuevo módulo con nombre, fechas, estado y miembros |
retrieve_module | Recuperar un módulo por ID |
update_module | Actualizar un módulo con datos parciales |
delete_module | Eliminar un módulo por ID |
manage_module_work_items | Añadir y/o eliminar elementos de trabajo en un módulo |
list_module_work_items | Listar elementos de trabajo en un módulo |
manage_module_archive | Archivar o desarchivar un módulo |
Iniciativas
| Nombre de Herramienta | Descripción |
|---|---|
list_initiatives | Listar todas las iniciativas en un espacio de trabajo |
create_initiative | Crear una nueva iniciativa con nombre, fechas, estado y líder |
retrieve_initiative | Recuperar una iniciativa por ID |
update_initiative | Actualizar una iniciativa con datos parciales |
delete_initiative | Eliminar una iniciativa por ID |
Elementos de Trabajo de Admisión
| Nombre de Herramienta | Descripción |
|---|---|
list_intake_work_items | Listar todos los elementos de trabajo de admisión en un proyecto con paginación opcional |
create_intake_work_item | Crear un nuevo elemento de trabajo de admisión en un proyecto |
retrieve_intake_work_item | Recuperar un elemento de trabajo de admisión por ID de elemento de trabajo con expansión de campos opcional |
update_intake_work_item | Actualizar un elemento de trabajo de admisión con datos parciales |
delete_intake_work_item | Eliminar un elemento de trabajo de admisión por ID de elemento de trabajo |
Propiedades de Elementos de Trabajo
| Nombre de Herramienta | Descripción |
|---|---|
list_work_item_properties | Listar propiedades de elementos de trabajo para un tipo de elemento de trabajo |
create_work_item_property | Crear una nueva propiedad de elemento de trabajo con tipo, configuraciones y reglas de validación |
retrieve_work_item_property | Recuperar una propiedad de elemento de trabajo por ID |
update_work_item_property | Actualizar una propiedad de elemento de trabajo con datos parciales |
delete_work_item_property | Eliminar una propiedad de elemento de trabajo por ID |
Hitos
| Nombre de Herramienta | Descripción |
|---|---|
list_milestones | Listar todos los hitos en un proyecto |
create_milestone | Crear un nuevo hito |
retrieve_milestone | Recuperar un hito por ID |
update_milestone | Actualizar un hito por ID |
delete_milestone | Eliminar un hito por ID |
manage_milestone_work_items | Añadir y/o eliminar elementos de trabajo en un hito |
list_milestone_work_items | Listar elementos de trabajo en un hito |
Etiquetas
| Nombre de Herramienta | Descripción |
|---|---|
list_labels | Listar todas las etiquetas en un proyecto |
create_label | Crear una nueva etiqueta |
retrieve_label | Recuperar una etiqueta por ID |
update_label | Actualizar una etiqueta por ID |
delete_label | Eliminar una etiqueta por ID |
Estados
| Nombre de Herramienta | Descripción |
|---|---|
list_states | Listar todos los estados en un proyecto |
create_state | Crear un nuevo estado |
retrieve_state | Recuperar un estado por ID |
update_state | Actualizar un estado por ID |
delete_state | Eliminar un estado por ID |
Comentarios de Elementos de Trabajo
| Nombre de Herramienta | Descripción |
|---|---|
list_work_item_comments | Listar comentarios para un elemento de trabajo |
retrieve_work_item_comment | Recuperar un comentario específico para un elemento de trabajo |
create_work_item_comment | Crear un comentario para un elemento de trabajo |
update_work_item_comment | Actualizar un comentario para un elemento de trabajo |
delete_work_item_comment | Eliminar un comentario para un elemento de trabajo |
Enlaces de Elementos de Trabajo
| Nombre de Herramienta | Descripción |
|---|---|
list_work_item_links | Listar enlaces para un elemento de trabajo |
retrieve_work_item_link | Recuperar un enlace específico para un elemento de trabajo |
create_work_item_link | Crear un enlace para un elemento de trabajo |
update_work_item_link | Actualizar un enlace para un elemento de trabajo |
delete_work_item_link | Eliminar un enlace para un elemento de trabajo |
Tipos de Elementos de Trabajo
| Nombre de Herramienta | Descripción |
|---|---|
list_work_item_types | Listar todos los tipos de elementos de trabajo en un proyecto |
create_work_item_type | Crear un nuevo tipo de elemento de trabajo |
retrieve_work_item_type | Recuperar un tipo de elemento de trabajo por ID |
update_work_item_type | Actualizar un tipo de elemento de trabajo por ID |
delete_work_item_type | Eliminar un tipo de elemento de trabajo por ID |
import_work_item_types_to_project | Vincular en lote tipos de elementos de trabajo a nivel de espacio de trabajo a un proyecto |
resolve_work_item_type | Encontrar o crear un tipo nombrado para un proyecto, manejando automáticamente el ámbito de espacio de trabajo vs proyecto e importación |
Relaciones de Elementos de Trabajo
| Nombre de Herramienta | Descripción |
|---|---|
list_work_item_relations | Listar relaciones para un elemento de trabajo |
create_work_item_relation | Crear relaciones para un elemento de trabajo |
remove_work_item_relation | Eliminar una relación de un elemento de trabajo |
Definiciones de Relaciones de Elementos de Trabajo
| Nombre de Herramienta | Descripción |
|---|---|
list_work_item_relation_definitions | Listar definiciones de relaciones personalizadas del espacio de trabajo |
create_work_item_relation_definition | Crear una definición de relación del espacio de trabajo |
update_work_item_relation_definition | Actualizar una definición de relación |
delete_work_item_relation_definition | Eliminar una definición de relación |
Actividades de Elementos de Trabajo
| Nombre de Herramienta | Descripción |
|---|---|
list_work_item_activities | Listar actividades para un elemento de trabajo |
retrieve_work_item_activity | Recuperar una actividad específica para un elemento de trabajo |
Registros de Trabajo
| Nombre de Herramienta | Descripción |
|---|---|
list_work_logs | Listar registros de trabajo para un elemento de trabajo |
create_work_log | Crear un registro de trabajo para un elemento de trabajo |
update_work_log | Actualizar un registro de trabajo para un elemento de trabajo |
delete_work_log | Eliminar un registro de trabajo para un elemento de trabajo |
Páginas
| Nombre de Herramienta | Descripción |
|---|---|
list_pages | Listar páginas (del espacio de trabajo, o de un proyecto si se proporciona project_id) |
retrieve_page | Recuperar una página por ID (del espacio de trabajo, o de un proyecto si se proporciona project_id) |
create_page | Crear una página de espacio de trabajo o proyecto |
Espacios de Trabajo
| Nombre de Herramienta | Descripción |
|---|---|
get_workspace_members | Obtener todos los miembros del espacio de trabajo actual |
get_features | Obtener indicadores de características (del espacio de trabajo, o de un proyecto si se proporciona project_id) |
update_workspace_features | Actualizar características del espacio de trabajo actual |
Usuarios
| Nombre de Herramienta | Descripción |
|---|---|
get_me | Obtener información del usuario autenticado actual |
Total de Herramientas: Más de 100 herramientas en 20 categorías
Desarrollo
Ejecutar Pruebas
pytest
Formateo de Código
black plane_mcp/
ruff check plane_mcp/
Licencia
Licencia MIT - consulta el archivo LICENSE para más detalles.
Contribuciones
¡Las contribuciones son bienvenidas! No dudes en enviar un Pull Request.
Aviso de descontinuación
⚠️ El plane-mcp-server basado en Node.js está descontinuado y ya no recibe mantenimiento.
Este repositorio representa la nueva implementación basada en Python+FastMCP del servidor Plane MCP. Si estabas usando la versión anterior de Node.js, migra a esta versión basada en Python para obtener soporte y actualizaciones continuas.
La nueva implementación ofrece:
- Mejor seguridad de tipos con modelos Pydantic
- Rendimiento mejorado con FastMCP
- Cobertura de herramientas ampliada
- Mantenimiento y desarrollo activos
Para obtener ayuda con la migración, consulta los ejemplos de configuración en este README o abre un issue para recibir soporte.
Configuración antigua de Node.js (Descontinuada):
Si estabas usando el anterior @makeplane/plane-mcp-server basado en Node.js, tu configuración se veía así:
{
"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>"
}
}
}
}
Migra a la nueva configuración basada en Python que se muestra en la sección Uso más arriba.