Productive.io

Interaja com a API do Productive.io para gerenciamento de projetos e tarefas de produtividade.

Documentação

Servidor MCP Productive.io

npm version

Um servidor MCP (Model Context Protocol) que permite que o Claude Desktop, o Claude Code e outros clientes compatíveis com MCP interajam com a API do Productive.io.

Recursos

  • Briefing de Tarefas: get_task_overview retorna tudo sobre uma tarefa em uma única chamada, para que a leitura de um problema não custe uma dúzia de idas e voltas
  • Empresas e Projetos: Liste empresas e projetos com filtro de status
  • Pastas: CRUD completo com arquivamento/restauração para organizar o conteúdo do projeto
  • Listas de Tarefas: Gerenciamento completo do ciclo de vida — criar, atualizar, arquivar/restaurar, copiar, mover, reposicionar
  • Gerenciamento de Tarefas: Listar, criar, atualizar, excluir tarefas com vários filtros
  • Subtarefas: Criar e listar subtarefas sob tarefas pai
  • Operações de Tarefas: Comentários, atualizações de status, atribuição de sprint, reposicionamento
  • Comentários: CRUD completo com fixar/desafixar e reações
  • Todos: Itens de checklist em tarefas — criar, atualizar, fechar/reabrir, excluir
  • Páginas/Docs: Gerenciamento completo de documentos com hierarquias de páginas aninhadas, mover e copiar
  • Gerenciamento de Pessoas: Liste pessoas na sua organização com opções de filtro
  • Gerenciamento de Fluxo de Trabalho: Liste e trabalhe com status de fluxo de trabalho para atualizações adequadas de status de tarefas
  • Controle de Tempo: Liste e crie registros de tempo com integração de serviço/negócio
  • Contexto do Usuário: Suporta referências "me" quando PRODUCTIVE_USER_ID está configurado
  • Rastreamento de Atividades: Veja atividades e atualizações recentes em toda a sua organização

Instalação

Via npm (Recomendado)

Instale globalmente:

npm install -g productive-mcp

Ou execute diretamente com npx (sem necessidade de instalação):

npx productive-mcp

A partir do código-fonte

  1. Clone este repositório
  2. Instale as dependências:
    npm install
    
  3. Compile o projeto:
    npm run build
    

Configuração

Obtendo Suas Credenciais

Para obter suas credenciais do Productive.io:

  1. Faça login no Productive.io
  2. Vá em Configurações → Integrações de API
  3. Gere um novo token (escolha somente leitura por segurança, ou acesso total para criação de tarefas)
  4. Copie o token e o ID da organização

Para encontrar seu ID de usuário:

  • Você pode usar a API para listar pessoas e encontrar seu ID
  • Ou verifique a URL ao visualizar seu perfil no Productive.io

Variáveis de Ambiente

O servidor requer as seguintes variáveis de ambiente:

VariávelObrigatóriaDescrição
PRODUCTIVE_API_TOKENSimSeu token da API do Productive.io
PRODUCTIVE_ORG_IDSimSeu ID de organização
PRODUCTIVE_USER_IDNãoSeu ID de usuário (obrigatório para a ferramenta my_tasks)

Uso com o Claude Desktop

Adicione o servidor ao seu arquivo de configuração do 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 Instalação 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 Build 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"
      }
    }
  }
}

Observação: PRODUCTIVE_USER_ID é opcional, mas obrigatório para que a ferramenta my_tasks funcione.

Após adicionar a configuração, reinicie o Claude Desktop.

Uso com o Claude Code

Adicione o servidor à sua configuração do Claude Code usando a CLI:

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

Em seguida, defina suas variáveis de ambiente. Você pode:

Opção 1: Adicionar ao seu perfil de shell (~/.zshrc ou ~/.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"

Opção 2: Criar um script wrapper e adicioná-lo como servidor MCP:

  1. Crie um arquivo de script (ex.: ~/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. Torne-o executável:

    chmod +x ~/scripts/productive-mcp.sh
    
  3. Adicione ao Claude Code:

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

Opção 3: Edite o arquivo de configurações do Claude Code diretamente em ~/.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"
      }
    }
  }
}

Reinicie o Claude Code após a configuração.

Ferramentas Disponíveis

Lendo uma tarefa para a qual você recebeu o ID

Use get_task_overview primeiro. Ela responde "sobre o que é este problema" em uma única chamada:

get_task_overview(task_id: "19300600")

Ela retorna metadados (status, responsável, projeto, lista de tarefas, datas, estimativa vs. tempo trabalhado), a descrição original completa e, em seguida, os 10 comentários mais recentes com seus corpos completos em ordem cronológica. O HTML é convertido em texto simples e os blobs @mention são recolhidos em nomes, para que o tópico seja lido como prosa.

