fg-tracker-mcp 0.10.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 +45 -0
- package/README.md +19 -7
- package/dist/cli.js +23 -8
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +82 -5
- package/dist/client.js +182 -20
- 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/diagnostics.d.ts +18 -0
- package/dist/diagnostics.js +467 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/format.d.ts +25 -2
- package/dist/format.js +35 -8
- package/dist/format.js.map +1 -1
- package/dist/guide.js +10 -6
- package/dist/guide.js.map +1 -1
- package/dist/infra/tools.js +68 -27
- package/dist/infra/tools.js.map +1 -1
- package/dist/inputs.d.ts +40 -0
- package/dist/inputs.js +30 -0
- package/dist/inputs.js.map +1 -0
- package/dist/journeys.d.ts +71 -0
- package/dist/journeys.js +130 -0
- package/dist/journeys.js.map +1 -0
- package/dist/links.d.ts +87 -0
- package/dist/links.js +124 -0
- package/dist/links.js.map +1 -0
- package/dist/loadtest/scenario.d.ts +4 -4
- package/dist/loadtest/tools.d.ts +1 -1
- package/dist/loadtest/tools.js +78 -27
- 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 +680 -0
- package/dist/schemas.js +308 -0
- package/dist/schemas.js.map +1 -0
- package/dist/server.d.ts +20 -2
- package/dist/server.js +495 -119
- 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 +2 -2
package/dist/schemas.js
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `outputSchema` das ferramentas de leitura (docs/mcp.md, "Saída estruturada").
|
|
3
|
+
*
|
|
4
|
+
* - O que vem da API passa por `loose` (`additionalProperties` livre): um campo novo da API
|
|
5
|
+
* não quebra a validação de um cliente MCP antigo. Os campos tipados aqui são os que as
|
|
6
|
+
* ferramentas e os prompts usam; os vindos da API são opcionais quando uma API anterior
|
|
7
|
+
* pode não mandá-los.
|
|
8
|
+
* - O que o MCP monta (janela, evidência, links) é estrito.
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
export const loose = z.looseObject;
|
|
12
|
+
/** Janela de tempo absoluta (ISO 8601) a que um número se refere. */
|
|
13
|
+
export const windowSchema = z.object({ from: z.string(), to: z.string() });
|
|
14
|
+
/**
|
|
15
|
+
* Evidência verificável de uma conclusão: um trace (e span) existente, a métrica e o valor
|
|
16
|
+
* observados e a janela. Abra com tracker_get_trace { traceId } (filtre por `spanId` com o
|
|
17
|
+
* nome do span) ou pelo recurso fg-tracker://trace/{traceId}.
|
|
18
|
+
*/
|
|
19
|
+
export const evidenceSchema = z.object({
|
|
20
|
+
traceId: z.string(),
|
|
21
|
+
spanId: z.string().optional(),
|
|
22
|
+
metric: z.string(),
|
|
23
|
+
value: z.union([z.number(), z.string()]),
|
|
24
|
+
window: windowSchema,
|
|
25
|
+
note: z.string().optional(),
|
|
26
|
+
});
|
|
27
|
+
/** Mais relevantes primeiro; o texto da ferramenta resume as primeiras. */
|
|
28
|
+
export const evidenceField = z.array(evidenceSchema);
|
|
29
|
+
/** `dashboard: null` quando a URL do painel é desconhecida (defina FG_TRACKER_WEB_URL). */
|
|
30
|
+
export const linksField = z.object({ dashboard: z.string().nullable(), resource: z.string().optional() });
|
|
31
|
+
const num = z.number();
|
|
32
|
+
const optNum = z.number().nullable().optional();
|
|
33
|
+
const optStr = z.string().nullable().optional();
|
|
34
|
+
const strList = z.array(z.string());
|
|
35
|
+
/** Filtros aplicados (variam por ferramenta: traces também têm sort e hasSpan). */
|
|
36
|
+
const filtersField = loose({ rootKind: z.string().optional(), service: z.string().optional(), env: z.string().optional() });
|
|
37
|
+
const traceItem = loose({ traceId: z.string(), name: z.string(), durationMs: num, startedAt: z.string() });
|
|
38
|
+
/* ---------------- núcleo ---------------- */
|
|
39
|
+
export const statusOutput = loose({
|
|
40
|
+
api: loose({ url: z.string(), status: z.string() }),
|
|
41
|
+
credential: z.object({
|
|
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
|
+
type: z.string().nullable(),
|
|
44
|
+
name: z.string().nullable(),
|
|
45
|
+
scope: z.string().nullable(),
|
|
46
|
+
scopes: z.array(z.string()).nullable().describe('Permissões do token agora (GET /auth/me nesta chamada)'),
|
|
47
|
+
projects: z.union([z.literal('all'), z.number()]).nullable(),
|
|
48
|
+
expiresAt: z.string().nullable(),
|
|
49
|
+
expired: z.boolean().nullable(),
|
|
50
|
+
warning: z.string().nullable(),
|
|
51
|
+
}),
|
|
52
|
+
apiKeyConfigured: z.boolean(),
|
|
53
|
+
readOnlyMode: z.boolean(),
|
|
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
|
+
}),
|
|
72
|
+
projects: loose({ total: num.nullable(), items: z.array(z.object({ id: z.string(), name: z.string() })), error: z.string().optional() }),
|
|
73
|
+
ai: loose({ enabled: z.boolean() }).nullable(),
|
|
74
|
+
});
|
|
75
|
+
export const projectsOutput = loose({
|
|
76
|
+
total: num,
|
|
77
|
+
returned: num,
|
|
78
|
+
truncated: z.boolean(),
|
|
79
|
+
items: z.array(loose({ id: z.string(), name: z.string(), slug: z.string().optional(), apiKey: z.string().optional() })),
|
|
80
|
+
});
|
|
81
|
+
export const overviewOutput = loose({
|
|
82
|
+
window: windowSchema,
|
|
83
|
+
range: z.string().optional(),
|
|
84
|
+
requests: num.optional(),
|
|
85
|
+
errorRate: num.optional(),
|
|
86
|
+
p50Ms: num.optional(),
|
|
87
|
+
p95Ms: num.optional(),
|
|
88
|
+
p99Ms: num.optional(),
|
|
89
|
+
openIssues: num.optional(),
|
|
90
|
+
jobs: loose({}).optional(),
|
|
91
|
+
services: strList.optional(),
|
|
92
|
+
environments: strList.optional(),
|
|
93
|
+
});
|
|
94
|
+
export const endpointsOutput = loose({
|
|
95
|
+
window: windowSchema,
|
|
96
|
+
filters: filtersField,
|
|
97
|
+
total: num,
|
|
98
|
+
returned: num,
|
|
99
|
+
items: z.array(loose({ name: z.string(), requests: num.optional(), p95Ms: num.optional(), errorRate: num.optional() })),
|
|
100
|
+
});
|
|
101
|
+
export const issuesOutput = loose({
|
|
102
|
+
items: z.array(loose({ id: z.string(), sampleTraceId: optStr })),
|
|
103
|
+
nextCursor: z.string().nullable(),
|
|
104
|
+
total: num,
|
|
105
|
+
evidence: evidenceField,
|
|
106
|
+
});
|
|
107
|
+
export const tracesOutput = loose({
|
|
108
|
+
window: windowSchema,
|
|
109
|
+
filters: filtersField,
|
|
110
|
+
items: z.array(traceItem),
|
|
111
|
+
nextCursor: z.string().nullable(),
|
|
112
|
+
evidence: evidenceField,
|
|
113
|
+
});
|
|
114
|
+
export const traceOutput = loose({
|
|
115
|
+
traceId: z.string(),
|
|
116
|
+
name: z.string().optional(),
|
|
117
|
+
durationMs: num.optional(),
|
|
118
|
+
statusCode: optNum,
|
|
119
|
+
spanPage: loose({ total: num, nextSpanOffset: num.nullable() }),
|
|
120
|
+
spans: z.array(loose({})),
|
|
121
|
+
evidence: evidenceField,
|
|
122
|
+
links: linksField,
|
|
123
|
+
});
|
|
124
|
+
export const logsOutput = loose({
|
|
125
|
+
window: windowSchema,
|
|
126
|
+
items: z.array(loose({ ts: z.string(), message: z.string() })),
|
|
127
|
+
nextCursor: z.string().nullable(),
|
|
128
|
+
});
|
|
129
|
+
export const guideOutput = loose({
|
|
130
|
+
framework: z.string(),
|
|
131
|
+
projectId: z.string().nullable(),
|
|
132
|
+
serviceName: z.string().nullable(),
|
|
133
|
+
apiKeyIncluded: z.boolean(),
|
|
134
|
+
databaseDriver: z.string().nullable(),
|
|
135
|
+
markdown: z.string(),
|
|
136
|
+
});
|
|
137
|
+
export const verifyIngestOutput = loose({
|
|
138
|
+
window: windowSchema,
|
|
139
|
+
spans: z.object({ ok: z.boolean(), lastTrace: traceItem.nullable() }),
|
|
140
|
+
logs: z.object({ ok: z.boolean(), available: z.boolean(), last: loose({ ts: z.string() }).nullable(), error: z.string().nullable() }),
|
|
141
|
+
verdict: z.enum(['ok', 'nothing']),
|
|
142
|
+
evidence: evidenceField,
|
|
143
|
+
});
|
|
144
|
+
export const issueOutput = loose({
|
|
145
|
+
id: z.string().optional(),
|
|
146
|
+
title: z.string().optional(),
|
|
147
|
+
type: z.string().optional(),
|
|
148
|
+
count: num.optional(),
|
|
149
|
+
evidence: evidenceField,
|
|
150
|
+
links: linksField,
|
|
151
|
+
});
|
|
152
|
+
export const releasesOutput = loose({
|
|
153
|
+
version: z.string().nullable(),
|
|
154
|
+
items: z.array(loose({ version: z.string() })).optional(),
|
|
155
|
+
detail: loose({}).optional(),
|
|
156
|
+
});
|
|
157
|
+
export const historyOutput = loose({
|
|
158
|
+
name: z.string().optional(),
|
|
159
|
+
days: num.optional(),
|
|
160
|
+
bucketHours: num.optional(),
|
|
161
|
+
points: z.array(loose({ ts: z.string() })).optional(),
|
|
162
|
+
markers: z.array(loose({ version: z.string(), at: z.string() })).optional(),
|
|
163
|
+
filters: z.object({ service: z.string().optional(), env: z.string().optional() }),
|
|
164
|
+
filtersApplied: z.boolean().describe('false = a API não filtra o histórico por service/env (os números misturam todos)'),
|
|
165
|
+
});
|
|
166
|
+
export const providersOutput = loose({
|
|
167
|
+
window: windowSchema,
|
|
168
|
+
totalRequests: num.optional(),
|
|
169
|
+
errorRate: num.optional(),
|
|
170
|
+
items: z.array(loose({ host: z.string() })),
|
|
171
|
+
});
|
|
172
|
+
export const trafficOutput = loose({
|
|
173
|
+
window: z.object({ fromDay: z.string(), toDay: z.string() }),
|
|
174
|
+
empty: z.boolean(),
|
|
175
|
+
totals: loose({}).optional(),
|
|
176
|
+
lastRollupAt: z.string().nullable().optional(),
|
|
177
|
+
notes: strList,
|
|
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
|
+
});
|
|
192
|
+
export const monitorsOutput = loose({
|
|
193
|
+
total: num,
|
|
194
|
+
returned: num,
|
|
195
|
+
truncated: z.boolean(),
|
|
196
|
+
items: z.array(loose({ id: z.string(), name: z.string(), slug: z.string(), status: z.string() })),
|
|
197
|
+
});
|
|
198
|
+
export const monitorOutput = loose({
|
|
199
|
+
id: z.string(),
|
|
200
|
+
name: z.string().optional(),
|
|
201
|
+
status: z.string().optional(),
|
|
202
|
+
checks: z.array(loose({ at: z.string(), status: z.string() })),
|
|
203
|
+
evidence: evidenceField,
|
|
204
|
+
});
|
|
205
|
+
export const detectDatabasesOutput = loose({
|
|
206
|
+
databases: z.array(loose({ package: z.string() })),
|
|
207
|
+
guide: z.string(),
|
|
208
|
+
});
|
|
209
|
+
/* ---------------- diagnóstico (0.11) ---------------- */
|
|
210
|
+
export const endpointOutput = loose({
|
|
211
|
+
window: windowSchema,
|
|
212
|
+
filters: filtersField,
|
|
213
|
+
name: z.string(),
|
|
214
|
+
requests: num.optional(),
|
|
215
|
+
errorRate: num.optional(),
|
|
216
|
+
p50Ms: num.optional(),
|
|
217
|
+
p95Ms: num.optional(),
|
|
218
|
+
p99Ms: num.optional(),
|
|
219
|
+
slowestTraces: z.array(loose({ traceId: z.string(), durationMs: num })).optional(),
|
|
220
|
+
evidence: evidenceField,
|
|
221
|
+
links: linksField,
|
|
222
|
+
});
|
|
223
|
+
export const queriesOutput = loose({
|
|
224
|
+
window: windowSchema,
|
|
225
|
+
filters: z.object({ service: z.string().optional(), env: z.string().optional(), search: z.string().optional() }),
|
|
226
|
+
filtersApplied: z.boolean().describe('false = a API ignorou service/env: os números misturam ambientes e serviços'),
|
|
227
|
+
totalQueries: num.optional(),
|
|
228
|
+
totalMs: num.optional(),
|
|
229
|
+
avgMs: num.optional(),
|
|
230
|
+
total: num,
|
|
231
|
+
items: z.array(loose({ name: z.string(), count: num, p95Ms: num })),
|
|
232
|
+
environments: strList.optional(),
|
|
233
|
+
evidence: evidenceField,
|
|
234
|
+
links: linksField,
|
|
235
|
+
});
|
|
236
|
+
export const logStatsOutput = loose({
|
|
237
|
+
window: windowSchema,
|
|
238
|
+
totals: z.object({ error: num, warn: num, info: num, debug: num, all: num }),
|
|
239
|
+
histogram: z.array(loose({ ts: z.string() })),
|
|
240
|
+
facets: loose({ services: z.array(loose({ name: z.string(), count: num })), envs: z.array(loose({ name: z.string(), count: num })) }),
|
|
241
|
+
});
|
|
242
|
+
export const alertEventsOutput = loose({
|
|
243
|
+
window: windowSchema.nullable(),
|
|
244
|
+
filters: z.object({ type: strList.optional(), severity: strList.optional(), state: z.string().optional() }),
|
|
245
|
+
items: z.array(loose({
|
|
246
|
+
id: z.string(),
|
|
247
|
+
type: z.string(),
|
|
248
|
+
severity: z.string(),
|
|
249
|
+
firedAt: z.string(),
|
|
250
|
+
state: z.enum(['firing', 'resolved']).nullable(),
|
|
251
|
+
})),
|
|
252
|
+
scanned: num,
|
|
253
|
+
nextCursor: z.string().nullable(),
|
|
254
|
+
evidence: evidenceField,
|
|
255
|
+
});
|
|
256
|
+
export const environmentsOutput = loose({
|
|
257
|
+
window: windowSchema,
|
|
258
|
+
environments: z.array(z.object({
|
|
259
|
+
name: z.string(),
|
|
260
|
+
versions: num.nullable(),
|
|
261
|
+
lastSeen: z.string().nullable(),
|
|
262
|
+
inTelemetry: z.boolean(),
|
|
263
|
+
})),
|
|
264
|
+
services: strList,
|
|
265
|
+
});
|
|
266
|
+
/* ---------------- infra e testes de carga (ferramentas locais/de leitura) ---------------- */
|
|
267
|
+
export const reportOutput = loose({
|
|
268
|
+
report: z.string(),
|
|
269
|
+
});
|
|
270
|
+
export const infraEnvironmentsOutput = loose({
|
|
271
|
+
accounts: z.array(loose({ accountId: z.string(), environment: z.string().nullable(), regionsInUse: strList })),
|
|
272
|
+
skipped: z.array(loose({ reason: z.string() })),
|
|
273
|
+
profilesFound: strList,
|
|
274
|
+
});
|
|
275
|
+
export const routesOutput = loose({
|
|
276
|
+
format: z.enum(['text', 'json']),
|
|
277
|
+
report: z.string().optional(),
|
|
278
|
+
scan: loose({ root: z.string(), routes: z.array(loose({})) }).optional(),
|
|
279
|
+
});
|
|
280
|
+
export const scenariosOutput = loose({
|
|
281
|
+
total: num,
|
|
282
|
+
items: z.array(loose({})),
|
|
283
|
+
});
|
|
284
|
+
export const planOutput = loose({
|
|
285
|
+
preset: z.string(),
|
|
286
|
+
plan: loose({}),
|
|
287
|
+
warnings: strList,
|
|
288
|
+
});
|
|
289
|
+
const compareSide = loose({
|
|
290
|
+
mode: z.enum(['window', 'release']),
|
|
291
|
+
release: z.string().nullable(),
|
|
292
|
+
from: z.string(),
|
|
293
|
+
to: z.string(),
|
|
294
|
+
coverage: z.enum(['full', 'partial', 'none']).describe('Spans brutos na janela (retenção): sem eles, não há decomposição'),
|
|
295
|
+
source: z.enum(['raw', 'rollup', 'none']),
|
|
296
|
+
totals: loose({ p95Ms: num }).nullable(),
|
|
297
|
+
});
|
|
298
|
+
export const compareOutput = loose({
|
|
299
|
+
a: compareSide,
|
|
300
|
+
b: compareSide,
|
|
301
|
+
delta: loose({ p95Ms: num }).nullable(),
|
|
302
|
+
routes: z.array(loose({ name: z.string() })),
|
|
303
|
+
decomposition: loose({ delta: loose({ db: num, httpClient: num, custom: num, gap: num }) }).nullable(),
|
|
304
|
+
topSpans: z.array(loose({ kind: z.string(), name: z.string(), deltaMs: num })).nullable(),
|
|
305
|
+
evidence: evidenceField,
|
|
306
|
+
notes: strList,
|
|
307
|
+
});
|
|
308
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,16 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Servidor MCP do FG Tracker (docs/CONTRATO.md §12): tools,
|
|
2
|
+
* Servidor MCP do FG Tracker (docs/CONTRATO.md §12, docs/mcp.md): tools, prompts e resources.
|
|
3
3
|
* O transporte (stdio) é conectado em `cli.ts`.
|
|
4
4
|
*/
|
|
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;
|
|
15
|
+
/** Só registra ferramentas com `readOnlyHint: true` (default: `FG_TRACKER_READ_ONLY`, desligado se ausente). */
|
|
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;
|
|
14
23
|
}
|
|
15
24
|
/** Prefixo das ferramentas próprias do FG Tracker (`infra_*` e `loadtest_*` têm o seu). */
|
|
16
25
|
export declare const TOOL_PREFIX = "tracker_";
|
|
@@ -19,6 +28,15 @@ export declare const TOOL_PREFIX = "tracker_";
|
|
|
19
28
|
* registrados como aliases, para clientes com permissões ou prompts salvos com eles; saem na 1.0.
|
|
20
29
|
*/
|
|
21
30
|
export declare const LEGACY_TOOL_PREFIX = "track_";
|
|
31
|
+
/**
|
|
32
|
+
* Ferramentas que já existiam com o nome `track_*` (0.10.0) e por isso ganham o alias.
|
|
33
|
+
* Ferramentas novas não ganham: não há permissão nem prompt salvo com um nome que nunca existiu.
|
|
34
|
+
*/
|
|
35
|
+
export declare const LEGACY_ALIASED_TOOLS: ReadonlySet<string>;
|
|
22
36
|
export declare function legacyToolNamesFromEnv(env?: NodeJS.ProcessEnv): boolean;
|
|
37
|
+
/** `FG_TRACKER_READ_ONLY=1` (ou true/on/yes): só as ferramentas de leitura ficam visíveis. */
|
|
38
|
+
export declare function readOnlyFromEnv(env?: NodeJS.ProcessEnv): boolean;
|
|
23
39
|
export declare function createServer(options?: CreateServerOptions): McpServer;
|
|
24
40
|
export type { ToolText };
|
|
41
|
+
export { resolveToolAccess, TOOL_SCOPES } from './permissions.js';
|
|
42
|
+
export type { ToolAccess } from './permissions.js';
|