biaws-mcp 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -59,19 +59,25 @@ Arquivos enviados ou baixados pelo MCP têm limite padrão de 10 MiB. Defina
59
59
  `BIAWS_MCP_MAX_ATTACHMENT_BYTES` para reduzir ou elevar esse limite, respeitado
60
60
  o teto de 50 MiB do MCP e o limite independente configurado na API.
61
61
 
62
+ ## Resources e classificação
63
+
64
+ O servidor também expõe resources hierárquicos para ler itens, comentários, tarefas, notas, documentos e arquivos. Consulte o [catálogo de resources e endpoints](docs/resources.md). A API aceita ID ou identificador de negócio nos parâmetros aplicáveis; as tools existentes permanecem disponíveis para compatibilidade.
65
+
66
+ A classificação é proposta pelo agente após ler a issue e o catálogo aplicável como resources. `issues_classify` grava o resultado autorizado; o servidor não solicita sampling.
67
+
62
68
  ## Instalação e execução
63
69
 
64
70
  O pacote público expõe o executável `biaws-mcp`. Clientes configurados pelo CLI
65
71
  usam uma versão fixada por meio do cache local do npm:
66
72
 
67
73
  ```bash
68
- npx --yes biaws-mcp@0.9.0
74
+ npx --yes biaws-mcp@0.11.0
69
75
  ```
70
76
 
71
77
  Também é possível instalá-lo explicitamente:
72
78
 
73
79
  ```bash
74
- npm install --global biaws-mcp@0.9.0
80
+ npm install --global biaws-mcp@0.11.0
75
81
  biaws-mcp
76
82
  ```
77
83
 
@@ -90,7 +96,7 @@ npm start
90
96
  Em um cliente MCP, configure o comando:
91
97
 
92
98
  ```bash
93
- npx --yes biaws-mcp@0.9.0
99
+ npx --yes biaws-mcp@0.11.0
94
100
  ```
95
101
 
96
102
  O fluxo recomendado é gerar a configuração completa com:
@@ -238,6 +244,36 @@ informa totais e truncamentos e não contém credenciais, endereços dos
238
244
  servidores, metadata dos runtimes, anexos nem os textos extensos da base de
239
245
  conhecimento.
240
246
 
247
+ ### Histórico de documentos
248
+
249
+ - `documents_list_revisions`: consulta até 100 revisões mais recentes.
250
+ - `documents_list_observations`: consulta até 200 observações mais recentes.
251
+
252
+ Ambas exigem `documentId` e preservam a autorização da API. Esses endpoints
253
+ não oferecem paginação.
254
+
255
+ ### Consultas de monitoramento
256
+
257
+ - `monitoring_runtime_topology_get`: consulta a topologia monitorada.
258
+ - `monitoring_runtime_targets_list`: lista os alvos de runtime monitorados.
259
+ - `monitoring_metadata_profiles_list`: lista os perfis de apresentação de
260
+ metadados; exige leitura de runtimes no escopo de workspace.
261
+ - `applications_monitoring_health_get`: consulta a saúde consolidada de uma
262
+ aplicação; `includeConfigured` inclui runtimes com monitores configurados
263
+ mesmo sem resultados recebidos (padrão `false`).
264
+ - `runtime_monitoring_signals_list`: lista sinais passivos/externos por runtime,
265
+ período e status, com `page` (padrão 1) e `limit` (padrão 50, máximo 100).
266
+ Para resultados de monitores ativos, use `runtime_monitoring_results_list`.
267
+
268
+ Topologia, alvos e perfis retornam o conjunto acessível fornecido pela API, sem
269
+ paginação. As consultas usam o workspace configurado no MCP.
270
+
271
+ ### Auditoria
272
+
273
+ - `audit_events_list`: consulta os eventos mais recentes de uma entidade, com
274
+ `entityType`, `entityId` e `limit` (padrão 100, máximo 200). Usa a permissão
275
+ de leitura e o escopo da entidade. A API não oferece paginação deste histórico.
276
+
241
277
  ### Issues / chamados
