Productive.io

Interactúa con la API de Productive.io para la gestión de proyectos y tareas de productividad.

Documentación

Servidor MCP de Productive.io

npm version

Un servidor MCP (Model Context Protocol) que permite a Claude Desktop, Claude Code y otros clientes compatibles con MCP interactuar con la API de Productive.io.

Características

  • Resumen de tareas: get_task_overview devuelve todo sobre una tarea en una sola llamada, de modo que leer un issue no cuesta una docena de idas y vueltas
  • Empresas y proyectos: Lista empresas y proyectos con filtrado por estado
  • Carpetas: CRUD completo con archivar/restaurar para organizar el contenido del proyecto
  • Listas de tareas: Gestión completa del ciclo de vida — crear, actualizar, archivar/restaurar, copiar, mover, reposicionar
  • Gestión de tareas: Listar, crear, actualizar, eliminar tareas con varios filtros
  • Subtareas: Crear y listar subtareas bajo tareas padre
  • Operaciones de tareas: Comentarios, actualizaciones de estado, asignación a sprints, reposicionamiento
  • Comentarios: CRUD completo con fijar/desfijar y reacciones
  • Todos: Elementos de lista de verificación en tareas — crear, actualizar, cerrar/reabrir, eliminar
  • Páginas/Documentos: Gestión completa de documentos con jerarquías de páginas anidadas, mover y copiar
  • Gestión de personas: Lista personas en tu organización con opciones de filtrado
  • Gestión de flujos de trabajo: Lista y trabaja con estados de flujo de trabajo para actualizaciones correctas de estado de tareas
  • Seguimiento de tiempo: Lista y crea entradas de tiempo con integración de servicio/acuerdo
  • Contexto de usuario: Soporta referencias "me" cuando PRODUCTIVE_USER_ID está configurado
  • Seguimiento de actividad: Ve actividades y actualizaciones recientes en toda tu organización

Instalación

Vía npm (Recomendado)

Instalar globalmente:

npm install -g productive-mcp

O ejecutar directamente con npx (sin necesidad de instalación):

npx productive-mcp

Desde el código fuente

  1. Clona este repositorio
  2. Instala las dependencias:
    npm install
    
  3. Compila el proyecto:
    npm run build
    

Configuración

Obteniendo tus credenciales

Para obtener tus credenciales de Productive.io:

  1. Inicia sesión en Productive.io
  2. Ve a Configuración → Integraciones de API
  3. Genera un nuevo token (elige solo lectura por seguridad, o acceso completo para la creación de tareas)
  4. Copia el token y el ID de organización

Para encontrar tu ID de usuario:

  • Puedes usar la API para listar personas y encontrar tu ID
  • O revisa la URL al ver tu perfil en Productive.io

Variables de entorno

El servidor requiere las siguientes variables de entorno:

VariableRequeridaDescripción
PRODUCTIVE_API_TOKENTu token de API de Productive.io
PRODUCTIVE_ORG_IDTu ID de organización
PRODUCTIVE_USER_IDNoTu ID de usuario (requerido para la herramienta my_tasks)

Uso con Claude Desktop

Añade el servidor a tu archivo de configuración de Claude Desktop:

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

Usando npx (Recomendado)

{
  "mcpServers": {
    "productive": {
      "command": "npx",
      "args": ["-y", "productive-mcp"],
      "env": {
        "PRODUCTIVE_API_TOKEN": "your_api_token_here",
        "PRODUCTIVE_ORG_ID": "your_organization_id_here",
        "PRODUCTIVE_USER_ID": "your_user_id_here"
      }
    }
  }
}

Usando instalación global

{
  "mcpServers": {
    "productive": {
      "command": "productive-mcp",
      "env": {
        "PRODUCTIVE_API_TOKEN": "your_api_token_here",
        "PRODUCTIVE_ORG_ID": "your_organization_id_here",
        "PRODUCTIVE_USER_ID": "your_user_id_here"
      }
    }
  }
}

Usando compilación local

{
  "mcpServers": {
    "productive": {
      "command": "node",
      "args": ["/path/to/productive-mcp/build/index.js"],
      "env": {
        "PRODUCTIVE_API_TOKEN": "your_api_token_here",
        "PRODUCTIVE_ORG_ID": "your_organization_id_here",
        "PRODUCTIVE_USER_ID": "your_user_id_here"
      }
    }
  }
}

