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 +78 -11
- package/docs/resources.md +142 -0
- package/package.json +1 -1
- package/src/domains/attachments/service.js +8 -75
- package/src/domains/audit/service.js +10 -0
- package/src/domains/audit/tools.js +43 -0
- package/src/domains/demands/service.js +183 -19
- package/src/domains/demands/tools.js +145 -0
- package/src/domains/issues/service.js +44 -0
- package/src/domains/knowledge/service.js +14 -0
- package/src/domains/knowledge/tools.js +14 -0
- package/src/domains/monitoring/service.js +34 -0
- package/src/domains/monitoring/tools.js +62 -0
- package/src/mcpServer.js +91 -4
- package/src/resourceCatalog.js +530 -0
- package/src/resourceLinks.js +60 -0
- package/src/resources.js +429 -0
- package/src/tools.js +75 -4
- package/src/version.js +1 -1
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.
|
|
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.
|
|
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.
|
|
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
|
-
- `
|
|
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
|
|
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
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
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
|
-
|
|
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
|
@@ -81,15 +81,7 @@ function normalizedTags(tags = []) {
|
|
|
81
81
|
];
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
function
|
|
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:
|
|
163
|
-
entityId:
|
|
164
|
-
|
|
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
|
+
];
|