@tunnelhub/mcp 1.0.4 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/api-gateway/index.d.ts +1 -1
- package/dist/tools/api-gateway/index.d.ts.map +1 -1
- package/dist/tools/api-gateway/index.js +449 -7
- package/dist/tools/api-gateway/index.js.map +1 -1
- package/dist/types/api.d.ts +109 -0
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/mcp.d.ts +203 -0
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/types/mcp.js +58 -0
- package/dist/types/mcp.js.map +1 -1
- package/dist/utils/api-client.d.ts +32 -1
- package/dist/utils/api-client.d.ts.map +1 -1
- package/dist/utils/api-client.js +124 -0
- package/dist/utils/api-client.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# TunnelHub MCP
|
|
2
2
|
|
|
3
|
-
Conecte clientes MCP ao TunnelHub para investigar automações, execuções, logs, traces, sistemas e pacotes usando o mesmo fluxo de autenticação do frontend.
|
|
3
|
+
Conecte clientes MCP ao TunnelHub para investigar automações, execuções, logs, traces, API Gateway, sistemas e pacotes usando o mesmo fluxo de autenticação do frontend.
|
|
4
4
|
|
|
5
5
|
Este MCP é especialmente útil para:
|
|
6
6
|
|
|
@@ -18,6 +18,7 @@ Este MCP é especialmente útil para:
|
|
|
18
18
|
- Consultar sistemas do ambiente atual
|
|
19
19
|
- Consultar pacotes do ambiente atual
|
|
20
20
|
- Consultar tabelas de de/para do ambiente atual
|
|
21
|
+
- Consultar APIs, clients, usage plans, API keys e logs do API Gateway
|
|
21
22
|
- Localizar execuções por intervalo de tempo
|
|
22
23
|
- Resumir uma execução completa
|
|
23
24
|
- Consultar logs e traces de uma execução
|
|
@@ -231,6 +232,15 @@ Você pode pedir coisas como:
|
|
|
231
232
|
- `Mostre o system 1234`
|
|
232
233
|
- `Liste os pacotes do ambiente atual`
|
|
233
234
|
- `Mostre o package abc`
|
|
235
|
+
- `Liste as APIs do API Gateway`
|
|
236
|
+
- `Mostre a API 123abc`
|
|
237
|
+
- `Liste os clients de autenticacao`
|
|
238
|
+
- `Mostre o client xyz`
|
|
239
|
+
- `Liste os usage plans`
|
|
240
|
+
- `Liste as API keys`
|
|
241
|
+
- `Liste os logs da API 123abc`
|
|
242
|
+
- `Mostre o log 9988 da API 123abc no timestamp 1710345600`
|
|
243
|
+
- `Liste os logs globais do API Gateway no dia 2026-03-13`
|
|
234
244
|
- `Liste as tabelas de de/para do ambiente atual`
|
|
235
245
|
- `Busque a tabela de de/para CFOP`
|
|
236
246
|
- `Liste os itens da tabela de de/para 1234`
|
|
@@ -266,6 +276,19 @@ Você pode pedir coisas como:
|
|
|
266
276
|
- `list_data_store_items_tunnelhub`
|
|
267
277
|
- `get_data_store_item_tunnelhub`
|
|
268
278
|
|
|
279
|
+
### API Gateway
|
|
280
|
+
|
|
281
|
+
- `list_api_gateways_tunnelhub`
|
|
282
|
+
- `get_api_gateway_tunnelhub`
|
|
283
|
+
- `list_api_keys_tunnelhub`
|
|
284
|
+
- `list_usage_plans_tunnelhub`
|
|
285
|
+
- `list_auth_clients_tunnelhub`
|
|
286
|
+
- `get_auth_client_tunnelhub`
|
|
287
|
+
- `list_auth_resource_servers_tunnelhub`
|
|
288
|
+
- `list_api_gateway_logs_tunnelhub`
|
|
289
|
+
- `get_api_gateway_log_tunnelhub`
|
|
290
|
+
- `list_all_api_gateway_logs_tunnelhub`
|
|
291
|
+
|
|
269
292
|
### Sistemas
|
|
270
293
|
|
|
271
294
|
- `list_systems_tunnelhub`
|
|
@@ -317,8 +340,10 @@ Observações:
|
|
|
317
340
|
## ⚠️ Limitações atuais
|
|
318
341
|
|
|
319
342
|
- O foco atual está em automações e monitoramento
|
|
343
|
+
- API Gateway está disponível em modo somente leitura
|
|
320
344
|
- Sistemas e pacotes estão disponíveis em modo somente leitura
|
|
321
345
|
- Tabelas de de/para estão disponíveis em modo somente leitura
|
|
346
|
+
- API keys e logs podem incluir dados sensíveis retornados pelo backend
|
|
322
347
|
- Algumas APIs do backend têm comportamentos específicos de filtro e paginação
|
|
323
348
|
- A listagem de execuções depende de intervalo de tempo obrigatório
|
|
324
349
|
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAepE,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAEhD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;;IAYtC,OAAO,CAAC,WAAW;IAyBnB,SAAS,IAAI,SAAS;CAGvB;;AAID,wBAA2C"}
|
package/dist/server.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import packageJson from '../package.json' with { type: 'json' };
|
|
3
3
|
import { SessionManager } from './auth/session-manager.js';
|
|
4
|
+
import { registerApiGatewayTools } from './tools/api-gateway/index.js';
|
|
4
5
|
import { registerDataStoreTools } from './tools/data-stores/index.js';
|
|
5
6
|
import { registerAutomationTools } from './tools/automations/index.js';
|
|
6
7
|
import { registerMonitoringTools } from './tools/monitoring/index.js';
|
|
@@ -40,6 +41,7 @@ export class TunnelHubMCPServer {
|
|
|
40
41
|
registerTenantTools(this.server, context);
|
|
41
42
|
registerPackageTools(this.server, context);
|
|
42
43
|
registerSystemTools(this.server, context);
|
|
44
|
+
registerApiGatewayTools(this.server, context);
|
|
43
45
|
registerDataStoreTools(this.server, context);
|
|
44
46
|
registerAutomationTools(this.server, context);
|
|
45
47
|
registerMonitoringTools(this.server, context);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,MAAM,OAAO,kBAAkB;IACZ,MAAM,CAAY;IAElB,cAAc,CAAiB;IAE/B,SAAS,CAAY;IAEtC;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YAC1B,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,WAAW,CAAC,OAAO;SAC7B,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEO,WAAW;QACjB,MAAM,OAAO,GAAgB;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,KAAK,IAAI,EAAE;gBACrB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC;gBAClE,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;oBAC1B,MAAM,IAAI,QAAQ,CAAC,+CAA+C,EAAE,eAAe,CAAC,CAAC;gBACvF,CAAC;gBAED,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC/C,OAAO,WAAW,CAAC,OAAO,CAAC;YAC7B,CAAC;SACF,CAAC;QAEF,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7C,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAED,MAAM,eAAe,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAEjD,eAAe,eAAe,CAAC,SAAS,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,MAAM,OAAO,kBAAkB;IACZ,MAAM,CAAY;IAElB,cAAc,CAAiB;IAE/B,SAAS,CAAY;IAEtC;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YAC1B,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,WAAW,CAAC,OAAO;SAC7B,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEO,WAAW;QACjB,MAAM,OAAO,GAAgB;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,KAAK,IAAI,EAAE;gBACrB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC;gBAClE,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;oBAC1B,MAAM,IAAI,QAAQ,CAAC,+CAA+C,EAAE,eAAe,CAAC,CAAC;gBACvF,CAAC;gBAED,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC/C,OAAO,WAAW,CAAC,OAAO,CAAC;YAC7B,CAAC;SACF,CAAC;QAEF,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7C,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAED,MAAM,eAAe,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAEjD,eAAe,eAAe,CAAC,SAAS,EAAE,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
export declare function registerApiGatewayTools(
|
|
2
|
+
export declare function registerApiGatewayTools(server: McpServer, context: unknown): void;
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/api-gateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/api-gateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsgBzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAajF"}
|
|
@@ -1,9 +1,451 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import LZString from 'lz-string';
|
|
2
|
+
import { ApiGatewayAllLogsParamsSchema, ApiGatewayIdParamsSchema, ApiGatewayListParamsSchema, ApiGatewayLogIdParamsSchema, ApiGatewayLogListParamsSchema, ApiKeyListParamsSchema, AuthClientIdParamsSchema, AuthClientListParamsSchema, AuthResourceServerListParamsSchema, UsagePlanListParamsSchema, } from '../../types/mcp.js';
|
|
3
|
+
import { errorResult, requireSession, textResult } from '../../utils/error-handler.js';
|
|
4
|
+
function extractItems(response) {
|
|
5
|
+
if (Array.isArray(response)) {
|
|
6
|
+
return response;
|
|
7
|
+
}
|
|
8
|
+
if (response && typeof response === 'object' && Array.isArray(response.data)) {
|
|
9
|
+
return response.data || [];
|
|
10
|
+
}
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
function summarizeApiGateway(item) {
|
|
14
|
+
return [
|
|
15
|
+
`API Gateway ID: ${item.id}`,
|
|
16
|
+
`Name: ${item.name || 'n/a'}`,
|
|
17
|
+
`Type: ${item.type || 'n/a'}`,
|
|
18
|
+
`Package: ${item.packageId || 'n/a'}`,
|
|
19
|
+
`Description: ${item.description || 'n/a'}`,
|
|
20
|
+
`Repository URL: ${item.repositoryUrl || 'n/a'}`,
|
|
21
|
+
`Stages: ${item.stages?.length ?? 0}`,
|
|
22
|
+
`Usage Plans: ${item.usagePlans?.length ?? 0}`,
|
|
23
|
+
`Created At: ${item.createdAt || 'n/a'}`,
|
|
24
|
+
`Updated At: ${item.updatedAt || 'n/a'}`,
|
|
25
|
+
].join('\n');
|
|
26
|
+
}
|
|
27
|
+
function summarizeApiGatewayList(items) {
|
|
28
|
+
if (items.length === 0) {
|
|
29
|
+
return 'No API Gateways found.';
|
|
30
|
+
}
|
|
31
|
+
return items
|
|
32
|
+
.slice(0, 15)
|
|
33
|
+
.map((item) => `${item.name || item.id} | ${item.type || 'n/a'} | package=${item.packageId || 'n/a'} | ${item.id}`)
|
|
34
|
+
.join('\n');
|
|
35
|
+
}
|
|
36
|
+
function summarizeApiKeyList(items) {
|
|
37
|
+
if (items.length === 0) {
|
|
38
|
+
return 'No API keys found.';
|
|
39
|
+
}
|
|
40
|
+
return items
|
|
41
|
+
.slice(0, 15)
|
|
42
|
+
.map((item) => `${item.name || item.id || 'n/a'} | enabled=${String(item.enabled ?? 'n/a')} | ${item.id || 'n/a'}`)
|
|
43
|
+
.join('\n');
|
|
44
|
+
}
|
|
45
|
+
function summarizeUsagePlanList(items) {
|
|
46
|
+
if (items.length === 0) {
|
|
47
|
+
return 'No usage plans found.';
|
|
48
|
+
}
|
|
49
|
+
return items
|
|
50
|
+
.slice(0, 15)
|
|
51
|
+
.map((item) => `${item.name || item.id || 'n/a'} | ${item.description || 'n/a'} | keys=${item.apiKeys?.length ?? 0}`)
|
|
52
|
+
.join('\n');
|
|
53
|
+
}
|
|
54
|
+
function summarizeAuthClient(item) {
|
|
55
|
+
return [
|
|
56
|
+
`Client ID: ${item.clientId}`,
|
|
57
|
+
`Description: ${item.description || 'n/a'}`,
|
|
58
|
+
`Status: ${item.status || 'n/a'}`,
|
|
59
|
+
`Allowed Scopes: ${item.allowedScopes?.join(', ') || 'n/a'}`,
|
|
60
|
+
`Access Token Validity: ${String(item.accessTokenValidity ?? 'n/a')}`,
|
|
61
|
+
`ID Token Validity: ${String(item.idTokenValidity ?? 'n/a')}`,
|
|
62
|
+
`Refresh Token Validity: ${String(item.refreshTokenValidity ?? 'n/a')}`,
|
|
63
|
+
`Issue Refresh Token: ${String(item.issueRefreshToken ?? 'n/a')}`,
|
|
64
|
+
`Created At: ${item.createdAt || 'n/a'}`,
|
|
65
|
+
].join('\n');
|
|
66
|
+
}
|
|
67
|
+
function summarizeAuthClientList(items) {
|
|
68
|
+
if (items.length === 0) {
|
|
69
|
+
return 'No auth clients found.';
|
|
70
|
+
}
|
|
71
|
+
return items
|
|
72
|
+
.slice(0, 15)
|
|
73
|
+
.map((item) => `${item.description || item.clientId} | ${item.status || 'n/a'} | ${item.clientId}`)
|
|
74
|
+
.join('\n');
|
|
75
|
+
}
|
|
76
|
+
function summarizeAuthResourceServerList(items) {
|
|
77
|
+
if (items.length === 0) {
|
|
78
|
+
return 'No auth resource servers found.';
|
|
79
|
+
}
|
|
80
|
+
return items
|
|
81
|
+
.slice(0, 15)
|
|
82
|
+
.map((item) => `${item.Name || item.Identifier || 'n/a'} | scopes=${item.Scopes?.length ?? 0} | ${item.Identifier || 'n/a'}`)
|
|
83
|
+
.join('\n');
|
|
84
|
+
}
|
|
85
|
+
function summarizeApiGatewayLog(item) {
|
|
86
|
+
return [
|
|
87
|
+
`Log ID: ${item.uuid}`,
|
|
88
|
+
`API Gateway ID: ${item.apiId}`,
|
|
89
|
+
`Status: ${item.status || 'n/a'}`,
|
|
90
|
+
`HTTP Method: ${item.httpMethod || 'n/a'}`,
|
|
91
|
+
`Path: ${item.path || 'n/a'}`,
|
|
92
|
+
`Resource: ${item.resource || 'n/a'}`,
|
|
93
|
+
`Source IP: ${item.sourceIp || 'n/a'}`,
|
|
94
|
+
`Created At: ${item.createdAt || 'n/a'}`,
|
|
95
|
+
`Start Time: ${item.startTime || 'n/a'}`,
|
|
96
|
+
`End Time: ${item.endTime || 'n/a'}`,
|
|
97
|
+
`HTTP Status Code: ${String(item.rawResponse?.statusCode ?? 'n/a')}`,
|
|
98
|
+
].join('\n');
|
|
99
|
+
}
|
|
100
|
+
function summarizeApiGatewayLogList(items) {
|
|
101
|
+
if (items.length === 0) {
|
|
102
|
+
return 'No API Gateway logs found.';
|
|
103
|
+
}
|
|
104
|
+
return items
|
|
105
|
+
.slice(0, 15)
|
|
106
|
+
.map((item) => `${item.uuid} | ${item.status || 'n/a'} | ${item.httpMethod || 'n/a'} ${item.path || item.resource || 'n/a'} | ${item.createdAt || 'n/a'}`)
|
|
107
|
+
.join('\n');
|
|
108
|
+
}
|
|
109
|
+
function decodeCompressedPayload(payload) {
|
|
110
|
+
if (!payload) {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
const decompressed = LZString.decompressFromUTF16(payload);
|
|
114
|
+
if (!decompressed || decompressed === 'null') {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
return JSON.parse(JSON.parse(decompressed));
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
try {
|
|
122
|
+
return JSON.parse(decompressed);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return decompressed;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function stringifyPayload(payload) {
|
|
130
|
+
if (payload === undefined) {
|
|
131
|
+
return 'n/a';
|
|
132
|
+
}
|
|
133
|
+
if (typeof payload === 'string') {
|
|
134
|
+
return payload;
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
return JSON.stringify(payload, null, 2);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return String(payload);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const listApiGatewaysTool = {
|
|
144
|
+
name: 'list_api_gateways_tunnelhub',
|
|
145
|
+
schema: {
|
|
146
|
+
title: 'List API Gateways',
|
|
147
|
+
description: 'List API Gateway definitions from api-gateway-service using the current environment.',
|
|
148
|
+
inputSchema: ApiGatewayListParamsSchema,
|
|
149
|
+
annotations: {
|
|
150
|
+
readOnlyHint: true,
|
|
151
|
+
destructiveHint: false,
|
|
152
|
+
idempotentHint: true,
|
|
153
|
+
openWorldHint: false,
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
handler: async (params, context) => {
|
|
157
|
+
try {
|
|
158
|
+
const session = await requireSession(context);
|
|
159
|
+
context.apiClient.setSession(session);
|
|
160
|
+
const apiClient = context.apiClient;
|
|
161
|
+
const response = await apiClient.listApiGateways(params);
|
|
162
|
+
const items = extractItems(response);
|
|
163
|
+
return textResult(`API Gateways:\n\n${summarizeApiGatewayList(items)}\n\nReturned: ${items.length}`, {
|
|
164
|
+
apiGateways: items,
|
|
165
|
+
rawResponse: response,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
return errorResult(error);
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
const getApiGatewayTool = {
|
|
174
|
+
name: 'get_api_gateway_tunnelhub',
|
|
175
|
+
schema: {
|
|
176
|
+
title: 'Get API Gateway',
|
|
177
|
+
description: 'Get read-only details for one API Gateway by id.',
|
|
178
|
+
inputSchema: ApiGatewayIdParamsSchema,
|
|
179
|
+
annotations: {
|
|
180
|
+
readOnlyHint: true,
|
|
181
|
+
destructiveHint: false,
|
|
182
|
+
idempotentHint: true,
|
|
183
|
+
openWorldHint: false,
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
handler: async (params, context) => {
|
|
187
|
+
try {
|
|
188
|
+
const session = await requireSession(context);
|
|
189
|
+
context.apiClient.setSession(session);
|
|
190
|
+
const apiClient = context.apiClient;
|
|
191
|
+
const item = await apiClient.getApiGateway(params.apiGatewayId);
|
|
192
|
+
return textResult(`API Gateway details:\n\n${summarizeApiGateway(item)}`, item);
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
return errorResult(error);
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
const listApiKeysTool = {
|
|
200
|
+
name: 'list_api_keys_tunnelhub',
|
|
201
|
+
schema: {
|
|
202
|
+
title: 'List API Keys',
|
|
203
|
+
description: 'List API keys from api-gateway-service using the current environment. Sensitive values may be included by backend.',
|
|
204
|
+
inputSchema: ApiKeyListParamsSchema,
|
|
205
|
+
annotations: {
|
|
206
|
+
readOnlyHint: true,
|
|
207
|
+
destructiveHint: false,
|
|
208
|
+
idempotentHint: true,
|
|
209
|
+
openWorldHint: false,
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
handler: async (params, context) => {
|
|
213
|
+
try {
|
|
214
|
+
const session = await requireSession(context);
|
|
215
|
+
context.apiClient.setSession(session);
|
|
216
|
+
const apiClient = context.apiClient;
|
|
217
|
+
const response = await apiClient.listApiKeys(params);
|
|
218
|
+
const items = extractItems(response);
|
|
219
|
+
return textResult(`API Keys:\n\n${summarizeApiKeyList(items)}\n\nReturned: ${items.length}\nNote: backend responses may include actual API key values.`, {
|
|
220
|
+
apiKeys: items,
|
|
221
|
+
rawResponse: response,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
return errorResult(error);
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
const listUsagePlansTool = {
|
|
230
|
+
name: 'list_usage_plans_tunnelhub',
|
|
231
|
+
schema: {
|
|
232
|
+
title: 'List Usage Plans',
|
|
233
|
+
description: 'List API Gateway usage plans from api-gateway-service using the current environment.',
|
|
234
|
+
inputSchema: UsagePlanListParamsSchema,
|
|
235
|
+
annotations: {
|
|
236
|
+
readOnlyHint: true,
|
|
237
|
+
destructiveHint: false,
|
|
238
|
+
idempotentHint: true,
|
|
239
|
+
openWorldHint: false,
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
handler: async (params, context) => {
|
|
243
|
+
try {
|
|
244
|
+
const session = await requireSession(context);
|
|
245
|
+
context.apiClient.setSession(session);
|
|
246
|
+
const apiClient = context.apiClient;
|
|
247
|
+
const response = await apiClient.listUsagePlans(params);
|
|
248
|
+
const items = extractItems(response);
|
|
249
|
+
return textResult(`Usage Plans:\n\n${summarizeUsagePlanList(items)}\n\nReturned: ${items.length}`, {
|
|
250
|
+
usagePlans: items,
|
|
251
|
+
rawResponse: response,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
return errorResult(error);
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
};
|
|
259
|
+
const listAuthClientsTool = {
|
|
260
|
+
name: 'list_auth_clients_tunnelhub',
|
|
261
|
+
schema: {
|
|
262
|
+
title: 'List Auth Clients',
|
|
263
|
+
description: 'List API auth clients from api-gateway-service using the current environment.',
|
|
264
|
+
inputSchema: AuthClientListParamsSchema,
|
|
265
|
+
annotations: {
|
|
266
|
+
readOnlyHint: true,
|
|
267
|
+
destructiveHint: false,
|
|
268
|
+
idempotentHint: true,
|
|
269
|
+
openWorldHint: false,
|
|
270
|
+
},
|
|
271
|
+
},
|
|
272
|
+
handler: async (params, context) => {
|
|
273
|
+
try {
|
|
274
|
+
const session = await requireSession(context);
|
|
275
|
+
context.apiClient.setSession(session);
|
|
276
|
+
const apiClient = context.apiClient;
|
|
277
|
+
const response = await apiClient.listAuthClients(params);
|
|
278
|
+
const items = extractItems(response);
|
|
279
|
+
return textResult(`Auth clients:\n\n${summarizeAuthClientList(items)}\n\nReturned: ${items.length}`, {
|
|
280
|
+
authClients: items,
|
|
281
|
+
rawResponse: response,
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
return errorResult(error);
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
};
|
|
289
|
+
const getAuthClientTool = {
|
|
290
|
+
name: 'get_auth_client_tunnelhub',
|
|
291
|
+
schema: {
|
|
292
|
+
title: 'Get Auth Client',
|
|
293
|
+
description: 'Get read-only details for one API auth client by client id.',
|
|
294
|
+
inputSchema: AuthClientIdParamsSchema,
|
|
295
|
+
annotations: {
|
|
296
|
+
readOnlyHint: true,
|
|
297
|
+
destructiveHint: false,
|
|
298
|
+
idempotentHint: true,
|
|
299
|
+
openWorldHint: false,
|
|
300
|
+
},
|
|
301
|
+
},
|
|
302
|
+
handler: async (params, context) => {
|
|
303
|
+
try {
|
|
304
|
+
const session = await requireSession(context);
|
|
305
|
+
context.apiClient.setSession(session);
|
|
306
|
+
const apiClient = context.apiClient;
|
|
307
|
+
const item = await apiClient.getAuthClient(params.clientId);
|
|
308
|
+
return textResult(`Auth client details:\n\n${summarizeAuthClient(item)}`, item);
|
|
309
|
+
}
|
|
310
|
+
catch (error) {
|
|
311
|
+
return errorResult(error);
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
};
|
|
315
|
+
const listAuthResourceServersTool = {
|
|
316
|
+
name: 'list_auth_resource_servers_tunnelhub',
|
|
317
|
+
schema: {
|
|
318
|
+
title: 'List Auth Resource Servers',
|
|
319
|
+
description: 'List Cognito resource servers exposed by api-gateway-service.',
|
|
320
|
+
inputSchema: AuthResourceServerListParamsSchema,
|
|
321
|
+
annotations: {
|
|
322
|
+
readOnlyHint: true,
|
|
323
|
+
destructiveHint: false,
|
|
324
|
+
idempotentHint: true,
|
|
325
|
+
openWorldHint: false,
|
|
326
|
+
},
|
|
327
|
+
},
|
|
328
|
+
handler: async (params, context) => {
|
|
329
|
+
try {
|
|
330
|
+
const session = await requireSession(context);
|
|
331
|
+
context.apiClient.setSession(session);
|
|
332
|
+
const apiClient = context.apiClient;
|
|
333
|
+
const response = await apiClient.listAuthResourceServers(params);
|
|
334
|
+
const items = extractItems(response);
|
|
335
|
+
return textResult(`Auth resource servers:\n\n${summarizeAuthResourceServerList(items)}\n\nReturned: ${items.length}`, {
|
|
336
|
+
resourceServers: items,
|
|
337
|
+
rawResponse: response,
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
return errorResult(error);
|
|
342
|
+
}
|
|
343
|
+
},
|
|
344
|
+
};
|
|
345
|
+
const listApiGatewayLogsTool = {
|
|
346
|
+
name: 'list_api_gateway_logs_tunnelhub',
|
|
347
|
+
schema: {
|
|
348
|
+
title: 'List API Gateway Logs',
|
|
349
|
+
description: 'List logs for one API Gateway by id.',
|
|
350
|
+
inputSchema: ApiGatewayLogListParamsSchema,
|
|
351
|
+
annotations: {
|
|
352
|
+
readOnlyHint: true,
|
|
353
|
+
destructiveHint: false,
|
|
354
|
+
idempotentHint: true,
|
|
355
|
+
openWorldHint: false,
|
|
356
|
+
},
|
|
357
|
+
},
|
|
358
|
+
handler: async (params, context) => {
|
|
359
|
+
try {
|
|
360
|
+
const session = await requireSession(context);
|
|
361
|
+
context.apiClient.setSession(session);
|
|
362
|
+
const apiClient = context.apiClient;
|
|
363
|
+
const { apiGatewayId, ...listParams } = params;
|
|
364
|
+
const response = await apiClient.listApiGatewayLogs(apiGatewayId, listParams);
|
|
365
|
+
const items = extractItems(response);
|
|
366
|
+
return textResult(`API Gateway logs for ${apiGatewayId}:\n\n${summarizeApiGatewayLogList(items)}\n\nReturned: ${items.length}`, {
|
|
367
|
+
logs: items,
|
|
368
|
+
rawResponse: response,
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
return errorResult(error);
|
|
373
|
+
}
|
|
374
|
+
},
|
|
375
|
+
};
|
|
376
|
+
const getApiGatewayLogTool = {
|
|
377
|
+
name: 'get_api_gateway_log_tunnelhub',
|
|
378
|
+
schema: {
|
|
379
|
+
title: 'Get API Gateway Log',
|
|
380
|
+
description: 'Get one API Gateway log entry and decode compressed request and response payloads when possible.',
|
|
381
|
+
inputSchema: ApiGatewayLogIdParamsSchema,
|
|
382
|
+
annotations: {
|
|
383
|
+
readOnlyHint: true,
|
|
384
|
+
destructiveHint: false,
|
|
385
|
+
idempotentHint: true,
|
|
386
|
+
openWorldHint: false,
|
|
387
|
+
},
|
|
388
|
+
},
|
|
389
|
+
handler: async (params, context) => {
|
|
390
|
+
try {
|
|
391
|
+
const session = await requireSession(context);
|
|
392
|
+
context.apiClient.setSession(session);
|
|
393
|
+
const apiClient = context.apiClient;
|
|
394
|
+
const item = await apiClient.getApiGatewayLog(params.apiGatewayId, params.timestamp, params.logId);
|
|
395
|
+
const decodedRequestPayload = decodeCompressedPayload(item.requestPayload);
|
|
396
|
+
const decodedResponsePayload = decodeCompressedPayload(item.responsePayload);
|
|
397
|
+
return textResult(`API Gateway log details:\n\n${summarizeApiGatewayLog(item)}\n\nDecoded request payload:\n${stringifyPayload(decodedRequestPayload)}\n\nDecoded response payload:\n${stringifyPayload(decodedResponsePayload)}`, {
|
|
398
|
+
...item,
|
|
399
|
+
decodedRequestPayload,
|
|
400
|
+
decodedResponsePayload,
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
catch (error) {
|
|
404
|
+
return errorResult(error);
|
|
405
|
+
}
|
|
406
|
+
},
|
|
407
|
+
};
|
|
408
|
+
const listAllApiGatewayLogsTool = {
|
|
409
|
+
name: 'list_all_api_gateway_logs_tunnelhub',
|
|
410
|
+
schema: {
|
|
411
|
+
title: 'List All API Gateway Logs',
|
|
412
|
+
description: 'List API Gateway logs across the current environment for a required date range.',
|
|
413
|
+
inputSchema: ApiGatewayAllLogsParamsSchema,
|
|
414
|
+
annotations: {
|
|
415
|
+
readOnlyHint: true,
|
|
416
|
+
destructiveHint: false,
|
|
417
|
+
idempotentHint: true,
|
|
418
|
+
openWorldHint: false,
|
|
419
|
+
},
|
|
420
|
+
},
|
|
421
|
+
handler: async (params, context) => {
|
|
422
|
+
try {
|
|
423
|
+
const session = await requireSession(context);
|
|
424
|
+
context.apiClient.setSession(session);
|
|
425
|
+
const apiClient = context.apiClient;
|
|
426
|
+
const response = await apiClient.listAllApiGatewayLogs(params);
|
|
427
|
+
const items = extractItems(response);
|
|
428
|
+
return textResult(`API Gateway logs:\n\n${summarizeApiGatewayLogList(items)}\n\nReturned: ${items.length}`, {
|
|
429
|
+
logs: items,
|
|
430
|
+
rawResponse: response,
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
catch (error) {
|
|
434
|
+
return errorResult(error);
|
|
435
|
+
}
|
|
436
|
+
},
|
|
437
|
+
};
|
|
438
|
+
export function registerApiGatewayTools(server, context) {
|
|
439
|
+
const toolContext = context;
|
|
440
|
+
server.registerTool(listApiGatewaysTool.name, listApiGatewaysTool.schema, (params) => listApiGatewaysTool.handler(params, toolContext));
|
|
441
|
+
server.registerTool(getApiGatewayTool.name, getApiGatewayTool.schema, (params) => getApiGatewayTool.handler(params, toolContext));
|
|
442
|
+
server.registerTool(listApiKeysTool.name, listApiKeysTool.schema, (params) => listApiKeysTool.handler(params, toolContext));
|
|
443
|
+
server.registerTool(listUsagePlansTool.name, listUsagePlansTool.schema, (params) => listUsagePlansTool.handler(params, toolContext));
|
|
444
|
+
server.registerTool(listAuthClientsTool.name, listAuthClientsTool.schema, (params) => listAuthClientsTool.handler(params, toolContext));
|
|
445
|
+
server.registerTool(getAuthClientTool.name, getAuthClientTool.schema, (params) => getAuthClientTool.handler(params, toolContext));
|
|
446
|
+
server.registerTool(listAuthResourceServersTool.name, listAuthResourceServersTool.schema, (params) => listAuthResourceServersTool.handler(params, toolContext));
|
|
447
|
+
server.registerTool(listApiGatewayLogsTool.name, listApiGatewayLogsTool.schema, (params) => listApiGatewayLogsTool.handler(params, toolContext));
|
|
448
|
+
server.registerTool(getApiGatewayLogTool.name, getApiGatewayLogTool.schema, (params) => getApiGatewayLogTool.handler(params, toolContext));
|
|
449
|
+
server.registerTool(listAllApiGatewayLogsTool.name, listAllApiGatewayLogsTool.schema, (params) => listAllApiGatewayLogsTool.handler(params, toolContext));
|
|
8
450
|
}
|
|
9
451
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/api-gateway/index.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB,CAAC,OAAkB,EAAE,QAAiB;IAC3E,oCAAoC;IACpC,sBAAsB;IACtB,qBAAqB;IACrB,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;AACpB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/api-gateway/index.ts"],"names":[],"mappings":"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"}
|