Nota: PRODUCTIVE_USER_ID es opcional pero requerido para que la herramienta my_tasks funcione.

Después de añadir la configuración, reinicia Claude Desktop.

Uso con Claude Code

Añade el servidor a tu configuración de Claude Code usando la CLI:

claude mcp add productive -- npx -y productive-mcp

Luego configura tus variables de entorno. Puedes hacerlo de dos maneras:

Opción 1: Añade a tu perfil de shell (~/.zshrc o ~/.bashrc):

export PRODUCTIVE_API_TOKEN="your_api_token_here"
export PRODUCTIVE_ORG_ID="your_organization_id_here"
export PRODUCTIVE_USER_ID="your_user_id_here"

Opción 2: Crea un script contenedor y añádelo como servidor MCP:

  1. Crea un archivo de script (por ejemplo, ~/scripts/productive-mcp.sh):

    #!/bin/bash
    export PRODUCTIVE_API_TOKEN="your_api_token_here"
    export PRODUCTIVE_ORG_ID="your_organization_id_here"
    export PRODUCTIVE_USER_ID="your_user_id_here"
    npx -y productive-mcp
    
  2. Hazlo ejecutable:

    chmod +x ~/scripts/productive-mcp.sh
    
  3. Añádelo a Claude Code:

    claude mcp add productive ~/scripts/productive-mcp.sh
    

Opción 3: Edita el archivo de configuración de Claude Code directamente en ~/.claude/settings.json:

{
  "mcpServers": {
    "productive": {
      "command": "npx",
      "args": ["-y", "productive-mcp"],
      "env": {
        "PRODUCTIVE_API_TOKEN": "your_api_token_here",
        "PRODUCTIVE_ORG_ID": "your_organization_id_here",
        "PRODUCTIVE_USER_ID": "your_user_id_here"
      }
    }
  }
}

Reinicia Claude Code después de la configuración.

Herramientas disponibles

Leer una tarea de la que te han dado el ID

Usa get_task_overview primero. Responde "de qué trata este issue" en una sola llamada:

get_task_overview(task_id: "19300600")

Devuelve metadatos (estado, asignado, proyecto, lista de tareas, fechas, estimación vs. tiempo trabajado), la descripción original completa y luego los 10 comentarios más recientes con sus cuerpos completos en orden cronológico. El HTML se convierte a texto plano y los blobs de @mention se colapsan a nombres, de modo que el hilo se lee como prosa.

Los adjuntos se muestran de dos maneras, porque la mayoría son capturas de pantalla que contienen el contexto que necesitas:

  • En línea, en el punto exacto del comentario donde se publicó la captura, como [attachment 9131629: Screenshot_2026-07-31_110620.png].
  • Indexados, en un bloque de ATTACHMENTS al final que lista cada adjunto de la tarea y de los comentarios mostrados, marcados con [IMAGE], con el comentario de origen y el autor.

Luego obtén solo los que importan con get_attachment(attachment_id: "9131629"), que devuelve imágenes en línea.

La ruta anterior (get_task, luego list_comments, y luego un get_comment por comentario truncado) sigue funcionando, pero cuesta una ida y vuelta por comentario y trunca los cuerpos a 200 caracteres.

Herramientas de usuario y contexto

HerramientaDescripción
whoamiObtiene el contexto del usuario actual y el ID de usuario configurado

Herramientas de empresas y proyectos

HerramientaDescripción
list_companiesLista empresas/clientes. Filtra por status (activo/archivado), limit
list_projectsLista proyectos. Filtra por status, company_id, limit

Herramientas de carpetas

HerramientaDescripción
list_foldersLista carpetas en un proyecto. Filtra por project_id, status (1=activo, 2=archivado), limit
get_folderObtiene detalles de una carpeta por folder_id
create_folderCrea una carpeta. Requiere project_id, name
update_folderRenombra una carpeta. Requiere folder_id, opcional name
archive_folderArchiva una carpeta por folder_id
restore_folderRestaura una carpeta archivada por folder_id

Herramientas de tableros y listas de tareas