242
278
 
243
279
  - `issues_search`: busca issues com os mesmos filtros principais da
@@ -258,14 +294,20 @@ conhecimento.
258
294
  obrigatório.
259
295
  - `issues_import_eml`: analisa ou importa um EML enviado em Base64; `dryRun` é `true` por padrão.
260
296
  - `issues_update_state`: altera status e/ou tipo de uma issue.
261
- - `issues_suggest_taxonomy`: sugere taxonomias aderentes ao texto da issue.
297
+ - `issues_update`: altera título, texto, tipo, status, aplicação e componentes
298
+ afetados. Exige ao menos um campo e preserva os campos omitidos.
299
+ - `issues_suggest_taxonomy`: busca lexical legada, mantida para compatibilidade; o fluxo principal usa a análise do agente sobre os resources da issue e do catálogo.
262
300
  - `issues_classify`: grava classificação/KB em `issues.classification`.
263
301
  - `issues_by_taxonomy`: busca issues por assunto/taxonomia, incluindo todos os
264
302
  seus descendentes e filtros opcionais de contexto.
265
303
 
266
304
  ### Melhorias
267
305
 
268
- - `demands_list`: lista melhorias com filtros simples e de contexto.
306
+ - `demands_list`: lista uma página de melhorias, com `page` (padrão 1),
307
+ `limit` (padrão 25, máximo 100), filtros de contexto e `collectionId`
308
+ (`__root__` seleciona a raiz). A resposta informa total, página e total de
309
+ páginas. Busca por `text` e código parcial em `code` percorre as páginas da
310
+ API e aplica os filtros antes da paginação do resultado.
269
311
  - `demands_get`: obtém uma melhoria estruturada.
270
312
  - `demands_create`: cria uma melhoria com dados cadastrais, especificação,
271
313
  checklist e planejamento; `applicationId` é obrigatório.
@@ -274,6 +316,19 @@ conhecimento.
274
316
  - `demands_implementation_context`: extrai contexto de especificação e tarefas para agentes de desenvolvimento.
275
317
  - `demands_add_note`: adiciona anotação a uma melhoria.
276
318
  - `demands_update_description`: atualiza a descrição sucinta da melhoria.
319
+ - `demands_update`: altera código, título, descrição, status, prazos, estimativa
320
+ de jornadas, aplicação e componentes afetados. Exige ao menos um campo;
321
+ campos omitidos são preservados pela API.
322
+ - `demands_update_specification`: substitui todas as seções da especificação.
323
+ - `demands_update_checklist`: substitui todos os itens do checklist, incluindo
324
+ conclusão, data e comentário.
325
+ - `demands_update_journeys`: substitui o planejamento mensal de jornadas.
326
+ Os meses devem estar dentro de `startDate`/`endDate` da melhoria; ajuste as
327
+ datas com `demands_update` primeiro. A API preenche meses do período não
328
+ informados com zero.
329
+ - `demands_update_note`: altera conteúdo e, opcionalmente, data de uma nota;
330
+ preserva a data existente quando omitida.
331
+ - `demands_delete_note`: exclui permanentemente uma nota da melhoria.
277
332
  - `demands_list_tasks`: lista tarefas, com filtro opcional por status.
278
333
  - `demands_create_task`: inclui uma tarefa.
279
334
  - `demands_update_task`: altera código, título, status, datas, situação, descrição ou especificação de uma tarefa.
@@ -283,6 +338,19 @@ conhecimento.
283
338
  - `demands_update_task_note`: altera uma nota de execução.
284
339
  - `demands_delete_task_note`: exclui uma nota de execução.
285
340
 
