fg-tracker-mcp 0.10.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/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # Changelog — fg-tracker-mcp
2
2
 
3
+ ## 0.11.0
4
+
5
+ Diagnóstico sem painel (revisão de 15/10/2026, T3). Todas as ferramentas novas usam rotas de leitura com `@ReadScope()` (funcionam com token pessoal `fgt_…`). As de janela absoluta, ordenação e comparação dependem da API desta mesma entrega (CONTRATO §4 "Janelas absolutas" e "Comparação", §18); com uma API anterior elas avisam (`windowIgnored`, `filtersApplied: false`, "API ignorou sort") ou explicam o caminho alternativo, e as demais continuam funcionando.
6
+
7
+ - **Saída estruturada:** toda ferramenta de leitura declara `outputSchema` e devolve `structuredContent` validado contra ele; o texto continua o de antes (resumo + JSON). Onde o JSON era um array (`tracker_list_endpoints`, `tracker_list_releases`), o `structuredContent` é `{ items, … }`. Respostas com janela trazem `window: { from, to }`.
8
+ - **Evidência e links:** as ferramentas de análise devolvem `evidence[]` (`traceId`, `spanId?`, `metric`, `value`, `window`, `note?`) só com traces que a API devolveu — no detalhe do trace, a raiz, os buracos sem span, os spans de I/O mais lentos, os repetidos e os que falharam (com o serviço). `links.dashboard` e blocos `resource_link` para o painel (`FG_TRACKER_WEB_URL` ou derivado da API) e para os novos recursos `fg-tracker://trace/{traceId}` e `fg-tracker://issue/{issueId}` (`?projectId=` opcional).
9
+ - **Ferramentas novas** (sem alias `track_*`): `tracker_compare` (abaixo), `tracker_get_endpoint` (`/endpoints/detail`), `tracker_list_queries` (`/database`, com `env`/`service`, busca no SQL e um trace + span real da execução mais lenta de cada query), `tracker_log_stats` (`/logs/histogram` + `/logs/facets`), `tracker_list_alert_events` (`/alerts/events`, filtros por tipo, severidade, estado e janela; destinatários mascarados) e `tracker_list_environments` (`/release-environments` + ambientes e serviços do overview).
10
+ - `tracker_search_logs` aceita `from`/`to` ISO 8601 (até 31 dias, validado antes da chamada).
11
+ - **Janelas absolutas:** `tracker_get_overview`, `tracker_list_endpoints`, `tracker_get_endpoint`, `tracker_list_traces`, `tracker_list_queries` e `tracker_list_providers` aceitam `from`/`to` e conferem a janela que a API aplicou (cabeçalho `x-fg-tracker-window`).
12
+ - **`tracker_compare`** (`GET …/compare`): duas janelas ou duas releases — latência total e por rota, decomposição do tempo por execução por tipo de span e spans que mais cresceram, com `evidence`. Cada lado declara `coverage` de spans brutos (retenção); sem eles a latência vem dos rollups e `decomposition` é `null`.
13
+ - `tracker_list_traces`: `sort: "duration"`, `rootKind: "browser"` e `hasSpan: { kind?, service?, status?, name? }` (traces com algum span — inclusive filho ou de outro serviço — que case).
14
+ - `tracker_get_monitor`: `from`/`to`, horário esperado e atraso (`delayMs`) de cada execução de job e `schedule.overdueMs`.
15
+ - **M01:** `tracker_endpoint_history` não esconde mais o período recente: `points` é amostrado em 48 pontos com o primeiro e o último (antes, os 25 mais antigos), `markers` traz os 25 deploys mais recentes; aceita `service`/`env`. Todas as séries passam a incluir o último ponto na amostragem.
16
+ - **M02:** `tracker_verify_ingest` procura qualquer raiz (`rootKind=all`): projeto só de jobs ou de navegador não recebe mais "NENHUM trace".
17
+ - **M03:** dicas de erro por tipo de credencial: 401 com token pessoal (crie outro), 401 com sessão (prefira um token de leitura), 403 `TOKEN_SCOPE_INSUFFICIENT` (o token é somente leitura) distinto de 403 por falta de acesso ao projeto.
18
+ - **M04:** `apiKey` vazia (token de leitura) é tratada como ausente: o guia usa o placeholder e explica onde copiar a chave, e `tracker_list_projects` diz que a chave não foi devolvida.
19
+ - **M05:** `infra_plan_handover` deixa de se declarar somente leitura (faz POST numa rota de sessão).
20
+ - **Segurança:** `FG_TRACKER_READ_ONLY=1` registra só as ferramentas com `readOnlyHint: true`; `tracker_status` mostra o tipo de credencial (token pessoal ou sessão), a validade, o modo somente leitura e avisa quando é sessão. A documentação recomenda `fgt_` + `FG_TRACKER_READ_ONLY=1`.
21
+ - **Prompts das cinco jornadas:** `investigar-regressao-p95`, `investigar-query-lenta`, `investigar-job-atrasado`, `investigar-erro-distribuido` (API → serviço) e `confirmar-correcao`, com a sequência de ferramentas (≤ 6 chamadas), o critério de parada e a regra de citar a evidência.
22
+ - Aliases `track_*`: continuam para os 21 nomes da 0.10, com o mesmo resultado (inclusive `structuredContent`), mas sem repetir o `outputSchema` no `tools/list`.
23
+ - `tools/list`: 67 ferramentas (~130 KB) no padrão; 32 (~79 KB) com `FG_TRACKER_READ_ONLY=1` e `FG_TRACKER_LEGACY_TOOL_NAMES=0` (recomendado).
24
+ - Testes pelo transporte MCP (cliente em memória, sem `_registeredTools`); `npm test` compila antes. E2E das jornadas contra a API real (`apps/api/test/mcp-journeys.cases.cjs`).
25
+
3
26
  ## 0.10.0