HerramientaDescripción
list_boardsLista tableros. Filtra por project_id, limit
create_boardCrea un tablero. Requiere project_id, name
list_task_listsLista listas de tareas. Filtra por board_id, limit
create_task_listCrea una lista de tareas. Requiere board_id, project_id, name
get_task_listObtiene detalles de una lista de tareas por task_list_id
update_task_listRenombra una lista de tareas. Requiere task_list_id, opcional name
archive_task_listArchiva una lista de tareas por task_list_id
restore_task_listRestaura una lista de tareas archivada por task_list_id
copy_task_listCopia una lista de tareas. Requiere name, template_id, project_id, board_id. Opcional copy_open_tasks, copy_assignees
move_task_listMueve una lista de tareas a otro tablero. Requiere task_list_id, board_id
reposition_task_listReordena una lista de tareas. Requiere task_list_id, move_before_id

Herramientas de gestión de tareas

HerramientaDescripción
get_task_overviewEmpieza aquí para cualquier ID de tarea. Una sola llamada devuelve metadatos, la descripción completa, los comentarios más recientes completos (10 por defecto, comment_limit hasta 50) del más antiguo al más reciente, y un índice de cada adjunto de la tarea y de esos comentarios. Requiere task_id
list_tasksLista tareas. Filtra por project_id, assignee_id, status (abierta/cerrada), limit
get_project_tasksObtiene todas las tareas de un proyecto. Requiere project_id, opcional status
get_taskObtiene detalles de una tarea por task_id. Solo metadatos, sin comentarios. Prefiere get_task_overview
create_taskCrea una tarea. Requiere title. Opcional project_id, board_id, task_list_id, assignee_id (se admite "me"), due_date, status
update_task_assignmentAsigna/desasigna una tarea. Requiere task_id, assignee_id (se admite "me" o "null")
update_task_detailsActualiza título/descripción. Requiere task_id, opcional title, description, description_html
update_task_statusEstablece el estado del flujo de trabajo por nombre o ID. Requiere task_id y ya sea status_name (por ejemplo, "En progreso", "En espera") o workflow_status_id. Resuelve automáticamente el flujo de trabajo del proyecto de la tarea, soporta estados personalizados
delete_taskElimina una tarea por task_id
my_tasksObtiene las tareas asignadas a ti. Opcional status, limit
reposition_taskReordena una tarea dentro de una lista
update_task_sprintMueve una tarea a un sprint/lista de tareas
move_task_to_listMueve una tarea a una lista de tareas diferente
add_to_backlogMueve una tarea al backlog

Herramientas de dependencias de tareas

HerramientaDescripción
list_task_dependenciesLista dependencias de una tarea. Filtra por task_id (lo que bloquea) o dependent_task_id (lo que la bloquea)
get_task_dependencyObtiene detalles de una dependencia por dependency_id
create_task_dependencyCrea una dependencia. Requiere task_id (bloqueador), dependent_task_id (bloqueado). Opcional type_id: 1 = bloquea (por defecto), 2 = está bloqueada por, 3 = relacionada con
delete_task_dependencyElimina una dependencia por dependency_id

Herramientas de subtareas

HerramientaDescripción
list_subtasksLista subtareas de una tarea padre. Requiere parent_task_id, opcional limit
create_subtaskCrea una subtarea. Requiere parent_task_id, title. Opcional project_id, task_list_id, assignee_id, due_date, description

Herramientas de comentarios

HerramientaDescripción
add_task_commentAñade un comentario a una tarea. Requiere task_id, comment (soporta HTML y @menciones). Opcional hidden (booleano) publica un comentario interno no visible para los clientes en el portal de clientes
list_commentsLista comentarios. Filtra por task_id, project_id, limit. Los cuerpos se truncan a 200 caracteres; para leer el hilo de una tarea usa get_task_overview en su lugar
get_commentObtiene detalles completos de un comentario por comment_id
update_commentEdita un comentario. Requiere comment_id, body
delete_commentElimina un comentario por comment_id
pin_commentFija un comentario por comment_id
unpin_commentDesfija un comentario por comment_id
add_comment_reactionAñade una reacción. Requiere comment_id, reaction (por ejemplo, "like")

Herramientas de todos