Os anexos são exibidos de duas maneiras, porque a maioria deles são capturas de tela que carregam o contexto que você precisa:

  • Em linha, no ponto exato do comentário em que a captura de tela foi postada, como [attachment 9131629: Screenshot_2026-07-31_110620.png].
  • Indexados, em um bloco ATTACHMENTS no final listando todos os anexos da tarefa e dos comentários exibidos, sinalizados como [IMAGE], com o comentário de origem e o autor.

Em seguida, busque apenas os que importam com get_attachment(attachment_id: "9131629"), que retorna imagens em linha.

O caminho mais antigo (get_task, depois list_comments, e então um get_comment por comentário truncado) ainda funciona, mas custa uma ida e volta por comentário e trunca os corpos em 200 caracteres.

Ferramentas de Usuário e Contexto

FerramentaDescrição
whoamiObter contexto do usuário atual e ID de usuário configurado

Ferramentas de Empresa e Projeto

FerramentaDescrição
list_companiesListar empresas/clientes. Filtrar por status (ativo/arquivado), limit
list_projectsListar projetos. Filtrar por status, company_id, limit

Ferramentas de Pasta

FerramentaDescrição
list_foldersListar pastas em um projeto. Filtrar por project_id, status (1=ativo, 2=arquivado), limit
get_folderObter detalhes da pasta por folder_id
create_folderCriar uma pasta. Requer project_id, name
update_folderRenomear uma pasta. Requer folder_id, opcional name
archive_folderArquivar uma pasta por folder_id
restore_folderRestaurar uma pasta arquivada por folder_id

Ferramentas de Quadro e Lista de Tarefas

FerramentaDescrição
list_boardsListar quadros. Filtrar por project_id, limit
create_boardCriar um quadro. Requer project_id, name
list_task_listsListar listas de tarefas. Filtrar por board_id, limit
create_task_listCriar uma lista de tarefas. Requer board_id, project_id, name
get_task_listObter detalhes da lista de tarefas por task_list_id
update_task_listRenomear uma lista de tarefas. Requer task_list_id, opcional name
archive_task_listArquivar uma lista de tarefas por task_list_id
restore_task_listRestaurar uma lista de tarefas arquivada por task_list_id
copy_task_listCopiar uma lista de tarefas. Requer name, template_id, project_id, board_id. Opcional copy_open_tasks, copy_assignees
move_task_listMover uma lista de tarefas para outro quadro. Requer task_list_id, board_id
reposition_task_listReordenar uma lista de tarefas. Requer task_list_id, move_before_id

Ferramentas de Gerenciamento de Tarefas

FerramentaDescrição
get_task_overviewComece aqui para qualquer ID de tarefa. Uma chamada retorna metadados, a descrição completa, os comentários mais recentes na íntegra (padrão 10, comment_limit até 50) do mais antigo para o mais novo, e um índice de todos os anexos da tarefa e desses comentários. Requer task_id
list_tasksListar tarefas. Filtrar por project_id, assignee_id, status (aberta/fechada), limit
get_project_tasksObter todas as tarefas de um projeto. Requer project_id, opcional status
get_taskObter detalhes da tarefa por task_id. Apenas metadados, sem comentários. Prefira get_task_overview
create_taskCriar uma tarefa. Requer title. Opcional project_id, board_id, task_list_id, assignee_id ("me" suportado), due_date, status
update_task_assignmentAtribuir/desatribuir uma tarefa. Requer task_id, assignee_id ("me" ou "null" suportados)
update_task_detailsAtualizar título/descrição. Requer task_id, opcional title, description, description_html
update_task_statusDefinir status do fluxo de trabalho por nome ou ID. Requer task_id e status_name (ex.: "Em Andamento", "Em Espera") ou workflow_status_id. Resolve automaticamente o fluxo de trabalho do projeto da tarefa, suporta status personalizados
delete_taskExcluir uma tarefa por task_id
my_tasksObter tarefas atribuídas a você. Opcional status, limit
reposition_taskReordenar uma tarefa dentro de uma lista
update_task_sprintMover tarefa para um sprint/lista de tarefas
move_task_to_listMover uma tarefa para uma lista de tarefas diferente
add_to_backlogMover uma tarefa para o backlog

Ferramentas de Dependência de Tarefas

FerramentaDescrição
list_task_dependenciesListar dependências de uma tarefa. Filtrar por task_id (o que ela bloqueia) ou dependent_task_id (o que a bloqueia)
get_task_dependencyObter detalhes da dependência por dependency_id
create_task_dependencyCriar uma dependência. Requer task_id (bloqueador), dependent_task_id (bloqueado). Opcional type_id: 1 = bloqueia (padrão), 2 = é bloqueado por, 3 = relacionado a
delete_task_dependencyRemover uma dependência por dependency_id

Ferramentas de Subtarefa

FerramentaDescrição
list_subtasksListar subtarefas de uma tarefa pai. Requer parent_task_id, opcional limit
create_subtaskCriar uma subtarefa. Requer parent_task_id, title. Opcional project_id, task_list_id, assignee_id, due_date, description

