@mseep/mcp-agent-social 1.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 (165) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -0
  3. package/bin/mcp-agent-social +30 -0
  4. package/dist/api-client.d.ts +31 -0
  5. package/dist/api-client.d.ts.map +1 -0
  6. package/dist/api-client.js +212 -0
  7. package/dist/api-client.js.map +1 -0
  8. package/dist/config.d.ts +19 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +79 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/hooks/index.d.ts +38 -0
  13. package/dist/hooks/index.d.ts.map +1 -0
  14. package/dist/hooks/index.js +253 -0
  15. package/dist/hooks/index.js.map +1 -0
  16. package/dist/hooks/types.d.ts +35 -0
  17. package/dist/hooks/types.d.ts.map +1 -0
  18. package/dist/hooks/types.js +4 -0
  19. package/dist/hooks/types.js.map +1 -0
  20. package/dist/http-server.d.ts +38 -0
  21. package/dist/http-server.d.ts.map +1 -0
  22. package/dist/http-server.js +210 -0
  23. package/dist/http-server.js.map +1 -0
  24. package/dist/index.d.ts +2 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +186 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/logger.d.ts +44 -0
  29. package/dist/logger.d.ts.map +1 -0
  30. package/dist/logger.js +281 -0
  31. package/dist/logger.js.map +1 -0
  32. package/dist/metrics.d.ts +47 -0
  33. package/dist/metrics.d.ts.map +1 -0
  34. package/dist/metrics.js +178 -0
  35. package/dist/metrics.js.map +1 -0
  36. package/dist/middleware/error-handler.d.ts +74 -0
  37. package/dist/middleware/error-handler.d.ts.map +1 -0
  38. package/dist/middleware/error-handler.js +218 -0
  39. package/dist/middleware/error-handler.js.map +1 -0
  40. package/dist/middleware/index.d.ts +55 -0
  41. package/dist/middleware/index.d.ts.map +1 -0
  42. package/dist/middleware/index.js +91 -0
  43. package/dist/middleware/index.js.map +1 -0
  44. package/dist/middleware/timeout.d.ts +52 -0
  45. package/dist/middleware/timeout.d.ts.map +1 -0
  46. package/dist/middleware/timeout.js +189 -0
  47. package/dist/middleware/timeout.js.map +1 -0
  48. package/dist/middleware/validator.d.ts +25 -0
  49. package/dist/middleware/validator.d.ts.map +1 -0
  50. package/dist/middleware/validator.js +186 -0
  51. package/dist/middleware/validator.js.map +1 -0
  52. package/dist/prompts/analyze.d.ts +46 -0
  53. package/dist/prompts/analyze.d.ts.map +1 -0
  54. package/dist/prompts/analyze.js +351 -0
  55. package/dist/prompts/analyze.js.map +1 -0
  56. package/dist/prompts/generate.d.ts +48 -0
  57. package/dist/prompts/generate.d.ts.map +1 -0
  58. package/dist/prompts/generate.js +177 -0
  59. package/dist/prompts/generate.js.map +1 -0
  60. package/dist/prompts/index.d.ts +23 -0
  61. package/dist/prompts/index.d.ts.map +1 -0
  62. package/dist/prompts/index.js +69 -0
  63. package/dist/prompts/index.js.map +1 -0
  64. package/dist/prompts/summarize.d.ts +32 -0
  65. package/dist/prompts/summarize.d.ts.map +1 -0
  66. package/dist/prompts/summarize.js +182 -0
  67. package/dist/prompts/summarize.js.map +1 -0
  68. package/dist/prompts/types.d.ts +34 -0
  69. package/dist/prompts/types.d.ts.map +1 -0
  70. package/dist/prompts/types.js +24 -0
  71. package/dist/prompts/types.js.map +1 -0
  72. package/dist/resources/agents.d.ts +17 -0
  73. package/dist/resources/agents.d.ts.map +1 -0
  74. package/dist/resources/agents.js +139 -0
  75. package/dist/resources/agents.js.map +1 -0
  76. package/dist/resources/feed.d.ts +19 -0
  77. package/dist/resources/feed.d.ts.map +1 -0
  78. package/dist/resources/feed.js +138 -0
  79. package/dist/resources/feed.js.map +1 -0
  80. package/dist/resources/index.d.ts +19 -0
  81. package/dist/resources/index.d.ts.map +1 -0
  82. package/dist/resources/index.js +146 -0
  83. package/dist/resources/index.js.map +1 -0
  84. package/dist/resources/posts.d.ts +17 -0
  85. package/dist/resources/posts.d.ts.map +1 -0
  86. package/dist/resources/posts.js +151 -0
  87. package/dist/resources/posts.js.map +1 -0
  88. package/dist/resources/types.d.ts +91 -0
  89. package/dist/resources/types.d.ts.map +1 -0
  90. package/dist/resources/types.js +12 -0
  91. package/dist/resources/types.js.map +1 -0
  92. package/dist/roots/index.d.ts +43 -0
  93. package/dist/roots/index.d.ts.map +1 -0
  94. package/dist/roots/index.js +131 -0
  95. package/dist/roots/index.js.map +1 -0
  96. package/dist/roots/types.d.ts +31 -0
  97. package/dist/roots/types.d.ts.map +1 -0
  98. package/dist/roots/types.js +4 -0
  99. package/dist/roots/types.js.map +1 -0
  100. package/dist/session-manager.d.ts +50 -0
  101. package/dist/session-manager.d.ts.map +1 -0
  102. package/dist/session-manager.js +127 -0
  103. package/dist/session-manager.js.map +1 -0
  104. package/dist/tools/create-post.d.ts +45 -0
  105. package/dist/tools/create-post.d.ts.map +1 -0
  106. package/dist/tools/create-post.js +119 -0
  107. package/dist/tools/create-post.js.map +1 -0
  108. package/dist/tools/index.d.ts +13 -0
  109. package/dist/tools/index.d.ts.map +1 -0
  110. package/dist/tools/index.js +44 -0
  111. package/dist/tools/index.js.map +1 -0
  112. package/dist/tools/login.d.ts +35 -0
  113. package/dist/tools/login.d.ts.map +1 -0
  114. package/dist/tools/login.js +132 -0
  115. package/dist/tools/login.js.map +1 -0
  116. package/dist/tools/read-posts.d.ts +48 -0
  117. package/dist/tools/read-posts.d.ts.map +1 -0
  118. package/dist/tools/read-posts.js +93 -0
  119. package/dist/tools/read-posts.js.map +1 -0
  120. package/dist/types.d.ts +88 -0
  121. package/dist/types.d.ts.map +1 -0
  122. package/dist/types.js +4 -0
  123. package/dist/types.js.map +1 -0
  124. package/dist/utils/json.d.ts +13 -0
  125. package/dist/utils/json.d.ts.map +1 -0
  126. package/dist/utils/json.js +48 -0
  127. package/dist/utils/json.js.map +1 -0
  128. package/dist/validation.d.ts +58 -0
  129. package/dist/validation.d.ts.map +1 -0
  130. package/dist/validation.js +223 -0
  131. package/dist/validation.js.map +1 -0
  132. package/package.json +70 -0
  133. package/src/api-client.ts +292 -0
  134. package/src/config.ts +92 -0
  135. package/src/hooks/index.ts +304 -0
  136. package/src/hooks/types.ts +44 -0
  137. package/src/http-server.ts +243 -0
  138. package/src/index.ts +213 -0
  139. package/src/logger.ts +326 -0
  140. package/src/metrics.ts +235 -0
  141. package/src/middleware/error-handler.ts +252 -0
  142. package/src/middleware/index.ts +112 -0
  143. package/src/middleware/timeout.ts +216 -0
  144. package/src/middleware/validator.ts +216 -0
  145. package/src/prompts/analyze.ts +404 -0
  146. package/src/prompts/generate.ts +217 -0
  147. package/src/prompts/index.ts +121 -0
  148. package/src/prompts/summarize.ts +217 -0
  149. package/src/prompts/types.ts +44 -0
  150. package/src/resources/agents.ts +165 -0
  151. package/src/resources/feed.ts +169 -0
  152. package/src/resources/index.ts +210 -0
  153. package/src/resources/posts.ts +179 -0
  154. package/src/resources/types.ts +104 -0
  155. package/src/roots/index.ts +166 -0
  156. package/src/roots/types.ts +36 -0
  157. package/src/session-manager.ts +149 -0
  158. package/src/tools/create-post.ts +154 -0
  159. package/src/tools/index.ts +70 -0
  160. package/src/tools/login.ts +169 -0
  161. package/src/tools/read-posts.ts +120 -0
  162. package/src/types.ts +107 -0
  163. package/src/utils/json.ts +46 -0
  164. package/src/validation.ts +322 -0
  165. package/tsconfig.json +22 -0
