@gyramais/mcp-server 0.1.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.
Files changed (103) hide show
  1. package/dist/bin/gyra-mcp-internal.d.ts +3 -0
  2. package/dist/bin/gyra-mcp-internal.d.ts.map +1 -0
  3. package/dist/bin/gyra-mcp-internal.js +8 -0
  4. package/dist/bin/gyra-mcp-internal.js.map +1 -0
  5. package/dist/bin/gyra-mcp.d.ts +7 -0
  6. package/dist/bin/gyra-mcp.d.ts.map +1 -0
  7. package/dist/bin/gyra-mcp.js +7 -0
  8. package/dist/bin/gyra-mcp.js.map +1 -0
  9. package/dist/enrichments/auth.enrichment.d.ts +3 -0
  10. package/dist/enrichments/auth.enrichment.d.ts.map +1 -0
  11. package/dist/enrichments/auth.enrichment.js +20 -0
  12. package/dist/enrichments/auth.enrichment.js.map +1 -0
  13. package/dist/enrichments/credential.enrichment.d.ts +3 -0
  14. package/dist/enrichments/credential.enrichment.d.ts.map +1 -0
  15. package/dist/enrichments/credential.enrichment.js +62 -0
  16. package/dist/enrichments/credential.enrichment.js.map +1 -0
  17. package/dist/enrichments/credit-policy.enrichment.d.ts +3 -0
  18. package/dist/enrichments/credit-policy.enrichment.d.ts.map +1 -0
  19. package/dist/enrichments/credit-policy.enrichment.js +48 -0
  20. package/dist/enrichments/credit-policy.enrichment.js.map +1 -0
  21. package/dist/enrichments/index.d.ts +10 -0
  22. package/dist/enrichments/index.d.ts.map +1 -0
  23. package/dist/enrichments/index.js +23 -0
  24. package/dist/enrichments/index.js.map +1 -0
  25. package/dist/enrichments/insight.enrichment.d.ts +3 -0
  26. package/dist/enrichments/insight.enrichment.d.ts.map +1 -0
  27. package/dist/enrichments/insight.enrichment.js +37 -0
  28. package/dist/enrichments/insight.enrichment.js.map +1 -0
  29. package/dist/enrichments/public-endpoints.d.ts +15 -0
  30. package/dist/enrichments/public-endpoints.d.ts.map +1 -0
  31. package/dist/enrichments/public-endpoints.js +44 -0
  32. package/dist/enrichments/public-endpoints.js.map +1 -0
  33. package/dist/enrichments/report.enrichment.d.ts +3 -0
  34. package/dist/enrichments/report.enrichment.d.ts.map +1 -0
  35. package/dist/enrichments/report.enrichment.js +133 -0
  36. package/dist/enrichments/report.enrichment.js.map +1 -0
  37. package/dist/enrichments/section.enrichment.d.ts +3 -0
  38. package/dist/enrichments/section.enrichment.d.ts.map +1 -0
  39. package/dist/enrichments/section.enrichment.js +24 -0
  40. package/dist/enrichments/section.enrichment.js.map +1 -0
  41. package/dist/enrichments/types.d.ts +26 -0
  42. package/dist/enrichments/types.d.ts.map +1 -0
  43. package/dist/enrichments/types.js +2 -0
  44. package/dist/enrichments/types.js.map +1 -0
  45. package/dist/enrichments/webhook.enrichment.d.ts +3 -0
  46. package/dist/enrichments/webhook.enrichment.d.ts.map +1 -0
  47. package/dist/enrichments/webhook.enrichment.js +61 -0
  48. package/dist/enrichments/webhook.enrichment.js.map +1 -0
  49. package/dist/scripts/enrich-spec.d.ts +3 -0
  50. package/dist/scripts/enrich-spec.d.ts.map +1 -0
  51. package/dist/scripts/enrich-spec.js +128 -0
  52. package/dist/scripts/enrich-spec.js.map +1 -0
  53. package/dist/scripts/fetch-spec.d.ts +3 -0
  54. package/dist/scripts/fetch-spec.d.ts.map +1 -0
  55. package/dist/scripts/fetch-spec.js +34 -0
  56. package/dist/scripts/fetch-spec.js.map +1 -0
  57. package/dist/scripts/generate-internal.d.ts +3 -0
  58. package/dist/scripts/generate-internal.d.ts.map +1 -0
  59. package/dist/scripts/generate-internal.js +45 -0
  60. package/dist/scripts/generate-internal.js.map +1 -0
  61. package/dist/scripts/generate-mintlify.d.ts +3 -0
  62. package/dist/scripts/generate-mintlify.d.ts.map +1 -0
  63. package/dist/scripts/generate-mintlify.js +98 -0
  64. package/dist/scripts/generate-mintlify.js.map +1 -0
  65. package/dist/scripts/validate-spec.d.ts +3 -0
  66. package/dist/scripts/validate-spec.d.ts.map +1 -0
  67. package/dist/scripts/validate-spec.js +67 -0
  68. package/dist/scripts/validate-spec.js.map +1 -0
  69. package/dist/src/auth.d.ts +14 -0
  70. package/dist/src/auth.d.ts.map +1 -0
  71. package/dist/src/auth.js +50 -0
  72. package/dist/src/auth.js.map +1 -0
  73. package/dist/src/client.d.ts +22 -0
  74. package/dist/src/client.d.ts.map +1 -0
  75. package/dist/src/client.js +51 -0
  76. package/dist/src/client.js.map +1 -0
  77. package/dist/src/config.d.ts +13 -0
  78. package/dist/src/config.d.ts.map +1 -0
  79. package/dist/src/config.js +16 -0
  80. package/dist/src/config.js.map +1 -0
  81. package/dist/src/index.d.ts +3 -0
  82. package/dist/src/index.d.ts.map +1 -0
  83. package/dist/src/index.js +35 -0
  84. package/dist/src/index.js.map +1 -0
  85. package/dist/src/server.d.ts +5 -0
  86. package/dist/src/server.d.ts.map +1 -0
  87. package/dist/src/server.js +104 -0
  88. package/dist/src/server.js.map +1 -0
  89. package/dist/src/tools/index.d.ts +4 -0
  90. package/dist/src/tools/index.d.ts.map +1 -0
  91. package/dist/src/tools/index.js +3 -0
  92. package/dist/src/tools/index.js.map +1 -0
  93. package/dist/src/tools/param-resolver.d.ts +13 -0
  94. package/dist/src/tools/param-resolver.d.ts.map +1 -0
  95. package/dist/src/tools/param-resolver.js +44 -0
  96. package/dist/src/tools/param-resolver.js.map +1 -0
  97. package/dist/src/tools/tool-factory.d.ts +18 -0
  98. package/dist/src/tools/tool-factory.d.ts.map +1 -0
  99. package/dist/src/tools/tool-factory.js +156 -0
  100. package/dist/src/tools/tool-factory.js.map +1 -0
  101. package/package.json +44 -0
  102. package/spec/openapi-external.json +1007 -0
  103. package/spec/openapi-internal.json +2087 -0
