Repository navigation
Releases
Releases · alucardigo/fluig-mcp
fluig-mcp 1.3.0
Adicionado
fluig_versionmostra a versão do servidor Fluig (servidorVersao). Se o servidor não responder,
o diagnóstico continua e traz o motivo emservidorVersaoErro.fluig_globalevent_deleteexclui um evento global por chamada, pelo id. Semconfirm: trueé
dry-run: mostra o código que seria apagado e não apaga nada. Comconfirm: trueapaga, e a resposta
traz o código apagado (eventoApagado), para restaurar comfluig_globalevent_save. O DELETE não é
repetido: se a resposta não confirmar ou a conexão cair, a ferramenta relê a lista. Evento que sumiu foi
apagado (sucesso comaviso); evento que ficou dá erro com o código na mensagem.FLUIG_COOKIE_CMDeFLUIG_COOKIE_CMD_PROD: sessão só por cookie, sem senha, para tenant com MFA
ou SSO. Um comando imprime o cookie de sessão (JSESSIONIDSSOoujwt.token); o cliente nunca chama
login.doe não cai para senha quando o cookie é recusado. As operações SOAP ficam indisponíveis
nesse modo (detalhes no README).FLUIG_COOKIE_TIMEOUT_MS: espera máxima do comando de cookie, padrão de 120 s (tempo para aprovar o MFA).
Corrigido
- Escritas de eventos globais (
fluig_globalevent_saveefluig_globalevent_delete) rodam uma de cada vez.
Dois saves simultâneos podiam perder um ao outro, e um save que lia a lista antes de um delete podia
trazer de volta o evento apagado.
fluig-mcp 1.2.0
Os dois pontos que a revisão da 1.1.0 (issue #3)
deixou de fora por mudarem o comportamento de ferramentas que já existiam.
⚠️ Mudanças de comportamento
- As doze escritas que rodavam sem
confirmexigemconfirm: trueem produção:
fluig_dataset_save,fluig_dataset_enable,fluig_globalevent_save,
fluig_workflow_events_update,fluig_form_save,fluig_process_start,fluig_process_move,
fluig_process_take,fluig_rest_post,fluig_job_add,fluig_job_deleteefluig_job_run.
Em homologação continuam passando direto. Semconfirm, a chamada emenv: "prod"é recusada
antes de qualquer requisição. Agora toda ferramenta de escrita declaraconfirmno schema. confirmprecisa ser booleano, em toda ferramenta de escrita. Os handlers liam!!confirm,
então a string"false"contava como confirmação;"true"em texto também passa a ser recusado.- O arquivo local que sobe ao Fluig só é lido de dentro da pasta de saída (
FLUIG_SAIDA_DIR,
padrão~/fluig-mcp-saida):caminhoLocaldofluig_ged_upload,zipPathdo
fluig_form_create,xmlPathesvgPathdofluig_deploy_process. Caminho relativo passa a ser
relativo a ela. Antes, um texto plantado no Fluig podia induzir o agente a publicar
~/.ssh/id_rsano GED. Quem subia arquivo de outra pasta copia para lá antes;xmlinline no
fluig_deploy_processcontinua valendo.
Instalação: npx -y fluig-mcp@1.2.0 (veja o README e o docs/clientes.md), ou o tarball anexado a este Release.
Changelog completo: https://github.com/alucardigo/fluig-mcp/blob/v1.2.0/CHANGELOG.md
fluig-mcp 1.1.0
Contribuições da comunidade: a proposta e os PRs de
Gian (@kyso1) — issue #3,
#4, #5,
#6, #7 —
e o de Antonio (@antoniosdn) — #2.
Validado contra um Fluig 1.7.1 de produção (pelos autores) e um Fluig 1.8 de homologação.
⚠️ Mudanças de comportamento
- Todo
destinofica preso à pasta de saída (FLUIG_SAIDA_DIR, padrão~/fluig-mcp-saida),
inclusive nos downloads (fluig_process_attachment_download,fluig_ged_download,
fluig_process_diagram_get,fluig_workflow_exporter). Caminho fora dela é recusado, e caminho
relativo passa a ser relativo a ela, não à pasta do processo. Quem baixava direto no projeto
apontaFLUIG_SAIDA_DIRpara uma subpasta dedicada — nunca a raiz do repositório. - Leituras grandes voltam cortadas em 20 000 caracteres (
fluig_dataset_get,
fluig_process_export_xml,fluig_process_events_xml), com aviso. Usedestinopara o texto
inteiro oumaxCharspara outro limite. fluig_form_listvazio devolve{ total: 0, aviso }em vez de[].
Adicionado
fluig_dataset_runfiltra no servidor:filters(eq,ne,contains,starts,ends,
between),match: "any"para OU,constraintscruas,serverLimit(sqlLimit) eorder
(#5, @kyso1). Condição,type,matchou
serverLimitinválidos são erro, nunca um filtro diferente em silêncio.FLUIG_PASS_CMD/FLUIG_PASS_CMD_PROD: a senha vem de um comando do cofre, sem shell, e um
comando que falha para tudo antes do login (#6, @kyso1).- docs/clientes.md: instalação no Claude Code, Codex, GitHub Copilot (VS Code),
Cursor e Claude Desktop (#6, @kyso1). destinoemaxCharsnas ferramentas que devolvem texto grande
(#7, @kyso1).fluig_versionmostra ocolleagueIdem uso e de onde ele veio.- Releases: publicar um Release no GitHub anexa o tarball do pacote (com SHA-256), publica
@alucardigo/fluig-mcpno GitHub Packages e, com a publicação no npm ligada,fluig-mcpno
npmjs.com com provenance.
Corrigido
- Sessão expirada é refeita sozinha, uma vez por chamada: 401, página de login e o desvio
SAML do Fluig Identity, que chega como HTTP 200 (#2,
@antoniosdn). Também o 500 comUT010031: Login failedque as rotas antigas
/ecm/api/rest/ecm/*devolvem sem sessão. Downloads binários e_restRawnão reportam a
página de SSO como sucesso. colleagueIdpela sessão quandoFLUIG_USERCODEnão está definido: onde o código do
colaborador é a matrícula,fluig_form_listvoltava vazio sem erro
(#4, @kyso1).- Chamadas simultâneas com
envdiferentes trocavam de servidor no meio: depois do primeiro
await, uma chamada de homologação podia continuar no cliente de produção. fluig_process_events_xmlcorta por evento inteiro, em vez de devolver JSON partido.fluig_globalevent_savenão apaga mais os outros eventos globais quando a leitura da lista
falha (a rota grava a lista inteira e o código partia de uma lista vazia).- Upload para o GED e criação de formulário não reportam a página de login/SSO como sucesso.
fluig_dataset_runavisa (limitadoPeloServidor) quando oserverLimitcortou o resultado.- CLI (
fluig-cli):--env prod; ajuda e comando desconhecido sem rodar oFLUIG_PASS_CMD;
arquivos gravados na pasta de saída, com nome vindo do servidor sem pasta;form getnão
corrompe mais arquivo binário;dataset run --limitfiltra no servidor. - A descrição de
envdizia ao agente que produção erafluig.exemplo.com.br. npm run checkcobre todos os arquivos, inclusive a CLI.
Segurança
- Depois de uma senha recusada, nenhum novo login naquele ambiente até
fluig_session_reset:
antes, cada chamada de ferramenta seguinte tentava de novo, e três bastavam para bloquear a
conta no AD. resolveTenant(FLUIG_COMPANY=-1) não manda mais a senha na URL
(#4, @kyso1).- Pasta de saída sem escape por link simbólico, junction ou link físico (gravação por
temporário +rename), pasta 0700 e arquivos 0600.FLUIG_SAIDA_DIRaceita~e recusa
caminho relativo; no Windows, nome reservado ou terminado em ponto/espaço é recusado. FLUIG_PASS_CMDusa só a primeira linha da saída, recusa saída fora de UTF-8 antes do login e
nunca mostra o stdout no erro.- Ferramentas de escrita recusam texto que saiu cortado de uma leitura.
- Dependências:
npm auditzerado (eram 12 vulnerabilidades, 1 crítica e 8 altas).
@modelcontextprotocol/sdk1.32.1,undici6.29.1 (ainda na linha 6, por causa do Node 20),
body-parser2.4.0 efast-uri3.1.9.soap1.14.0, conferido contra um Fluig real: as
chamadas SOAP de leitura devolvem exatamente o mesmo que na 1.10. - CI e release: actions fixadas por SHA (
checkout7,setup-node7,gitleaks-action3 — a v2
rodava em Node 20, que saiu dos runners do GitHub), Dependabot semanal com uma semana de espera,
reporte privado de vulnerabilidade ligado. - README, SECURITY e CONTRIBUTING não prometem mais
confirmem toda escrita: 12 ferramentas
operacionais ainda não o exigem, e a lista está no README.
Instalação: npx -y github:alucardigo/fluig-mcp#v1.1.0 (veja o README), ou o tarball anexado a este Release.
Changelog completo: https://github.com/alucardigo/fluig-mcp/blob/v1.1.0/CHANGELOG.md