fg-tracker-mcp 0.11.0 → 0.12.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/CHANGELOG.md +22 -0
- package/README.md +15 -10
- package/dist/cli.js +19 -8
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +48 -7
- package/dist/client.js +119 -26
- package/dist/client.js.map +1 -1
- package/dist/confirm.d.ts +15 -0
- package/dist/confirm.js +32 -0
- package/dist/confirm.js.map +1 -0
- package/dist/format.js +2 -2
- package/dist/format.js.map +1 -1
- package/dist/guide.js +2 -2
- package/dist/guide.js.map +1 -1
- package/dist/infra/tools.js +50 -22
- package/dist/infra/tools.js.map +1 -1
- package/dist/loadtest/scenario.d.ts +4 -4
- package/dist/loadtest/tools.d.ts +1 -1
- package/dist/loadtest/tools.js +64 -22
- package/dist/loadtest/tools.js.map +1 -1
- package/dist/permissions.d.ts +85 -0
- package/dist/permissions.js +216 -0
- package/dist/permissions.js.map +1 -0
- package/dist/schemas.d.ts +59 -0
- package/dist/schemas.js +32 -1
- package/dist/schemas.js.map +1 -1
- package/dist/server.d.ts +10 -1
- package/dist/server.js +137 -28
- package/dist/server.js.map +1 -1
- package/dist/writes.d.ts +35 -0
- package/dist/writes.js +409 -0
- package/dist/writes.js.map +1 -0
- package/package.json +1 -1
package/dist/schemas.js
CHANGED
|
@@ -39,10 +39,11 @@ const traceItem = loose({ traceId: z.string(), name: z.string(), durationMs: num
|
|
|
39
39
|
export const statusOutput = loose({
|
|
40
40
|
api: loose({ url: z.string(), status: z.string() }),
|
|
41
41
|
credential: z.object({
|
|
42
|
-
kind: z.enum(['access_token', 'session', 'none']).describe('access_token = token pessoal fgt_… (
|
|
42
|
+
kind: z.enum(['access_token', 'session', 'none']).describe('access_token = token pessoal fgt_… (faz só o que as permissões dele cobrem; recomendado); session = sessão do painel (faz tudo o que a pessoa faz)'),
|
|
43
43
|
type: z.string().nullable(),
|
|
44
44
|
name: z.string().nullable(),
|
|
45
45
|
scope: z.string().nullable(),
|
|
46
|
+
scopes: z.array(z.string()).nullable().describe('Permissões do token agora (GET /auth/me nesta chamada)'),
|
|
46
47
|
projects: z.union([z.literal('all'), z.number()]).nullable(),
|
|
47
48
|
expiresAt: z.string().nullable(),
|
|
48
49
|
expired: z.boolean().nullable(),
|
|
@@ -51,6 +52,23 @@ export const statusOutput = loose({
|
|
|
51
52
|
apiKeyConfigured: z.boolean(),
|
|
52
53
|
readOnlyMode: z.boolean(),
|
|
53
54
|
maxItems: num,
|
|
55
|
+
writeCredential: z.object({
|
|
56
|
+
source: z.enum(['FG_TRACKER_TOKEN', 'FG_TRACKER_API_KEY', 'none']).describe('Credencial que decide as escritas: com FG_TRACKER_TOKEN, a chave nunca é alternativa'),
|
|
57
|
+
detail: z.string(),
|
|
58
|
+
}),
|
|
59
|
+
permissions: z.object({
|
|
60
|
+
mode: z.enum(['session', 'token', 'token-unverified', 'none']),
|
|
61
|
+
checkedAt: z.string().describe('Quando as permissões foram lidas (início do MCP)'),
|
|
62
|
+
scopes: z.array(z.string()).nullable().describe('Permissões do token ao iniciar, que decidiram as ferramentas registradas'),
|
|
63
|
+
introspectionError: z.string().nullable(),
|
|
64
|
+
changedSinceStart: z.boolean().nullable().describe('Permissões ou projetos do token diferentes dos lidos ao iniciar'),
|
|
65
|
+
projectsChanged: z.boolean().nullable().describe('Projetos do token diferentes dos lidos ao iniciar'),
|
|
66
|
+
added: z.array(z.string()),
|
|
67
|
+
removed: z.array(z.string()),
|
|
68
|
+
restartRequired: z.boolean().describe('Reinicie o cliente MCP para a lista de ferramentas refletir as permissões atuais'),
|
|
69
|
+
toolsRegistered: num,
|
|
70
|
+
toolsHidden: z.array(z.object({ name: z.string(), reason: z.string(), missing: z.array(z.string()).optional() })),
|
|
71
|
+
}),
|
|
54
72
|
projects: loose({ total: num.nullable(), items: z.array(z.object({ id: z.string(), name: z.string() })), error: z.string().optional() }),
|
|
55
73
|
ai: loose({ enabled: z.boolean() }).nullable(),
|
|
56
74
|
});
|
|
@@ -158,6 +176,19 @@ export const trafficOutput = loose({
|
|
|
158
176
|
lastRollupAt: z.string().nullable().optional(),
|
|
159
177
|
notes: strList,
|
|
160
178
|
});
|
|
179
|
+
export const membersOutput = loose({
|
|
180
|
+
total: num,
|
|
181
|
+
returned: num,
|
|
182
|
+
truncated: z.boolean(),
|
|
183
|
+
items: z.array(loose({ id: z.string(), name: z.string(), email: z.string(), role: z.string(), status: z.string() })),
|
|
184
|
+
});
|
|
185
|
+
export const alertRulesOutput = loose({
|
|
186
|
+
total: num,
|
|
187
|
+
returned: num,
|
|
188
|
+
truncated: z.boolean(),
|
|
189
|
+
items: z.array(loose({ id: z.string(), type: z.string(), enabled: z.boolean(), severity: z.string().optional(), channels: strList.optional(), config: loose({}).optional() })),
|
|
190
|
+
delivery: loose({ minSeverity: z.record(z.string(), z.string().nullable()) }).nullable(),
|
|
191
|
+
});
|
|
161
192
|
export const monitorsOutput = loose({
|
|
162
193
|
total: num,
|
|
163
194
|
returned: num,
|
package/dist/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -5,14 +5,21 @@
|
|
|
5
5
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
6
6
|
import { TrackClient } from './client.js';
|
|
7
7
|
import { type ToolText } from './format.js';
|
|
8
|
+
import { type ToolAccess } from './permissions.js';
|
|
8
9
|
export declare const SERVER_NAME = "fg-tracker";
|
|
9
|
-
export declare const SERVER_VERSION = "0.
|
|
10
|
+
export declare const SERVER_VERSION = "0.12.0";
|
|
10
11
|
export interface CreateServerOptions {
|
|
11
12
|
client?: TrackClient;
|
|
12
13
|
/** Registra também os nomes antigos `track_*` (default: `FG_TRACKER_LEGACY_TOOL_NAMES`, ligado se ausente). */
|
|
13
14
|
legacyToolNames?: boolean;
|
|
14
15
|
/** Só registra ferramentas com `readOnlyHint: true` (default: `FG_TRACKER_READ_ONLY`, desligado se ausente). */
|
|
15
16
|
readOnly?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Credencial e permissões lidas ao iniciar (`resolveToolAccess`, que o `cli.ts` chama antes).
|
|
19
|
+
* Sem ela, a política vem só do prefixo do token: sessão registra tudo e um `fgt_…` sem
|
|
20
|
+
* introspecção registra só as ferramentas de leitura.
|
|
21
|
+
*/
|
|
22
|
+
access?: ToolAccess;
|
|
16
23
|
}
|
|
17
24
|
/** Prefixo das ferramentas próprias do FG Tracker (`infra_*` e `loadtest_*` têm o seu). */
|
|
18
25
|
export declare const TOOL_PREFIX = "tracker_";
|
|
@@ -31,3 +38,5 @@ export declare function legacyToolNamesFromEnv(env?: NodeJS.ProcessEnv): boolean
|
|
|
31
38
|
export declare function readOnlyFromEnv(env?: NodeJS.ProcessEnv): boolean;
|
|
32
39
|
export declare function createServer(options?: CreateServerOptions): McpServer;
|
|
33
40
|
export type { ToolText };
|
|
41
|
+
export { resolveToolAccess, TOOL_SCOPES } from './permissions.js';
|
|
42
|
+
export type { ToolAccess } from './permissions.js';
|
package/dist/server.js
CHANGED
|
@@ -15,9 +15,11 @@ import { definedFilters, envFilterSchema, filterNote, fromSchema, isoInstantSche
|
|
|
15
15
|
import { registerJourneyPrompts } from './journeys.js';
|
|
16
16
|
import { WINDOW_IGNORED_NOTE, evidenceLines, evidenceResourceLinks, getWithWindow, issueLinks, rangeWindow, resolveWindow, spanWindow, traceEvidence, traceLinks, tracesEvidence } from './links.js';
|
|
17
17
|
import { registerLoadtestTools } from './loadtest/tools.js';
|
|
18
|
+
import { SCOPE_LABELS, defaultAccess, scopeLabel, scopesFromCredential, toolDecision } from './permissions.js';
|
|
19
|
+
import { registerWriteTools } from './writes.js';
|
|
18
20
|
import { detectDatabasesOutput, endpointsOutput, guideOutput, historyOutput, issueOutput, issuesOutput, logsOutput, monitorOutput, monitorsOutput, overviewOutput, projectsOutput, providersOutput, releasesOutput, statusOutput, traceOutput, tracesOutput, trafficOutput, verifyIngestOutput, } from './schemas.js';
|
|
19
21
|
export const SERVER_NAME = 'fg-tracker';
|
|
20
|
-
export const SERVER_VERSION = '0.
|
|
22
|
+
export const SERVER_VERSION = '0.12.0';
|
|
21
23
|
/** Valores para o resumo em texto com o mesmo corte do JSON (`compact`), avisando quantos ficaram de fora. */
|
|
22
24
|
function joinCapped(values) {
|
|
23
25
|
if (!values?.length)
|
|
@@ -95,13 +97,20 @@ export function readOnlyFromEnv(env = process.env) {
|
|
|
95
97
|
/**
|
|
96
98
|
* Política de registro, aplicada a toda ferramenta (inclusive `infra_*` e `loadtest_*`):
|
|
97
99
|
* - modo somente leitura: ferramenta sem `readOnlyHint: true` não é registrada (some de tools/list);
|
|
100
|
+
* - token pessoal: só as ferramentas cujas permissões (TOOL_SCOPES) o token tem; token cuja
|
|
101
|
+
* introspecção falhou só leva as de leitura;
|
|
98
102
|
* - aliases: cada nome de `LEGACY_ALIASED_TOOLS` ganha o `track_x`, com o mesmo schema e handler.
|
|
103
|
+
* O que ficou de fora vai para `report`, que o `tracker_status` mostra.
|
|
99
104
|
*/
|
|
100
|
-
function applyToolPolicy(server, policy) {
|
|
105
|
+
function applyToolPolicy(server, policy, report) {
|
|
101
106
|
const register = server.registerTool.bind(server);
|
|
102
107
|
server.registerTool = (name, config, handler) => {
|
|
103
|
-
|
|
108
|
+
const hidden = toolDecision(name, config.annotations?.readOnlyHint === true, policy);
|
|
109
|
+
if (hidden) {
|
|
110
|
+
report.hidden.push(hidden);
|
|
104
111
|
return undefined;
|
|
112
|
+
}
|
|
113
|
+
report.registered.push(name);
|
|
105
114
|
const tool = register(name, config, handler);
|
|
106
115
|
if (policy.legacyToolNames && LEGACY_ALIASED_TOOLS.has(name)) {
|
|
107
116
|
const legacy = LEGACY_TOOL_PREFIX + name.slice(TOOL_PREFIX.length);
|
|
@@ -119,10 +128,10 @@ function applyToolPolicy(server, policy) {
|
|
|
119
128
|
return tool;
|
|
120
129
|
};
|
|
121
130
|
}
|
|
122
|
-
const SESSION_WARNING = 'FG_TRACKER_TOKEN é uma sessão do painel:
|
|
131
|
+
const SESSION_WARNING = 'FG_TRACKER_TOKEN é uma sessão do painel: faz tudo o que você faz no painel (inclusive excluir) e cai com logout. Prefira um token pessoal fgt_… com só as permissões necessárias (painel → Conta → Tokens de acesso: modelo "Agente MCP" para criar e editar, "Somente leitura" para diagnóstico); FG_TRACKER_READ_ONLY=1 esconde as ferramentas de escrita.';
|
|
123
132
|
/** Tipo e validade da credencial de FG_TRACKER_TOKEN (GET /v1/auth/me), sem mostrar o token. */
|
|
124
133
|
async function describeCredential(client, now = Date.now()) {
|
|
125
|
-
const info = { kind: client.credentialKind, type: null, name: null, scope: null, projects: null, expiresAt: null, expired: null, warning: client.credentialKind === 'session' ? SESSION_WARNING : null };
|
|
134
|
+
const info = { kind: client.credentialKind, type: null, name: null, scope: null, scopes: null, projects: null, expiresAt: null, expired: null, warning: client.credentialKind === 'session' ? SESSION_WARNING : null };
|
|
126
135
|
let me;
|
|
127
136
|
try {
|
|
128
137
|
me = await client.get('/v1/auth/me');
|
|
@@ -145,24 +154,27 @@ async function describeCredential(client, now = Date.now()) {
|
|
|
145
154
|
if (isToken) {
|
|
146
155
|
info.name = credential.name ?? null;
|
|
147
156
|
info.scope = credential.scope ?? null;
|
|
157
|
+
info.scopes = scopesFromCredential(credential);
|
|
148
158
|
info.projects = credential.projectIds === null ? 'all' : Array.isArray(credential.projectIds) ? credential.projectIds.length : null;
|
|
149
159
|
const projects = credential.projectIds === null ? 'todos os projetos' : Array.isArray(credential.projectIds) ? `${credential.projectIds.length} projeto(s)` : '';
|
|
150
|
-
const scope = [
|
|
160
|
+
const scope = [`${info.scopes.length} permissões`, projects].filter(Boolean).join(', ');
|
|
151
161
|
label = `token pessoal${credential.name ? ` "${credential.name}"` : ''}${scope ? ` (${scope})` : ''}`;
|
|
152
162
|
}
|
|
163
|
+
// Projetos do token agora (`null` = todos; ausente quando não é token), para o aviso de reinício.
|
|
164
|
+
const projectIds = isToken ? (Array.isArray(credential.projectIds) ? credential.projectIds : credential.projectIds === null ? null : undefined) : undefined;
|
|
153
165
|
const renewal = isToken ? '' : ' Cada uso na segunda metade da validade renova a sessão; logout e troca de senha a revogam.';
|
|
154
166
|
const expiresAt = credential?.expiresAt ?? me.session?.expiresAt ?? null;
|
|
155
167
|
info.expiresAt = expiresAt;
|
|
156
168
|
if (!expiresAt)
|
|
157
|
-
return { line: `Validade do token: ${label}, sem data de expiração.`, info };
|
|
169
|
+
return { projectIds, line: `Validade do token: ${label}, sem data de expiração.`, info };
|
|
158
170
|
const t = Date.parse(expiresAt);
|
|
159
171
|
if (Number.isNaN(t))
|
|
160
|
-
return { line: `Validade do token: ${label}, expira em ${expiresAt}.`, info };
|
|
172
|
+
return { projectIds, line: `Validade do token: ${label}, expira em ${expiresAt}.`, info };
|
|
161
173
|
info.expired = t <= now;
|
|
162
174
|
if (t <= now)
|
|
163
|
-
return { line: `Validade do token: ${label} expirou ${ago(expiresAt, now)} (${expiresAt}). Gere um novo e atualize FG_TRACKER_TOKEN.`, info };
|
|
175
|
+
return { projectIds, line: `Validade do token: ${label} expirou ${ago(expiresAt, now)} (${expiresAt}). Gere um novo e atualize FG_TRACKER_TOKEN.`, info };
|
|
164
176
|
const soon = t - now < 2 * 86_400_000 ? ' ATENÇÃO: perto de expirar; gere um novo e atualize FG_TRACKER_TOKEN.' : '';
|
|
165
|
-
return { line: `Validade do token: ${label}, expira ${until(expiresAt, now)} (${expiresAt}).${soon}${renewal}`, info };
|
|
177
|
+
return { projectIds, line: `Validade do token: ${label}, expira ${until(expiresAt, now)} (${expiresAt}).${soon}${renewal}`, info };
|
|
166
178
|
}
|
|
167
179
|
function monitorLabel(m) {
|
|
168
180
|
const env = 'environment' in m ? ` · ${m.environment ?? 'sem ambiente'}` : '';
|
|
@@ -223,12 +235,55 @@ function traceDetailEvidence(t, traceId) {
|
|
|
223
235
|
}
|
|
224
236
|
return out.slice(0, 10);
|
|
225
237
|
}
|
|
238
|
+
const RESTART_NOTE = 'A lista de ferramentas é montada quando o MCP inicia, com as permissões lidas em GET /v1/auth/me. Se as permissões do token forem editadas no painel, reinicie o cliente MCP para a lista mudar; até lá, a API recusa (403) o que o token não pode mais, e o que foi acrescentado não aparece.';
|
|
239
|
+
/** Ferramentas ocultas agrupadas pelo motivo, em linhas curtas para o `tracker_status`. */
|
|
240
|
+
function hiddenLines(hidden) {
|
|
241
|
+
const groups = new Map();
|
|
242
|
+
for (const tool of hidden) {
|
|
243
|
+
const key = tool.reason === 'missing-scope'
|
|
244
|
+
? `sem ${(tool.missing ?? []).map((scope) => `"${scopeLabel(scope)}"`).join(' + ')}`
|
|
245
|
+
: tool.reason === 'read-only-mode'
|
|
246
|
+
? 'modo somente leitura (FG_TRACKER_READ_ONLY)'
|
|
247
|
+
: tool.reason === 'unverified-token'
|
|
248
|
+
? 'permissões do token não lidas ao iniciar'
|
|
249
|
+
: tool.reason === 'restricted-projects'
|
|
250
|
+
? 'token restrito a projetos (criar projeto exige token de todos os projetos)'
|
|
251
|
+
: 'ferramenta sem permissão declarada';
|
|
252
|
+
groups.set(key, [...(groups.get(key) ?? []), tool.name]);
|
|
253
|
+
}
|
|
254
|
+
return [...groups].map(([key, names]) => `- ${key}: ${names.slice(0, 12).join(', ')}${names.length > 12 ? ` (+${names.length - 12})` : ''}`);
|
|
255
|
+
}
|
|
256
|
+
function sameProjects(a, b) {
|
|
257
|
+
if (a === null || b === null)
|
|
258
|
+
return a === b;
|
|
259
|
+
const left = new Set(a.map((id) => id.toLowerCase()));
|
|
260
|
+
return left.size === new Set(b.map((id) => id.toLowerCase())).size && b.every((id) => left.has(id.toLowerCase()));
|
|
261
|
+
}
|
|
262
|
+
function projectsLabel(ids) {
|
|
263
|
+
return ids === null ? 'todos os projetos' : `${ids?.length ?? 0} projeto(s)`;
|
|
264
|
+
}
|
|
265
|
+
/** Qual credencial decide as escritas, sem mostrar valores. */
|
|
266
|
+
function writeCredentialInfo(client, access) {
|
|
267
|
+
if (client.hasToken) {
|
|
268
|
+
const ignoredKey = client.hasApiKey ? ' FG_TRACKER_API_KEY está definida, mas nunca é usada para escrever enquanto houver FG_TRACKER_TOKEN: uma recusa do token (401/403/404) é final.' : '';
|
|
269
|
+
if (access.mode === 'token-unverified')
|
|
270
|
+
return { source: 'FG_TRACKER_TOKEN', detail: `FG_TRACKER_TOKEN (token pessoal), mas as permissões não puderam ser lidas ao iniciar${access.error ? ` (${access.error})` : ''}: só as ferramentas de leitura foram registradas. Reinicie o cliente MCP com a API no ar.${ignoredKey}` };
|
|
271
|
+
if (access.mode === 'token')
|
|
272
|
+
return { source: 'FG_TRACKER_TOKEN', detail: `FG_TRACKER_TOKEN (token pessoal${access.tokenName ? ` "${access.tokenName}"` : ''}): escreve só com as permissões dele, dentro do seu papel em cada projeto${access.projectIds ? ` e só nos ${access.projectIds.length} projeto(s) do token` : ''}.${ignoredKey}` };
|
|
273
|
+
return { source: 'FG_TRACKER_TOKEN', detail: `FG_TRACKER_TOKEN (sessão do painel): escreve com o seu papel em cada projeto.${ignoredKey}` };
|
|
274
|
+
}
|
|
275
|
+
if (client.hasApiKey)
|
|
276
|
+
return { source: 'FG_TRACKER_API_KEY', detail: 'FG_TRACKER_API_KEY (sem FG_TRACKER_TOKEN): só loadtest_create_scenario e infra_discover gravam, pela chave e só no projeto dela (outro projectId é recusado); as demais ferramentas exigem FG_TRACKER_TOKEN.' };
|
|
277
|
+
return { source: 'none', detail: 'nenhuma credencial de escrita (defina FG_TRACKER_TOKEN).' };
|
|
278
|
+
}
|
|
226
279
|
export function createServer(options = {}) {
|
|
227
280
|
const client = options.client ?? new TrackClient(configFromEnv());
|
|
228
281
|
const outputLimit = maxItemsFromEnv();
|
|
229
282
|
const maxItems = outputLimit.value;
|
|
230
283
|
const legacyToolNames = options.legacyToolNames ?? legacyToolNamesFromEnv();
|
|
231
284
|
const readOnly = options.readOnly ?? readOnlyFromEnv();
|
|
285
|
+
const access = options.access ?? defaultAccess(client);
|
|
286
|
+
const report = { registered: [], hidden: [] };
|
|
232
287
|
const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION }, {
|
|
233
288
|
instructions: [
|
|
234
289
|
'Servidor MCP do FG Tracker (APM para Node: traces distribuídos, queries de qualquer banco via adapters, provedores externos, logs, issues com impacto por usuário e commits suspeitos, releases, monitores de uptime/jobs, detecção de N+1/loops/lentidão/erros).',
|
|
@@ -237,13 +292,16 @@ export function createServer(options = {}) {
|
|
|
237
292
|
'Ranges aceitos: 15m|1h|6h|24h|7d|30d; tracker_search_logs e tracker_log_stats aceitam também from/to ISO.',
|
|
238
293
|
'Diagnóstico sem painel: prompts investigar-regressao-p95, investigar-query-lenta, investigar-job-atrasado, investigar-erro-distribuido e confirmar-correcao (sequência de ferramentas e critério de parada). As ferramentas de análise devolvem `evidence[]` com traces existentes que sustentam cada número: cite-os nas conclusões.',
|
|
239
294
|
readOnly ? 'Modo somente leitura (FG_TRACKER_READ_ONLY): as ferramentas que escrevem não estão disponíveis; peça ao usuário para fazer essas operações no painel.' : '',
|
|
295
|
+
access.mode === 'token' ? 'Só aparecem as ferramentas que as permissões do token pessoal cobrem; tracker_status diz o que falta. Um 403 da API é final: explique a permissão ou o papel que falta, sem tentar outro caminho.' : '',
|
|
296
|
+
access.mode === 'token-unverified' ? 'As permissões do token não puderam ser lidas ao iniciar: só as ferramentas de leitura estão disponíveis (tracker_status explica).' : '',
|
|
297
|
+
'Exclusões (tracker_delete_*, loadtest_delete_scenario, infra_delete_connection) exigem confirm com o nome ou slug do recurso: pergunte ao usuário antes e só repita o que ele confirmar.',
|
|
240
298
|
'Infraestrutura AWS: prompt connect-infrastructure ou tools infra_* (nenhuma altera recursos na AWS; mudanças só com aprovação humana no FG Tracker).',
|
|
241
299
|
'Testes de carga (Simular ambiente): prompt create-load-test ou tools loadtest_* (loadtest_start_run só com confirmação explícita do usuário).',
|
|
242
300
|
]
|
|
243
301
|
.filter(Boolean)
|
|
244
302
|
.join(' '),
|
|
245
303
|
});
|
|
246
|
-
applyToolPolicy(server, { legacyToolNames, readOnly });
|
|
304
|
+
applyToolPolicy(server, { legacyToolNames, readOnly, access }, report);
|
|
247
305
|
server.registerTool('tracker_detect_databases', {
|
|
248
306
|
title: 'Identify database drivers in the local project',
|
|
249
307
|
description: 'Inspect local manifests/imports without reading secrets. Returns all candidate drivers, initialization files and the correct SDK integration guide. The coding agent must apply the guide to the active clients and verify request-linked db.query spans.',
|
|
@@ -258,39 +316,72 @@ export function createServer(options = {}) {
|
|
|
258
316
|
/* ---------------- tools ---------------- */
|
|
259
317
|
server.registerTool('tracker_status', {
|
|
260
318
|
title: 'Status do FG Tracker',
|
|
261
|
-
description: 'Verifica se a API do FG Tracker está no ar (GET /v1/health), qual URL
|
|
319
|
+
description: 'Verifica se a API do FG Tracker está no ar (GET /v1/health), qual URL e credencial este servidor usa (token pessoal fgt_… com as permissões dele, ou sessão; validade; aviso quando é sessão), qual credencial governa a escrita, quais ferramentas ficaram de fora e por quê (permissão que falta; a lista só muda reiniciando o cliente MCP), se o modo somente leitura está ligado e quantos projetos a credencial enxerga. Nunca mostra valores de token ou chave. Comece por aqui.',
|
|
262
320
|
inputSchema: {},
|
|
263
321
|
outputSchema: statusOutput,
|
|
264
322
|
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
265
323
|
}, async () => guard(async () => {
|
|
266
324
|
const health = await client.get('/v1/health');
|
|
267
|
-
const kindLabel = { access_token: 'token pessoal
|
|
325
|
+
const kindLabel = { access_token: 'token pessoal (fgt_…), com as permissões marcadas no painel', session: 'sessão do painel (faz tudo o que você faz no painel)', none: 'ausente (necessário quando a API exige login: projetos/métricas/logs)' };
|
|
268
326
|
const lines = [
|
|
269
327
|
`API: ${client.baseUrl} — ${health.status} (versão ${health.version}, banco ${health.database}, uptime ${Math.round(health.uptimeSeconds)} s)`,
|
|
270
328
|
`FG_TRACKER_TOKEN: ${kindLabel[client.credentialKind]}`,
|
|
271
|
-
`FG_TRACKER_API_KEY: ${client.hasApiKey ? '
|
|
329
|
+
`FG_TRACKER_API_KEY: ${client.hasApiKey ? 'definida' : 'ausente (opcional; só para ingestão e para gravar sem FG_TRACKER_TOKEN)'}`,
|
|
272
330
|
`Modo somente leitura (FG_TRACKER_READ_ONLY): ${readOnly ? 'ligado — ferramentas de escrita ocultas' : 'desligado'}`,
|
|
273
331
|
`Itens por lista (FG_TRACKER_MAX_ITEMS): até ${maxItems}${outputLimit.warning ? ` — ${outputLimit.warning}` : ''}`,
|
|
274
332
|
];
|
|
275
|
-
let credential = { kind: client.credentialKind, type: null, name: null, scope: null, projects: null, expiresAt: null, expired: null, warning: null };
|
|
333
|
+
let credential = { kind: client.credentialKind, type: null, name: null, scope: null, scopes: null, projects: null, expiresAt: null, expired: null, warning: null };
|
|
334
|
+
let liveProjectIds;
|
|
276
335
|
if (client.hasToken) {
|
|
277
336
|
const described = await describeCredential(client);
|
|
278
337
|
credential = described.info;
|
|
338
|
+
liveProjectIds = described.projectIds;
|
|
279
339
|
lines.push(described.line);
|
|
280
340
|
if (credential.warning)
|
|
281
341
|
lines.push(`AVISO: ${credential.warning}`);
|
|
282
342
|
}
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
343
|
+
// Permissões do início × agora: a lista de ferramentas é a do início.
|
|
344
|
+
const startScopes = access.mode === 'token' ? access.scopes ?? [] : null;
|
|
345
|
+
const added = startScopes && credential.scopes ? credential.scopes.filter((scope) => !startScopes.includes(scope)) : [];
|
|
346
|
+
const removed = startScopes && credential.scopes ? startScopes.filter((scope) => !credential.scopes?.includes(scope)) : [];
|
|
347
|
+
const scopesChanged = startScopes && credential.scopes ? added.length + removed.length > 0 : null;
|
|
348
|
+
// Os projetos do token também decidem o registro (tracker_create_project só com todos).
|
|
349
|
+
const startProjectIds = access.mode === 'token' ? access.projectIds ?? null : undefined;
|
|
350
|
+
const projectsChanged = startProjectIds !== undefined && liveProjectIds !== undefined ? !sameProjects(startProjectIds, liveProjectIds) : null;
|
|
351
|
+
const changed = scopesChanged === null && projectsChanged === null ? null : Boolean(scopesChanged) || Boolean(projectsChanged);
|
|
352
|
+
const write = writeCredentialInfo(client, access);
|
|
353
|
+
lines.push(`Escrita: ${write.detail}`);
|
|
354
|
+
if (startScopes) {
|
|
355
|
+
lines.push(`Permissões do token ao iniciar (${access.checkedAt}): ${startScopes.length ? startScopes.map((scope) => SCOPE_LABELS[scope] ?? scope).join(', ') : 'nenhuma'}.`);
|
|
289
356
|
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
357
|
+
if (access.mode === 'token-unverified' && credential.scopes) {
|
|
358
|
+
lines.push('As permissões puderam ser lidas agora: reinicie o cliente MCP para registrar as ferramentas que o token permite.');
|
|
359
|
+
}
|
|
360
|
+
lines.push(`Ferramentas: ${report.registered.length} registradas${report.hidden.length ? `, ${report.hidden.length} ocultas:` : '.'}`, ...hiddenLines(report.hidden));
|
|
361
|
+
if (scopesChanged) {
|
|
362
|
+
lines.push(`ATENÇÃO: as permissões do token mudaram desde que o MCP iniciou (${[added.length ? `+ ${added.map(scopeLabel).join(', ')}` : '', removed.length ? `− ${removed.map(scopeLabel).join(', ')}` : ''].filter(Boolean).join('; ')}). Reinicie o cliente MCP para atualizar a lista de ferramentas.`);
|
|
363
|
+
}
|
|
364
|
+
if (projectsChanged) {
|
|
365
|
+
lines.push(`ATENÇÃO: os projetos do token mudaram desde que o MCP iniciou (antes: ${projectsLabel(startProjectIds)}; agora: ${projectsLabel(liveProjectIds)}). Reinicie o cliente MCP para atualizar a lista de ferramentas (criar projeto só aparece com token de todos os projetos).`);
|
|
366
|
+
}
|
|
367
|
+
if (access.mode === 'token' || access.mode === 'token-unverified')
|
|
368
|
+
lines.push(RESTART_NOTE);
|
|
369
|
+
const projectsInfo = { total: null, items: [] };
|
|
370
|
+
if (access.mode === 'token' && !access.scopes?.includes('projects:read')) {
|
|
371
|
+
projectsInfo.error = 'o token não tem "Projetos: ler"';
|
|
372
|
+
lines.push(`Projetos: ${projectsInfo.error}.`);
|
|
293
373
|
}
|
|
374
|
+
else
|
|
375
|
+
try {
|
|
376
|
+
const projects = await client.get('/v1/projects');
|
|
377
|
+
projectsInfo.total = projects.length;
|
|
378
|
+
projectsInfo.items = projects.slice(0, 10).map((p) => ({ id: p.id, name: p.name }));
|
|
379
|
+
lines.push(`Projetos acessíveis: ${projects.length}${projects.length ? ' — ' + projects.map((p) => `${p.name} (${p.id})`).slice(0, 10).join(', ') : ''}`);
|
|
380
|
+
}
|
|
381
|
+
catch (err) {
|
|
382
|
+
projectsInfo.error = err instanceof TrackApiError ? err.describe() : String(err);
|
|
383
|
+
lines.push(`Projetos: ${projectsInfo.error}`);
|
|
384
|
+
}
|
|
294
385
|
let ai = null;
|
|
295
386
|
try {
|
|
296
387
|
const status = await client.get('/v1/ai/status');
|
|
@@ -306,13 +397,27 @@ export function createServer(options = {}) {
|
|
|
306
397
|
apiKeyConfigured: client.hasApiKey,
|
|
307
398
|
readOnlyMode: readOnly,
|
|
308
399
|
maxItems,
|
|
400
|
+
writeCredential: write,
|
|
401
|
+
permissions: {
|
|
402
|
+
mode: access.mode,
|
|
403
|
+
checkedAt: access.checkedAt,
|
|
404
|
+
scopes: startScopes,
|
|
405
|
+
introspectionError: access.mode === 'token-unverified' ? access.error ?? null : null,
|
|
406
|
+
changedSinceStart: changed,
|
|
407
|
+
projectsChanged,
|
|
408
|
+
added,
|
|
409
|
+
removed,
|
|
410
|
+
restartRequired: Boolean(changed) || (access.mode === 'token-unverified' && credential.scopes !== null),
|
|
411
|
+
toolsRegistered: report.registered.length,
|
|
412
|
+
toolsHidden: report.hidden.slice(0, 80),
|
|
413
|
+
},
|
|
309
414
|
projects: projectsInfo,
|
|
310
415
|
ai,
|
|
311
416
|
}, lines.join('\n'), { body: null });
|
|
312
417
|
}));
|
|
313
418
|
server.registerTool('tracker_list_projects', {
|
|
314
419
|
title: 'Listar projetos',
|
|
315
|
-
description: 'Lista os projetos que o usuário do token enxerga, com apiKey (vazia
|
|
420
|
+
description: 'Lista os projetos que o usuário do token enxerga, com apiKey (vazia sem "Chave de ingestão: ler" ou com papel viewer: a chave fica no painel), limiares, repositório, regras de dono, domínios permitidos (allowedOrigins: CORS do SDK de navegador) e estatísticas de 24h (requests, taxa de erro, p95, issues abertas).',
|
|
316
421
|
inputSchema: {},
|
|
317
422
|
outputSchema: projectsOutput,
|
|
318
423
|
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
@@ -320,14 +425,14 @@ export function createServer(options = {}) {
|
|
|
320
425
|
const projects = await client.get('/v1/projects');
|
|
321
426
|
const page = listPage(projects, maxItems);
|
|
322
427
|
if (projects.length === 0)
|
|
323
|
-
return structured({ ...page }, 'Nenhum projeto. Crie um com tracker_create_project { name } (
|
|
428
|
+
return structured({ ...page }, 'Nenhum projeto. Crie um com tracker_create_project { name } (token de todos os projetos com "Projetos: criar e editar", ou sessão) ou pelo painel.', { body: null });
|
|
324
429
|
const summary = projects
|
|
325
430
|
.slice(0, maxItems)
|
|
326
431
|
.map((p) => {
|
|
327
432
|
const s = p.stats;
|
|
328
433
|
const stats = s ? ` · 24h: ${s.requests24h} req, erro ${pct(s.errorRate24h)}, p95 ${ms(s.p95Ms24h)}, ${s.openIssues} issues` : '';
|
|
329
434
|
const origins = p.allowedOrigins ? ` · domínios permitidos: ${p.allowedOrigins.length ? p.allowedOrigins.join(', ') : 'nenhum'}` : '';
|
|
330
|
-
const key = p.apiKey ? `apiKey ${p.apiKey}` : 'apiKey não devolvida (token de
|
|
435
|
+
const key = p.apiKey ? `apiKey ${p.apiKey}` : 'apiKey não devolvida (token sem "Chave de ingestão: ler" ou papel viewer; copie FG_TRACKER_KEY no painel, em Conectar)';
|
|
331
436
|
return `- ${p.name} — id ${p.id} · slug ${p.slug} · ${key}${stats}${origins}`;
|
|
332
437
|
})
|
|
333
438
|
.join('\n');
|
|
@@ -336,7 +441,7 @@ export function createServer(options = {}) {
|
|
|
336
441
|
}));
|
|
337
442
|
server.registerTool('tracker_create_project', {
|
|
338
443
|
title: 'Criar projeto',
|
|
339
|
-
description: 'Cria um projeto no FG Tracker e devolve o projeto com a apiKey (stk_...) para colocar em FG_TRACKER_KEY do app instrumentado.',
|
|
444
|
+
description: 'Cria um projeto no FG Tracker e devolve o projeto com a apiKey (stk_...) para colocar em FG_TRACKER_KEY do app instrumentado. Com token pessoal, exige "Projetos: criar e editar" e um token válido para todos os projetos (um token restrito a projetos não cria projeto).',
|
|
340
445
|
inputSchema: { name: z.string().min(1).max(120).describe('Nome do projeto (ex.: "minha-api")') },
|
|
341
446
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
|
|
342
447
|
}, async ({ name }) => guard(async () => {
|
|
@@ -1015,6 +1120,8 @@ export function createServer(options = {}) {
|
|
|
1015
1120
|
}));
|
|
1016
1121
|
/* ---------------- diagnóstico: endpoint, queries, logs, alertas, ambientes, recursos (0.11) ---------------- */
|
|
1017
1122
|
registerDiagnosticTools(server, client, { maxItems });
|
|
1123
|
+
/* ---------------- escrita: issues, membros, monitores, alertas, projeto, source maps (0.12) ---------------- */
|
|
1124
|
+
registerWriteTools(server, client, { maxItems });
|
|
1018
1125
|
/* ---------------- infraestrutura (CONTRATO.md §27.9) ---------------- */
|
|
1019
1126
|
registerInfraTools(server, client, SERVER_VERSION);
|
|
1020
1127
|
/* ---------------- simulação de ambiente (CONTRATO.md §28.8) ---------------- */
|
|
@@ -1055,4 +1162,6 @@ export function createServer(options = {}) {
|
|
|
1055
1162
|
}));
|
|
1056
1163
|
return server;
|
|
1057
1164
|
}
|
|
1165
|
+
// Para quem usa o servidor como biblioteca: ler as permissões do token antes de `createServer({ access })`.
|
|
1166
|
+
export { resolveToolAccess, TOOL_SCOPES } from './permissions.js';
|
|
1058
1167
|
//# sourceMappingURL=server.js.map
|