Ferramentas de Comentário

FerramentaDescrição
add_task_commentAdicionar um comentário a uma tarefa. Requer task_id, comment (suporta HTML e @menções). Opcional hidden (booleano) publica um comentário interno não visível para clientes no portal do cliente
list_commentsListar comentários. Filtrar por task_id, project_id, limit. Os corpos são truncados em 200 caracteres; para ler o tópico de uma tarefa, use get_task_overview
get_commentObter detalhes completos do comentário por comment_id
update_commentEditar um comentário. Requer comment_id, body
delete_commentExcluir um comentário por comment_id
pin_commentFixar um comentário por comment_id
unpin_commentDesafixar um comentário por comment_id
add_comment_reactionAdicionar uma reação. Requer comment_id, reaction (ex.: "like")

Ferramentas de Todo

FerramentaDescrição
list_todosListar todos em uma tarefa. Filtrar por task_id, status (aberto/fechado), limit
get_todoObter detalhes do todo por todo_id
create_todoCriar um todo. Requer description. Opcional task_id, deal_id, assignee_id, due_date
update_todoAtualizar um todo. Requer todo_id. Opcional description, closed (booleano), due_date
delete_todoExcluir um todo por todo_id

Ferramentas de Página/Documento

FerramentaDescrição
list_pagesListar páginas. Filtrar por project_id, sort (title/created_at/edited_at/updated_at), limit
get_pageObter conteúdo completo da página por page_id
create_pageCriar uma página. Requer project_id, title. Opcional body (HTML), parent_page_id, root_page_id
update_pageAtualizar uma página. Requer page_id. Opcional title, body
delete_pageExcluir uma página por page_id
move_pageMover página para baixo de outra. Requer page_id, target_doc_id
copy_pageCopiar uma página. Requer template_id. Opcional project_id

Ferramentas de Fluxo de Trabalho

FerramentaDescrição
list_workflow_statusesListar status de fluxo de trabalho. Filtrar por workflow_id, category_id (1=Não iniciado, 2=Iniciado, 3=Fechado), limit

Ferramentas de Controle de Tempo

FerramentaDescrição
list_time_entriesListar entradas de tempo. Filtrar por date, after, before, person_id, project_id, task_id, service_id
create_time_entryCriar uma entrada de tempo. Requer date, time (minutos), person_id, service_id. Opcional task_id, note
list_servicesListar serviços. Filtrar por company_id, limit
get_project_servicesObter serviços para um projeto
list_project_dealsListar negócios/orçamentos para um projeto
list_deal_servicesListar serviços para um negócio/orçamento

Ferramentas de Atividade e Atualizações

FerramentaDescrição
list_activitiesListar atividades. Filtrar por task_id, project_id, person_id, item_type, event, after, before
get_recent_updatesObter atualizações recentes. Opcional limit, hours

Fluxos de Trabalho Comuns

Atualizando o Status da Tarefa

Você pode atualizar o status de uma tarefa pelo nome — sem necessidade de procurar IDs:

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

A ferramenta resolve automaticamente o fluxo de trabalho do projeto da tarefa e corresponde ao nome do status (sem diferenciar maiúsculas/minúsculas, suporta correspondência parcial). Isso também funciona com status de fluxo de trabalho personalizados.

Se o nome não corresponder ou for ambíguo, ela retorna os status disponíveis para aquele projeto:

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

Você também pode passar workflow_status_id diretamente se já souber o ID.

Trabalhando com o Contexto "me"

Quando PRODUCTIVE_USER_ID está configurado, você pode usar "me" em várias ferramentas:

  • create_task com "assignee_id": "me"
  • update_task_assignment com "assignee_id": "me"
  • my_tasks para obter suas tarefas atribuídas
  • whoami para verificar seu contexto de usuário configurado

Criando Fluxos de Trabalho de Tarefas Completos

  1. Criar uma pasta: create_folder
  2. Criar listas de tarefas: create_task_list
  3. Criar tarefas: create_task
  4. Dividir o trabalho: create_subtask para subitens, create_todo para listas de verificação
  5. Adicionar comentários: add_task_comment
  6. Atualizar status: update_task_status com status_name (por exemplo, "Aberto", "Em espera", "Fechado")
  7. Acompanhar o progresso: Use list_activities ou get_recent_updates

Construindo Documentação

  1. Criar uma página raiz: create_page com project_id e title
  2. Adicionar páginas filhas: create_page com parent_page_id e root_page_id definidos para a raiz
  3. Aninhar mais profundamente: Defina parent_page_id para o pai e root_page_id para a página raiz
  4. Reorganizar: Use move_page para reatribuir páginas, copy_page para duplicar

Desenvolvimento

  • Executar em modo de desenvolvimento: npm run dev
  • Compilar: npm run build
  • Iniciar servidor compilado: npm start

Licença

ISC