@renatocostaguedesdemorais/devs-loop-mcp
v0.5.1
Published
Distributed MCP and CLI for devs-loop ClickUp automation
Downloads
2,543
Maintainers
Readme
DEVS-LOOP MCP
Pacote distribuivel do devs-loop para uso pessoal via MCP e CLI.
Release 0.5.1
Principais mudancas desta release:
microtasks mais seguras: a consolidacao agora considera tipo, tamanho, semantica e impacto estrutural, em vez de depender so do tempo real
subtasks estruturais preservadas: frentes de infra/runtime/deploy/banco deixam de ser consolidadas automaticamente quando representam bloco executivo proprio
fix critico: corrige boot do servidor MCP via CLI —
devs-loop serveragora conecta o transport stdio corretamente, resolvendoMCP error -32000: Connection closedem Cursor, Codex, Windsurf, Antigravity e Claudeelimina falhas silenciosas:
startTimer,markTaskInProgress,updateTaskStatus,completeTaske funcoes de sessao agora logam warnings e retornam resultados em vez de engolir errosauto-init de sessao:
create_taskinicializa sessao local automaticamente se nao existir, e erros de timer nao abortam mais a criacaotelemetria real: resposta de
create_taskagora incluilifecycle(timerStartedRemote, statusChanged, sessionTracking) ewarningspara o agente comunicar ao usuarioprotocolo atualizado: server instructions e
devs-loop.mdagora documentaminit_sessioncomo passo 0 obrigatorio e orientam verificacao de lifecycle
Publish
Fonte de verdade operacional desta release: C:\Users\User\.devs-loop\package-local.
Para empacotar ou publicar, execute os comandos com workdir em C:\Users\User\.devs-loop\package-local.
Rodar npm --prefix ... pack a partir de outro projeto pode empacotar o diretório errado.
Modos de uso
- CLI local:
devs-loop ... - MCP pessoal local:
devs-loop-mcp
Servidor MCP
O servidor MCP expoe o core do devs-loop por stdio, reaproveitando as regras de:
- resolucao de lista
- criacao de tasks
- controle de timer
- resumo de sessao
- progresso entre sessoes, confirmado no log local e no ClickUp
Instalar dependencias
npm installEstrutura de configuracao
Este pacote foi preparado para funcionar em qualquer maquina sem depender do diretorio do projeto original.
Ordem de resolucao:
./.devs-loop/no projeto atual~/.devs-loop/no usuario atual- defaults do pacote publicado
Arquivos pessoais recomendados:
~/.devs-loop/.env~/.devs-loop/auth.json~/.devs-loop/config.json~/.devs-loop/learnings.json
Importante para agentes e usuarios:
~/.devs-loop/.enve~/.devs-loop/auth.jsonrepresentam a configuracao global do usuario./.devs-loop/.envrepresenta configuracao especifica do projetodevs-loop-progress.md,devs-loop-session-history.mde.devs-loop/.session.jsonrepresentam estado e historico da sessao, nao a existencia de credencial- portanto, ausencia de arquivos de sessao na raiz do projeto nao significa ausencia de configuracao do ClickUp
- antes de afirmar que "nao ha configuracao", e preciso checar global e projeto separadamente
- se a verificacao continuar ambigua, a resposta correta e perguntar ao usuario em vez de assumir
Exemplo de ~/.devs-loop/.env:
CLICKUP_API_TOKEN=pk_xxx
[email protected]Modos de autenticacao
O pacote agora aceita tres formas de autenticacao, nesta ordem de prioridade:
- auth local por usuario salvo pelo proprio devs-loop
- variavel
CLICKUP_OAUTH_ACCESS_TOKEN - fallback legado por
CLICKUP_API_TOKEN
Isso permite que cada usuario use sua propria credencial individual sem quebrar o modo antigo.
Se o .env tiver apenas CLICKUP_API_TOKEN e o CLI estiver rodando em terminal interativo, o pacote agora pergunta qual modo o usuario quer usar naquele ambiente:
- API oficial com token pessoal
session_httpvia requests privados da sessao web- OAuth
A escolha fica persistida em auth.json para evitar perguntas repetidas a cada comando.
Tambem existe o modo opcional session_http, nao oficial:
- abre navegador local
- o usuario faz login na propria conta ClickUp
- o pacote captura os headers da sessao autenticada
- as requests HTTP passam a reutilizar essa sessao localmente
Esse modo e mais autonomo para o usuario, mas depende do comportamento atual do frontend do ClickUp e pode exigir manutencao quando a sessao web mudar.
Regra explicita:
session_httpnao pode usar a API oficial/api/v2- se esse modo estiver ativo, o cliente oficial do pacote bloqueia a chamada com erro
- esse modo so deve operar com transporte HTTP privado da sessao web do ClickUp
Session HTTP privado
O pacote agora tem:
- abstracao de cliente ClickUp que escolhe o transporte conforme o modo de auth
- capturador guiado de requests privadas do frontend do ClickUp
- cliente
session_httpcom cobertura do fluxo principal do devs-loop:- current user
- task
- list
- listagem remota de tasks da lista
- create task
- comment
- assign task
- create checklist
- create checklist item
- update checklist item
- update task metadata
- priority
- custom_type
- parent
- update status
- timer start/stop
- create time entry
- delete task
- attachment
- criacao de hierarquia pai + subtarefas no fluxo de alto nivel
As operacoes acima agora priorizam rotas privadas embutidas e fallback por inferencia conservadora. No fluxo principal do pacote, a captura de templates deixou de ser pre-requisito e passa a ser contingencia para diagnostico, drift do frontend ou recuperacao de compatibilidade.
Sem misturar com /api/v2, o pacote agora consegue no modo session_http:
- criar task com tipo, prioridade e checklist nativa
- criar subtarefa real vinculada a task pai
- concluir task com resolucao de checklist nativa
- validar status,
time_spente assignee pelo proprio cliente abstrato
Regra forte para API oficial
Quando o fluxo usar a API oficial do ClickUp:
- primeiro consultar
GET /api/v2/list/{list_id}/field - depois enviar apenas os custom fields realmente expostos naquela lista
- e separar obrigatoriamente:
custom_item_idpara tipo visual/icone da task- custom fields de negocio para classificacao interna
Isso evita dois erros comuns:
- mandar payload de custom field no formato errado para a lista
- acreditar que preencher
tipos_tarefasja muda o icone da task, quando isso depende decustom_item_id
Regra operacional:
- se a API oficial devolver erro de schema como
Value must be an array, o agente deve revisar otypedo campo e parar de insistir no payload errado - se houver divergencia entre
config.jsone os campos expostos pela lista, o agente deve explicar a divergencia e pedir confirmacao ao usuario antes de seguir
Fluxo sugerido:
- autenticar a sessao web:
devs-loop auth login --email [email protected]usar normalmente o CLI/MCP.
se alguma operacao privada especifica quebrar por mudanca no frontend do ClickUp, capturar templates privados base como contingencia:
devs-loop auth session-capture --operation current_user
devs-loop auth session-capture --operation task --task-id abc123 --workspace-id 90132741067
devs-loop auth session-capture --operation list --list-id 123 --workspace-id 90132741067
devs-loop auth session-capture --operation create_task --list-id 123 --workspace-id 90132741067
devs-loop auth session-capture --operation comment --task-id abc123 --workspace-id 90132741067
devs-loop auth session-capture --operation assign_task --task-id abc123 --workspace-id 90132741067 --assignee-id 111945169
devs-loop auth session-capture --operation update_status --task-id abc123 --workspace-id 90132741067 --status "em andamento"
devs-loop auth session-capture --operation timer_start --task-id abc123 --workspace-id 90132741067
devs-loop auth session-capture --operation timer_stop --workspace-id 90132741067
devs-loop auth session-capture --operation attachment --task-id abc123 --workspace-id 90132741067As operacoes abaixo ja tem rota privada embutida no pacote e nao dependem de template capturado:
- current user
- task
- list
- create task
- comment
- assign task
- update task metadata (
priority,custom_type,parent) - update status
- create checklist
- create checklist item
- update checklist item
- timer start
- timer stop
- create time entry
- attachment
- listagem de tasks da lista
- delete task
- testar o cliente abstrato:
devs-loop http current-user
devs-loop http list --list-id 123 --workspace-id 90132741067
devs-loop http create-task --list-id 123 --name "Task de teste" --workspace-id 90132741067
devs-loop http comment --task-id abc123 --comment "Teste" --workspace-id 90132741067Exemplos via CLI:
devs-loop auth personal --token pk_xxx --email [email protected]
devs-loop auth select
devs-loop auth login --email [email protected]
devs-loop auth oauth-token --token access_xxx --email [email protected]
devs-loop auth status
devs-loop auth clearFluxo OAuth:
devs-loop auth oauth-url --client-id SEU_CLIENT_ID --redirect-uri https://seu-app/callback
devs-loop auth oauth-exchange --client-id SEU_CLIENT_ID --client-secret SEU_CLIENT_SECRET --code CODIGO --redirect-uri https://seu-app/callbackBootstrap em uma maquina nova
npx -y @renatocostaguedesdemorais/devs-loop-mcp installEsse comando:
- cria ou reutiliza
~/.devs-loop/ - copia
config.jsone.env.examplepara o diretorio pessoal se ainda nao existirem - cria
learnings.jsonedevs-loop-progress.mdquando necessario - sincroniza no projeto atual:
AGENTS.mdCLAUDE.md.cursorrules.windsurfrules.agents/skills/devs-loop/SKILL.md
Depois disso, basta preencher ~/.devs-loop/.env com:
CLICKUP_API_TOKEN=pk_xxx
[email protected]Iniciar o servidor MCP
npx -y @renatocostaguedesdemorais/devs-loop-mcp serverOu:
npm run mcpExemplo de configuracao MCP local
{
"mcpServers": {
"devs-loop": {
"command": "npx",
"args": [
"-y",
"@renatocostaguedesdemorais/devs-loop-mcp",
"server"
]
}
}
}Configuracao pronta nesta maquina
Os dois editores abaixo ja foram configurados nesta maquina para usar o servidor MCP local do devs-loop:
C:\Users\User\AppData\Roaming\Antigravity\User\settings.jsonC:\Users\User\AppData\Roaming\Cursor\User\settings.json
Entrada configurada:
{
"mcpServers": {
"devs-loop": {
"command": "npx",
"args": [
"-y",
"@renatocostaguedesdemorais/devs-loop-mcp",
"server"
]
}
}
}Tools disponiveis
devs_loop_auth_statusdevs_loop_auth_select_modedevs_loop_auth_session_logindevs_loop_auth_session_refreshdevs_loop_auth_session_capture_private_requestdevs_loop_auth_use_personal_tokendevs_loop_auth_use_oauth_tokendevs_loop_auth_oauth_authorization_urldevs_loop_auth_oauth_exchange_codedevs_loop_auth_cleardevs_loop_attach_filedevs_loop_find_similar_tasksdevs_loop_session_http_current_userdevs_loop_session_http_get_listdevs_loop_session_http_create_taskdevs_loop_session_http_commentdevs_loop_session_http_validate_taskdevs_loop_coach_checkdevs_loop_coachdevs_loop_learn_ruledevs_loop_learn_preferencedevs_loop_learn_issuedevs_loop_learn_statsdevs_loop_learn_contextdevs_loop_projectsdevs_loop_syncdevs_loop_suggest_listdevs_loop_recent_progressdevs_loop_init_sessiondevs_loop_preflight_create_taskdevs_loop_preflight_complete_taskdevs_loop_create_taskdevs_loop_complete_taskdevs_loop_timerdevs_loop_summarydevs_loop_end_session
Fluxo esperado
- Consultar listas e progresso recente
- Iniciar sessao
- Criar task ativa ou hierarquia pai + subtarefas
- Trabalhar com timer ativo
- Concluir task e checklist
- Encerrar sessao e registrar em
devs-loop-progress.md
Historico visual da sessao
Enquanto a sessao estiver ativa, o pacote agora atualiza automaticamente na raiz do projeto:
devs-loop-session-history.md
Esse arquivo funciona como painel vivo da sessao e mostra:
- visao geral da sessao atual
- tarefas abertas e concluidas
- tempo estimado medio, tempo rastreado final e tempo real em separado
- linha do tempo das alteracoes feitas no ClickUp
- uso revisado do MCP durante a sessao
O historico de longo prazo continua sendo append-only em:
devs-loop-progress.md
Smoke tests
Rodar a suite minima local:
npm run test:smokeCobertura atual:
- sessao, timer e resumo
- create task com checklist nativa
- create task com tipo, prioridade e checklist nativa tambem no modo
session_http - complete task com resolucao de checklist e sincronizacao de tempo
- estimativa contextual de
tempo estimado mediopara cenarios recorrentes de infraestrutura e deploy - create/complete completos tambem no modo
session_http, incluindo checklist nativa, assignee, time entry complementar e auto-complete da task pai - hierarquia pai + subtarefas via core e MCP
- validacao final via cliente abstrato para status,
time_spente assignee - anexos automaticos com comentario de confirmacao
- progresso recente combinando log local e contexto remoto do ClickUp
- revisao de pendencias apos
done, com pausa automatica de timer remanescente
Hierarquia de tasks
O fluxo de alto nivel agora aceita criar pai + subtarefas em uma unica chamada:
- no MCP:
devs_loop_create_taskcomsubtasks - no CLI:
devs-loop task --subtasks-file caminho.json
Regras atuais:
- a task raiz e normalizada para tamanho
G - subtarefas sao ordenadas automaticamente em ordem pratica:
Spike -> Infra -> Feature/Bug -> Refactor -> Doc -> QA - quando ha subtarefas, o timer sobe na primeira subtarefa criada
- o suporte pai/filho continua sujeito a consolidacao de microtask quando uma subtarefa fecha abaixo do limite configurado
Exemplo de arquivo JSON para --subtasks-file:
[
{
"name": "Investigar dependencias do fluxo",
"type": "Spike",
"size": "P",
"checklist": ["Dependencias mapeadas"]
},
{
"name": "Implementar fluxo principal",
"type": "Feature",
"size": "M",
"checklist": ["Fluxo principal implementado"]
},
{
"name": "Validar fluxo final",
"type": "QA",
"size": "P",
"checklist": ["Validacao final concluida"]
}
]Os smoke tests usam mocks do ClickUp para serem repetiveis e baratos de rodar antes do publish.
Regras operacionais adicionais
- Antes de afirmar que nao existe contexto recente, o pacote cruza
devs-loop-progress.mdcom tasks recentes do projeto no ClickUp para reduzir inconsistencias entre log local e estado remoto. Observacoesdeve sempre sair preenchido com contexto util. Se nada especifico for informado, o core gera um texto padrao com projeto, iniciativa e orientacao de atualizacao.- Toda task deve ficar atribuida ao dev. O create agora falha se o assignee nao puder ser resolvido, e o start/complete revalidam a atribuicao.
- Subtarefas continuam podendo ser tratadas como microtasks abaixo de
10min, mas a consolidacao nao depende mais so dotempo real: tipo, tamanho, semantica e impacto estrutural tambem entram na decisao. - Subtasks estruturais, especialmente de
Infra,FeatureouBug, com sinais de runtime, deploy, banco, secrets, cron, VPS ou producao deixam de ser consolidadas automaticamente mesmo quando otempo realfoi baixo. - Quando uma microtask fecha, o registro e consolidado na task pai no resumo da sessao e no log de progresso, em vez de contar como entrega separada.
- Quando uma microtask e consolidada, o pacote limpa o rastro operacional dela no ClickUp removendo a subtarefa consolidada da arvore para evitar ambiguidade visual.
- Ao consolidar, o pacote preserva as informacoes individuais da microtask na task pai em comentario estruturado, incluindo nome, tipo, descricao, observacoes, checklist e tempo.
- Ao concluir uma task, o pacote diferencia
tempo realdo timer etempo rastreado, que passa a representar um total simulado/estimado para a entrega. - Quando nao existe tempo real medido, o
tempo estimado medioagora tambem usa heuristica contextual baseada em nome, descricao e observacoes da task para evitar estimativas uniformes em cenarios tecnicamente diferentes. - As regras contextuais atuais priorizam alguns grupos recorrentes:
- hardening de VPS ->
1h - operacao conservadora do Coolify ->
1h - provisionamento de Postgres/Redis ->
30m - deploy de frontend via Git + Dockerfile ->
45m - compatibilizacao de backend para Coolify ->
1h 30m
- hardening de VPS ->
- Se o tempo rastreado for maior que o tempo real, o pacote cria uma time entry complementar no ClickUp e registra os dois valores no comentario final da task.
- Se o tempo nativo mostrado pelo ClickUp ficar abaixo do tempo final rastreado da entrega, o pacote complementa automaticamente a diferenca para alinhar o badge visual ao comentario final.
- Quando anexa arquivos automaticamente, o comentario de confirmacao no ClickUp lista os caminhos relativos dos anexos efetivamente enviados, evitando confirmacoes ambiguas por basename duplicado.
- Quando o comando manual
attachencontra anexos da mesma familia, o pacote verifica automaticamente o tamanho do arquivo: se ja existir um anexo da mesma familia com o mesmo tamanho, ignora o envio para evitar duplicata; se o arquivo mudou, envia uma nova copia com sufixo versionado como-v2,-v3e registra isso em comentario. - Comentarios e logs de tempo usam formato compacto legivel, por exemplo
3m 48s,20m 17se1h 5m. - Quando a ultima subtarefa e concluida e nao resta checklist pendente na task pai, o pacote fecha a task pai automaticamente no ClickUp e registra esse fechamento em comentario.
- Toda alteracao aplicada no ClickUp passa a ser anunciada explicitamente no terminal/log e tambem entra na linha do tempo de
devs-loop-session-history.md. - As descricoes das tasks agora priorizam linguagem mais amigavel e legivel para qualquer pessoa do time, evitando depender de jargao tecnico quando isso nao for necessario.
- O pacote agora separa explicitamente tres tempos:
tempo estimado medio: quanto a entrega costuma levar em mediatempo rastreado final: quanto fica registrado no ClickUp ao finaltempo real: quanto a execucao levou de verdade na sessao
- Checklist nativa tem prioridade sobre qualquer checklist em
markdown_description; se o transporte suporta checklist nativa, os criterios nao devem aparecer no corpo da descricao. - Anexos automaticos ficaram mais conservadores:
- referencias explicitas de arquivo ainda podem ser anexadas automaticamente
- candidatos heurísticos agora exigem confirmacao do usuario antes do envio
- contexto de reuniao/alinhamento/sync nao gera sugestao automatica de documentacao generica
- o pacote nao usa mais markdown generico da propria raiz do pacote como candidato heurístico para tasks do usuario
- Ao criar uma task nova, o pacote busca tasks semelhantes do mesmo projeto/lista, salva o contexto em memoria temporaria local e usa esse historico para reduzir redundancia e sugerir versionamento quando houver colisao forte de nome.
- Quando encontra um match forte, o pacote pode reaproveitar a task existente como continuacao, incremento ou correcao, comentando o reuso em vez de abrir uma task redundante.
- Se ja existir uma task pai de iniciativa na sessao atual, novas tasks correlatas criadas sem
--parentpassam a ser agrupadas automaticamente como subtasks para evitar muitas tasks soltas no mesmo assunto; quando houver mais de uma raiz aberta, o agrupamento so acontece se houver sinal claro de parentesco para evitar associacao incorreta. - Ao concluir uma task, o CLI e o MCP revisam a sessao atual: se ainda houver pendencias, informam explicitamente quais tasks continuam abertas; se nao houver mais pendencias, qualquer timer remanescente e pausado automaticamente.
Compatibilidade
O CLI continua funcionando normalmente. O MCP eh um adaptador adicional em cima do mesmo core.
Clientes MCP
Exemplos prontos por editor/cliente em:
MCP-CLIENTS.md
Publicacao distribuivel
Este pacote esta preparado para publish distribuivel:
- estado fora do pacote
.envnao deve ser publicadofileslimita o conteudo publicado- binarios:
devs-loopdevs-loop-mcp
