@tunnelhub/mcp 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 (112) hide show
  1. package/CONTRIBUTING.md +70 -0
  2. package/LICENSE +21 -0
  3. package/README.md +322 -0
  4. package/dist/auth/browser-auth.d.ts +16 -0
  5. package/dist/auth/browser-auth.d.ts.map +1 -0
  6. package/dist/auth/browser-auth.js +144 -0
  7. package/dist/auth/browser-auth.js.map +1 -0
  8. package/dist/auth/cognito-client.d.ts +14 -0
  9. package/dist/auth/cognito-client.d.ts.map +1 -0
  10. package/dist/auth/cognito-client.js +69 -0
  11. package/dist/auth/cognito-client.js.map +1 -0
  12. package/dist/auth/session-manager.d.ts +17 -0
  13. package/dist/auth/session-manager.d.ts.map +1 -0
  14. package/dist/auth/session-manager.js +152 -0
  15. package/dist/auth/session-manager.js.map +1 -0
  16. package/dist/auth/token-manager.d.ts +50 -0
  17. package/dist/auth/token-manager.d.ts.map +1 -0
  18. package/dist/auth/token-manager.js +107 -0
  19. package/dist/auth/token-manager.js.map +1 -0
  20. package/dist/index.d.ts +3 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +6 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/prompts/index.d.ts +3 -0
  25. package/dist/prompts/index.d.ts.map +1 -0
  26. package/dist/prompts/index.js +7 -0
  27. package/dist/prompts/index.js.map +1 -0
  28. package/dist/resources/index.d.ts +3 -0
  29. package/dist/resources/index.d.ts.map +1 -0
  30. package/dist/resources/index.js +7 -0
  31. package/dist/resources/index.js.map +1 -0
  32. package/dist/server.d.ts +12 -0
  33. package/dist/server.d.ts.map +1 -0
  34. package/dist/server.js +46 -0
  35. package/dist/server.js.map +1 -0
  36. package/dist/tools/api-gateway/index.d.ts +3 -0
  37. package/dist/tools/api-gateway/index.d.ts.map +1 -0
  38. package/dist/tools/api-gateway/index.js +9 -0
  39. package/dist/tools/api-gateway/index.js.map +1 -0
  40. package/dist/tools/automations/index.d.ts +3 -0
  41. package/dist/tools/automations/index.d.ts.map +1 -0
  42. package/dist/tools/automations/index.js +201 -0
  43. package/dist/tools/automations/index.js.map +1 -0
  44. package/dist/tools/integrations/index.d.ts +3 -0
  45. package/dist/tools/integrations/index.d.ts.map +1 -0
  46. package/dist/tools/integrations/index.js +10 -0
  47. package/dist/tools/integrations/index.js.map +1 -0
  48. package/dist/tools/monitoring/index.d.ts +3 -0
  49. package/dist/tools/monitoring/index.d.ts.map +1 -0
  50. package/dist/tools/monitoring/index.js +331 -0
  51. package/dist/tools/monitoring/index.js.map +1 -0
  52. package/dist/tools/packages/index.d.ts +3 -0
  53. package/dist/tools/packages/index.d.ts.map +1 -0
  54. package/dist/tools/packages/index.js +7 -0
  55. package/dist/tools/packages/index.js.map +1 -0
  56. package/dist/tools/session/current-session.d.ts +35 -0
  57. package/dist/tools/session/current-session.d.ts.map +1 -0
  58. package/dist/tools/session/current-session.js +32 -0
  59. package/dist/tools/session/current-session.js.map +1 -0
  60. package/dist/tools/session/index.d.ts +3 -0
  61. package/dist/tools/session/index.d.ts.map +1 -0
  62. package/dist/tools/session/index.js +16 -0
  63. package/dist/tools/session/index.js.map +1 -0
  64. package/dist/tools/session/list-environments.d.ts +35 -0
  65. package/dist/tools/session/list-environments.d.ts.map +1 -0
  66. package/dist/tools/session/list-environments.js +36 -0
  67. package/dist/tools/session/list-environments.js.map +1 -0
  68. package/dist/tools/session/list-sessions.d.ts +35 -0
  69. package/dist/tools/session/list-sessions.d.ts.map +1 -0
  70. package/dist/tools/session/list-sessions.js +37 -0
  71. package/dist/tools/session/list-sessions.js.map +1 -0
  72. package/dist/tools/session/login.d.ts +34 -0
  73. package/dist/tools/session/login.d.ts.map +1 -0
  74. package/dist/tools/session/login.js +27 -0
  75. package/dist/tools/session/login.js.map +1 -0
  76. package/dist/tools/session/logout.d.ts +42 -0
  77. package/dist/tools/session/logout.d.ts.map +1 -0
  78. package/dist/tools/session/logout.js +32 -0
  79. package/dist/tools/session/logout.js.map +1 -0
  80. package/dist/tools/session/switch-session.d.ts +42 -0
  81. package/dist/tools/session/switch-session.d.ts.map +1 -0
  82. package/dist/tools/session/switch-session.js +27 -0
  83. package/dist/tools/session/switch-session.js.map +1 -0
  84. package/dist/tools/tenants/index.d.ts +3 -0
  85. package/dist/tools/tenants/index.d.ts.map +1 -0
  86. package/dist/tools/tenants/index.js +61 -0
  87. package/dist/tools/tenants/index.js.map +1 -0
  88. package/dist/tools/users/index.d.ts +3 -0
  89. package/dist/tools/users/index.d.ts.map +1 -0
  90. package/dist/tools/users/index.js +7 -0
  91. package/dist/tools/users/index.js.map +1 -0
  92. package/dist/types/api.d.ts +108 -0
  93. package/dist/types/api.d.ts.map +1 -0
  94. package/dist/types/api.js +2 -0
  95. package/dist/types/api.js.map +1 -0
  96. package/dist/types/dynamodb.d.ts +54 -0
  97. package/dist/types/dynamodb.d.ts.map +1 -0
  98. package/dist/types/dynamodb.js +55 -0
  99. package/dist/types/dynamodb.js.map +1 -0
  100. package/dist/types/mcp.d.ts +271 -0
  101. package/dist/types/mcp.d.ts.map +1 -0
  102. package/dist/types/mcp.js +62 -0
  103. package/dist/types/mcp.js.map +1 -0
  104. package/dist/utils/api-client.d.ts +44 -0
  105. package/dist/utils/api-client.d.ts.map +1 -0
  106. package/dist/utils/api-client.js +201 -0
  107. package/dist/utils/api-client.js.map +1 -0
  108. package/dist/utils/error-handler.d.ts +28 -0
  109. package/dist/utils/error-handler.d.ts.map +1 -0
  110. package/dist/utils/error-handler.js +58 -0
  111. package/dist/utils/error-handler.js.map +1 -0
  112. package/package.json +90 -0
