biaws-mcp 0.2.0 → 0.4.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 +22 -5
- package/package.json +1 -1
- package/src/domains/issues/service.js +28 -0
- package/src/domains/monitoring/service.js +36 -0
- package/src/domains/monitoring/tools.js +65 -0
- package/src/tools.js +54 -0
- package/src/version.js +1 -1
package/README.md
CHANGED
|
@@ -17,8 +17,9 @@ O servidor separa os domínios:
|
|
|
17
17
|
- `attachments_*`: envio, download, classificação e exclusão de arquivos de
|
|
18
18
|
chamados, melhorias, tarefas e procedimentos.
|
|
19
19
|
- `secrets_*`: consulta e registro de metadados de segredos, sem acesso aos valores.
|
|
20
|
-
- `monitoring_templates_
|
|
21
|
-
versionada de templates
|
|
20
|
+
- `monitoring_templates_*`, `runtime_active_monitors_*` e
|
|
21
|
+
`runtime_monitoring_results_list`: administração versionada de templates,
|
|
22
|
+
configuração de monitores e consulta do histórico dos runtimes.
|
|
22
23
|
- `resource_collections_*` e `*_move_to_collection`: organização hierárquica
|
|
23
24
|
de aplicações, regras, decisões, procedimentos, segredos, skills e servidores.
|
|
24
25
|
|
|
@@ -65,13 +66,13 @@ O pacote público expõe o executável `biaws-mcp`. Clientes configurados pelo C
|
|
|
65
66
|
usam uma versão fixada por meio do cache local do npm:
|
|
66
67
|
|
|
67
68
|
```bash
|
|
68
|
-
npx --yes biaws-mcp@0.
|
|
69
|
+
npx --yes biaws-mcp@0.3.0
|
|
69
70
|
```
|
|
70
71
|
|
|
71
72
|
Também é possível instalá-lo explicitamente:
|
|
72
73
|
|
|
73
74
|
```bash
|
|
74
|
-
npm install --global biaws-mcp@0.
|
|
75
|
+
npm install --global biaws-mcp@0.3.0
|
|
75
76
|
biaws-mcp
|
|
76
77
|
```
|
|
77
78
|
|
|
@@ -90,7 +91,7 @@ npm start
|
|
|
90
91
|
Em um cliente MCP, configure o comando:
|
|
91
92
|
|
|
92
93
|
```bash
|
|
93
|
-
npx --yes biaws-mcp@0.
|
|
94
|
+
npx --yes biaws-mcp@0.3.0
|
|
94
95
|
```
|
|
95
96
|
|
|
96
97
|
O fluxo recomendado é gerar a configuração completa com:
|
|
@@ -163,6 +164,18 @@ Monitoramentos ativos são configurados por referência pública ou ID do runtim
|
|
|
163
164
|
- `runtime_active_monitors_update`;
|
|
164
165
|
- `runtime_active_monitors_archive`.
|
|
165
166
|
|
|
167
|
+
`runtime_monitoring_results_list` consulta o histórico unificado de observações
|
|
168
|
+
ativas, passivas e manuais. `observedFrom` e `observedTo` aceitam uma data
|
|
169
|
+
`YYYY-MM-DD` ou um instante ISO 8601; datas sem horário preservam a semântica de
|
|
170
|
+
dia inteiro no limite final.
|
|
171
|
+
|
|
172
|
+
`runtime_monitoring_health_summary` consulta períodos extensos sem transferir
|
|
173
|
+
todo o histórico. A tool agrega uma série por monitoramento, preserva o pior
|
|
174
|
+
estado observado em cada intervalo e escolhe uma resolução compatível com
|
|
175
|
+
`maxPoints` (50 a 1.000). Sem intervalo explícito, resume os últimos 30 dias.
|
|
176
|
+
Use o resumo para tendências e `runtime_monitoring_results_list` para abrir os
|
|
177
|
+
eventos detalhados dos intervalos relevantes.
|
|
178
|
+
|
|
166
179
|
As tools não aceitam `workspaceId`; o escopo vem exclusivamente de
|
|
167
180
|
`BIAWS_WORKSPACE_ID`. Configurações REST podem referenciar segredos apenas por
|
|
168
181
|
identificadores públicos em `headerRefs`; valores de credenciais não pertencem
|
|
@@ -200,6 +213,10 @@ conhecimento.
|
|
|
200
213
|
- `issues_search`: busca issues com os mesmos filtros principais da
|
|
201
214
|
`biaws-api`, inclusive por workspace, aplicação e componente afetado.
|
|
202
215
|
- `issues_get`: obtém uma issue com comentários e metadados dos anexos.
|
|
216
|
+
- `issues_add_comment`: adiciona um comentário em Markdown a uma issue
|
|
217
|
+
existente; a autoria é atribuída pela identidade autenticada na API.
|
|
218
|
+
- `issues_update_comment`: atualiza o conteúdo e, opcionalmente, a data de um
|
|
219
|
+
comentário existente, preservando sua autoria original.
|
|
203
220
|
- `issues_get_classification_catalog`: obtém a árvore taxonômica e os grupos de tags válidos; opcionalmente inclui listas achatadas de IDs e caminhos.
|
|
204
221
|
- `issues_create_taxonomy_item`: inclui um item na raiz ou sob outro item,
|
|
205
222
|
opcionalmente configurando seu escopo por aplicações.
|
package/package.json
CHANGED
|
@@ -130,6 +130,34 @@ export async function getIssueDetails(args = {}) {
|
|
|
130
130
|
return fetchJson(`/api/issues/${encodeURIComponent(args.issueId)}`);
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
+
export async function addIssueComment(args = {}) {
|
|
134
|
+
const issueId = String(args.issueId || "").trim();
|
|
135
|
+
const text = String(args.text || "").trim();
|
|
136
|
+
if (!issueId) throw new Error("issueId is required");
|
|
137
|
+
if (!text) throw new Error("text is required");
|
|
138
|
+
|
|
139
|
+
return sendJson(
|
|
140
|
+
`/api/issues/${encodeURIComponent(issueId)}/comments`,
|
|
141
|
+
cleanParams({ text, date: args.date }),
|
|
142
|
+
{},
|
|
143
|
+
"POST",
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export async function updateIssueComment(args = {}) {
|
|
148
|
+
const issueId = String(args.issueId || "").trim();
|
|
149
|
+
const commentId = String(args.commentId || "").trim();
|
|
150
|
+
const text = String(args.text || "").trim();
|
|
151
|
+
if (!issueId) throw new Error("issueId is required");
|
|
152
|
+
if (!commentId) throw new Error("commentId is required");
|
|
153
|
+
if (!text) throw new Error("text is required");
|
|
154
|
+
|
|
155
|
+
return sendJson(
|
|
156
|
+
`/api/issues/${encodeURIComponent(issueId)}/comments/${encodeURIComponent(commentId)}`,
|
|
157
|
+
cleanParams({ text, date: args.date }),
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
|
|
133
161
|
export async function getIssueClassificationCatalog(args = {}) {
|
|
134
162
|
const payload = await fetchJson(
|
|
135
163
|
"/api/issues/taxonomy",
|
|
@@ -34,6 +34,16 @@ function activeMonitorsPath(args, monitor = false) {
|
|
|
34
34
|
return monitor ? `${base}/${segment(requiredId(args, "monitorId"))}` : base;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
function runtimeMonitoringTimelinePath(args) {
|
|
38
|
+
const runtimeReference = requiredId(args, "runtimeReference");
|
|
39
|
+
return `/api/monitoring/runtimes/${segment(runtimeReference)}/timeline`;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function runtimeMonitoringHealthSummaryPath(args) {
|
|
43
|
+
const runtimeReference = requiredId(args, "runtimeReference");
|
|
44
|
+
return `/api/monitoring/runtimes/${segment(runtimeReference)}/health-summary`;
|
|
45
|
+
}
|
|
46
|
+
|
|
37
47
|
function payload(args, omitted) {
|
|
38
48
|
const excluded = new Set(omitted);
|
|
39
49
|
const result = Object.fromEntries(
|
|
@@ -115,6 +125,32 @@ export function listRuntimeActiveMonitors(args = {}) {
|
|
|
115
125
|
);
|
|
116
126
|
}
|
|
117
127
|
|
|
128
|
+
export function listRuntimeMonitoringResults(args = {}) {
|
|
129
|
+
return fetchJson(
|
|
130
|
+
runtimeMonitoringTimelinePath(args),
|
|
131
|
+
cleanParams({
|
|
132
|
+
observedFrom: args.observedFrom,
|
|
133
|
+
observedTo: args.observedTo,
|
|
134
|
+
status: args.status,
|
|
135
|
+
page: args.page,
|
|
136
|
+
limit: args.limit,
|
|
137
|
+
}),
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export function getRuntimeMonitoringHealthSummary(args = {}) {
|
|
142
|
+
return fetchJson(
|
|
143
|
+
runtimeMonitoringHealthSummaryPath(args),
|
|
144
|
+
cleanParams({
|
|
145
|
+
observedFrom: args.observedFrom,
|
|
146
|
+
observedTo: args.observedTo,
|
|
147
|
+
status: args.status,
|
|
148
|
+
resolution: args.resolution,
|
|
149
|
+
maxPoints: args.maxPoints,
|
|
150
|
+
}),
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
|
|
118
154
|
export function createRuntimeActiveMonitor(args = {}) {
|
|
119
155
|
return sendJson(
|
|
120
156
|
activeMonitorsPath(args),
|
|
@@ -9,8 +9,10 @@ import {
|
|
|
9
9
|
getMonitoringTemplate,
|
|
10
10
|
getMonitoringTemplateContract,
|
|
11
11
|
getMonitoringTemplateUsage,
|
|
12
|
+
getRuntimeMonitoringHealthSummary,
|
|
12
13
|
listMonitoringTemplates,
|
|
13
14
|
listRuntimeActiveMonitors,
|
|
15
|
+
listRuntimeMonitoringResults,
|
|
14
16
|
previewMonitoringTemplate,
|
|
15
17
|
updateRuntimeActiveMonitor,
|
|
16
18
|
validateMonitoringTemplateSample,
|
|
@@ -134,6 +136,69 @@ export const monitoringTools = [
|
|
|
134
136
|
archiveMonitoringTemplate,
|
|
135
137
|
TEMPLATE_VERSION_ID_SCHEMA,
|
|
136
138
|
),
|
|
139
|
+
definition(
|
|
140
|
+
"runtime_monitoring_results_list",
|
|
141
|
+
"Lista resultados históricos unificados de monitoramento de um runtime, com filtros por instante inicial, instante final e status.",
|
|
142
|
+
listRuntimeMonitoringResults,
|
|
143
|
+
schema(
|
|
144
|
+
{
|
|
145
|
+
runtimeReference: ID,
|
|
146
|
+
observedFrom: {
|
|
147
|
+
type: "string",
|
|
148
|
+
description:
|
|
149
|
+
"Data (YYYY-MM-DD) ou instante ISO 8601 inicial, inclusivo",
|
|
150
|
+
},
|
|
151
|
+
observedTo: {
|
|
152
|
+
type: "string",
|
|
153
|
+
description:
|
|
154
|
+
"Data (YYYY-MM-DD, incluindo o dia inteiro) ou instante ISO 8601 final, inclusivo",
|
|
155
|
+
},
|
|
156
|
+
status: {
|
|
157
|
+
type: "string",
|
|
158
|
+
enum: ["unknown", "healthy", "degraded", "unavailable", "stopped"],
|
|
159
|
+
},
|
|
160
|
+
page: { type: "integer", minimum: 1, default: 1 },
|
|
161
|
+
limit: { type: "integer", minimum: 1, maximum: 100, default: 50 },
|
|
162
|
+
},
|
|
163
|
+
["runtimeReference"],
|
|
164
|
+
),
|
|
165
|
+
),
|
|
166
|
+
definition(
|
|
167
|
+
"runtime_monitoring_health_summary",
|
|
168
|
+
"Resume a evolução temporal da saúde de um runtime em séries agregadas por monitor, preservando o pior estado de cada intervalo e limitando a quantidade de pontos.",
|
|
169
|
+
getRuntimeMonitoringHealthSummary,
|
|
170
|
+
schema(
|
|
171
|
+
{
|
|
172
|
+
runtimeReference: ID,
|
|
173
|
+
observedFrom: {
|
|
174
|
+
type: "string",
|
|
175
|
+
description:
|
|
176
|
+
"Data (YYYY-MM-DD) ou instante ISO 8601 inicial; o padrão cobre 30 dias antes do limite final",
|
|
177
|
+
},
|
|
178
|
+
observedTo: {
|
|
179
|
+
type: "string",
|
|
180
|
+
description:
|
|
181
|
+
"Data (YYYY-MM-DD, incluindo o dia inteiro) ou instante ISO 8601 final; o padrão é o instante atual",
|
|
182
|
+
},
|
|
183
|
+
status: {
|
|
184
|
+
type: "string",
|
|
185
|
+
enum: ["unknown", "healthy", "degraded", "unavailable", "stopped"],
|
|
186
|
+
},
|
|
187
|
+
resolution: {
|
|
188
|
+
type: "string",
|
|
189
|
+
enum: ["auto", "1m", "5m", "15m", "1h", "6h", "1d", "7d", "30d"],
|
|
190
|
+
default: "auto",
|
|
191
|
+
},
|
|
192
|
+
maxPoints: {
|
|
193
|
+
type: "integer",
|
|
194
|
+
minimum: 50,
|
|
195
|
+
maximum: 1000,
|
|
196
|
+
default: 400,
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
["runtimeReference"],
|
|
200
|
+
),
|
|
201
|
+
),
|
|
137
202
|
definition(
|
|
138
203
|
"runtime_active_monitors_list",
|
|
139
204
|
"Lista os monitoramentos ativos configurados para um runtime acessível no workspace selecionado.",
|
package/src/tools.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
addIssueComment,
|
|
2
3
|
classifyIssue,
|
|
3
4
|
createTaxonomyItem,
|
|
4
5
|
createIssue,
|
|
@@ -10,6 +11,7 @@ import {
|
|
|
10
11
|
summarizeIssuesForSupport,
|
|
11
12
|
suggestTaxonomy,
|
|
12
13
|
updateIssueState,
|
|
14
|
+
updateIssueComment,
|
|
13
15
|
updateTaxonomyItem,
|
|
14
16
|
} from "./domains/issues/service.js";
|
|
15
17
|
import {
|
|
@@ -156,6 +158,58 @@ const tools = [
|
|
|
156
158
|
},
|
|
157
159
|
handler: getIssueDetails,
|
|
158
160
|
},
|
|
161
|
+
{
|
|
162
|
+
name: "issues_add_comment",
|
|
163
|
+
description: "Adiciona um comentário em Markdown a uma issue existente.",
|
|
164
|
+
inputSchema: {
|
|
165
|
+
type: "object",
|
|
166
|
+
required: ["issueId", "text"],
|
|
167
|
+
additionalProperties: false,
|
|
168
|
+
properties: {
|
|
169
|
+
issueId: { type: "string", minLength: 1 },
|
|
170
|
+
text: {
|
|
171
|
+
type: "string",
|
|
172
|
+
minLength: 1,
|
|
173
|
+
description: "Conteúdo do comentário em Markdown.",
|
|
174
|
+
},
|
|
175
|
+
date: {
|
|
176
|
+
type: "string",
|
|
177
|
+
description:
|
|
178
|
+
"Data do comentário em formato aceito pela API; usa o momento atual quando omitida.",
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
handler: addIssueComment,
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
name: "issues_update_comment",
|
|
186
|
+
description:
|
|
187
|
+
"Atualiza o conteúdo e, opcionalmente, a data de um comentário de issue.",
|
|
188
|
+
inputSchema: {
|
|
189
|
+
type: "object",
|
|
190
|
+
required: ["issueId", "commentId", "text"],
|
|
191
|
+
additionalProperties: false,
|
|
192
|
+
properties: {
|
|
193
|
+
issueId: { type: "string", minLength: 1 },
|
|
194
|
+
commentId: {
|
|
195
|
+
type: "string",
|
|
196
|
+
minLength: 1,
|
|
197
|
+
description: "ID do comentário retornado por issues_get.",
|
|
198
|
+
},
|
|
199
|
+
text: {
|
|
200
|
+
type: "string",
|
|
201
|
+
minLength: 1,
|
|
202
|
+
description: "Novo conteúdo do comentário em Markdown.",
|
|
203
|
+
},
|
|
204
|
+
date: {
|
|
205
|
+
type: "string",
|
|
206
|
+
description:
|
|
207
|
+
"Nova data do comentário; usa o momento atual quando omitida.",
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
handler: updateIssueComment,
|
|
212
|
+
},
|
|
159
213
|
{
|
|
160
214
|
name: "issues_get_classification_catalog",
|
|
161
215
|
description:
|
package/src/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export const SERVER_NAME = "biaws-mcp";
|
|
2
|
-
export const SERVER_VERSION = "0.
|
|
2
|
+
export const SERVER_VERSION = "0.4.0";
|