apprecio-mcp-base 1.0.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 (74) hide show
  1. package/README.md +301 -0
  2. package/dist/core/McpBaseServer.d.ts +59 -0
  3. package/dist/core/McpBaseServer.d.ts.map +1 -0
  4. package/dist/core/McpBaseServer.js +113 -0
  5. package/dist/core/McpBaseServer.js.map +1 -0
  6. package/dist/core/config.d.ts +81 -0
  7. package/dist/core/config.d.ts.map +1 -0
  8. package/dist/core/config.js +122 -0
  9. package/dist/core/config.js.map +1 -0
  10. package/dist/core/logger.d.ts +14 -0
  11. package/dist/core/logger.d.ts.map +1 -0
  12. package/dist/core/logger.js +65 -0
  13. package/dist/core/logger.js.map +1 -0
  14. package/dist/core/types.d.ts +113 -0
  15. package/dist/core/types.d.ts.map +1 -0
  16. package/dist/core/types.js +2 -0
  17. package/dist/core/types.js.map +1 -0
  18. package/dist/database/mongodb.d.ts +35 -0
  19. package/dist/database/mongodb.d.ts.map +1 -0
  20. package/dist/database/mongodb.js +85 -0
  21. package/dist/database/mongodb.js.map +1 -0
  22. package/dist/index.d.ts +11 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +13 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/middleware/auth.d.ts +26 -0
  27. package/dist/middleware/auth.d.ts.map +1 -0
  28. package/dist/middleware/auth.js +100 -0
  29. package/dist/middleware/auth.js.map +1 -0
  30. package/dist/server/createExpressServer.d.ts +13 -0
  31. package/dist/server/createExpressServer.d.ts.map +1 -0
  32. package/dist/server/createExpressServer.js +98 -0
  33. package/dist/server/createExpressServer.js.map +1 -0
  34. package/dist/src/core/McpBaseServer.d.ts +59 -0
  35. package/dist/src/core/McpBaseServer.d.ts.map +1 -0
  36. package/dist/src/core/McpBaseServer.js +113 -0
  37. package/dist/src/core/McpBaseServer.js.map +1 -0
  38. package/dist/src/core/config.d.ts +81 -0
  39. package/dist/src/core/config.d.ts.map +1 -0
  40. package/dist/src/core/config.js +122 -0
  41. package/dist/src/core/config.js.map +1 -0
  42. package/dist/src/core/logger.d.ts +14 -0
  43. package/dist/src/core/logger.d.ts.map +1 -0
  44. package/dist/src/core/logger.js +65 -0
  45. package/dist/src/core/logger.js.map +1 -0
  46. package/dist/src/core/types.d.ts +113 -0
  47. package/dist/src/core/types.d.ts.map +1 -0
  48. package/dist/src/core/types.js +2 -0
  49. package/dist/src/core/types.js.map +1 -0
  50. package/dist/src/database/mongodb.d.ts +35 -0
  51. package/dist/src/database/mongodb.d.ts.map +1 -0
  52. package/dist/src/database/mongodb.js +85 -0
  53. package/dist/src/database/mongodb.js.map +1 -0
  54. package/dist/src/index.d.ts +11 -0
  55. package/dist/src/index.d.ts.map +1 -0
  56. package/dist/src/index.js +13 -0
  57. package/dist/src/index.js.map +1 -0
  58. package/dist/src/middleware/auth.d.ts +26 -0
  59. package/dist/src/middleware/auth.d.ts.map +1 -0
  60. package/dist/src/middleware/auth.js +100 -0
  61. package/dist/src/middleware/auth.js.map +1 -0
  62. package/dist/src/server/createExpressServer.d.ts +13 -0
  63. package/dist/src/server/createExpressServer.d.ts.map +1 -0
  64. package/dist/src/server/createExpressServer.js +98 -0
  65. package/dist/src/server/createExpressServer.js.map +1 -0
  66. package/dist/src/utils/portFinder.d.ts +13 -0
  67. package/dist/src/utils/portFinder.d.ts.map +1 -0
  68. package/dist/src/utils/portFinder.js +43 -0
  69. package/dist/src/utils/portFinder.js.map +1 -0
  70. package/dist/utils/portFinder.d.ts +13 -0
  71. package/dist/utils/portFinder.d.ts.map +1 -0
  72. package/dist/utils/portFinder.js +43 -0
  73. package/dist/utils/portFinder.js.map +1 -0
  74. package/package.json +63 -0
