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 @@
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"}
@@ -0,0 +1,85 @@
1
+ import mongoose from 'mongoose';
2
+ import { logger } from '../core/logger';
3
+ /**
4
+ * Clase para manejar la conexión a MongoDB
5
+ */
6
+ export class MongoDBConnector {
7
+ uri;
8
+ options;
9
+ isConnected = false;
10
+ constructor(config) {
11
+ this.uri = config.uri;
12
+ this.options = config.options || {
13
+ maxPoolSize: 10,
14
+ minPoolSize: 2,
15
+ socketTimeoutMS: 45000,
16
+ serverSelectionTimeoutMS: 5000,
17
+ };
18
+ }
19
+ /**
20
+ * Conectar a MongoDB
21
+ */
22
+ async connect() {
23
+ if (this.isConnected) {
24
+ logger.warn('MongoDB already connected');
25
+ return;
26
+ }
27
+ try {
28
+ await mongoose.connect(this.uri, this.options);
29
+ this.isConnected = true;
30
+ logger.info('✅ MongoDB connected successfully');
31
+ // Event listeners
32
+ mongoose.connection.on('error', (error) => {
33
+ logger.error('MongoDB connection error:', error);
34
+ });
35
+ mongoose.connection.on('disconnected', () => {
36
+ logger.warn('MongoDB disconnected');
37
+ this.isConnected = false;
38
+ });
39
+ mongoose.connection.on('reconnected', () => {
40
+ logger.info('MongoDB reconnected');
41
+ this.isConnected = true;
42
+ });
43
+ }
44
+ catch (error) {
45
+ logger.error('Failed to connect to MongoDB:', error);
46
+ throw error;
47
+ }
48
+ }
49
+ /**
50
+ * Desconectar de MongoDB
51
+ */
52
+ async disconnect() {
53
+ if (!this.isConnected) {
54
+ return;
55
+ }
56
+ try {
57
+ await mongoose.connection.close();
58
+ this.isConnected = false;
59
+ logger.info('MongoDB disconnected gracefully');
60
+ }
61
+ catch (error) {
62
+ logger.error('Error disconnecting from MongoDB:', error);
63
+ throw error;
64
+ }
65
+ }
66
+ /**
67
+ * Verificar estado de conexión
68
+ */
69
+ get connected() {
70
+ return this.isConnected && mongoose.connection.readyState === 1;
71
+ }
72
+ /**
73
+ * Obtener la instancia de conexión
74
+ */
75
+ getConnection() {
76
+ return mongoose;
77
+ }
78
+ }
79
+ /**
80
+ * Factory para crear conector MongoDB
81
+ */
82
+ export function createMongoDBConnector(uri) {
83
+ return new MongoDBConnector({ uri });
84
+ }
85
+ //# sourceMappingURL=mongodb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb.js","sourceRoot":"","sources":["../../src/database/mongodb.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAOtC;;GAEG;AACH,MAAM,OAAO,gBAAgB;IACjB,GAAG,CAAS;IACZ,OAAO,CAA0B;IACjC,WAAW,GAAG,KAAK,CAAC;IAE5B,YAAY,MAAsB;QAC9B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI;YAC7B,WAAW,EAAE,EAAE;YACf,WAAW,EAAE,CAAC;YACd,eAAe,EAAE,KAAK;YACtB,wBAAwB,EAAE,IAAI;SACjC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACT,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACzC,OAAO;QACX,CAAC;QAED,IAAI,CAAC;YACD,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAEhD,kBAAkB;YAClB,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACtC,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;gBACxC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBACpC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;gBACvC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC5B,CAAC,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACrD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACZ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,OAAO;QACX,CAAC;QAED,IAAI,CAAC;YACD,MAAM,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;YACzD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,KAAK,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,aAAa;QACT,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAC9C,OAAO,IAAI,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export { McpBaseServer } from './core/McpBaseServer.js';
2
+ export { BaseConfig } from './core/config.js';
3
+ export { logger, createChildLogger, setLogLevel } from './core/logger.js';
4
+ export type * from './core/types.js';
5
+ export { AuthMiddleware, createAuthMiddleware } from './middleware/auth.js';
6
+ export { MongoDBConnector, createMongoDBConnector } from './database/mongodb.js';
7
+ export type { MongoDBOptions } from './database/mongodb.js';
8
+ export { createExpressServer } from './server/createExpressServer.js';
9
+ export type { CreateServerOptions } from './server/createExpressServer.js';
10
+ export { isPortAvailable, findAvailablePort, getRandomAvailablePort, } from './utils/portFinder.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1E,mBAAmB,iBAAiB,CAAC;AAGrC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG5E,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACjF,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,YAAY,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAG3E,OAAO,EACH,eAAe,EACf,iBAAiB,EACjB,sBAAsB,GACzB,MAAM,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ // Core exports
2
+ export { McpBaseServer } from './core/McpBaseServer.js';
3
+ export { BaseConfig } from './core/config.js';
4
+ export { logger, createChildLogger, setLogLevel } from './core/logger.js';
5
+ // Middleware exports
6
+ export { AuthMiddleware, createAuthMiddleware } from './middleware/auth.js';
7
+ // Database exports
8
+ export { MongoDBConnector, createMongoDBConnector } from './database/mongodb.js';
9
+ // Server exports
10
+ export { createExpressServer } from './server/createExpressServer.js';
11
+ // Utils exports
12
+ export { isPortAvailable, findAvailablePort, getRandomAvailablePort, } from './utils/portFinder.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG1E,qBAAqB;AACrB,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5E,mBAAmB;AACnB,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,iBAAiB;AACjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAGtE,gBAAgB;AAChB,OAAO,EACH,eAAe,EACf,iBAAiB,EACjB,sBAAsB,GACzB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { Request, Response, NextFunction } from 'express';
2
+ /**
3
+ * Middleware de autenticación para servidores MCP
4
+ */
5
+ export declare class AuthMiddleware {
6
+ private apiKey;
7
+ private allowPublicPrivateAuth;
8
+ constructor(apiKey: string, allowPublicPrivateAuth?: boolean);
9
+ /**
10
+ * Middleware para validar API Key
11
+ */
12
+ authenticate: (req: Request, res: Response, next: NextFunction) => Promise<void>;
13
+ /**
14
+ * Validar tokens público/privado
15
+ */
16
+ private validatePublicPrivateTokens;
17
+ /**
18
+ * Middleware opcional - requiere autenticación solo para ciertas rutas
19
+ */
20
+ optionalAuth: (req: Request, res: Response, next: NextFunction) => Promise<void>;
21
+ }
22
+ /**
23
+ * Factory para crear middleware de autenticación
24
+ */
25
+ export declare function createAuthMiddleware(apiKey: string, allowPublicPrivateAuth?: boolean): AuthMiddleware;
26
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI/D;;GAEG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,sBAAsB,CAAU;gBAE5B,MAAM,EAAE,MAAM,EAAE,sBAAsB,UAAQ;IAK1D;;OAEG;IACI,YAAY,GACf,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,MAAM,YAAY,KACnB,OAAO,CAAC,IAAI,CAAC,CAsEd;IAEF;;OAEG;YACW,2BAA2B;IAQzC;;OAEG;IACI,YAAY,GACf,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,MAAM,YAAY,KACnB,OAAO,CAAC,IAAI,CAAC,CAUd;CACL;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,MAAM,EACd,sBAAsB,UAAQ,GAC/B,cAAc,CAEhB"}
@@ -0,0 +1,100 @@
1
+ import { logger } from '../core/logger';
2
+ /**
3
+ * Middleware de autenticación para servidores MCP
4
+ */
5
+ export class AuthMiddleware {
6
+ apiKey;
7
+ allowPublicPrivateAuth;
8
+ constructor(apiKey, allowPublicPrivateAuth = false) {
9
+ this.apiKey = apiKey;
10
+ this.allowPublicPrivateAuth = allowPublicPrivateAuth;
11
+ }
12
+ /**
13
+ * Middleware para validar API Key
14
+ */
15
+ authenticate = async (req, res, next) => {
16
+ try {
17
+ const authHeader = req.headers.authorization;
18
+ const publicToken = req.headers['publictoken'];
19
+ const privateToken = req.headers['privatetoken'];
20
+ let isValid = false;
21
+ const authContext = {
22
+ isAuthenticated: false,
23
+ };
24
+ // Verificar Bearer token
25
+ if (authHeader && authHeader.startsWith('Bearer ')) {
26
+ const token = authHeader.substring(7);
27
+ if (token === this.apiKey) {
28
+ isValid = true;
29
+ authContext.metadata = { authMethod: 'bearer' };
30
+ }
31
+ }
32
+ // Verificar Public/Private tokens (si está habilitado)
33
+ if (!isValid &&
34
+ this.allowPublicPrivateAuth &&
35
+ publicToken &&
36
+ privateToken) {
37
+ // Aquí podrías implementar validación adicional de tokens
38
+ isValid = await this.validatePublicPrivateTokens(publicToken, privateToken);
39
+ if (isValid) {
40
+ authContext.metadata = {
41
+ authMethod: 'public-private',
42
+ publicToken
43
+ };
44
+ }
45
+ }
46
+ if (!isValid) {
47
+ logger.warn('Authentication failed', {
48
+ ip: req.ip,
49
+ path: req.path,
50
+ });
51
+ res.status(401).json({
52
+ error: 'Unauthorized',
53
+ message: 'Invalid or missing authentication credentials',
54
+ });
55
+ return;
56
+ }
57
+ authContext.isAuthenticated = true;
58
+ // Adjuntar contexto de autenticación al request
59
+ req.authContext = authContext;
60
+ logger.debug('Authentication successful', {
61
+ method: authContext.metadata?.authMethod,
62
+ path: req.path,
63
+ });
64
+ next();
65
+ }
66
+ catch (error) {
67
+ logger.error('Authentication error:', error);
68
+ res.status(500).json({
69
+ error: 'Internal Server Error',
70
+ message: 'Authentication failed',
71
+ });
72
+ }
73
+ };
74
+ /**
75
+ * Validar tokens público/privado
76
+ */
77
+ async validatePublicPrivateTokens(publicToken, privateToken) {
78
+ // Implementación básica - override en subclases si necesitas lógica personalizada
79
+ return publicToken.length > 0 && privateToken.length > 0;
80
+ }
81
+ /**
82
+ * Middleware opcional - requiere autenticación solo para ciertas rutas
83
+ */
84
+ optionalAuth = async (req, res, next) => {
85
+ const authHeader = req.headers.authorization;
86
+ if (!authHeader) {
87
+ req.authContext = { isAuthenticated: false };
88
+ next();
89
+ return;
90
+ }
91
+ await this.authenticate(req, res, next);
92
+ };
93
+ }
94
+ /**
95
+ * Factory para crear middleware de autenticación
96
+ */
97
+ export function createAuthMiddleware(apiKey, allowPublicPrivateAuth = false) {
98
+ return new AuthMiddleware(apiKey, allowPublicPrivateAuth);
99
+ }
100
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Server as HttpServer } from 'http';
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import type { BaseConfig } from '../core/config';
4
+ export interface CreateServerOptions {
5
+ mcpServer: McpServer;
6
+ config: BaseConfig;
7
+ port: number;
8
+ }
9
+ /**
10
+ * Crea y configura el servidor Express con todos los middlewares
11
+ */
12
+ export declare function createExpressServer(options: CreateServerOptions): Promise<HttpServer>;
13
+ //# sourceMappingURL=createExpressServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createExpressServer.d.ts","sourceRoot":"","sources":["../../src/server/createExpressServer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAIjD,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,mBAAmB;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,mBAAmB,GAC7B,OAAO,CAAC,UAAU,CAAC,CA4GrB"}
@@ -0,0 +1,98 @@
1
+ import express from 'express';
2
+ import cors from 'cors';
3
+ import helmet from 'helmet';
4
+ import rateLimit from 'express-rate-limit';
5
+ import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
6
+ import rawBody from 'raw-body';
7
+ import { logger } from '../core/logger';
8
+ import { createAuthMiddleware } from '../middleware/auth';
9
+ /**
10
+ * Crea y configura el servidor Express con todos los middlewares
11
+ */
12
+ export async function createExpressServer(options) {
13
+ const { mcpServer, config, port } = options;
14
+ const app = express();
15
+ // Security middlewares
16
+ app.use(helmet());
17
+ app.use(cors({
18
+ origin: config.corsAllowOrigin,
19
+ credentials: true,
20
+ }));
21
+ // Rate limiting
22
+ const limiter = rateLimit({
23
+ windowMs: config.rateLimitWindowMs,
24
+ max: config.rateLimitMaxRequests,
25
+ message: 'Too many requests from this IP, please try again later.',
26
+ });
27
+ app.use(limiter);
28
+ // Auth middleware
29
+ const authMiddleware = createAuthMiddleware(config.apiKey);
30
+ // Health check endpoint (sin autenticación)
31
+ app.get('/health', (req, res) => {
32
+ res.json({
33
+ status: 'healthy',
34
+ timestamp: new Date().toISOString(),
35
+ });
36
+ });
37
+ // SSE endpoint para MCP
38
+ app.get('/sse', authMiddleware.authenticate, async (req, res) => {
39
+ logger.info('New SSE connection established');
40
+ const transport = new SSEServerTransport('/message', res);
41
+ await mcpServer.connect(transport);
42
+ // Cleanup cuando se cierra la conexión
43
+ req.on('close', () => {
44
+ logger.info('SSE connection closed');
45
+ });
46
+ });
47
+ // Message endpoint para MCP (legacy)
48
+ app.post('/message', authMiddleware.authenticate, async (req, res) => {
49
+ try {
50
+ const body = await rawBody(req, {
51
+ length: req.headers['content-length'],
52
+ limit: '10mb',
53
+ });
54
+ const message = JSON.parse(body.toString('utf-8'));
55
+ logger.debug('Received MCP message', {
56
+ method: message.method,
57
+ id: message.id,
58
+ });
59
+ // Aquí se procesaría el mensaje MCP
60
+ // Por ahora solo respondemos OK
61
+ res.json({
62
+ jsonrpc: '2.0',
63
+ id: message.id,
64
+ result: {},
65
+ });
66
+ }
67
+ catch (error) {
68
+ logger.error('Error processing message:', error);
69
+ res.status(500).json({
70
+ jsonrpc: '2.0',
71
+ error: {
72
+ code: -32603,
73
+ message: 'Internal server error',
74
+ },
75
+ });
76
+ }
77
+ });
78
+ // Error handling middleware
79
+ app.use((err, req, res, next) => {
80
+ logger.error('Express error:', err);
81
+ res.status(500).json({
82
+ error: 'Internal Server Error',
83
+ message: process.env.NODE_ENV === 'development' ? err.message : undefined,
84
+ });
85
+ });
86
+ // Start server
87
+ return new Promise((resolve, reject) => {
88
+ const server = app.listen(port, () => {
89
+ logger.info(`Express server listening on port ${port}`);
90
+ resolve(server);
91
+ });
92
+ server.on('error', (error) => {
93
+ logger.error('Server error:', error);
94
+ reject(error);
95
+ });
96
+ });
97
+ }
98
+ //# sourceMappingURL=createExpressServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createExpressServer.js","sourceRoot":"","sources":["../../src/server/createExpressServer.ts"],"names":[],"mappings":"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"}