@@ -0,0 +1,17 @@
1
+ import type { AuthContext, Session } from '../types/mcp.js';
2
+ export declare class SessionManager {
3
+ private readonly tokenManager;
4
+ private readonly cognitoClient;
5
+ private readonly apiClient;
6
+ constructor();
7
+ createSession(): Promise<Session>;
8
+ switchEnvironment(environmentId: string): Promise<Session>;
9
+ private resolveFrontendUrl;
10
+ getCurrentContext(): Promise<AuthContext | null>;
11
+ getAllSessions(): Session[];
12
+ getCurrentSession(): Session | null;
13
+ logout(sessionId?: string): void;
14
+ private refreshSession;
15
+ private getRequiredSession;
16
+ }
17
+ //# sourceMappingURL=session-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/auth/session-manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI5D,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAE5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAE9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;;IAQhC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAgEjC,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBhE,OAAO,CAAC,kBAAkB;IAQpB,iBAAiB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IA2BtD,cAAc,IAAI,OAAO,EAAE;IAI3B,iBAAiB,IAAI,OAAO,GAAG,IAAI;IAInC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;YAYlB,cAAc;YAed,kBAAkB;CAQjC"}
@@ -0,0 +1,152 @@
1
+ import { BrowserAuthFlow } from './browser-auth.js';
2
+ import { CognitoClient } from './cognito-client.js';
3
+ import { TokenManager } from './token-manager.js';
4
+ import { ApiClient } from '../utils/api-client.js';
5
+ import { MCPError } from '../utils/error-handler.js';
6
+ export class SessionManager {
7
+ tokenManager;
8
+ cognitoClient;
9
+ apiClient;
10
+ constructor() {
11
+ this.tokenManager = new TokenManager();
12
+ this.cognitoClient = new CognitoClient();
13
+ this.apiClient = new ApiClient();
14
+ }
15
+ async createSession() {
16
+ const apiHost = this.apiClient.getDefaultApiHost();
17
+ const preferredSession = this.getCurrentSession() || this.getAllSessions()[0] || null;
18
+ const frontendUrl = preferredSession?.frontendUrl || this.apiClient.getDefaultFrontendUrl();
19
+ const preferredTenantId = preferredSession?.tenantId;
20
+ const browserAuth = new BrowserAuthFlow();
21
+ const tokens = await browserAuth.authenticate(frontendUrl, preferredTenantId);
22
+ const currentUser = await this.apiClient.getCurrentUser(tokens.idToken);
23
+ const tenantId = currentUser.tenantId;
24
+ if (!tenantId) {
25
+ throw new MCPError('Authenticated user does not include tenantId.', 'TENANT_NOT_FOUND');
26
+ }
27
+ const publicTenant = await this.apiClient.getTenantPublic(tenantId);
28
+ const resolvedFrontendUrl = this.resolveFrontendUrl(publicTenant);
29
+ const bootstrapSession = {
30
+ id: tenantId,
31
+ tenantId,
32
+ tenantName: publicTenant.accountName,
33
+ environmentId: '',
34
+ environmentName: '',
35
+ apiHost,
36
+ frontendUrl: resolvedFrontendUrl,
37
+ clientId: publicTenant.cognito.dedicated?.userPoolClientId ||
38
+ publicTenant.cognito.shared?.userPoolClientId ||
39
+ currentUser.userPoolClientId ||
40
+ '',
41
+ tokens: {
42
+ idToken: tokens.idToken,
43
+ accessToken: tokens.accessToken,
44
+ refreshToken: tokens.refreshToken,
45
+ expiresAt: Date.now() + tokens.expiresIn * 1000,
46
+ },
47
+ user: {
48
+ id: currentUser.uuid,
49
+ email: currentUser.email,
50
+ role: currentUser.role,
51
+ timezone: currentUser.timezone || 'America/Sao_Paulo',
52
+ },
53
+ lastUsed: new Date().toISOString(),
54
+ };
55
+ this.apiClient.setSession(bootstrapSession);
56
+ const environments = await this.apiClient.getEnvironments(bootstrapSession);
57
+ const defaultEnvironment = environments.find((environment) => environment.isProductive) || environments[0];
58
+ if (!defaultEnvironment) {
59
+ throw new MCPError('No environments available for authenticated user.', 'ENVIRONMENT_NOT_FOUND');
60
+ }
61
+ const session = {
62
+ ...bootstrapSession,
63
+ environmentId: defaultEnvironment.uuid,
64
+ environmentName: defaultEnvironment.name,
65
+ };
66
+ this.tokenManager.saveSession(session);
67
+ this.tokenManager.setCurrentSessionId(session.id);
68
+ return session;
69
+ }
70
+ async switchEnvironment(environmentId) {
71
+ const session = await this.getRequiredSession();
72
+ const environments = await this.apiClient.getEnvironments(session);
73
+ const environment = environments.find((item) => item.uuid === environmentId);
74
+ if (!environment) {
75
+ throw new MCPError(`Environment ${environmentId} not found for current tenant.`, 'ENVIRONMENT_NOT_FOUND');
76
+ }
77
+ const updatedSession = {
78
+ ...session,
79
+ environmentId: environment.uuid,
80
+ environmentName: environment.name,
81
+ lastUsed: new Date().toISOString(),
82
+ };
83
+ this.tokenManager.saveSession(updatedSession);
84
+ this.tokenManager.setCurrentSessionId(updatedSession.id);
85
+ return updatedSession;
86
+ }
87
+ resolveFrontendUrl(publicTenant) {
88
+ if (publicTenant.domain) {
89
+ return `https://${publicTenant.domain}.tunnelhub.io`;
90
+ }
91
+ return this.apiClient.getDefaultFrontendUrl();
92
+ }
93
+ async getCurrentContext() {
94
+ const session = this.tokenManager.getCurrentSession();
95
+ if (!session) {
96
+ return null;
97
+ }
98
+ if (this.tokenManager.isTokenExpiring(session)) {
99
+ await this.refreshSession(session.id);
100
+ }
101
+ const freshSession = this.tokenManager.getCurrentSession();
102
+ if (!freshSession) {
103
+ return null;
104
+ }
105
+ if (!freshSession.user.timezone) {
106
+ freshSession.user.timezone = 'America/Sao_Paulo';
107
+ this.tokenManager.saveSession(freshSession);
108
+ }
109
+ this.apiClient.setSession(freshSession);
110
+ return {
111
+ session: freshSession,
112
+ isValid: true,
113
+ };
114
+ }
115
+ getAllSessions() {
116
+ return this.tokenManager.getSessionsSortedByLastUsed();
117
+ }
118
+ getCurrentSession() {
119
+ return this.tokenManager.getCurrentSession();
120
+ }
121
+ logout(sessionId) {
122
+ if (sessionId) {
123
+ this.tokenManager.deleteSession(sessionId);
124
+ return;
125
+ }
126
+ const currentSession = this.tokenManager.getCurrentSessionId();
127
+ if (currentSession) {
128
+ this.tokenManager.deleteSession(currentSession);
129
+ }
130
+ }
131
+ async refreshSession(sessionId) {
132
+ const session = this.tokenManager.getSession(sessionId);
133
+ if (!session) {
134
+ throw new MCPError('Session not found.', 'SESSION_NOT_FOUND');
135
+ }
136
+ const refreshedTokens = await this.cognitoClient.refreshTokens(session.clientId, session.tokens.refreshToken);
137
+ this.tokenManager.updateSessionTokens(sessionId, {
138
+ idToken: refreshedTokens.idToken,
139
+ accessToken: refreshedTokens.accessToken,
140
+ refreshToken: refreshedTokens.refreshToken,
141
+ expiresAt: Date.now() + refreshedTokens.expiresIn * 1000,
142
+ });
143
+ }
144
+ async getRequiredSession() {
145
+ const authContext = await this.getCurrentContext();
146
+ if (!authContext?.session) {
147
+ throw new MCPError('Not authenticated. Use login_tunnelhub first.', 'AUTH_REQUIRED');
148
+ }
149
+ return authContext.session;
150
+ }
151
+ }
152
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/auth/session-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { Session } from '../types/mcp.js';
2
+ export declare class TokenManager {
3
+ private config;
4
+ constructor();
5
+ /**
6
+ * Get all sessions
7
+ */
8
+ getAllSessions(): Record<string, Session>;
9
+ /**
10
+ * Get a specific session
11
+ */
12
+ getSession(sessionId: string): Session | null;
13
+ /**
14
+ * Save or update a session
15
+ */
16
+ saveSession(session: Session): void;
17
+ /**
18
+ * Delete a session
19
+ */
20
+ deleteSession(sessionId: string): void;
21
+ /**
22
+ * Get current session ID
23
+ */
24
+ getCurrentSessionId(): string | null;
25
+ /**
26
+ * Set current session ID
27
+ */
28
+ setCurrentSessionId(sessionId: string | null): void;
29
+ /**
30
+ * Get current session
31
+ */
32
+ getCurrentSession(): Session | null;
33
+ /**
34
+ * Update session tokens
35
+ */
36
+ updateSessionTokens(sessionId: string, tokens: Session['tokens']): void;
37
+ /**
38
+ * Check if token is expired or expiring soon
39
+ */
40
+ isTokenExpiring(session: Session, bufferMinutes?: number): boolean;
41
+ /**
42
+ * Clear all sessions
43
+ */
44
+ clearAllSessions(): void;
45
+ /**
46
+ * Get sessions sorted by last used
47
+ */
48
+ getSessionsSortedByLastUsed(): Session[];
49
+ }
50
+ //# sourceMappingURL=token-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-manager.d.ts","sourceRoot":"","sources":["../../src/auth/token-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI/C,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAc;;IAS5B;;OAEG;IACH,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIzC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAK7C;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IASnC;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAWtC;;OAEG;IACH,mBAAmB,IAAI,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAInD;;OAEG;IACH,iBAAiB,IAAI,OAAO,GAAG,IAAI;IAMnC;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;IASvE;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,SAAI,GAAG,OAAO;IAQ7D;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAKxB;;OAEG;IACH,2BAA2B,IAAI,OAAO,EAAE;CAQzC"}
@@ -0,0 +1,107 @@
1
+ import Configstore from 'configstore';
2
+ const CONFIG_KEY = 'tunnelhub-mcp';
3
+ export class TokenManager {
4
+ config;
5
+ constructor() {
6
+ this.config = new Configstore(CONFIG_KEY, {
7
+ sessions: {},
8
+ currentSession: null
9
+ });
10
+ }
11
+ /**
12
+ * Get all sessions
13
+ */
14
+ getAllSessions() {
15
+ return this.config.get('sessions') || {};
16
+ }
17
+ /**
18
+ * Get a specific session
19
+ */
20
+ getSession(sessionId) {
21
+ const sessions = this.getAllSessions();
22
+ return sessions[sessionId] || null;
23
+ }
24
+ /**
25
+ * Save or update a session
26
+ */
27
+ saveSession(session) {
28
+ const sessions = this.getAllSessions();
29
+ sessions[session.id] = {
30
+ ...session,
31
+ lastUsed: new Date().toISOString()
32
+ };
33
+ this.config.set('sessions', sessions);
34
+ }
35
+ /**
36
+ * Delete a session
37
+ */
38
+ deleteSession(sessionId) {
39
+ const sessions = this.getAllSessions();
40
+ delete sessions[sessionId];
41
+ this.config.set('sessions', sessions);
42
+ // If this was the current session, clear it
43
+ if (this.getCurrentSessionId() === sessionId) {
44
+ this.setCurrentSessionId(null);
45
+ }
46
+ }
47
+ /**
48
+ * Get current session ID
49
+ */
50
+ getCurrentSessionId() {
51
+ return this.config.get('currentSession') || null;
52
+ }
53
+ /**
54
+ * Set current session ID
55
+ */
56
+ setCurrentSessionId(sessionId) {
57
+ this.config.set('currentSession', sessionId);
58
+ }
59
+ /**
60
+ * Get current session
61
+ */
62
+ getCurrentSession() {
63
+ const sessionId = this.getCurrentSessionId();
64
+ if (!sessionId)
65
+ return null;
66
+ return this.getSession(sessionId);
67
+ }
68
+ /**
69
+ * Update session tokens
70
+ */
71
+ updateSessionTokens(sessionId, tokens) {
72
+ const session = this.getSession(sessionId);
73
+ if (!session)
74
+ return;
75
+ session.tokens = tokens;
76
+ session.lastUsed = new Date().toISOString();
77
+ this.saveSession(session);
78
+ }
79
+ /**
80
+ * Check if token is expired or expiring soon
81
+ */
82
+ isTokenExpiring(session, bufferMinutes = 5) {
83
+ const now = Date.now();
84
+ const expiresAt = session.tokens.expiresAt;
85
+ const bufferMs = bufferMinutes * 60 * 1000;
86
+ return now >= (expiresAt - bufferMs);
87
+ }
88
+ /**
89
+ * Clear all sessions
90
+ */
91
+ clearAllSessions() {
92
+ this.config.set('sessions', {});
93
+ this.config.set('currentSession', null);
94
+ }
95
+ /**
96
+ * Get sessions sorted by last used
97
+ */
98
+ getSessionsSortedByLastUsed() {
99
+ const sessions = Object.values(this.getAllSessions());
100
+ return sessions.sort((a, b) => {
101
+ const dateA = new Date(a.lastUsed).getTime();
102
+ const dateB = new Date(b.lastUsed).getTime();
103
+ return dateB - dateA;
104
+ });
105
+ }
106
+ }
107
+ //# sourceMappingURL=token-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-manager.js","sourceRoot":"","sources":["../../src/auth/token-manager.ts"],"names":[],"mappings":"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"}
@@ -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":""}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import server from './server.js';
4
+ const transport = new StdioServerTransport();
5
+ await server.connect(transport);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerPrompts(_server: McpServer): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAKxD"}
@@ -0,0 +1,7 @@
1
+ export function registerPrompts(_server) {
2
+ // TODO: Implement prompts
3
+ // - Integration setup wizard
4
+ // - Automation builder
5
+ // - Troubleshooting guide
6
+ }
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAAC,OAAkB;IAChD,0BAA0B;IAC1B,6BAA6B;IAC7B,uBAAuB;IACvB,0BAA0B;AAC5B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerResources(_server: McpServer): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAK1D"}
@@ -0,0 +1,7 @@
1
+ export function registerResources(_server) {
2
+ // TODO: Implement resources
3
+ // - execution://
4
+ // - logs://
5
+ // - metrics://
6
+ }
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,OAAkB;IAClD,4BAA4B;IAC5B,iBAAiB;IACjB,YAAY;IACZ,eAAe;AACjB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare class TunnelHubMCPServer {
3
+ private readonly server;
4
+ private readonly sessionManager;
5
+ private readonly apiClient;
6
+ constructor();
7
+ private setupServer;
8
+ getServer(): McpServer;
9
+ }
10
+ declare const _default: McpServer;
11
+ export default _default;
12
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUpE,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAEhD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;;IAYtC,OAAO,CAAC,WAAW;IAqBnB,SAAS,IAAI,SAAS;CAGvB;;AAID,wBAA2C"}
package/dist/server.js ADDED
@@ -0,0 +1,46 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { SessionManager } from './auth/session-manager.js';
3
+ import { registerAutomationTools } from './tools/automations/index.js';
4
+ import { registerMonitoringTools } from './tools/monitoring/index.js';
5
+ import { registerSessionTools } from './tools/session/index.js';
6
+ import { registerTenantTools } from './tools/tenants/index.js';
7
+ import { ApiClient } from './utils/api-client.js';
8
+ import { MCPError } from './utils/error-handler.js';
9
+ export class TunnelHubMCPServer {
10
+ server;
11
+ sessionManager;
12
+ apiClient;
13
+ constructor() {
14
+ this.server = new McpServer({
15
+ name: 'tunnelhub-mcp-server',
16
+ version: '1.0.0',
17
+ });
18
+ this.sessionManager = new SessionManager();
19
+ this.apiClient = new ApiClient();
20
+ this.setupServer();
21
+ }
22
+ setupServer() {
23
+ const context = {
24
+ sessionManager: this.sessionManager,
25
+ apiClient: this.apiClient,
26
+ getSession: async () => {
27
+ const authContext = await this.sessionManager.getCurrentContext();
28
+ if (!authContext?.session) {
29
+ throw new MCPError('Not authenticated. Use login_tunnelhub first.', 'AUTH_REQUIRED');
30
+ }
31
+ this.apiClient.setSession(authContext.session);
32
+ return authContext.session;
33
+ },
34
+ };
35
+ registerSessionTools(this.server, context);
36
+ registerTenantTools(this.server, context);
37
+ registerAutomationTools(this.server, context);
38
+ registerMonitoringTools(this.server, context);
39
+ }
40
+ getServer() {
41
+ return this.server;
42
+ }
43
+ }
44
+ const tunnelHubServer = new TunnelHubMCPServer();
45
+ export default tunnelHubServer.getServer();
46
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,MAAM,OAAO,kBAAkB;IACZ,MAAM,CAAY;IAElB,cAAc,CAAiB;IAE/B,SAAS,CAAY;IAEtC;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YAC1B,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEO,WAAW;QACjB,MAAM,OAAO,GAAgB;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,KAAK,IAAI,EAAE;gBACrB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC;gBAClE,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;oBAC1B,MAAM,IAAI,QAAQ,CAAC,+CAA+C,EAAE,eAAe,CAAC,CAAC;gBACvF,CAAC;gBAED,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC/C,OAAO,WAAW,CAAC,OAAO,CAAC;YAC7B,CAAC;SACF,CAAC;QAEF,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAED,MAAM,eAAe,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAEjD,eAAe,eAAe,CAAC,SAAS,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerApiGatewayTools(_server: McpServer, _context: unknown): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/api-gateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAOnF"}
@@ -0,0 +1,9 @@
1
+ export function registerApiGatewayTools(_server, _context) {
2
+ // TODO: Implement API gateway tools
3
+ // - list_api_gateways
4
+ // - list_api_clients
5
+ // - create_api_key
6
+ // - revoke_api_key
7
+ // - view_api_logs
8
+ }
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/api-gateway/index.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB,CAAC,OAAkB,EAAE,QAAiB;IAC3E,oCAAoC;IACpC,sBAAsB;IACtB,qBAAqB;IACrB,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;AACpB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerAutomationTools(server: McpServer, context: unknown): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/automations/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqNzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAOjF"}