341
+ Calendário e prazos percorrem todas as páginas de melhorias no escopo informado,
342
+ com filtro opcional por `collectionId`. Essas consultas e a busca local de
343
+ `demands_list` leem até 100 páginas de 100 melhorias. Ao exceder o limite, retornam
344
+ `DEMAND_SCAN_LIMIT_EXCEEDED` e solicitam filtros mais específicos, sem devolver
345
+ um resultado parcial como completo.
346
+
347
+ As novas ferramentas de alteração aceitam `requestId` como ID ou código exato da melhoria.
348
+ Consulte `demands_get` antes de substituir especificação, checklist ou jornadas
349
+ para conservar os itens desejados. Arrays vazios limpam especificação e checklist;
350
+ para jornadas, zeram o planejamento no período da melhoria. IDs de seções,
351
+ rótulos de checklist e meses de jornadas devem ser únicos. As alterações usam
352
+ somente a API, com as mesmas permissões, escopo e auditoria da interface.
353
+
286
354
  ### Anexos
287
355
 
288
356
  - `attachments_upload`: envia até dez arquivos, fornecidos em
@@ -298,13 +366,12 @@ As quatro ferramentas aceitam `entityType` com `issue`, `demand`, `task` ou
298
366
  `task`, `entityId` deve ser o ID da melhoria pai e `taskId` deve identificar a
299
367
  tarefa por ID ou código.
300
368
 
301
- Como a API ainda não possui uma rota própria de anexos de tarefas, o MCP mantém
302
- o contrato vigente da UI: armazena o arquivo na melhoria e associa a tarefa por
303
- uma tag igual ao seu código. O MCP valida essa associação antes de baixar,
304
- alterar tags ou excluir o arquivo e nunca remove a tag da tarefa por meio de
305
- `attachments_update_tags`.
369
+ A API expõe rotas próprias de arquivos de tarefas em
370
+ `/api/requests/:id/tasks/:taskId/attachments`. Ela resolve os IDs ou códigos,
371
+ valida a associação e preserva a tag do código da tarefa. O MCP delega essas
372
+ regras à API e usa as permissões `tasks.attachment.*`.
306
373
 
307
- Os arquivos trafegam exclusivamente em Base64 no protocolo MCP. O servidor não
374
+ Nas tools de compatibilidade, os arquivos trafegam em Base64. Resources de conteúdo devolvem texto ou blob conforme o MIME type. O servidor não
308
375
  aceita caminhos locais, URLs para download remoto ou referências ao filesystem
309
376
  do processo. Todas as operações passam pelas rotas autenticadas da
310
377
  `biaws-api`, preservando autorização, escopo e auditoria por domínio.