4
27
 
5
28
  Reúne o que entrou na `main` desde a 0.9.1 (PRs #11, #12, #13, #15) e a renomeação para FG Tracker. Requer a API com filtros de issues por cursor (PR #12), raízes `custom` (PR #15) e ambientes de monitores e releases (PR #14); com uma API anterior, os parâmetros novos são ignorados ou geram aviso, e as ferramentas antigas continuam funcionando.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # fg-tracker-mcp
2
2
 
3
- Servidor [MCP](https://modelcontextprotocol.io) (stdio) do FG Tracker para agentes de código (Claude Code, Cursor, Windsurf, Claude Desktop): projetos, métricas, traces, issues com commits suspeitos, releases, monitores, provedores externos, logs e guia de instrumentação. Documentação completa: `docs/mcp.md` no repositório.
3
+ Servidor [MCP](https://modelcontextprotocol.io) (stdio) do FG Tracker para agentes de código (Claude Code, Cursor, Windsurf, Claude Desktop): projetos, métricas, traces, issues com commits suspeitos, releases, monitores, provedores externos, logs, slow queries, eventos de alerta e guia de instrumentação, com respostas estruturadas (`structuredContent`) e evidência verificável para diagnosticar sem o painel. Documentação completa: `docs/mcp.md` no repositório.
4
4
 
5
5
  ## Instalação
6
6
 
@@ -10,6 +10,7 @@ Claude Code:
10
10
  claude mcp add fg-tracker \
11
11
  -e FG_TRACKER_URL=http://localhost:4050 \
12
12
  -e FG_TRACKER_TOKEN=fgt_<seu_token_de_leitura> \
13
+ -e FG_TRACKER_READ_ONLY=1 \
13
14
  -- npx -y fg-tracker-mcp
14
15
  ```
15
16
 
@@ -23,14 +24,15 @@ Cursor / Windsurf / Claude Desktop (JSON):
23
24
  "args": ["-y", "fg-tracker-mcp"],
24
25
  "env": {
25
26
  "FG_TRACKER_URL": "http://localhost:4050",
26
- "FG_TRACKER_TOKEN": "fgt_<seu_token_de_leitura>"
27
+ "FG_TRACKER_TOKEN": "fgt_<seu_token_de_leitura>",
28
+ "FG_TRACKER_READ_ONLY": "1"
27
29
  }
28
30
  }
29
31
  }
30
32
  }
31
33
  ```
32
34
 
33
- Gere o token em **Conectar → Usar MCP → Gerar token de leitura para o MCP** (ou em **Conta → Tokens de acesso**). Ele só lê; para o agente criar projetos, registrar releases, mexer em infraestrutura ou iniciar testes de carga, use a configuração com a sessão. Detalhes em `docs/mcp.md` → Token de leitura.
35
+ Gere o token em **Conectar → Usar MCP → Gerar token de leitura para o MCP** (ou em **Conta → Tokens de acesso**). É a configuração recomendada: o token só lê, e `FG_TRACKER_READ_ONLY=1` esconde do agente as tools que escrevem. Para o agente criar projetos, registrar releases, mexer em infraestrutura ou iniciar testes de carga, use a configuração com a sessão (sem `FG_TRACKER_READ_ONLY`); `tracker_status` avisa quando a credencial é uma sessão. Detalhes em `docs/mcp.md` → Token de leitura.
34
36
 
35
37
  Em produção, `FG_TRACKER_URL` é a URL da API mostrada no painel em **Conectar**. O endereço de produção da API é `https://tracker-api.fortground.com.br` (o antigo `track-api.fortground.com.br` continua respondendo).
36
38
 
@@ -43,11 +45,16 @@ Em produção, `FG_TRACKER_URL` é a URL da API mostrada no painel em **Conectar
43
45
  | `FG_TRACKER_API_KEY` | — | chave de projeto (`x-fg-tracker-key`) — opcional, só ingestão |
44
46
  | `FG_TRACKER_TIMEOUT_MS` | `15000` | timeout das chamadas HTTP |
45
47
  | `FG_TRACKER_MAX_ITEMS` | `200` | teto de itens da lista principal de cada tool (1 a 1000) |
48
+ | `FG_TRACKER_READ_ONLY` | desligado | `1`: só as tools de leitura (`readOnlyHint: true`) são registradas |
49
+ | `FG_TRACKER_WEB_URL` | derivada da API | URL do painel nos links das respostas (`tracker-api.*` → `tracker.*`) |
50
+ | `FG_TRACKER_LEGACY_TOOL_NAMES` | ligado | `0` desliga os aliases obsoletos `track_*` |
46
51
 
47
52
  Os nomes antigos `STREAD_TRACK_*` continuam lidos quando o nome novo está ausente.
48
53
 
49
54
  ## Tools, prompt e resource
50
55
 
56
+ Diagnóstico (0.11): toda tool de leitura tem `outputSchema` e devolve `structuredContent` (o texto continua igual); as de análise trazem `evidence[]` (`traceId`, `spanId?`, métrica, valor e janela) apontando para traces existentes, mais links para o painel e para os recursos `fg-tracker://trace/{traceId}` e `fg-tracker://issue/{issueId}`. Tools novas: `tracker_compare` (duas janelas ou releases: onde o tempo cresceu, com cobertura de spans brutos), `tracker_get_endpoint` (detalhe e traces mais lentos de uma rota), `tracker_list_queries` (slow queries com o trace e o span da execução mais lenta), `tracker_log_stats` (histograma e facetas de logs), `tracker_list_alert_events` (histórico de alertas, destinatários mascarados) e `tracker_list_environments`; métricas, traces e logs aceitam `from`/`to` ISO; `tracker_list_traces` ordena por duração e filtra por span filho (`hasSpan`); `tracker_get_monitor` mostra o atraso de cada execução. Prompts das jornadas: `investigar-regressao-p95`, `investigar-query-lenta`, `investigar-job-atrasado`, `investigar-erro-distribuido` e `confirmar-correcao`. Detalhes em `docs/mcp.md` → Saída estruturada e Jornadas de diagnóstico.
57
+
51
58
  Tools `tracker_*` (até a 0.9, `track_*`), prompt `instrument-project` e resource `fg-tracker://docs/quickstart`. Os nomes `track_*` continuam registrados como aliases obsoletos (a versão seguinte os desliga por padrão e a 1.0 os remove); `FG_TRACKER_LEGACY_TOOL_NAMES=0` deixa só os nomes novos.
52
59
 
53
60
  Infraestrutura AWS (0.6.0): tools `infra_*` e prompt `connect-infrastructure` — detectar contas/ambientes/regiões nas credenciais locais, conectar cada ambiente, descobrir recursos com credenciais locais (somente leitura), analisar o IaC, instrumentar, validar e gerar o PR de transferência de controle. Nenhuma tool altera recursos na AWS. Detalhes em `docs/mcp.md` → Infraestrutura.
package/dist/cli.js CHANGED
@@ -1,12 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * Entrada do binário `fg-tracker-mcp` (alias obsoleto: `stread-track-mcp`): sobe o servidor MCP em stdio.
4
- * Env: FG_TRACKER_URL (default http://localhost:4050), FG_TRACKER_TOKEN, FG_TRACKER_API_KEY,
5
- * FG_TRACKER_TIMEOUT_MS — os nomes legados STREAD_TRACK_* continuam valendo como fallback.
4
+ * Env: FG_TRACKER_URL (default http://localhost:4050), FG_TRACKER_TOKEN (fgt_… ou sessão), FG_TRACKER_API_KEY,
5
+ * FG_TRACKER_TIMEOUT_MS, FG_TRACKER_READ_ONLY, FG_TRACKER_WEB_URL — os nomes legados STREAD_TRACK_*
6
+ * continuam valendo como fallback.
6
7
  */
7
8
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
9
  import { configFromEnv, TrackClient } from './client.js';
9
- import { createServer, SERVER_NAME, SERVER_VERSION } from './server.js';
10
+ import { createServer, readOnlyFromEnv, SERVER_NAME, SERVER_VERSION } from './server.js';
10
11
  const argv = process.argv.slice(2);
11
12
  if (argv.includes('--help') || argv.includes('-h')) {
12
13
  process.stdout.write([
@@ -17,14 +18,16 @@ if (argv.includes('--help') || argv.includes('-h')) {
17
18
  '',
18
19
  'Variáveis de ambiente:',
19
20
  ' FG_TRACKER_URL URL da API (default http://localhost:4050)',
20
- ' FG_TRACKER_TOKEN token de sessão (Authorization: Bearer) — projetos, métricas, logs',
21
+ ' FG_TRACKER_TOKEN token pessoal de leitura fgt_… (recomendado: painel → Conta → Tokens de acesso) ou de sessão (Authorization: Bearer)',
21
22
  ' FG_TRACKER_API_KEY chave de projeto (x-fg-tracker-key) — opcional, só ingestão',
22
23
  ' FG_TRACKER_TIMEOUT_MS timeout das chamadas HTTP (default 15000)',
24
+ ' FG_TRACKER_READ_ONLY=1 só registra ferramentas de leitura (esconde criar projeto, releases, infraestrutura, testes de carga)',
25
+ ' FG_TRACKER_WEB_URL URL do painel para os links (default: derivada de FG_TRACKER_URL, ex. tracker-api.* → tracker.*)',
23
26
  ' FG_TRACKER_LEGACY_TOOL_NAMES=0 não registra os aliases obsoletos track_* das ferramentas tracker_*',
24
27
  ' (os nomes antigos STREAD_TRACK_* ainda são lidos como fallback; serão removidos na 1.0)',
25
28
  '',
26
29
  'Instalação no Claude Code:',
27
- ' claude mcp add fg-tracker -e FG_TRACKER_URL=http://localhost:4050 -e FG_TRACKER_TOKEN=... -- npx -y fg-tracker-mcp',
30
+ ' claude mcp add fg-tracker -e FG_TRACKER_URL=http://localhost:4050 -e FG_TRACKER_TOKEN=fgt_... -e FG_TRACKER_READ_ONLY=1 -- npx -y fg-tracker-mcp',
28
31
  '',
29
32
  ].join('\n'));
30
33
  process.exit(0);
@@ -41,7 +44,8 @@ const invoked = process.argv[1]?.split(/[\\/]/).pop() ?? '';
41
44
  if (invoked.startsWith('stread-track-')) {
42
45
  console.error(`[fg-tracker-mcp] "${invoked}" está obsoleto: use "fg-tracker-mcp" (o alias será removido na 1.0).`);
43
46
  }
44
- console.error(`[fg-tracker-mcp] API ${config.baseUrl} · token ${config.token ? 'ok' : 'ausente'} · apiKey ${config.apiKey ? 'ok' : 'ausente'}`);
47
+ const credential = { access_token: 'pessoal (leitura)', session: 'de sessão (lê e escreve; prefira um fgt_ de leitura)', none: 'ausente' }[client.credentialKind];
48
+ console.error(`[fg-tracker-mcp] API ${config.baseUrl} · token ${credential} · apiKey ${config.apiKey ? 'ok' : 'ausente'}${readOnlyFromEnv() ? ' · somente leitura' : ''}`);
45
49
  const transport = new StdioServerTransport();
46
50
  await server.connect(transport);
47
51
  const shutdown = () => {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAExE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;QACE,GAAG,WAAW,QAAQ,cAAc,uCAAuC;QAC3E,EAAE;QACF,uFAAuF;QACvF,+BAA+B;QAC/B,EAAE;QACF,wBAAwB;QACxB,qEAAqE;QACrE,6FAA6F;QAC7F,sFAAsF;QACtF,oEAAoE;QACpE,uGAAuG;QACvG,2FAA2F;QAC3F,EAAE;QACF,4BAA4B;QAC5B,sHAAsH;QACtH,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AACD,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,cAAc,IAAI,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;AAC/B,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AACvC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AAExC,mEAAmE;AACnE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AAC5D,IAAI,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;IACxC,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,uEAAuE,CAAC,CAAC;AACrH,CAAC;AACD,OAAO,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,OAAO,YAAY,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,aAAa,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;AAEhJ,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAEhC,MAAM,QAAQ,GAAG,GAAS,EAAE;IAC1B,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC;AACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEzF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;QACE,GAAG,WAAW,QAAQ,cAAc,uCAAuC;QAC3E,EAAE;QACF,uFAAuF;QACvF,+BAA+B;QAC/B,EAAE;QACF,wBAAwB;QACxB,qEAAqE;QACrE,+IAA+I;QAC/I,sFAAsF;QACtF,oEAAoE;QACpE,gIAAgI;QAChI,2HAA2H;QAC3H,uGAAuG;QACvG,2FAA2F;QAC3F,EAAE;QACF,4BAA4B;QAC5B,oJAAoJ;QACpJ,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AACD,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,cAAc,IAAI,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;AAC/B,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AACvC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AAExC,mEAAmE;AACnE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AAC5D,IAAI,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;IACxC,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,uEAAuE,CAAC,CAAC;AACrH,CAAC;AACD,MAAM,UAAU,GAAG,EAAE,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAE,sDAAsD,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AAClK,OAAO,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,OAAO,YAAY,UAAU,aAAa,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,eAAe,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAE3K,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAEhC,MAAM,QAAQ,GAAG,GAAS,EAAE;IAC1B,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC;AACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC"}
package/dist/client.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * Cliente HTTP mínimo para a API do FG Tracker (docs/CONTRATO.md §4, §8, §11).
3
- * Lê `FG_TRACKER_URL`, `FG_TRACKER_TOKEN` (Bearer de sessão), `FG_TRACKER_API_KEY`
4
- * (chave de projeto, header `x-fg-tracker-key`) e `FG_TRACKER_TIMEOUT_MS` — com
3
+ * Lê `FG_TRACKER_URL`, `FG_TRACKER_TOKEN` (Bearer: token pessoal de leitura `fgt_…`
4
+ * ou token de sessão), `FG_TRACKER_API_KEY` (chave de projeto, header
5
+ * `x-fg-tracker-key`), `FG_TRACKER_TIMEOUT_MS` e `FG_TRACKER_WEB_URL` — com
5
6
  * fallback para os nomes legados `STREAD_TRACK_*` (`stread-track-mcp` ≤ 0.3).
6
7
  */
7
8
  /** API local do monorepo. Em produção a API é `https://tracker-api.fortground.com.br`. */
@@ -18,6 +19,8 @@ export interface TrackClientConfig {
18
19
  token?: string;
19
20
  apiKey?: string;
20
21
  timeoutMs?: number;
22
+ /** URL do painel, para links (`FG_TRACKER_WEB_URL`; default derivado de `baseUrl`). */
23
+ webUrl?: string;
21
24
  }
22
25
  export type QueryValue = string | number | boolean | undefined | null;
23
26
  export declare class TrackApiError extends Error {
@@ -29,20 +32,53 @@ export declare class TrackApiError extends Error {
29
32
  describe(): string;
30
33
  }
31
34
  export declare function configFromEnv(env?: NodeJS.ProcessEnv): TrackClientConfig;
35
+ /**
36
+ * Painel que acompanha a API: `tracker-api.<domínio>` → `tracker.<domínio>` (o alias antigo
37
+ * `track-api` também), `localhost:4050` → `localhost:3050`. Sem regra conhecida, `null`:
38
+ * as ferramentas deixam de mandar links do painel, nunca inventam um.
39
+ */
40
+ export declare function webUrlFor(baseUrl: string): string | null;
41
+ /** Cabeçalho com a janela absoluta (`from`/`to`) que a API aplicou (CONTRATO.md §4). */
42
+ export declare const WINDOW_HEADER = "x-fg-tracker-window";
43
+ /** Cabeçalho com os parâmetros extras que a rota aplicou (ex.: `traces-sort,traces-has-span`). */
44
+ export declare const CAPABILITIES_HEADER = "x-fg-tracker-capabilities";
45
+ /** Prefixo dos tokens pessoais de leitura (CONTRATO.md §8.1). */
46
+ export declare const ACCESS_TOKEN_PREFIX = "fgt_";
47
+ /** Tipo da credencial de `FG_TRACKER_TOKEN`, pelo prefixo (sem chamar a API). */
48
+ export type CredentialKind = 'access_token' | 'session' | 'none';
32
49
  export declare class TrackClient {
33
50
  readonly config: TrackClientConfig;
34
51
  constructor(config: TrackClientConfig);
35
52
  get baseUrl(): string;
36
53
  get hasToken(): boolean;
54
+ /** `FG_TRACKER_TOKEN` é um token pessoal de leitura (não uma sessão). */
55
+ get hasAccessToken(): boolean;
56
+ get credentialKind(): CredentialKind;
57
+ /** Painel para links (`FG_TRACKER_WEB_URL` ou derivado da API); `null` se desconhecido. */
58
+ get webUrl(): string | null;
37
59
  get hasApiKey(): boolean;
38
- /** Headers de autenticação: Bearer (sessão) e/ou chave de projeto. */
60
+ /** Headers de autenticação: Bearer (token pessoal ou sessão) e/ou chave de projeto. */
39
61
  private authHeaders;
40
62
  request<T = unknown>(method: 'GET' | 'POST' | 'PATCH' | 'DELETE', path: string, options?: {
41
63
  query?: Record<string, QueryValue>;
42
64
  body?: unknown;
43
65
  headers?: Record<string, string>;
66
+ onResponse?: (res: Response) => void;
44
67
  }): Promise<T>;
45
68
  get<T = unknown>(path: string, query?: Record<string, QueryValue>): Promise<T>;
69
+ /**
70
+ * GET de uma leitura com janela: devolve também a janela absoluta que a API confirmou no
71
+ * cabeçalho `x-fg-tracker-window` (`null` = a API usou `range`, ou é anterior a from/to e os
72
+ * ignorou).
73
+ */
74
+ getWindowed<T = unknown>(path: string, query?: Record<string, QueryValue>): Promise<{
75
+ body: T;
76
+ window: {
77
+ from: string;
78
+ to: string;
79
+ } | null;
80
+ capabilities: Set<string>;
81
+ }>;
46
82
  post<T = unknown>(path: string, body?: unknown): Promise<T>;
47
83
  patch<T = unknown>(path: string, body?: unknown): Promise<T>;
48
84
  }
package/dist/client.js CHANGED
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * Cliente HTTP mínimo para a API do FG Tracker (docs/CONTRATO.md §4, §8, §11).
3
- * Lê `FG_TRACKER_URL`, `FG_TRACKER_TOKEN` (Bearer de sessão), `FG_TRACKER_API_KEY`
4
- * (chave de projeto, header `x-fg-tracker-key`) e `FG_TRACKER_TIMEOUT_MS` — com
3
+ * Lê `FG_TRACKER_URL`, `FG_TRACKER_TOKEN` (Bearer: token pessoal de leitura `fgt_…`
4
+ * ou token de sessão), `FG_TRACKER_API_KEY` (chave de projeto, header
5
+ * `x-fg-tracker-key`), `FG_TRACKER_TIMEOUT_MS` e `FG_TRACKER_WEB_URL` — com
5
6
  * fallback para os nomes legados `STREAD_TRACK_*` (`stread-track-mcp` ≤ 0.3).
6
7
  */
7
8
  /** API local do monorepo. Em produção a API é `https://tracker-api.fortground.com.br`. */
@@ -37,7 +38,27 @@ export function configFromEnv(env = process.env) {
37
38
  const apiKey = readEnv('API_KEY', env);
38
39
  const timeoutRaw = Number(readEnv('TIMEOUT_MS', env));
39
40
  const timeoutMs = Number.isFinite(timeoutRaw) && timeoutRaw > 0 ? timeoutRaw : 15_000;
40
- return { baseUrl, token, apiKey, timeoutMs };
41
+ const webUrl = readEnv('WEB_URL', env)?.replace(/\/+$/, '');
42
+ return { baseUrl, token, apiKey, timeoutMs, ...(webUrl ? { webUrl } : {}) };
43
+ }
44
+ /**
45
+ * Painel que acompanha a API: `tracker-api.<domínio>` → `tracker.<domínio>` (o alias antigo
46
+ * `track-api` também), `localhost:4050` → `localhost:3050`. Sem regra conhecida, `null`:
47
+ * as ferramentas deixam de mandar links do painel, nunca inventam um.
48
+ */
49
+ export function webUrlFor(baseUrl) {
50
+ let url;
51
+ try {
52
+ url = new URL(baseUrl);
53
+ }
54
+ catch {
55
+ return null;
56
+ }
57
+ if (/^track(?:er)?-api\./.test(url.hostname))
58
+ return `${url.protocol}//${url.hostname.replace(/^track(?:er)?-api\./, 'tracker.')}`;
59
+ if ((url.hostname === 'localhost' || url.hostname === '127.0.0.1') && url.port === '4050')
60
+ return `${url.protocol}//${url.hostname}:3050`;
61
+ return null;
41
62
  }
42
63
  function buildQuery(query) {
43
64
  if (!query)
@@ -59,6 +80,16 @@ function isConnectionError(err) {
59
80
  const msg = err instanceof Error ? err.message : String(err);
60
81
  return /fetch failed|ECONNREFUSED|network/i.test(msg);
61
82
  }
83
+ /** Cabeçalho com a janela absoluta (`from`/`to`) que a API aplicou (CONTRATO.md §4). */
84
+ export const WINDOW_HEADER = 'x-fg-tracker-window';
85
+ /** Cabeçalho com os parâmetros extras que a rota aplicou (ex.: `traces-sort,traces-has-span`). */
86
+ export const CAPABILITIES_HEADER = 'x-fg-tracker-capabilities';
87
+ /** Prefixo dos tokens pessoais de leitura (CONTRATO.md §8.1). */
88
+ export const ACCESS_TOKEN_PREFIX = 'fgt_';
89
+ function extractCode(body) {
90
+ const code = body && typeof body === 'object' ? body.code : undefined;
91
+ return typeof code === 'string' ? code : undefined;
92
+ }
62
93
  function extractMessage(body, fallback) {
63
94
  if (body && typeof body === 'object') {
64
95
  const m = body.message;
@@ -82,10 +113,21 @@ export class TrackClient {
82
113
  get hasToken() {
83
114
  return Boolean(this.config.token);
84
115
  }
116
+ /** `FG_TRACKER_TOKEN` é um token pessoal de leitura (não uma sessão). */
117
+ get hasAccessToken() {
118
+ return Boolean(this.config.token?.startsWith(ACCESS_TOKEN_PREFIX));
119
+ }
120
+ get credentialKind() {
121
+ return this.hasAccessToken ? 'access_token' : this.config.token ? 'session' : 'none';
122
+ }
123
+ /** Painel para links (`FG_TRACKER_WEB_URL` ou derivado da API); `null` se desconhecido. */
124
+ get webUrl() {
125
+ return this.config.webUrl ?? webUrlFor(this.config.baseUrl);
126
+ }
85
127
  get hasApiKey() {
86
128
  return Boolean(this.config.apiKey);
87
129
  }
88
- /** Headers de autenticação: Bearer (sessão) e/ou chave de projeto. */
130
+ /** Headers de autenticação: Bearer (token pessoal ou sessão) e/ou chave de projeto. */
89
131
  authHeaders(extra) {
90
132
  const headers = { accept: 'application/json', ...extra };
91
133
  if (this.config.token)
@@ -126,16 +168,24 @@ export class TrackClient {
126
168
  body = text;
127
169
  }
128
170
  }
129
- if (res.ok)
171
+ if (res.ok) {
172
+ options.onResponse?.(res);
130
173
  return body;
174
+ }
131
175
  const message = extractMessage(body, `${res.status} ${res.statusText}`);
132
176
  switch (res.status) {
133
177
  case 401:
134
- throw new TrackApiError(`Não autenticado (401) em ${method} ${path}: ${message}`, 401, path, this.config.token
135
- ? 'o FG_TRACKER_TOKEN expirou ou é inválido — faça login de novo (POST /v1/auth/login) e defina FG_TRACKER_TOKEN com o novo token.'
136
- : 'defina FG_TRACKER_TOKEN com um token de sessão do FG Tracker (POST /v1/auth/login → `token`). Para ingestão use FG_TRACKER_API_KEY.');
178
+ throw new TrackApiError(`Não autenticado (401) em ${method} ${path}: ${message}`, 401, path, this.hasAccessToken
179
+ ? 'o token pessoal do FG_TRACKER_TOKEN expirou, foi revogado ou a conta está inativa — crie outro no painel (Conta → Tokens de acesso) e atualize FG_TRACKER_TOKEN.'
180
+ : this.config.token
181
+ ? 'a sessão do FG_TRACKER_TOKEN expirou ou foi encerrada — crie um token de leitura no painel (Conta → Tokens de acesso), que não cai com logout, e defina FG_TRACKER_TOKEN com ele.'
182
+ : 'defina FG_TRACKER_TOKEN com um token de leitura do FG Tracker (painel → Conta → Tokens de acesso, `fgt_…`). Para ingestão use FG_TRACKER_API_KEY.');
137
183
  case 403:
138
- throw new TrackApiError(`Sem permissão (403) em ${method} ${path}: ${message}`, 403, path, 'o usuário do FG_TRACKER_TOKEN não é membro deste projeto. Peça a um owner/admin para convidá-lo em /members.');
184
+ throw new TrackApiError(`Sem permissão (403) em ${method} ${path}: ${message}`, 403, path, extractCode(body) === 'TOKEN_SCOPE_INSUFFICIENT'
185
+ ? 'o FG_TRACKER_TOKEN é um token pessoal somente leitura e esta operação altera dados ou lê dados que o token não cobre. Faça a operação pelo painel ou configure o MCP com uma sessão (painel → Conectar → Usar MCP → Copiar configuração com minha sessão).'
186
+ : this.hasAccessToken
187
+ ? 'o usuário do token não é membro ativo deste projeto, ou o token foi restrito a outros projetos (Conta → Tokens de acesso).'
188
+ : 'o usuário do FG_TRACKER_TOKEN não é membro deste projeto. Peça a um owner/admin para convidá-lo em /members.');
139
189
  case 404:
140
190
  throw new TrackApiError(`Não encontrado (404) em ${method} ${path}: ${message}`, 404, path);
141
191
  case 400:
@@ -147,6 +197,25 @@ export class TrackClient {
147
197
  get(path, query) {
148
198
  return this.request('GET', path, { query });
149
199
  }
200
+ /**
201
+ * GET de uma leitura com janela: devolve também a janela absoluta que a API confirmou no
202
+ * cabeçalho `x-fg-tracker-window` (`null` = a API usou `range`, ou é anterior a from/to e os
203
+ * ignorou).
204
+ */
205
+ async getWindowed(path, query) {
206
+ let window = null;
207
+ let capabilities = new Set();
208
+ const body = await this.request('GET', path, {
209
+ query,
210
+ onResponse: (res) => {
211
+ const [from, to] = (res.headers.get(WINDOW_HEADER) ?? '').split('/');
212
+ if (from && to)
213
+ window = { from, to };
214
+ capabilities = new Set((res.headers.get(CAPABILITIES_HEADER) ?? '').split(',').map((item) => item.trim()).filter(Boolean));
215
+ },
216
+ });
217
+ return { body, window, capabilities };
218
+ }
150
219
  post(path, body) {
151
220
  return this.request('POST', path, { body });
152
221
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Ferramentas de diagnóstico da 0.11 (docs/mcp.md, "Jornadas de diagnóstico") sobre rotas de
3
+ * leitura que a API já tinha (todas cobertas pelo modelo Somente leitura do token pessoal `fgt_…`):
4
+ * detalhe de endpoint, slow queries, estatística de logs, eventos de alerta e ambientes, mais os
5
+ * recursos `fg-tracker://trace/{traceId}` e `fg-tracker://issue/{issueId}`.
6
+ *
7
+ * Ferramentas novas não ganham alias `track_*` (só as que existiam na 0.10).
8
+ */
9
+ import { type McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
10
+ import { type TrackClient } from './client.js';
11
+ /**
12
+ * Destinatário de uma entrega de alerta sem o dado pessoal: e-mail vira `a***@dominio`,
13
+ * telefone os 4 últimos dígitos, URL só o host. O agente vê para onde o alerta foi, não quem é.
14
+ */
15
+ export declare function maskRecipient(to: string | undefined): string | null;
16
+ export declare function registerDiagnosticTools(server: McpServer, client: TrackClient, options: {
17
+ maxItems: number;
18
+ }): void;