@@ -0,0 +1,51 @@
1
+ export class GyraClient {
2
+ auth;
3
+ baseUrl;
4
+ constructor(config, auth) {
5
+ this.baseUrl = config.baseUrl;
6
+ this.auth = auth;
7
+ }
8
+ async request(method, path, options) {
9
+ const token = await this.auth.getToken();
10
+ // Montar URL com query params
11
+ let url = `${this.baseUrl}${path}`;
12
+ if (options?.query) {
13
+ const params = new URLSearchParams();
14
+ for (const [key, value] of Object.entries(options.query)) {
15
+ if (value !== undefined && value !== null && value !== '') {
16
+ params.set(key, value);
17
+ }
18
+ }
19
+ const qs = params.toString();
20
+ if (qs)
21
+ url += `?${qs}`;
22
+ }
23
+ const headers = {
24
+ 'Authorization': `Bearer ${token}`,
25
+ 'Content-Type': 'application/json',
26
+ ...options?.headers,
27
+ };
28
+ const fetchOptions = {
29
+ method: method.toUpperCase(),
30
+ headers,
31
+ };
32
+ if (options?.body && ['POST', 'PUT', 'PATCH'].includes(method.toUpperCase())) {
33
+ fetchOptions.body = JSON.stringify(options.body);
34
+ }
35
+ const response = await fetch(url, fetchOptions);
36
+ let data;
37
+ const contentType = response.headers.get('content-type') || '';
38
+ if (contentType.includes('application/json')) {
39
+ data = await response.json();
40
+ }
41
+ else {
42
+ data = await response.text();
43
+ }
44
+ return {
45
+ status: response.status,
46
+ data,
47
+ ok: response.ok,
48
+ };
49
+ }
50
+ }
51
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,UAAU;IACb,IAAI,CAAW;IACf,OAAO,CAAS;IAExB,YAAY,MAAkB,EAAE,IAAc;QAC5C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,OAAO,CACX,MAAc,EACd,IAAY,EACZ,OAIC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEzC,8BAA8B;QAC9B,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACnC,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;oBAC1D,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;YACD,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,EAAE;gBAAE,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,OAAO,GAA2B;YACtC,eAAe,EAAE,UAAU,KAAK,EAAE;YAClC,cAAc,EAAE,kBAAkB;YAClC,GAAG,OAAO,EAAE,OAAO;SACpB,CAAC;QAEF,MAAM,YAAY,GAAgB;YAChC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;YAC5B,OAAO;SACR,CAAC;QAEF,IAAI,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC7E,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAEhD,IAAI,IAAS,CAAC;QACd,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC/D,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;QAED,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,IAAI;YACJ,EAAE,EAAE,QAAQ,CAAC,EAAE;SAChB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Configuracao do MCP server.
3
+ * Todas as configuracoes vem de env vars.
4
+ */
5
+ export interface GyraConfig {
6
+ baseUrl: string;
7
+ clientId?: string;
8
+ clientSecret?: string;
9
+ accessToken?: string;
10
+ profile: 'external' | 'internal';
11
+ }
12
+ export declare function loadConfig(): GyraConfig;
13
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,UAAU,GAAG,UAAU,CAAC;CAClC;AAED,wBAAgB,UAAU,IAAI,UAAU,CAkBvC"}
@@ -0,0 +1,16 @@
1
+ export function loadConfig() {
2
+ const baseUrl = process.env.GYRA_BASE_URL || 'https://gyra-core.gyramais.com.br';
3
+ const clientId = process.env.GYRA_CLIENT_ID;
4
+ const clientSecret = process.env.GYRA_CLIENT_SECRET;
5
+ const accessToken = process.env.GYRA_ACCESS_TOKEN;
6
+ const profile = process.env.GYRA_PROFILE || 'external';
7
+ // Validar que temos credenciais
8
+ if (!accessToken && (!clientId || !clientSecret)) {
9
+ console.error('Erro: Configure GYRA_ACCESS_TOKEN ou GYRA_CLIENT_ID + GYRA_CLIENT_SECRET.\n' +
10
+ 'Exemplo:\n' +
11
+ ' GYRA_CLIENT_ID=xxx GYRA_CLIENT_SECRET=yyy npx @gyramais/mcp-server');
12
+ process.exit(1);
13
+ }
14
+ return { baseUrl, clientId, clientSecret, accessToken, profile };
15
+ }
16
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,mCAAmC,CAAC;IACjF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC5C,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACpD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAClD,MAAM,OAAO,GAAI,OAAO,CAAC,GAAG,CAAC,YAAwC,IAAI,UAAU,CAAC;IAEpF,gCAAgC;IAChC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,KAAK,CACX,6EAA6E;YAC7E,YAAY;YACZ,sEAAsE,CACvE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AACnE,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Entry point do MCP server.
4
+ * Carrega a spec correspondente ao profile (external/internal) e inicia o server.
5
+ */
6
+ import { readFileSync, existsSync } from 'node:fs';
7
+ import { resolve, dirname } from 'node:path';
8
+ import { fileURLToPath } from 'node:url';
9
+ import { startServer } from './server.js';
10
+ // Resolve ROOT independente de rodar via tsx (src/) ou node (dist/src/)
11
+ const __dirname = dirname(fileURLToPath(import.meta.url));
12
+ const ROOT = existsSync(resolve(__dirname, '..', 'spec'))
13
+ ? resolve(__dirname, '..') // Rodando via tsx (src/ → root)
14
+ : resolve(__dirname, '../..'); // Rodando via node (dist/src/ → root)
15
+ // Determinar profile
16
+ const isInternal = process.argv.includes('--profile=internal')
17
+ || process.argv.includes('--internal')
18
+ || process.env.GYRA_PROFILE === 'internal';
19
+ const specFile = isInternal ? 'openapi-internal.json' : 'openapi-external.json';
20
+ const specPath = resolve(ROOT, 'spec', specFile);
21
+ if (!existsSync(specPath)) {
22
+ console.error(`Spec nao encontrada: ${specPath}`);
23
+ console.error('Execute "npm run sync" para gerar as specs.');
24
+ process.exit(1);
25
+ }
26
+ const spec = JSON.parse(readFileSync(specPath, 'utf-8'));
27
+ // Override profile no env para config
28
+ if (isInternal) {
29
+ process.env.GYRA_PROFILE = 'internal';
30
+ }
31
+ startServer(spec).catch((err) => {
32
+ console.error('Erro ao iniciar MCP server:', err);
33
+ process.exit(1);
34
+ });
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,wEAAwE;AACxE,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAI,gCAAgC;IAC9D,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,sCAAsC;AAEvE,qBAAqB;AACrB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;OACzD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;OACnC,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,UAAU,CAAC;AAE7C,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,uBAAuB,CAAC;AAChF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAEjD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAEzD,sCAAsC;AACtC,IAAI,UAAU,EAAE,CAAC;IACf,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC;AACxC,CAAC;AAED,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Inicia o MCP server com a spec fornecida.
3
+ */
4
+ export declare function startServer(spec: any): Promise<void>;
5
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,GAAG,iBAuD1C"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * MCP Server setup — registra tools e conecta via stdio transport.
3
+ */
4
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
6
+ import { z } from 'zod';
7
+ import { loadConfig } from './config.js';
8
+ import { GyraAuth } from './auth.js';
9
+ import { GyraClient } from './client.js';
10
+ import { generateTools } from './tools/index.js';
11
+ /**
12
+ * Inicia o MCP server com a spec fornecida.
13
+ */
14
+ export async function startServer(spec) {
15
+ const config = loadConfig();
16
+ const auth = new GyraAuth(config);
17
+ const client = new GyraClient(config, auth);
18
+ const serverName = config.profile === 'internal'
19
+ ? 'gyra-mcp-internal'
20
+ : 'gyra-mcp';
21
+ const serverDescription = config.profile === 'internal'
22
+ ? 'GYRA+ API - MCP Server Interno (todos os endpoints)'
23
+ : 'GYRA+ API - MCP Server para analise de credito';
24
+ const server = new McpServer({
25
+ name: serverName,
26
+ version: '0.1.0',
27
+ });
28
+ // Gerar e registrar tools da spec
29
+ const tools = generateTools(spec, client);
30
+ for (const tool of tools) {
31
+ // Converter inputSchema para Zod shape para o MCP SDK
32
+ const zodShape = jsonSchemaToZodShape(tool.definition.inputSchema);
33
+ server.tool(tool.definition.name, tool.definition.description, zodShape, async (args) => {
34
+ try {
35
+ return await tool.handler(args);
36
+ }
37
+ catch (error) {
38
+ return {
39
+ content: [
40
+ {
41
+ type: 'text',
42
+ text: JSON.stringify({
43
+ error: true,
44
+ message: error.message || 'Erro interno no MCP server.',
45
+ }, null, 2),
46
+ },
47
+ ],
48
+ isError: true,
49
+ };
50
+ }
51
+ });
52
+ }
53
+ // Conectar via stdio
54
+ const transport = new StdioServerTransport();
55
+ await server.connect(transport);
56
+ console.error(`${serverName} iniciado com ${tools.length} tools.`);
57
+ }
58
+ /**
59
+ * Converte JSON Schema properties em um Zod shape para o MCP SDK.
60
+ * O MCP SDK espera Record<string, ZodType>.
61
+ */
62
+ function jsonSchemaToZodShape(schema) {
63
+ const shape = {};
64
+ if (!schema?.properties)
65
+ return shape;
66
+ const requiredSet = new Set(schema.required || []);
67
+ for (const [name, prop] of Object.entries(schema.properties)) {
68
+ let zodType;
69
+ switch (prop.type) {
70
+ case 'integer':
71
+ case 'number':
72
+ zodType = z.number();
73
+ break;
74
+ case 'boolean':
75
+ zodType = z.boolean();
76
+ break;
77
+ case 'array':
78
+ zodType = z.array(z.any());
79
+ break;
80
+ case 'object':
81
+ zodType = z.record(z.any());
82
+ break;
83
+ default:
84
+ // string, enum, etc
85
+ if (prop.enum) {
86
+ zodType = z.enum(prop.enum);
87
+ }
88
+ else {
89
+ zodType = z.string();
90
+ }
91
+ }
92
+ // Adicionar description
93
+ if (prop.description) {
94
+ zodType = zodType.describe(prop.description);
95
+ }
96
+ // Marcar como optional se nao e required
97
+ if (!requiredSet.has(name)) {
98
+ zodType = zodType.optional();
99
+ }
100
+ shape[name] = zodType;
101
+ }
102
+ return shape;
103
+ }
104
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { generateTools } from './tool-factory.js';
2
+ export type { McpToolDefinition, McpToolHandler, RegisteredTool } from './tool-factory.js';
3
+ export { resolveParams } from './param-resolver.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { generateTools } from './tool-factory.js';
2
+ export { resolveParams } from './param-resolver.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Resolve parametros do input de um MCP tool para uma HTTP request.
3
+ * Mapeia path params, query params e body de acordo com a spec OpenAPI.
4
+ */
5
+ export interface ResolvedRequest {
6
+ method: string;
7
+ path: string;
8
+ query: Record<string, string>;
9
+ body: any;
10
+ headers: Record<string, string>;
11
+ }
12
+ export declare function resolveParams(method: string, pathTemplate: string, operation: any, toolInput: Record<string, any>): ResolvedRequest;
13
+ //# sourceMappingURL=param-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"param-resolver.d.ts","sourceRoot":"","sources":["../../../src/tools/param-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,eAAe,CA2CjB"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Resolve parametros do input de um MCP tool para uma HTTP request.
3
+ * Mapeia path params, query params e body de acordo com a spec OpenAPI.
4
+ */
5
+ export function resolveParams(method, pathTemplate, operation, toolInput) {
6
+ const query = {};
7
+ const headers = {};
8
+ let body = undefined;
9
+ let path = pathTemplate;
10
+ // Separar input em path, query e header params
11
+ const paramDefs = operation.parameters || [];
12
+ const usedKeys = new Set();
13
+ for (const param of paramDefs) {
14
+ const value = toolInput[param.name];
15
+ if (value === undefined || value === null)
16
+ continue;
17
+ usedKeys.add(param.name);
18
+ switch (param.in) {
19
+ case 'path':
20
+ path = path.replace(`{${param.name}}`, encodeURIComponent(String(value)));
21
+ break;
22
+ case 'query':
23
+ query[param.name] = String(value);
24
+ break;
25
+ case 'header':
26
+ headers[param.name] = String(value);
27
+ break;
28
+ }
29
+ }
30
+ // Tudo que nao e param vai pro body (se metodo suporta body)
31
+ if (['POST', 'PUT', 'PATCH'].includes(method.toUpperCase())) {
32
+ const bodyParams = {};
33
+ for (const [key, value] of Object.entries(toolInput)) {
34
+ if (!usedKeys.has(key) && value !== undefined && value !== null) {
35
+ bodyParams[key] = value;
36
+ }
37
+ }
38
+ if (Object.keys(bodyParams).length > 0) {
39
+ body = bodyParams;
40
+ }
41
+ }
42
+ return { method: method.toUpperCase(), path, query, body, headers };
43
+ }
44
+ //# sourceMappingURL=param-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"param-resolver.js","sourceRoot":"","sources":["../../../src/tools/param-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,YAAoB,EACpB,SAAc,EACd,SAA8B;IAE9B,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,IAAI,GAAQ,SAAS,CAAC;IAC1B,IAAI,IAAI,GAAG,YAAY,CAAC;IAExB,+CAA+C;IAC/C,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAEpD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEzB,QAAQ,KAAK,CAAC,EAAE,EAAE,CAAC;YACjB,KAAK,MAAM;gBACT,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC1E,MAAM;YACR,KAAK,OAAO;gBACV,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClC,MAAM;YACR,KAAK,QAAQ;gBACX,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBACpC,MAAM;QACV,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QAC5D,MAAM,UAAU,GAAwB,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAChE,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,IAAI,GAAG,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACtE,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { GyraClient } from '../client.js';
2
+ export interface McpToolDefinition {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: any;
6
+ }
7
+ export interface McpToolHandler {
8
+ (args: Record<string, any>): Promise<any>;
9
+ }
10
+ export interface RegisteredTool {
11
+ definition: McpToolDefinition;
12
+ handler: McpToolHandler;
13
+ }
14
+ /**
15
+ * Gera tools MCP a partir de uma spec OpenAPI.
16
+ */
17
+ export declare function generateTools(spec: any, client: GyraClient): RegisteredTool[];
18
+ //# sourceMappingURL=tool-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-factory.d.ts","sourceRoot":"","sources":["../../../src/tools/tool-factory.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,GAAG,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,OAAO,EAAE,cAAc,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,GAAG,cAAc,EAAE,CAoE7E"}
@@ -0,0 +1,156 @@
1
+ import { enrichmentRegistry } from '../../enrichments/index.js';
2
+ import { resolveParams } from './param-resolver.js';
3
+ /**
4
+ * Gera tools MCP a partir de uma spec OpenAPI.
5
+ */
6
+ export function generateTools(spec, client) {
7
+ const tools = [];
8
+ for (const [path, methods] of Object.entries(spec.paths || {})) {
9
+ for (const [method, operation] of Object.entries(methods)) {
10
+ if (method === 'parameters')
11
+ continue;
12
+ const operationId = operation.operationId;
13
+ if (!operationId)
14
+ continue;
15
+ // Determinar nome do tool
16
+ const enrichment = enrichmentRegistry[operationId];
17
+ const toolName = enrichment?.toolName || operationIdToToolName(operationId);
18
+ const description = buildDescription(operation, enrichment);
19
+ // Gerar input schema
20
+ const inputSchema = buildInputSchema(operation, enrichment, spec.components?.schemas);
21
+ const definition = {
22
+ name: toolName,
23
+ description,
24
+ inputSchema,
25
+ };
26
+ // Handler que executa a chamada HTTP
27
+ const handler = async (args) => {
28
+ const resolved = resolveParams(method, path, operation, args);
29
+ const response = await client.request(resolved.method, resolved.path, {
30
+ body: resolved.body,
31
+ query: resolved.query,
32
+ headers: resolved.headers,
33
+ });
34
+ if (!response.ok) {
35
+ return {
36
+ content: [
37
+ {
38
+ type: 'text',
39
+ text: JSON.stringify({
40
+ error: true,
41
+ status: response.status,
42
+ message: typeof response.data === 'string'
43
+ ? response.data
44
+ : response.data?.message || 'Erro na requisicao.',
45
+ data: response.data,
46
+ }, null, 2),
47
+ },
48
+ ],
49
+ isError: true,
50
+ };
51
+ }
52
+ return {
53
+ content: [
54
+ {
55
+ type: 'text',
56
+ text: JSON.stringify(response.data, null, 2),
57
+ },
58
+ ],
59
+ };
60
+ };
61
+ tools.push({ definition, handler });
62
+ }
63
+ }
64
+ return tools;
65
+ }
66
+ /**
67
+ * Converte operationId em tool name (snake_case).
68
+ * Ex: ReportController_create → report_create
69
+ */
70
+ function operationIdToToolName(operationId) {
71
+ return operationId
72
+ .replace(/Controller_/g, '_')
73
+ .replace(/([a-z])([A-Z])/g, '$1_$2')
74
+ .toLowerCase();
75
+ }
76
+ /**
77
+ * Monta a description do tool combinando spec + enrichment.
78
+ */
79
+ function buildDescription(operation, enrichment) {
80
+ if (enrichment?.description) {
81
+ return enrichment.description;
82
+ }
83
+ const parts = [];
84
+ if (operation.summary)
85
+ parts.push(operation.summary);
86
+ if (operation.description && operation.description !== operation.summary) {
87
+ parts.push(operation.description);
88
+ }
89
+ return parts.join('\n\n') || 'Sem descricao disponivel.';
90
+ }
91
+ /**
92
+ * Gera JSON Schema para o input do tool a partir dos parameters + requestBody da spec.
93
+ */
94
+ function buildInputSchema(operation, enrichment, schemas) {
95
+ const properties = {};
96
+ const required = [];
97
+ // Path, query e header params
98
+ const params = operation.parameters || [];
99
+ for (const param of params) {
100
+ // Pular params excluidos pelo enrichment
101
+ if (enrichment?.excludeParams?.includes(param.name))
102
+ continue;
103
+ const paramSchema = { ...(param.schema || { type: 'string' }) };
104
+ paramSchema.description = enrichment?.paramDescriptions?.[param.name] || param.description || '';
105
+ properties[param.name] = paramSchema;
106
+ if (param.required) {
107
+ required.push(param.name);
108
+ }
109
+ }
110
+ // Request body properties
111
+ if (operation.requestBody?.content) {
112
+ const content = operation.requestBody.content['application/json'];
113
+ if (content?.schema) {
114
+ let bodySchema = content.schema;
115
+ // Resolver $ref
116
+ if (bodySchema.$ref && schemas) {
117
+ const refName = bodySchema.$ref.replace('#/components/schemas/', '');
118
+ bodySchema = schemas[refName] || bodySchema;
119
+ }
120
+ if (bodySchema.properties) {
121
+ for (const [propName, propSchema] of Object.entries(bodySchema.properties)) {
122
+ if (enrichment?.excludeParams?.includes(propName))
123
+ continue;
124
+ const enrichedProp = { ...propSchema };
125
+ if (enrichment?.paramDescriptions?.[propName]) {
126
+ enrichedProp.description = enrichment.paramDescriptions[propName];
127
+ }
128
+ // Resolver $ref interno
129
+ if (enrichedProp.$ref && schemas) {
130
+ const refName = enrichedProp.$ref.replace('#/components/schemas/', '');
131
+ const resolved = schemas[refName];
132
+ if (resolved) {
133
+ Object.assign(enrichedProp, resolved);
134
+ delete enrichedProp.$ref;
135
+ }
136
+ }
137
+ properties[propName] = enrichedProp;
138
+ }
139
+ // Required do body
140
+ if (bodySchema.required) {
141
+ for (const req of bodySchema.required) {
142
+ if (!enrichment?.excludeParams?.includes(req) && !required.includes(req)) {
143
+ required.push(req);
144
+ }
145
+ }
146
+ }
147
+ }
148
+ }
149
+ }
150
+ return {
151
+ type: 'object',
152
+ properties,
153
+ required: required.length > 0 ? required : undefined,
154
+ };
155
+ }
156
+ //# sourceMappingURL=tool-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-factory.js","sourceRoot":"","sources":["../../../src/tools/tool-factory.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@gyramais/mcp-server",
3
+ "version": "0.1.0",
4
+ "description": "MCP Server para APIs da Gyra+ - Analise de credito via AI agents",
5
+ "type": "module",
6
+ "bin": {
7
+ "gyra-mcp": "./dist/bin/gyra-mcp.js",
8
+ "gyra-mcp-internal": "./dist/bin/gyra-mcp-internal.js"
9
+ },
10
+ "files": [
11
+ "dist/",
12
+ "spec/openapi-external.json",
13
+ "spec/openapi-internal.json"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "dev": "tsx src/index.ts",
18
+ "dev:internal": "tsx src/index.ts --profile internal",
19
+ "fetch-spec": "tsx scripts/fetch-spec.ts",
20
+ "enrich-spec": "tsx scripts/enrich-spec.ts",
21
+ "generate-internal": "tsx scripts/generate-internal.ts",
22
+ "generate-mintlify": "tsx scripts/generate-mintlify.ts",
23
+ "validate-spec": "tsx scripts/validate-spec.ts",
24
+ "sync": "npm run fetch-spec && npm run enrich-spec && npm run generate-internal && npm run validate-spec",
25
+ "sync:mintlify": "npm run sync && npm run generate-mintlify"
26
+ },
27
+ "dependencies": {
28
+ "@modelcontextprotocol/sdk": "^1.12.1",
29
+ "zod": "^3.24.2"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "^22.0.0",
33
+ "tsx": "^4.19.0",
34
+ "typescript": "^5.7.0"
35
+ },
36
+ "engines": {
37
+ "node": ">=18"
38
+ },
39
+ "license": "UNLICENSED",
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "https://github.com/gyramais/gyra-mcp"
43
+ }
44
+ }