HerramientaDescripción
list_todosLista todos en una tarea. Filtra por task_id, status (abierto/cerrado), limit
get_todoObtiene detalles de un todo por todo_id
create_todoCrea un todo. Requiere description. Opcional task_id, deal_id, assignee_id, due_date
update_todoActualiza un todo. Requiere todo_id. Opcional description, closed (booleano), due_date
delete_todoElimina un todo por todo_id

Herramientas de páginas/documentos

HerramientaDescripción
list_pagesLista páginas. Filtra por project_id, sort (title/created_at/edited_at/updated_at), limit
get_pageObtiene el contenido completo de una página por page_id
create_pageCrea una página. Requiere project_id, title. Opcional body (HTML), parent_page_id, root_page_id
update_pageActualiza una página. Requiere page_id. Opcional title, body
delete_pageElimina una página por page_id
move_pageMueve una página bajo otra. Requiere page_id, target_doc_id
copy_pageCopia una página. Requiere template_id. Opcional project_id

Herramientas de flujo de trabajo

HerramientaDescripción
list_workflow_statusesListar estados de flujo de trabajo. Filtrar por workflow_id, category_id (1=No iniciado, 2=Iniciado, 3=Cerrado), limit

Herramientas de Seguimiento de Tiempo

HerramientaDescripción
list_time_entriesListar entradas de tiempo. Filtrar por date, after, before, person_id, project_id, task_id, service_id
create_time_entryCrear una entrada de tiempo. Requiere date, time (minutos), person_id, service_id. Opcional task_id, note
list_servicesListar servicios. Filtrar por company_id, limit
get_project_servicesObtener servicios para un proyecto
list_project_dealsListar acuerdos/presupuestos para un proyecto
list_deal_servicesListar servicios para un acuerdo/presupuesto

Herramientas de Actividad y Actualizaciones

HerramientaDescripción
list_activitiesListar actividades. Filtrar por task_id, project_id, person_id, item_type, event, after, before
get_recent_updatesObtener actualizaciones recientes. Opcional limit, hours

Flujos de Trabajo Comunes

Actualizar el Estado de una Tarea

Puedes actualizar el estado de una tarea por nombre — no necesitas buscar IDs:

update_task_status {
  "task_id": "12399194",
  "status_name": "On Hold"
}

La herramienta resuelve automáticamente el flujo de trabajo del proyecto de la tarea y coincide con el nombre del estado (sin distinguir mayúsculas/minúsculas, admite coincidencia parcial). Esto también funciona con estados de flujo de trabajo personalizados.

Si el nombre no coincide o es ambiguo, devuelve los estados disponibles para ese proyecto:

No workflow status matching "banana" found.

Available statuses:
  • "Pending" (ID: 102305) — Not Started
  • "Open" (ID: 102291) — Started
  • "On Hold" (ID: 102306) — Started
  • "Waiting" (ID: 102307) — Started
  • "Closed" (ID: 102292) — Closed

También puedes pasar workflow_status_id directamente si ya conoces el ID.

Trabajar con el Contexto "me"

Cuando PRODUCTIVE_USER_ID está configurado, puedes usar "me" en varias herramientas:

  • create_task con "assignee_id": "me"
  • update_task_assignment con "assignee_id": "me"
  • my_tasks para obtener tus tareas asignadas
  • whoami para verificar tu contexto de usuario configurado

Crear Flujos de Trabajo de Tareas Completos

  1. Crear una carpeta: create_folder
  2. Crear listas de tareas: create_task_list
  3. Crear tareas: create_task
  4. Desglosar el trabajo: create_subtask para subelementos, create_todo para listas de verificación
  5. Agregar comentarios: add_task_comment
  6. Actualizar estado: update_task_status con status_name (por ejemplo, "Abierto", "En espera", "Cerrado")
  7. Seguimiento del progreso: Usa list_activities o get_recent_updates

Construir Documentación

  1. Crear una página raíz: create_page con project_id y title
  2. Agregar páginas hijas: create_page con parent_page_id y root_page_id establecido en la raíz
  3. Anidar más profundo: Establece parent_page_id al padre y root_page_id a la página raíz
  4. Reorganizar: Usa move_page para cambiar el padre de las páginas, copy_page para duplicar

Desarrollo

  • Ejecutar en modo de desarrollo: npm run dev
  • Compilar: npm run build
  • Iniciar el servidor compilado: npm start

Licencia

ISC