@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.
- package/LICENSE +21 -0
- package/README.md +154 -0
- package/bin/mcp-agent-social +30 -0
- package/dist/api-client.d.ts +31 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +212 -0
- package/dist/api-client.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +79 -0
- package/dist/config.js.map +1 -0
- package/dist/hooks/index.d.ts +38 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +253 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/types.d.ts +35 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +4 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/http-server.d.ts +38 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +210 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +186 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +44 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +281 -0
- package/dist/logger.js.map +1 -0
- package/dist/metrics.d.ts +47 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +178 -0
- package/dist/metrics.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +74 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +218 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/index.d.ts +55 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +91 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/timeout.d.ts +52 -0
- package/dist/middleware/timeout.d.ts.map +1 -0
- package/dist/middleware/timeout.js +189 -0
- package/dist/middleware/timeout.js.map +1 -0
- package/dist/middleware/validator.d.ts +25 -0
- package/dist/middleware/validator.d.ts.map +1 -0
- package/dist/middleware/validator.js +186 -0
- package/dist/middleware/validator.js.map +1 -0
- package/dist/prompts/analyze.d.ts +46 -0
- package/dist/prompts/analyze.d.ts.map +1 -0
- package/dist/prompts/analyze.js +351 -0
- package/dist/prompts/analyze.js.map +1 -0
- package/dist/prompts/generate.d.ts +48 -0
- package/dist/prompts/generate.d.ts.map +1 -0
- package/dist/prompts/generate.js +177 -0
- package/dist/prompts/generate.js.map +1 -0
- package/dist/prompts/index.d.ts +23 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +69 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/summarize.d.ts +32 -0
- package/dist/prompts/summarize.d.ts.map +1 -0
- package/dist/prompts/summarize.js +182 -0
- package/dist/prompts/summarize.js.map +1 -0
- package/dist/prompts/types.d.ts +34 -0
- package/dist/prompts/types.d.ts.map +1 -0
- package/dist/prompts/types.js +24 -0
- package/dist/prompts/types.js.map +1 -0
- package/dist/resources/agents.d.ts +17 -0
- package/dist/resources/agents.d.ts.map +1 -0
- package/dist/resources/agents.js +139 -0
- package/dist/resources/agents.js.map +1 -0
- package/dist/resources/feed.d.ts +19 -0
- package/dist/resources/feed.d.ts.map +1 -0
- package/dist/resources/feed.js +138 -0
- package/dist/resources/feed.js.map +1 -0
- package/dist/resources/index.d.ts +19 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +146 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/posts.d.ts +17 -0
- package/dist/resources/posts.d.ts.map +1 -0
- package/dist/resources/posts.js +151 -0
- package/dist/resources/posts.js.map +1 -0
- package/dist/resources/types.d.ts +91 -0
- package/dist/resources/types.d.ts.map +1 -0
- package/dist/resources/types.js +12 -0
- package/dist/resources/types.js.map +1 -0
- package/dist/roots/index.d.ts +43 -0
- package/dist/roots/index.d.ts.map +1 -0
- package/dist/roots/index.js +131 -0
- package/dist/roots/index.js.map +1 -0
- package/dist/roots/types.d.ts +31 -0
- package/dist/roots/types.d.ts.map +1 -0
- package/dist/roots/types.js +4 -0
- package/dist/roots/types.js.map +1 -0
- package/dist/session-manager.d.ts +50 -0
- package/dist/session-manager.d.ts.map +1 -0
- package/dist/session-manager.js +127 -0
- package/dist/session-manager.js.map +1 -0
- package/dist/tools/create-post.d.ts +45 -0
- package/dist/tools/create-post.d.ts.map +1 -0
- package/dist/tools/create-post.js +119 -0
- package/dist/tools/create-post.js.map +1 -0
- package/dist/tools/index.d.ts +13 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +44 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/login.d.ts +35 -0
- package/dist/tools/login.d.ts.map +1 -0
- package/dist/tools/login.js +132 -0
- package/dist/tools/login.js.map +1 -0
- package/dist/tools/read-posts.d.ts +48 -0
- package/dist/tools/read-posts.d.ts.map +1 -0
- package/dist/tools/read-posts.js +93 -0
- package/dist/tools/read-posts.js.map +1 -0
- package/dist/types.d.ts +88 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/json.d.ts +13 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +48 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/validation.d.ts +58 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +223 -0
- package/dist/validation.js.map +1 -0
- package/package.json +70 -0
- package/src/api-client.ts +292 -0
- package/src/config.ts +92 -0
- package/src/hooks/index.ts +304 -0
- package/src/hooks/types.ts +44 -0
- package/src/http-server.ts +243 -0
- package/src/index.ts +213 -0
- package/src/logger.ts +326 -0
- package/src/metrics.ts +235 -0
- package/src/middleware/error-handler.ts +252 -0
- package/src/middleware/index.ts +112 -0
- package/src/middleware/timeout.ts +216 -0
- package/src/middleware/validator.ts +216 -0
- package/src/prompts/analyze.ts +404 -0
- package/src/prompts/generate.ts +217 -0
- package/src/prompts/index.ts +121 -0
- package/src/prompts/summarize.ts +217 -0
- package/src/prompts/types.ts +44 -0
- package/src/resources/agents.ts +165 -0
- package/src/resources/feed.ts +169 -0
- package/src/resources/index.ts +210 -0
- package/src/resources/posts.ts +179 -0
- package/src/resources/types.ts +104 -0
- package/src/roots/index.ts +166 -0
- package/src/roots/types.ts +36 -0
- package/src/session-manager.ts +149 -0
- package/src/tools/create-post.ts +154 -0
- package/src/tools/index.ts +70 -0
- package/src/tools/login.ts +169 -0
- package/src/tools/read-posts.ts +120 -0
- package/src/types.ts +107 -0
- package/src/utils/json.ts +46 -0
- package/src/validation.ts +322 -0
- 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"}
|