@@ -0,0 +1,59 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { Express } from 'express';
3
+ import type { Server as HttpServer } from 'http';
4
+ import { HttpTerminator } from 'http-terminator';
5
+ import { BaseConfig } from './config.js';
6
+ import type { FeatureModule, ServerOptions } from './types.js';
7
+ /**
8
+ * Clase base abstracta para servidores MCP de Apprecio
9
+ * Proporciona funcionalidad común para todos los servidores MCP
10
+ */
11
+ export declare abstract class McpBaseServer {
12
+ protected mcpServer: McpServer;
13
+ protected httpServer?: HttpServer;
14
+ protected httpTerminator?: HttpTerminator;
15
+ protected config: BaseConfig;
16
+ protected features: Map<string, FeatureModule>;
17
+ constructor(options: ServerOptions);
18
+ /**
19
+ * Registra un feature module (debe implementar cada servidor MCP)
20
+ */
21
+ protected abstract registerFeatures(): Promise<void>;
22
+ /**
23
+ * Hook para inicialización personalizada
24
+ */
25
+ protected onBeforeStart?(): Promise<void>;
26
+ /**
27
+ * Hook para cleanup personalizado
28
+ */
29
+ protected onBeforeShutdown?(): Promise<void>;
30
+ /**
31
+ * Registra una feature genérica
32
+ */
33
+ protected registerFeature(name: string, feature: FeatureModule): void;
34
+ /**
35
+ * Configura el servidor Express con middlewares base
36
+ */
37
+ protected setupHttpServer(app: Express): Promise<void>;
38
+ /**
39
+ * Inicia el servidor MCP
40
+ */
41
+ start(httpServer: HttpServer, port: number): Promise<void>;
42
+ /**
43
+ * Configura el apagado graceful del servidor
44
+ */
45
+ private setupGracefulShutdown;
46
+ /**
47
+ * Obtiene la instancia del MCP Server
48
+ */
49
+ getMcpServer(): McpServer;
50
+ /**
51
+ * Obtiene la configuración
52
+ */
53
+ getConfig(): BaseConfig;
54
+ /**
55
+ * Obtiene las features registradas
56
+ */
57
+ getFeatures(): Map<string, FeatureModule>;
58
+ }
59
+ //# sourceMappingURL=McpBaseServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpBaseServer.d.ts","sourceRoot":"","sources":["../../../src/core/McpBaseServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AACjD,OAAO,EAAwB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGvE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D;;;GAGG;AACH,8BAAsB,aAAa;IAC/B,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;IAC/B,SAAS,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IAClC,SAAS,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAC1C,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;IAC7B,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAa;gBAE/C,OAAO,EAAE,aAAa;IAWlC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAEpD;;OAEG;cACa,aAAa,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAE/C;;OAEG;cACa,gBAAgB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAElD;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAUrE;;OAEG;cACa,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D;;OAEG;IACG,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBhE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiC7B;;OAEG;IACI,YAAY,IAAI,SAAS;IAIhC;;OAEG;IACI,SAAS,IAAI,UAAU;IAI9B;;OAEG;IACI,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;CAGnD"}
@@ -0,0 +1,113 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { createHttpTerminator } from 'http-terminator';
3
+ import { logger } from './logger.js';
4
+ import { BaseConfig } from './config.js';
5
+ /**
6
+ * Clase base abstracta para servidores MCP de Apprecio
7
+ * Proporciona funcionalidad común para todos los servidores MCP
8
+ */
9
+ export class McpBaseServer {
10
+ mcpServer;
11
+ httpServer;
12
+ httpTerminator;
13
+ config;
14
+ features = new Map();
15
+ constructor(options) {
16
+ this.config = new BaseConfig(options.envPath);
17
+ this.mcpServer = new McpServer({
18
+ name: options.name,
19
+ version: options.version,
20
+ });
21
+ logger.info(`Initializing ${options.name} v${options.version}`);
22
+ }
23
+ /**
24
+ * Registra una feature genérica
25
+ */
26
+ registerFeature(name, feature) {
27
+ if (this.features.has(name)) {
28
+ logger.warn(`Feature ${name} ya está registrada. Sobrescribiendo...`);
29
+ }
30
+ feature.register(this.mcpServer);
31
+ this.features.set(name, feature);
32
+ logger.info(`Feature '${name}' registered successfully`);
33
+ }
34
+ /**
35
+ * Configura el servidor Express con middlewares base
36
+ */
37
+ async setupHttpServer(app) {
38
+ // Implementado en el server builder
39
+ }
40
+ /**
41
+ * Inicia el servidor MCP
42
+ */
43
+ async start(httpServer, port) {
44
+ try {
45
+ // Hook pre-start
46
+ if (this.onBeforeStart) {
47
+ await this.onBeforeStart();
48
+ }
49
+ // Registrar features
50
+ await this.registerFeatures();
51
+ // Guardar referencia al servidor HTTP
52
+ this.httpServer = httpServer;
53
+ this.httpTerminator = createHttpTerminator({ server: httpServer });
54
+ logger.info(`MCP Server started successfully on port ${port}`);
55
+ // Setup graceful shutdown
56
+ this.setupGracefulShutdown();
57
+ }
58
+ catch (error) {
59
+ logger.error('Failed to start MCP server:', error);
60
+ throw error;
61
+ }
62
+ }
63
+ /**
64
+ * Configura el apagado graceful del servidor
65
+ */
66
+ setupGracefulShutdown() {
67
+ const shutdown = async (signal) => {
68
+ logger.info(`Received ${signal} signal. Starting graceful shutdown...`);
69
+ // Pequeño delay para completar requests en curso
70
+ await new Promise(resolve => setTimeout(resolve, 500));
71
+ try {
72
+ // Hook pre-shutdown
73
+ if (this.onBeforeShutdown) {
74
+ await this.onBeforeShutdown();
75
+ }
76
+ // Terminar servidor HTTP
77
+ if (this.httpTerminator) {
78
+ await this.httpTerminator.terminate();
79
+ }
80
+ logger.info('Server terminated successfully. Exiting.');
81
+ process.exit(0);
82
+ }
83
+ catch (error) {
84
+ logger.error('Error during server termination:', error);
85
+ process.exit(1);
86
+ }
87
+ };
88
+ process.on('SIGINT', () => shutdown('SIGINT'));
89
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
90
+ process.on('unhandledRejection', (reason) => {
91
+ logger.error('Unhandled promise rejection:', reason);
92
+ });
93
+ }
94
+ /**
95
+ * Obtiene la instancia del MCP Server
96
+ */
97
+ getMcpServer() {
98
+ return this.mcpServer;
99
+ }
100
+ /**
101
+ * Obtiene la configuración
102
+ */
103
+ getConfig() {
104
+ return this.config;
105
+ }
106
+ /**
107
+ * Obtiene las features registradas
108
+ */
109
+ getFeatures() {
110
+ return this.features;
111
+ }
112
+ }
113
+ //# sourceMappingURL=McpBaseServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpBaseServer.js","sourceRoot":"","sources":["../../../src/core/McpBaseServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Schema de validación para la configuración base
4
+ */
5
+ declare const baseConfigSchema: z.ZodObject<{
6
+ apiKey: z.ZodString;
7
+ mongodbUri: z.ZodOptional<z.ZodString>;
8
+ redisUri: z.ZodOptional<z.ZodString>;
9
+ ssePort: z.ZodDefault<z.ZodNumber>;
10
+ mcpTimeout: z.ZodDefault<z.ZodNumber>;
11
+ sseTimeout: z.ZodDefault<z.ZodNumber>;
12
+ logLevel: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error"]>>;
13
+ corsAllowOrigin: z.ZodDefault<z.ZodString>;
14
+ rateLimitWindowMs: z.ZodDefault<z.ZodNumber>;
15
+ rateLimitMaxRequests: z.ZodDefault<z.ZodNumber>;
16
+ rateLimitSseMax: z.ZodDefault<z.ZodNumber>;
17
+ rateLimitMessagesMax: z.ZodDefault<z.ZodNumber>;
18
+ defaultUserRateLimit: z.ZodDefault<z.ZodNumber>;
19
+ }, "strip", z.ZodTypeAny, {
20
+ apiKey: string;
21
+ ssePort: number;
22
+ mcpTimeout: number;
23
+ sseTimeout: number;
24
+ logLevel: "info" | "error" | "debug" | "warn";
25
+ corsAllowOrigin: string;
26
+ rateLimitWindowMs: number;
27
+ rateLimitMaxRequests: number;
28
+ rateLimitSseMax: number;
29
+ rateLimitMessagesMax: number;
30
+ defaultUserRateLimit: number;
31
+ mongodbUri?: string | undefined;
32
+ redisUri?: string | undefined;
33
+ }, {
34
+ apiKey: string;
35
+ mongodbUri?: string | undefined;
36
+ redisUri?: string | undefined;
37
+ ssePort?: number | undefined;
38
+ mcpTimeout?: number | undefined;
39
+ sseTimeout?: number | undefined;
40
+ logLevel?: "info" | "error" | "debug" | "warn" | undefined;
41
+ corsAllowOrigin?: string | undefined;
42
+ rateLimitWindowMs?: number | undefined;
43
+ rateLimitMaxRequests?: number | undefined;
44
+ rateLimitSseMax?: number | undefined;
45
+ rateLimitMessagesMax?: number | undefined;
46
+ defaultUserRateLimit?: number | undefined;
47
+ }>;
48
+ export type BaseConfigType = z.infer<typeof baseConfigSchema>;
49
+ /**
50
+ * Clase de configuración base para servidores MCP
51
+ */
52
+ export declare class BaseConfig {
53
+ private config;
54
+ constructor(envPath?: string);
55
+ /**
56
+ * Obtiene toda la configuración
57
+ */
58
+ getAll(): BaseConfigType;
59
+ /**
60
+ * Getters individuales
61
+ */
62
+ get apiKey(): string;
63
+ get mongodbUri(): string | undefined;
64
+ get redisUri(): string | undefined;
65
+ get ssePort(): number;
66
+ get mcpTimeout(): number;
67
+ get sseTimeout(): number;
68
+ get logLevel(): 'debug' | 'info' | 'warn' | 'error';
69
+ get corsAllowOrigin(): string;
70
+ get rateLimitWindowMs(): number;
71
+ get rateLimitMaxRequests(): number;
72
+ get rateLimitSseMax(): number;
73
+ get rateLimitMessagesMax(): number;
74
+ get defaultUserRateLimit(): number;
75
+ /**
76
+ * Permite extender la configuración con valores personalizados
77
+ */
78
+ extend<T extends Record<string, any>>(customConfig: T): BaseConfigType & T;
79
+ }
80
+ export {};
81
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BpB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE9D;;GAEG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,MAAM,CAAiB;gBAEnB,OAAO,CAAC,EAAE,MAAM;IAmC5B;;OAEG;IACI,MAAM,IAAI,cAAc;IAI/B;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IAED,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,QAAQ,IAAI,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAElD;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,oBAAoB,IAAI,MAAM,CAEjC;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,oBAAoB,IAAI,MAAM,CAEjC;IAED,IAAI,oBAAoB,IAAI,MAAM,CAEjC;IAED;;OAEG;IACI,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,cAAc,GAAG,CAAC;CAGpF"}
@@ -0,0 +1,122 @@
1
+ import { config as dotenvConfig } from 'dotenv';
2
+ import { z } from 'zod';
3
+ import { logger } from './logger.js';
4
+ /**
5
+ * Schema de validación para la configuración base
6
+ */
7
+ const baseConfigSchema = z.object({
8
+ // Authentication
9
+ apiKey: z.string().min(1, 'API_KEY is required'),
10
+ // Database
11
+ mongodbUri: z.string().optional(),
12
+ redisUri: z.string().optional(),
13
+ // Server
14
+ ssePort: z.coerce.number().min(1000).max(65535).default(3200),
15
+ // Timeouts
16
+ mcpTimeout: z.coerce.number().default(180000),
17
+ sseTimeout: z.coerce.number().default(1800000),
18
+ // Logging
19
+ logLevel: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
20
+ // CORS
21
+ corsAllowOrigin: z.string().default('*'),
22
+ // Rate Limiting
23
+ rateLimitWindowMs: z.coerce.number().default(900000),
24
+ rateLimitMaxRequests: z.coerce.number().default(100),
25
+ rateLimitSseMax: z.coerce.number().default(5),
26
+ rateLimitMessagesMax: z.coerce.number().default(30),
27
+ defaultUserRateLimit: z.coerce.number().default(1000),
28
+ });
29
+ /**
30
+ * Clase de configuración base para servidores MCP
31
+ */
32
+ export class BaseConfig {
33
+ config;
34
+ constructor(envPath) {
35
+ // Cargar variables de entorno
36
+ dotenvConfig({ path: envPath });
37
+ // Parsear y validar configuración
38
+ const rawConfig = {
39
+ apiKey: process.env.API_KEY,
40
+ mongodbUri: process.env.MONGODB_URI,
41
+ redisUri: process.env.REDIS_URI,
42
+ ssePort: process.env.MCP_SSE_PORT,
43
+ mcpTimeout: process.env.MCP_TIMEOUT,
44
+ sseTimeout: process.env.SSE_TIMEOUT,
45
+ logLevel: process.env.LOG_LEVEL,
46
+ corsAllowOrigin: process.env.CORS_ALLOW_ORIGIN,
47
+ rateLimitWindowMs: process.env.RATE_LIMIT_WINDOW_MS,
48
+ rateLimitMaxRequests: process.env.RATE_LIMIT_MAX_REQUESTS,
49
+ rateLimitSseMax: process.env.RATE_LIMIT_SSE_MAX,
50
+ rateLimitMessagesMax: process.env.RATE_LIMIT_MESSAGES_MAX,
51
+ defaultUserRateLimit: process.env.DEFAULT_USER_RATE_LIMIT,
52
+ };
53
+ try {
54
+ this.config = baseConfigSchema.parse(rawConfig);
55
+ logger.info('Configuration loaded and validated successfully');
56
+ }
57
+ catch (error) {
58
+ if (error instanceof z.ZodError) {
59
+ logger.error('Configuration validation failed:');
60
+ error.errors.forEach(err => {
61
+ logger.error(` - ${err.path.join('.')}: ${err.message}`);
62
+ });
63
+ }
64
+ throw new Error('Invalid configuration');
65
+ }
66
+ }
67
+ /**
68
+ * Obtiene toda la configuración
69
+ */
70
+ getAll() {
71
+ return this.config;
72
+ }
73
+ /**
74
+ * Getters individuales
75
+ */
76
+ get apiKey() {
77
+ return this.config.apiKey;
78
+ }
79
+ get mongodbUri() {
80
+ return this.config.mongodbUri;
81
+ }
82
+ get redisUri() {
83
+ return this.config.redisUri;
84
+ }
85
+ get ssePort() {
86
+ return this.config.ssePort;
87
+ }
88
+ get mcpTimeout() {
89
+ return this.config.mcpTimeout;
90
+ }
91
+ get sseTimeout() {
92
+ return this.config.sseTimeout;
93
+ }
94
+ get logLevel() {
95
+ return this.config.logLevel;
96
+ }
97
+ get corsAllowOrigin() {
98
+ return this.config.corsAllowOrigin;
99
+ }
100
+ get rateLimitWindowMs() {
101
+ return this.config.rateLimitWindowMs;
102
+ }
103
+ get rateLimitMaxRequests() {
104
+ return this.config.rateLimitMaxRequests;
105
+ }
106
+ get rateLimitSseMax() {
107
+ return this.config.rateLimitSseMax;
108
+ }
109
+ get rateLimitMessagesMax() {
110
+ return this.config.rateLimitMessagesMax;
111
+ }
112
+ get defaultUserRateLimit() {
113
+ return this.config.defaultUserRateLimit;
114
+ }
115
+ /**
116
+ * Permite extender la configuración con valores personalizados
117
+ */
118
+ extend(customConfig) {
119
+ return { ...this.config, ...customConfig };
120
+ }
121
+ }
122
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import winston from 'winston';
2
+ /**
3
+ * Logger centralizado para todos los servidores MCP
4
+ */
5
+ export declare const logger: winston.Logger;
6
+ /**
7
+ * Helper para crear un logger child con contexto
8
+ */
9
+ export declare function createChildLogger(context: string): winston.Logger;
10
+ /**
11
+ * Actualiza el nivel de log dinámicamente
12
+ */
13
+ export declare function setLogLevel(level: 'debug' | 'info' | 'warn' | 'error'): void;
14
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/core/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAuB9B;;GAEG;AACH,eAAO,MAAM,MAAM,gBAuCjB,CAAC;AAEH;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,kBAEhD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,QAGrE"}
@@ -0,0 +1,65 @@
1
+ import winston from 'winston';
2
+ const { combine, timestamp, printf, colorize, errors } = winston.format;
3
+ /**
4
+ * Formato personalizado para los logs
5
+ */
6
+ const customFormat = printf(({ level, message, timestamp, stack, ...metadata }) => {
7
+ let msg = `${timestamp} [${level}]: ${message}`;
8
+ // Si hay metadata adicional, añadirla
9
+ if (Object.keys(metadata).length > 0) {
10
+ msg += ` ${JSON.stringify(metadata)}`;
11
+ }
12
+ // Si hay un stack trace, añadirlo
13
+ if (stack) {
14
+ msg += `\n${stack}`;
15
+ }
16
+ return msg;
17
+ });
18
+ /**
19
+ * Logger centralizado para todos los servidores MCP
20
+ */
21
+ export const logger = winston.createLogger({
22
+ level: process.env.LOG_LEVEL || 'info',
23
+ format: combine(errors({ stack: true }), timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), customFormat),
24
+ transports: [
25
+ // Console transport con colores
26
+ new winston.transports.Console({
27
+ format: combine(colorize(), customFormat)
28
+ }),
29
+ // File transport para errores
30
+ new winston.transports.File({
31
+ filename: 'logs/error.log',
32
+ level: 'error',
33
+ maxsize: 5242880, // 5MB
34
+ maxFiles: 5,
35
+ }),
36
+ // File transport para todos los logs
37
+ new winston.transports.File({
38
+ filename: 'logs/combined.log',
39
+ maxsize: 5242880, // 5MB
40
+ maxFiles: 5,
41
+ })
42
+ ],
43
+ // Manejar excepciones no capturadas
44
+ exceptionHandlers: [
45
+ new winston.transports.File({ filename: 'logs/exceptions.log' })
46
+ ],
47
+ // Manejar rechazos de promesas
48
+ rejectionHandlers: [
49
+ new winston.transports.File({ filename: 'logs/rejections.log' })
50
+ ]
51
+ });
52
+ /**
53
+ * Helper para crear un logger child con contexto
54
+ */
55
+ export function createChildLogger(context) {
56
+ return logger.child({ context });
57
+ }
58
+ /**
59
+ * Actualiza el nivel de log dinámicamente
60
+ */
61
+ export function setLogLevel(level) {
62
+ logger.level = level;
63
+ logger.info(`Log level changed to: ${level}`);
64
+ }
65
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/core/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;AAExE;;GAEG;AACH,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE;IAC9E,IAAI,GAAG,GAAG,GAAG,SAAS,KAAK,KAAK,MAAM,OAAO,EAAE,CAAC;IAEhD,sCAAsC;IACtC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,GAAG,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED,kCAAkC;IAClC,IAAI,KAAK,EAAE,CAAC;QACR,GAAG,IAAI,KAAK,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IACvC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;IACtC,MAAM,EAAE,OAAO,CACX,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EACvB,SAAS,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,EAC5C,YAAY,CACf;IACD,UAAU,EAAE;QACR,gCAAgC;QAChC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;YAC3B,MAAM,EAAE,OAAO,CACX,QAAQ,EAAE,EACV,YAAY,CACf;SACJ,CAAC;QAEF,8BAA8B;QAC9B,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACxB,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,OAAO,EAAE,MAAM;YACxB,QAAQ,EAAE,CAAC;SACd,CAAC;QAEF,qCAAqC;QACrC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACxB,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,OAAO,EAAE,MAAM;YACxB,QAAQ,EAAE,CAAC;SACd,CAAC;KACL;IACD,oCAAoC;IACpC,iBAAiB,EAAE;QACf,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC;KACnE;IACD,+BAA+B;IAC/B,iBAAiB,EAAE;QACf,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC;KACnE;CACJ,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC7C,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAA0C;IAClE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,MAAM,CAAC,IAAI,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,113 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ /**
3
+ * Opciones para inicializar un servidor MCP
4
+ */
5
+ export interface ServerOptions {
6
+ name: string;
7
+ version: string;
8
+ envPath?: string;
9
+ }
10
+ /**
11
+ * Interface para módulos de features
12
+ */
13
+ export interface FeatureModule {
14
+ /**
15
+ * Nombre de la feature
16
+ */
17
+ name: string;
18
+ /**
19
+ * Registra los tools de la feature en el servidor MCP
20
+ */
21
+ register(mcpServer: McpServer): void;
22
+ /**
23
+ * Inicialización opcional de la feature
24
+ */
25
+ initialize?(): Promise<void>;
26
+ /**
27
+ * Cleanup opcional de la feature
28
+ */
29
+ cleanup?(): Promise<void>;
30
+ }
31
+ /**
32
+ * Interface base para servicios
33
+ */
34
+ export interface BaseService {
35
+ /**
36
+ * Inicializar el servicio
37
+ */
38
+ initialize?(): Promise<void>;
39
+ /**
40
+ * Cleanup del servicio
41
+ */
42
+ cleanup?(): Promise<void>;
43
+ }
44
+ /**
45
+ * Opciones de autenticación
46
+ */
47
+ export interface AuthOptions {
48
+ apiKey?: string;
49
+ publicToken?: string;
50
+ privateToken?: string;
51
+ }
52
+ /**
53
+ * Contexto de request para autenticación
54
+ */
55
+ export interface AuthContext {
56
+ isAuthenticated: boolean;
57
+ userId?: string;
58
+ metadata?: Record<string, any>;
59
+ }
60
+ /**
61
+ * Configuración de rate limiting
62
+ */
63
+ export interface RateLimitConfig {
64
+ windowMs: number;
65
+ maxRequests: number;
66
+ message?: string;
67
+ }
68
+ /**
69
+ * Opciones para database connectors
70
+ */
71
+ export interface DatabaseOptions {
72
+ uri: string;
73
+ options?: Record<string, any>;
74
+ }
75
+ /**
76
+ * Result type para operaciones
77
+ */
78
+ export type Result<T, E = Error> = {
79
+ success: true;
80
+ data: T;
81
+ } | {
82
+ success: false;
83
+ error: E;
84
+ };
85
+ /**
86
+ * Tool handler type
87
+ */
88
+ export interface ToolHandler<TInput = any, TOutput = any> {
89
+ name: string;
90
+ description: string;
91
+ inputSchema: any;
92
+ handler: (input: TInput) => Promise<TOutput>;
93
+ }
94
+ /**
95
+ * Resource handler type
96
+ */
97
+ export interface ResourceHandler<TData = any> {
98
+ uri: string;
99
+ name: string;
100
+ description?: string;
101
+ mimeType?: string;
102
+ handler: () => Promise<TData>;
103
+ }
104
+ /**
105
+ * Prompt handler type
106
+ */
107
+ export interface PromptHandler<TArgs = any, TOutput = any> {
108
+ name: string;
109
+ description: string;
110
+ arguments?: any;
111
+ handler: (args: TArgs) => Promise<TOutput>;
112
+ }
113
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAErC;;OAEG;IACH,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B;;OAEG;IACH,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB;;OAEG;IACH,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B;;OAEG;IACH,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,IACzB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAC1B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,MAAM,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,GAAG,CAAC;IACjB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,KAAK,GAAG,GAAG;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,KAAK,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import mongoose from 'mongoose';
2
+ export interface MongoDBOptions {
3
+ uri: string;
4
+ options?: mongoose.ConnectOptions;
5
+ }
6
+ /**
7
+ * Clase para manejar la conexión a MongoDB
8
+ */
9
+ export declare class MongoDBConnector {
10
+ private uri;
11
+ private options;
12
+ private isConnected;
13
+ constructor(config: MongoDBOptions);
14
+ /**
15
+ * Conectar a MongoDB
16
+ */
17
+ connect(): Promise<void>;
18
+ /**
19
+ * Desconectar de MongoDB
20
+ */
21
+ disconnect(): Promise<void>;
22
+ /**
23
+ * Verificar estado de conexión
24
+ */
25
+ get connected(): boolean;
26
+ /**
27
+ * Obtener la instancia de conexión
28
+ */
29
+ getConnection(): typeof mongoose;
30
+ }
31
+ /**
32
+ * Factory para crear conector MongoDB
33
+ */
34
+ export declare function createMongoDBConnector(uri: string): MongoDBConnector;
35
+ //# sourceMappingURL=mongodb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../../src/database/mongodb.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAGhC,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC;CACrC;AAED;;GAEG;AACH,qBAAa,gBAAgB;IACzB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,cAAc;IAUlC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAejC;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACH,aAAa,IAAI,OAAO,QAAQ;CAGnC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAEpE"}