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/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_… (somente leitura, recomendado); session = sessão do painel (lê e escreve)'),
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,
@@ -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.11.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.11.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
- if (policy.readOnly && config.annotations?.readOnlyHint !== true)
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: lê e ESCREVE (criar projeto, releases, infraestrutura) e cai com logout. Para diagnóstico, prefira um token pessoal de leitura fgt_… (painel → Conta → Tokens de acesso), e FG_TRACKER_READ_ONLY=1 para esconder as ferramentas de escrita.';
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 = [credential.scope ? `escopo ${credential.scope}` : '', projects].filter(Boolean).join(', ');
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/credencial este servidor usa (tipo: token pessoal de leitura fgt_… ou sessão, validade e aviso quando é sessão), se o modo somente leitura está ligado e quantos projetos a credencial enxerga. Comece por aqui.',
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 de leitura (fgt_…)', session: 'sessão do painel (lê e escreve)', none: 'ausente (necessário quando a API exige login: projetos/métricas/logs)' };
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 ? 'definido' : 'ausente (opcional; só para ingestão)'}`,
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
- const projectsInfo = { total: null, items: [] };
284
- try {
285
- const projects = await client.get('/v1/projects');
286
- projectsInfo.total = projects.length;
287
- projectsInfo.items = projects.slice(0, 10).map((p) => ({ id: p.id, name: p.name }));
288
- lines.push(`Projetos acessíveis: ${projects.length}${projects.length ? ' — ' + projects.map((p) => `${p.name} (${p.id})`).slice(0, 10).join(', ') : ''}`);
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
- catch (err) {
291
- projectsInfo.error = err instanceof TrackApiError ? err.describe() : String(err);
292
- lines.push(`Projetos: ${projectsInfo.error}`);
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 com token de leitura fgt_…: a chave de ingestão fica no painel), limiares, domínios permitidos (allowedOrigins: CORS do SDK de navegador) e estatísticas de 24h (requests, taxa de erro, p95, issues abertas).',
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 } (exige sessão) ou pelo painel.', { body: null });
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 leitura; copie FG_TRACKER_KEY no painel, em Conectar)';
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