@@ -0,0 +1,142 @@
1
+ # Resources hierárquicos do BIAWS
2
+
3
+ O MCP expõe `resources/list`, `resources/templates/list` e `resources/read`, além das tools existentes. As leituras usam somente a API HTTP, com o mesmo workspace, autorização, timeout e cancelamento das tools.
4
+
5
+ ## Navegação
6
+
7
+ Configurar `BIAWS_WORKSPACE_ID`. A URI de um resource precisa usar esse workspace. `resources/list` fornece os pontos de entrada concretos; `resources/templates/list` descreve os padrões parametrizados. O conteúdo JSON inclui `uri` canônica e `links` para coleções, itens e páginas acessíveis. Buscar itens com as tools de domínio e seguir os `resource_link` retornados.
8
+
9
+ Exemplo de leitura:
10
+
11
+ ```json
12
+ {
13
+ "jsonrpc": "2.0",
14
+ "id": 1,
15
+ "method": "resources/read",
16
+ "params": {
17
+ "uri": "biaws://workspaces/workspace-id/issues/INC12345/comments?page=1&limit=25"
18
+ }
19
+ }
20
+ ```
21
+
22
+ Coleções paginadas aceitam `page` como inteiro positivo e `limit` de 1 a 100. Os links de página preservam o ID canônico. Resources de coleção retornam dados e links, sem carregar recursivamente todos os filhos. Revisões de documentos conservam o limite existente de 100 itens; observações e auditoria conservam seus limites existentes de até 200 itens.
23
+
24
+ ## ID e identificador
25
+
26
+ A API procura primeiro pelo ID público usado pela rota e só então pelo identificador de negócio, dentro do mesmo escopo autorizado. Isso vale também para as escritas e para os filhos. As URIs aceitam ambas as referências, mas os links retornados usam IDs canônicos.
27
+
28
+ | Entidade | Identificador alternativo |
29
+ | ----------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
30
+ | Issue | `identifier`, opcional; aceita códigos como `INC12345`. O campo `id` dos registros existentes permanece válido. |
31
+ | Melhoria | `clientCode` |
32
+ | Tarefa | `code`, dentro da melhoria; comparação sem distinção de maiúsculas/minúsculas para manter compatibilidade |
33
+ | Documento | `identifier` |
34
+ | Aplicação, componente, integração, repositório, servidor, deployment, runtime | `key`, no escopo autorizado; referências ambíguas exigem ID |
35
+ | Segredo | `identifier`; leitura somente de metadados |
36
+
37
+ Colisões entre ID e identificador são resolvidas a favor do ID. Identificadores duplicados retornam `409 AMBIGUOUS_REFERENCE`; itens ausentes ou fora do escopo retornam `404`. Comentários, notas e arquivos conservam seus próprios IDs. Referências compostas de runtime já existentes continuam funcionando.
38
+
39
+ ## Classificação pelo agente
40
+
41
+ 1. Ler o resource da issue e, quando relevantes, seus comentários e metadados de arquivos.
42
+ 2. Seguir o link para `applications/{applicationId}/classification-catalog`.
43
+ 3. Analisar os dados com o raciocínio do próprio agente e propor assuntos e tags existentes no catálogo, com justificativa.
44
+ 4. Quando o usuário autorizar a gravação, chamar `issues_classify` e reler `/classification` para verificar o estado persistido.
45
+
46
+ O servidor não usa sampling nem integra uma LLM para esse fluxo. `issues_suggest_taxonomy` conserva sua busca lexical somente para compatibilidade; ela não faz parte do fluxo de classificação. Clientes sem resources podem usar `issues_get` e `issues_get_classification_catalog` e realizar a mesma análise.
47
+
48
+ ## Arquivos
49
+
50
+ `files` lista metadados; `files/{fileId}` lê os metadados individuais; `files/{fileId}/content` lê conteúdo com MIME próprio, como texto ou blob Base64. Os resources de conteúdo têm limite de 10 MiB. Locators internos de storage não são retornados pelos endpoints novos de metadados.
51
+
52
+ Arquivos de tarefa usam `/api/requests/:id/tasks/:taskId/attachments`. A API aplica as permissões `tasks.attachment.*`, valida o vínculo e conserva a associação por tag do código da tarefa. O código precisa ser único dentro da melhoria para acessar arquivos associados. Essa regra é aplicada também ao upload, atualização de tags e exclusão; o MCP não a reimplementa.
53
+
54
+ ## Catálogo de leitura
55
+
56
+ A API conserva `/api/requests`, `/api/knowledge/documents` e `/attachments`; a URI MCP usa `demands`, `documents` e `files`.
57
+
58
+ | Resource/template | GET da API |
59
+ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------- |
60
+ | `biaws://workspaces` | `/api/catalog/workspaces` |
61
+ | `biaws://workspaces/{workspaceId}/issues` | `/api/issues` |
62
+ | `biaws://workspaces/{workspaceId}/demands` | `/api/requests` |
63
+ | `biaws://workspaces/{workspaceId}/documents` | `/api/knowledge/documents` |
64
+ | `biaws://workspaces/{workspaceId}/issues/{issueId}` | `/api/issues/{issueId}?includeComments=false` |
65
+ | `biaws://workspaces/{workspaceId}/issues/{issueId}/comments` | `/api/issues/{issueId}/comments` |
66
+ | `biaws://workspaces/{workspaceId}/issues/{issueId}/comments/{commentId}` | `/api/issues/{issueId}/comments/{commentId}` |
67
+ | `biaws://workspaces/{workspaceId}/issues/{issueId}/classification` | `/api/issues/{issueId}/classification` |
68
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}` | `/api/requests/{demandId}` |
69
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/specification` | `/api/requests/{demandId}/specification` |
70
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/specification/sections/{sectionId}` | `/api/requests/{demandId}/specification/sections/{sectionId}` |
71
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/checklist` | `/api/requests/{demandId}/checklist` |
72
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/journeys` | `/api/requests/{demandId}/journeys` |
73
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/notes` | `/api/requests/{demandId}/notes` |
74
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/notes/{noteId}` | `/api/requests/{demandId}/notes/{noteId}` |
75
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/tasks` | `/api/requests/{demandId}/tasks` |
76
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/tasks/{taskId}` | `/api/requests/{demandId}/tasks/{taskId}` |
77
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/tasks/{taskId}/notes` | `/api/requests/{demandId}/tasks/{taskId}/notes` |
78
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/tasks/{taskId}/notes/{noteId}` | `/api/requests/{demandId}/tasks/{taskId}/notes/{noteId}` |
79
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/implementation-context` | `/api/requests/{demandId}/implementation-context` |
80
+ | `biaws://workspaces/{workspaceId}/documents/{documentId}` | `/api/knowledge/documents/{documentId}` |
81
+ | `biaws://workspaces/{workspaceId}/documents/{documentId}/content` | `/api/knowledge/documents/{documentId}/content` |
82
+ | `biaws://workspaces/{workspaceId}/documents/{documentId}/references` | `/api/knowledge/documents/{documentId}/references` |
83
+ | `biaws://workspaces/{workspaceId}/documents/{documentId}/revisions` | `/api/knowledge/documents/{documentId}/revisions` |
84
+ | `biaws://workspaces/{workspaceId}/documents/{documentId}/revisions/{revision}` | `/api/knowledge/documents/{documentId}/revisions/{revision}` |
85
+ | `biaws://workspaces/{workspaceId}/documents/{documentId}/observations` | `/api/knowledge/documents/{documentId}/observations` |
86
+ | `biaws://workspaces/{workspaceId}/documents/{documentId}/observations/{observationId}` | `/api/knowledge/documents/{documentId}/observations/{observationId}` |
87
+ | `biaws://workspaces/{workspaceId}/issues/{issueId}/files` | `/api/issues/{issueId}/attachments` |
88
+ | `biaws://workspaces/{workspaceId}/issues/{issueId}/files/{fileId}` | `/api/issues/{issueId}/attachments/{fileId}/metadata` |
89
+ | `biaws://workspaces/{workspaceId}/issues/{issueId}/files/{fileId}/content` | `/api/issues/{issueId}/attachments/{fileId}` |
90
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/files` | `/api/requests/{demandId}/attachments` |
91
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/files/{fileId}` | `/api/requests/{demandId}/attachments/{fileId}/metadata` |
92
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/files/{fileId}/content` | `/api/requests/{demandId}/attachments/{fileId}` |
93
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/tasks/{taskId}/files` | `/api/requests/{demandId}/tasks/{taskId}/attachments` |
94
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/tasks/{taskId}/files/{fileId}` | `/api/requests/{demandId}/tasks/{taskId}/attachments/{fileId}/metadata` |
95
+ | `biaws://workspaces/{workspaceId}/demands/{demandId}/tasks/{taskId}/files/{fileId}/content` | `/api/requests/{demandId}/tasks/{taskId}/attachments/{fileId}` |
96
+ | `biaws://workspaces/{workspaceId}/documents/{documentId}/files` | `/api/knowledge/documents/{documentId}/attachments` |
97
+ | `biaws://workspaces/{workspaceId}/documents/{documentId}/files/{fileId}` | `/api/knowledge/documents/{documentId}/attachments/{fileId}/metadata` |
98
+ | `biaws://workspaces/{workspaceId}/documents/{documentId}/files/{fileId}/content` | `/api/knowledge/documents/{documentId}/attachments/{fileId}` |
99
+ | `biaws://workspaces/{workspaceId}` | `/api/catalog/workspaces/{workspaceId}` |
100
+ | `biaws://workspaces/{workspaceId}/applications` | `/api/catalog/workspaces/{workspaceId}/applications` |
101
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}` | `/api/catalog/applications/{applicationId}` |
102
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/context` | `/api/catalog/applications/{applicationId}/context` |
103
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/components` | `/api/catalog/applications/{applicationId}/components` |
104
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/components/{componentId}` | `/api/catalog/components/{componentId}` |
105
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/integrations` | `/api/catalog/applications/{applicationId}/integrations` |
106
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/integrations/{integrationId}` | `/api/catalog/integrations/{integrationId}` |
107
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/repositories` | `/api/catalog/applications/{applicationId}/repositories` |
108
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/repositories/{repositoryId}` | `/api/catalog/repositories/{repositoryId}` |
109
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/repositories/{repositoryId}/components` | `/api/catalog/repositories/{repositoryId}/components` |
110
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/deployments` | `/api/catalog/applications/{applicationId}/deployments` |
111
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/deployments/{deploymentId}` | `/api/catalog/deployments/{deploymentId}` |
112
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/deployments/{deploymentId}/publications` | `/api/catalog/deployments/{deploymentId}/publications` |
113
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/deployments/{deploymentId}/runtimes` | `/api/catalog/deployments/{deploymentId}/runtimes` |
114
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/deployments/{deploymentId}/runtimes/{runtimeId}` | `/api/catalog/runtimes/{runtimeId}` |
115
+ | `biaws://workspaces/{workspaceId}/servers` | `/api/catalog/workspaces/{workspaceId}/servers` |
116
+ | `biaws://workspaces/{workspaceId}/servers/{serverId}` | `/api/catalog/servers/{serverId}` |
117
+ | `biaws://workspaces/{workspaceId}/servers/{serverId}/runtimes` | `/api/catalog/servers/{serverId}/runtimes` |
118
+ | `biaws://workspaces/{workspaceId}/servers/{serverId}/deployments` | `/api/catalog/servers/{serverId}/deployments` |
119
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/topology-diagrams` | `/api/catalog/applications/{applicationId}/topology-diagrams` |
120
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/topology-diagrams/{diagramId}` | `/api/catalog/topology-diagrams/{diagramId}` |
121
+ | `biaws://workspaces/{workspaceId}/collections/{resourceType}` | `/api/resource-collections/{resourceType}` |
122
+ | `biaws://workspaces/{workspaceId}/secrets/{secretId}` | `/api/secrets/{secretId}` |
123
+ | `biaws://workspaces/{workspaceId}/classification-catalog` | `/api/issues/taxonomy` |
124
+ | `biaws://workspaces/{workspaceId}/document-types` | `/api/knowledge/document-types` |
125
+ | `biaws://workspaces/{workspaceId}/monitoring/runtime-topology` | `/api/monitoring/runtime-topology` |
126
+ | `biaws://workspaces/{workspaceId}/monitoring/runtime-targets` | `/api/monitoring/runtime-targets` |
127
+ | `biaws://workspaces/{workspaceId}/monitoring/metadata-profiles` | `/api/monitoring/metadata-profiles` |
128
+ | `biaws://workspaces/{workspaceId}/monitoring/templates/{templateId}` | `/api/monitoring/templates/{templateId}` |
129
+ | `biaws://workspaces/{workspaceId}/monitoring/templates/{templateId}/versions/{version}` | `/api/monitoring/templates/{templateId}?version={version}` |
130
+ | `biaws://workspaces/{workspaceId}/monitoring/templates/{templateId}/versions/{version}/contract` | `/api/monitoring/templates/{templateId}/versions/{version}/contract` |
131
+ | `biaws://workspaces/{workspaceId}/monitoring/templates/{templateId}/versions/{version}/usage` | `/api/monitoring/templates/{templateId}/versions/{version}/usage` |
132
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/monitoring/health` | `/api/monitoring/applications/{applicationId}/health` |
133
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/deployments/{deploymentId}/runtimes/{runtimeId}/monitoring/active-monitors` | `/api/monitoring/runtimes/{runtimeId}/active-monitors` |
134
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/deployments/{deploymentId}/runtimes/{runtimeId}/monitoring/active-monitors/{monitorId}` | `/api/monitoring/runtimes/{runtimeId}/active-monitors/{monitorId}` |
135
+ | `biaws://workspaces/{workspaceId}/audit/{entityType}/{entityId}` | `/api/audit/{entityType}/{entityId}` |
136
+ | `biaws://workspaces/{workspaceId}/applications/{applicationId}/classification-catalog` | `/api/issues/taxonomy?applicationId={applicationId}` |
137
+
138
+ ## Compatibilidade
139
+
140
+ As tools atuais de leitura permanecem disponíveis. Tools de busca, filtros, agregação, simulação e escrita continuam sendo operações de domínio; a refatoração não transforma automaticamente toda rota GET em resource. O MCP não anuncia subscriptions nem notificações de atualização enquanto essas funcionalidades não forem implementadas.
141
+
142
+ As rotas agregadas da API mantêm o comportamento anterior. `includeComments=false` permite ler uma issue sem buscar toda a conversa. Novas rotas granulares de leitura retornam `context` com os IDs canônicos, `items` e `meta` para coleções ou `value` para itens.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "biaws-mcp",
3
- "version": "0.9.0",
3
+ "version": "0.11.0",
4
4
  "description": "Servidor MCP de domínio para o Bondia Workspaces",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -81,15 +81,7 @@ function normalizedTags(tags = []) {
81
81
  ];