@@ -0,0 +1,52 @@
1
+ export interface TimeoutConfig {
2
+ defaultTimeout: number;
3
+ methodTimeouts: Record<string, number>;
4
+ maxTimeout: number;
5
+ }
6
+ export declare class TimeoutManager {
7
+ private readonly config;
8
+ private timeoutCount;
9
+ private activeTimeouts;
10
+ private readonly timeoutLock;
11
+ constructor(config?: Partial<TimeoutConfig>);
12
+ /**
13
+ * Create a timeout promise for a specific method
14
+ */
15
+ createTimeout(method: string): Promise<never>;
16
+ /**
17
+ * Create a timeout promise that can be cleared
18
+ */
19
+ createClearableTimeout(method: string): {
20
+ promise: Promise<never>;
21
+ clear: () => void;
22
+ };
23
+ /**
24
+ * Wrap a promise with timeout
25
+ */
26
+ withTimeout<T>(promise: Promise<T>, method: string): Promise<T>;
27
+ /**
28
+ * Get timeout duration for a specific method
29
+ */
30
+ private getTimeoutForMethod;
31
+ /**
32
+ * Clear all active timeouts
33
+ */
34
+ clearAllTimeouts(): Promise<void>;
35
+ /**
36
+ * Get timeout statistics
37
+ */
38
+ getStats(): {
39
+ totalTimeouts: number;
40
+ activeTimeouts: number;
41
+ config: {
42
+ defaultTimeout: number;
43
+ maxTimeout: number;
44
+ methodTimeoutCount: number;
45
+ };
46
+ };
47
+ /**
48
+ * Update timeout configuration
49
+ */
50
+ updateConfig(newConfig: Partial<TimeoutConfig>): void;
51
+ }
52
+ //# sourceMappingURL=timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/middleware/timeout.ts"],"names":[],"mappings":"AAgCA,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;gBAEnC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAyB3C;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IA6B7C;;OAEG;IACH,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG;QACtC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACxB,KAAK,EAAE,MAAM,IAAI,CAAC;KACnB;IA2CD;;OAEG;IACG,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAarE;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAavC;;OAEG;IACH,QAAQ;;;;;;;;;IAYR;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;CAItD"}
@@ -0,0 +1,189 @@
1
+ // ABOUTME: Timeout management for MCP requests
2
+ // ABOUTME: Prevents hanging requests and provides configurable timeout handling
3
+ import { logger } from '../logger.js';
4
+ import { McpTimeoutError } from './error-handler.js';
5
+ // Simple async lock implementation for thread safety
6
+ class AsyncLock {
7
+ queue = [];
8
+ locked = false;
9
+ async acquire() {
10
+ return new Promise((resolve) => {
11
+ const unlock = () => {
12
+ this.locked = false;
13
+ const next = this.queue.shift();
14
+ if (next) {
15
+ this.locked = true;
16
+ next();
17
+ }
18
+ };
19
+ if (this.locked) {
20
+ this.queue.push(() => resolve(unlock));
21
+ }
22
+ else {
23
+ this.locked = true;
24
+ resolve(unlock);
25
+ }
26
+ });
27
+ }
28
+ }
29
+ export class TimeoutManager {
30
+ config;
31
+ timeoutCount = 0;
32
+ activeTimeouts = new Set();
33
+ timeoutLock = new AsyncLock();
34
+ constructor(config) {
35
+ this.config = {
36
+ defaultTimeout: 30000, // 30 seconds
37
+ maxTimeout: 120000, // 2 minutes
38
+ methodTimeouts: {
39
+ 'tools/call': 60000, // Tool calls can take longer
40
+ 'sampling/create': 90000, // LLM requests need more time
41
+ 'resources/read': 10000, // Resource reads should be fast
42
+ 'resources/list': 5000,
43
+ 'tools/list': 5000,
44
+ 'prompts/list': 5000,
45
+ 'prompts/get': 10000,
46
+ 'roots/list': 5000,
47
+ ...config?.methodTimeouts,
48
+ },
49
+ ...config,
50
+ };
51
+ logger.info('Timeout manager initialized', {
52
+ defaultTimeout: this.config.defaultTimeout,
53
+ maxTimeout: this.config.maxTimeout,
54
+ methodTimeouts: Object.keys(this.config.methodTimeouts).length,
55
+ });
56
+ }
57
+ /**
58
+ * Create a timeout promise for a specific method
59
+ */
60
+ createTimeout(method) {
61
+ const timeoutMs = this.getTimeoutForMethod(method);
62
+ return new Promise((_, reject) => {
63
+ const timeoutId = setTimeout(async () => {
64
+ // Use lock for thread-safe updates
65
+ const unlock = await this.timeoutLock.acquire();
66
+ try {
67
+ this.timeoutCount++;
68
+ this.activeTimeouts.delete(timeoutId);
69
+ }
70
+ finally {
71
+ unlock();
72
+ }
73
+ logger.warn('Request timed out', {
74
+ method,
75
+ timeout: timeoutMs,
76
+ totalTimeouts: this.timeoutCount,
77
+ });
78
+ const error = new McpTimeoutError(`Request timed out after ${timeoutMs}ms`, timeoutMs);
79
+ reject(error);
80
+ }, timeoutMs);
81
+ // Thread-safe addition to active timeouts
82
+ this.activeTimeouts.add(timeoutId);
83
+ });
84
+ }
85
+ /**
86
+ * Create a timeout promise that can be cleared
87
+ */
88
+ createClearableTimeout(method) {
89
+ const timeoutMs = this.getTimeoutForMethod(method);
90
+ let timeoutId;
91
+ const promise = new Promise((_, reject) => {
92
+ timeoutId = setTimeout(async () => {
93
+ // Use lock for thread-safe updates
94
+ const unlock = await this.timeoutLock.acquire();
95
+ try {
96
+ this.timeoutCount++;
97
+ this.activeTimeouts.delete(timeoutId);
98
+ }
99
+ finally {
100
+ unlock();
101
+ }
102
+ logger.warn('Request timed out', {
103
+ method,
104
+ timeout: timeoutMs,
105
+ });
106
+ const error = new McpTimeoutError(`Request timed out after ${timeoutMs}ms`, timeoutMs);
107
+ reject(error);
108
+ }, timeoutMs);
109
+ this.activeTimeouts.add(timeoutId);
110
+ });
111
+ const clear = async () => {
112
+ if (timeoutId) {
113
+ clearTimeout(timeoutId);
114
+ // Use lock for thread-safe removal
115
+ const unlock = await this.timeoutLock.acquire();
116
+ try {
117
+ this.activeTimeouts.delete(timeoutId);
118
+ }
119
+ finally {
120
+ unlock();
121
+ }
122
+ }
123
+ };
124
+ return { promise, clear };
125
+ }
126
+ /**
127
+ * Wrap a promise with timeout
128
+ */
129
+ async withTimeout(promise, method) {
130
+ const { promise: timeoutPromise, clear } = this.createClearableTimeout(method);
131
+ try {
132
+ const result = await Promise.race([promise, timeoutPromise]);
133
+ clear();
134
+ return result;
135
+ }
136
+ catch (error) {
137
+ clear();
138
+ throw error;
139
+ }
140
+ }
141
+ /**
142
+ * Get timeout duration for a specific method
143
+ */
144
+ getTimeoutForMethod(method) {
145
+ const methodTimeout = this.config.methodTimeouts[method];
146
+ if (methodTimeout) {
147
+ return Math.min(methodTimeout, this.config.maxTimeout);
148
+ }
149
+ return this.config.defaultTimeout;
150
+ }
151
+ /**
152
+ * Clear all active timeouts
153
+ */
154
+ async clearAllTimeouts() {
155
+ const unlock = await this.timeoutLock.acquire();
156
+ try {
157
+ for (const timeoutId of this.activeTimeouts) {
158
+ clearTimeout(timeoutId);
159
+ }
160
+ this.activeTimeouts.clear();
161
+ }
162
+ finally {
163
+ unlock();
164
+ }
165
+ logger.info('Cleared all active timeouts');
166
+ }
167
+ /**
168
+ * Get timeout statistics
169
+ */
170
+ getStats() {
171
+ return {
172
+ totalTimeouts: this.timeoutCount,
173
+ activeTimeouts: this.activeTimeouts.size,
174
+ config: {
175
+ defaultTimeout: this.config.defaultTimeout,
176
+ maxTimeout: this.config.maxTimeout,
177
+ methodTimeoutCount: Object.keys(this.config.methodTimeouts).length,
178
+ },
179
+ };
180
+ }
181
+ /**
182
+ * Update timeout configuration
183
+ */
184
+ updateConfig(newConfig) {
185
+ Object.assign(this.config, newConfig);
186
+ logger.info('Timeout configuration updated', { config: this.config });
187
+ }
188
+ }
189
+ //# sourceMappingURL=timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../src/middleware/timeout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export declare class RequestValidator {
2
+ private validationCount;
3
+ private validationErrors;
4
+ /**
5
+ * Validate an MCP request
6
+ */
7
+ validateRequest(request: any): Promise<void>;
8
+ /**
9
+ * Validate an MCP response
10
+ */
11
+ validateResponse(response: any, method: string): Promise<void>;
12
+ /**
13
+ * Perform additional custom validations
14
+ */
15
+ private performCustomValidations;
16
+ /**
17
+ * Get validation statistics
18
+ */
19
+ getStats(): {
20
+ totalValidations: number;
21
+ validationErrors: number;
22
+ successRate: number;
23
+ };
24
+ }
25
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/middleware/validator.ts"],"names":[],"mappings":"AAkFA,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,gBAAgB,CAAK;IAE7B;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAsClD;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BpE;;OAEG;YACW,wBAAwB;IA2CtC;;OAEG;IACH,QAAQ;;;;;CAUT"}
@@ -0,0 +1,186 @@
1
+ // ABOUTME: Protocol-level request and response validation
2
+ // ABOUTME: Ensures MCP protocol compliance and data integrity
3
+ import { z } from 'zod';
4
+ import { logger } from '../logger.js';
5
+ // Base MCP request schema
6
+ const McpRequestSchema = z.object({
7
+ jsonrpc: z.literal('2.0'),
8
+ id: z.union([z.string(), z.number(), z.null()]),
9
+ method: z.string(),
10
+ params: z.record(z.any()).optional(),
11
+ });
12
+ // Base MCP response schema
13
+ const McpResponseSchema = z.object({
14
+ jsonrpc: z.literal('2.0'),
15
+ id: z.union([z.string(), z.number(), z.null()]),
16
+ result: z.any().optional(),
17
+ error: z
18
+ .object({
19
+ code: z.number(),
20
+ message: z.string(),
21
+ data: z.any().optional(),
22
+ })
23
+ .optional(),
24
+ });
25
+ // Method-specific validation schemas (only validate params, base structure already validated)
26
+ const MethodSchemas = {
27
+ 'tools/list': {
28
+ request: z.object({
29
+ params: z.object({}).optional(),
30
+ }),
31
+ response: z.object({
32
+ tools: z.array(z.object({
33
+ name: z.string(),
34
+ description: z.string(),
35
+ inputSchema: z.record(z.any()),
36
+ })),
37
+ }),
38
+ },
39
+ 'tools/call': {
40
+ request: z.object({
41
+ params: z.object({
42
+ name: z.string(),
43
+ arguments: z.record(z.any()).optional(),
44
+ }),
45
+ }),
46
+ response: z.object({
47
+ content: z.array(z.object({
48
+ type: z.string(),
49
+ text: z.string().optional(),
50
+ data: z.any().optional(),
51
+ })),
52
+ }),
53
+ },
54
+ 'resources/list': {
55
+ request: z.object({
56
+ params: z
57
+ .object({
58
+ cursor: z.string().optional(),
59
+ })
60
+ .optional(),
61
+ }),
62
+ response: z.object({
63
+ resources: z.array(z.object({
64
+ uri: z.string(),
65
+ name: z.string(),
66
+ description: z.string().optional(),
67
+ mimeType: z.string().optional(),
68
+ })),
69
+ }),
70
+ },
71
+ };
72
+ export class RequestValidator {
73
+ validationCount = 0;
74
+ validationErrors = 0;
75
+ /**
76
+ * Validate an MCP request
77
+ */
78
+ async validateRequest(request) {
79
+ this.validationCount++;
80
+ try {
81
+ // Validate base MCP structure
82
+ McpRequestSchema.parse(request);
83
+ // Then validate method-specific params only (avoiding redundant validation)
84
+ const methodSchema = MethodSchemas[request.method];
85
+ if (methodSchema?.request) {
86
+ // Extract just the params and validate them separately
87
+ const paramsToValidate = { params: request.params };
88
+ methodSchema.request.parse(paramsToValidate);
89
+ }
90
+ // Additional custom validations
91
+ await this.performCustomValidations(request);
92
+ logger.debug('Request validation passed', {
93
+ method: request.method,
94
+ id: request.id,
95
+ });
96
+ }
97
+ catch (error) {
98
+ this.validationErrors++;
99
+ if (error instanceof z.ZodError) {
100
+ const validationError = new Error(`Request validation failed: ${error.errors.map((e) => e.message).join(', ')}`);
101
+ validationError.code = -32602; // Invalid params
102
+ validationError.data = error.errors;
103
+ throw validationError;
104
+ }
105
+ throw error;
106
+ }
107
+ }
108
+ /**
109
+ * Validate an MCP response
110
+ */
111
+ async validateResponse(response, method) {
112
+ try {
113
+ // Validate base response structure
114
+ McpResponseSchema.parse(response);
115
+ // Validate method-specific response if available
116
+ const methodSchema = MethodSchemas[method];
117
+ if (methodSchema?.response && response.result) {
118
+ methodSchema.response.parse(response.result);
119
+ }
120
+ logger.debug('Response validation passed', { method });
121
+ }
122
+ catch (error) {
123
+ if (error instanceof z.ZodError) {
124
+ const validationError = new Error(`Response validation failed: ${error.errors.map((e) => e.message).join(', ')}`);
125
+ validationError.code = -32603; // Internal error
126
+ validationError.data = error.errors;
127
+ throw validationError;
128
+ }
129
+ throw error;
130
+ }
131
+ }
132
+ /**
133
+ * Perform additional custom validations
134
+ */
135
+ async performCustomValidations(request) {
136
+ // Validate content length limits
137
+ if (request.params) {
138
+ const stringContent = JSON.stringify(request.params);
139
+ if (stringContent.length > 100000) {
140
+ // 100KB limit
141
+ throw new Error('Request payload exceeds maximum size limit');
142
+ }
143
+ }
144
+ // Validate method exists
145
+ const allowedMethods = [
146
+ 'tools/list',
147
+ 'tools/call',
148
+ 'resources/list',
149
+ 'resources/read',
150
+ 'prompts/list',
151
+ 'prompts/get',
152
+ 'sampling/create',
153
+ 'roots/list',
154
+ ];
155
+ if (!allowedMethods.includes(request.method)) {
156
+ const error = new Error(`Method not found: ${request.method}`);
157
+ error.code = -32601;
158
+ throw error;
159
+ }
160
+ // Validate specific parameter constraints
161
+ if (request.method === 'sampling/create' && request.params?.messages) {
162
+ const messageCount = request.params.messages.length;
163
+ if (messageCount > 50) {
164
+ throw new Error('Too many messages in sampling request (max 50)');
165
+ }
166
+ for (const message of request.params.messages) {
167
+ if (message.content.length > 10000) {
168
+ throw new Error('Message content exceeds maximum length (10000 characters)');
169
+ }
170
+ }
171
+ }
172
+ }
173
+ /**
174
+ * Get validation statistics
175
+ */
176
+ getStats() {
177
+ return {
178
+ totalValidations: this.validationCount,
179
+ validationErrors: this.validationErrors,
180
+ successRate: this.validationCount > 0
181
+ ? (this.validationCount - this.validationErrors) / this.validationCount
182
+ : 1,
183
+ };
184
+ }
185
+ }
186
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/middleware/validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';
2
+ import type { GetPromptResult, ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';
3
+ import { z } from 'zod';
4
+ import type { IApiClient } from '../api-client.js';
5
+ export interface AnalyzePromptContext {
6
+ apiClient: IApiClient;
7
+ }
8
+ export declare function analyzeSentimentPrompt(args: {
9
+ scope: string;
10
+ target?: string;
11
+ }, _extra: RequestHandlerExtra<ServerRequest, ServerNotification>, context: AnalyzePromptContext): Promise<GetPromptResult>;
12
+ export declare function findRelatedDiscussionsPrompt(args: {
13
+ topic: string;
14
+ limit?: string;
15
+ }, _extra: RequestHandlerExtra<ServerRequest, ServerNotification>, context: AnalyzePromptContext): Promise<GetPromptResult>;
16
+ export declare function generateEngagementReportPrompt(args: {
17
+ time_period?: string;
18
+ focus?: string;
19
+ }, _extra: RequestHandlerExtra<ServerRequest, ServerNotification>, context: AnalyzePromptContext): Promise<GetPromptResult>;
20
+ export declare const analyzePrompts: {
21
+ analyzeSentiment: {
22
+ description: string;
23
+ argsSchema: {
24
+ scope: z.ZodString;
25
+ target: z.ZodOptional<z.ZodString>;
26
+ };
27
+ handler: typeof analyzeSentimentPrompt;
28
+ };
29
+ findRelatedDiscussions: {
30
+ description: string;
31
+ argsSchema: {
32
+ topic: z.ZodString;
33
+ limit: z.ZodOptional<z.ZodString>;
34
+ };
35
+ handler: typeof findRelatedDiscussionsPrompt;
36
+ };
37
+ generateEngagementReport: {
38
+ description: string;
39
+ argsSchema: {
40
+ time_period: z.ZodOptional<z.ZodString>;
41
+ focus: z.ZodOptional<z.ZodString>;
42
+ };
43
+ handler: typeof generateEngagementReportPrompt;
44
+ };
45
+ };
46
+ //# sourceMappingURL=analyze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/prompts/analyze.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,aAAa,EACd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAKnD,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,UAAU,CAAC;CACvB;AAOD,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACxC,MAAM,EAAE,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC,EAC9D,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,eAAe,CAAC,CA8J1B;AAOD,wBAAsB,4BAA4B,CAChD,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACvC,MAAM,EAAE,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC,EAC9D,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,eAAe,CAAC,CAgF1B;AAOD,wBAAsB,8BAA8B,CAClD,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9C,MAAM,EAAE,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC,EAC9D,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,eAAe,CAAC,CAgG1B;AAGD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;CAgB1B,CAAC"}