82
82
  }
83
83
 
84
- function findAttachment(attachments, attachmentId) {
85
- const id = String(attachmentId);
86
- return (attachments || []).find(
87
- (attachment) =>
88
- String(attachment.id || "") === id || String(attachment.index) === id,
89
- );
90
- }
91
-
92
- async function resolveTarget(args, { verifyAttachment = false } = {}) {
84
+ async function resolveTarget(args) {
93
85
  const entityType = String(args.entityType || "").trim();
94
86
  const entityId = String(args.entityId || "").trim();
95
87
  if (!ENTITY_PATHS[entityType] && entityType !== "task") {
@@ -106,64 +98,11 @@ async function resolveTarget(args, { verifyAttachment = false } = {}) {
106
98
  }
107
99
 
108
100
  const taskId = String(args.taskId || "").trim();
109
- if (!taskId) {
110
- throw domainError("taskId is required when entityType is task");
111
- }
112
- const payload = await fetchJson(
113
- `/api/requests/${encodeURIComponent(entityId)}`,
114
- cleanParams({
115
- workspaceId: args.workspaceId,
116
- applicationId: args.applicationId,
117
- componentId: args.componentId,
118
- }),
119
- );
120
- const request = payload.request;
121
- if (!request) {
122
- throw domainError(`Demand not found: ${entityId}`, "NOT_FOUND", 404);
123
- }
124
- const task = (request.tasks || []).find(
125
- (item) =>
126
- String(item.id || "") === taskId ||
127
- String(item.code || "").toLowerCase() === taskId.toLowerCase(),
128
- );
129
- if (!task) {
130
- throw domainError(`Task not found: ${taskId}`, "NOT_FOUND", 404);
131
- }
132
- const taskTag = String(task.code || "")
133
- .trim()
134
- .toLowerCase();
135
- if (!taskTag) {
136
- throw domainError(
137
- `Task ${taskId} must have a code before files can be associated with it`,
138
- );
139
- }
140
-
141
- let attachment;
142
- if (verifyAttachment) {
143
- attachment = findAttachment(request.attachments, args.attachmentId);
144
- if (!attachment) {
145
- throw domainError(
146
- `Attachment not found: ${args.attachmentId}`,
147
- "NOT_FOUND",
148
- 404,
149
- );
150
- }
151
- const belongsToTask = normalizedTags(attachment.tags).includes(taskTag);
152
- if (!belongsToTask) {
153
- throw domainError(
154
- `Attachment ${args.attachmentId} is not associated with task ${taskId}`,
155
- "ATTACHMENT_NOT_ASSOCIATED_WITH_TASK",
156
- 404,
157
- );
158
- }
159
- }
160
-
101
+ if (!taskId) throw domainError("taskId is required when entityType is task");
161
102
  return {
162
- entityPath: "requests",
163
- entityId: request.id,
164
- task,
165
- attachment,
166
- tags: normalizedTags([...(args.tags || []), taskTag]),
103
+ entityPath: `requests/${encodeURIComponent(entityId)}/tasks`,
104
+ entityId: taskId,
105
+ tags: normalizedTags(args.tags),
167
106
  };
168
107
  }
169
108
 
@@ -217,9 +156,7 @@ export async function uploadAttachments(args = {}) {
217
156
  }
218
157
 
219
158
  export async function downloadAttachment(args = {}) {
220
- const target = await resolveTarget(args, {
221
- verifyAttachment: args.entityType === "task",
222
- });
159
+ const target = await resolveTarget(args);
223
160
  const { content, headers } = await fetchBinary(
224
161
  attachmentPath(target, args.attachmentId),
225
162
  requestParams(args),
@@ -238,9 +175,7 @@ export async function downloadAttachment(args = {}) {
238
175
  }
239
176
 
240
177
  export async function updateAttachmentTags(args = {}) {
241
- const target = await resolveTarget(args, {
242
- verifyAttachment: args.entityType === "task",
243
- });
178
+ const target = await resolveTarget(args);
244
179
  return sendJson(
245
180
  attachmentPath(target, args.attachmentId, "/tags"),
246
181
  { tags: target.tags },
@@ -250,9 +185,7 @@ export async function updateAttachmentTags(args = {}) {
250
185
  }
251
186
 
252
187
  export async function deleteAttachment(args = {}) {
253
- const target = await resolveTarget(args, {
254
- verifyAttachment: args.entityType === "task",
255
- });
188
+ const target = await resolveTarget(args);
256
189
  return deleteJson(
257
190
  attachmentPath(target, args.attachmentId),
258
191
  requestParams(args),
@@ -0,0 +1,10 @@
1
+ import { cleanParams, fetchJson } from "../../httpClient.js";
2
+
3
+ export async function listAuditEvents(args = {}) {
4
+ const entityId = String(args.entityId || "").trim();
5
+ if (!entityId) throw new Error("entityId is required");
6
+ return fetchJson(
7
+ `/api/audit/${encodeURIComponent(args.entityType)}/${encodeURIComponent(entityId)}`,
8
+ cleanParams({ limit: args.limit ?? 100 }),
9
+ );
10
+ }
@@ -0,0 +1,43 @@
1
+ import { listAuditEvents } from "./service.js";
2
+
3
+ export const auditTools = [
4
+ {
5
+ name: "audit_events_list",
6
+ description:
7
+ "Consulta os eventos mais recentes de auditoria de uma entidade, respeitando seu escopo e permissão de leitura. Retorna até 200 eventos; a API não oferece paginação deste histórico.",
8
+ inputSchema: {
9
+ type: "object",
10
+ required: ["entityType", "entityId"],
11
+ additionalProperties: false,
12
+ properties: {
13
+ entityType: {
14
+ type: "string",
15
+ enum: [
16
+ "issue",
17
+ "demand",
18
+ "task",
19
+ "document",
20
+ "taxonomy",
21
+ "skill",
22
+ "application",
23
+ "workspace",
24
+ "component",
25
+ "integration",
26
+ "repository",
27
+ "server",
28
+ "deployment",
29
+ "runtime",
30
+ ],
31
+ },
32
+ entityId: {
33
+ type: "string",
34
+ minLength: 1,
35
+ description:
36
+ "ID da entidade usado pela API; códigos de melhorias não são resolvidos nesta ferramenta.",
37
+ },
38
+ limit: { type: "integer", minimum: 1, maximum: 200, default: 100 },
39
+ },
40
+ },
41
+ handler: listAuditEvents,
42
+ },
43
+ ];