fa-mcp-sdk 0.2.17 → 0.2.20
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/README.md +22 -0
- package/dist/core/utils/testing/BaseMcpClient.d.ts +31 -0
- package/dist/core/utils/testing/BaseMcpClient.d.ts.map +1 -0
- package/dist/core/utils/testing/BaseMcpClient.js +58 -0
- package/dist/core/utils/testing/BaseMcpClient.js.map +1 -0
- package/dist/core/utils/testing/McpHttpClient.d.ts +4 -11
- package/dist/core/utils/testing/McpHttpClient.d.ts.map +1 -1
- package/dist/core/utils/testing/McpHttpClient.js +9 -29
- package/dist/core/utils/testing/McpHttpClient.js.map +1 -1
- package/dist/core/utils/testing/McpSseClient.d.ts +7 -10
- package/dist/core/utils/testing/McpSseClient.d.ts.map +1 -1
- package/dist/core/utils/testing/McpSseClient.js +66 -47
- package/dist/core/utils/testing/McpSseClient.js.map +1 -1
- package/dist/core/utils/testing/McpStdioClient.d.ts +3 -8
- package/dist/core/utils/testing/McpStdioClient.d.ts.map +1 -1
- package/dist/core/utils/testing/McpStdioClient.js +6 -20
- package/dist/core/utils/testing/McpStdioClient.js.map +1 -1
- package/dist/core/utils/testing/McpStreamableHttpClient.d.ts +3 -10
- package/dist/core/utils/testing/McpStreamableHttpClient.d.ts.map +1 -1
- package/dist/core/utils/testing/McpStreamableHttpClient.js +6 -26
- package/dist/core/utils/testing/McpStreamableHttpClient.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -261,6 +261,28 @@ npm run lint:fix # Fix automatically
|
|
|
261
261
|
npm run typecheck
|
|
262
262
|
```
|
|
263
263
|
|
|
264
|
+
### Testing
|
|
265
|
+
|
|
266
|
+
The framework includes built-in testing utilities for MCP servers:
|
|
267
|
+
|
|
268
|
+
```javascript
|
|
269
|
+
import { McpSseClient } from 'fa-mcp-sdk';
|
|
270
|
+
|
|
271
|
+
// For npm package usage - prevents unhandledRejection
|
|
272
|
+
const client = McpSseClient.createWithErrorHandler('http://localhost:3000');
|
|
273
|
+
|
|
274
|
+
try {
|
|
275
|
+
const response = await client.callTool('tool_name', { param: 'value' });
|
|
276
|
+
console.log('Success:', response);
|
|
277
|
+
} catch (error) {
|
|
278
|
+
console.log('Error:', error.message); // Properly caught
|
|
279
|
+
} finally {
|
|
280
|
+
await client.close();
|
|
281
|
+
}
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
**Note**: When using `fa-mcp-sdk` as an npm package, use `McpSseClient.createWithErrorHandler()` to prevent `unhandledRejection` errors that can occur with SSE-based error handling.
|
|
285
|
+
|
|
264
286
|
## API Reference
|
|
265
287
|
|
|
266
288
|
### McpServerData Interface
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base MCP Client with common functionality
|
|
3
|
+
*
|
|
4
|
+
* Provides shared MCP methods that are identical across all transport implementations.
|
|
5
|
+
* Transport-specific methods should be overridden in child classes.
|
|
6
|
+
*/
|
|
7
|
+
export declare class BaseMcpClient {
|
|
8
|
+
protected nextId: number;
|
|
9
|
+
protected customHeaders: Record<string, string>;
|
|
10
|
+
constructor(customHeaders?: Record<string, string>);
|
|
11
|
+
/**
|
|
12
|
+
* Transport-specific request method - must be implemented by child classes
|
|
13
|
+
*/
|
|
14
|
+
protected sendRequest(_method: string, _params: any): Promise<any>;
|
|
15
|
+
/**
|
|
16
|
+
* Close connection - base implementation (can be overridden)
|
|
17
|
+
*/
|
|
18
|
+
close(): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Initialize connection - base implementation (can be overridden)
|
|
21
|
+
*/
|
|
22
|
+
initialize?(_params?: any): Promise<any>;
|
|
23
|
+
listTools(): Promise<any>;
|
|
24
|
+
callTool(toolName: string, args?: Record<string, any>): Promise<any>;
|
|
25
|
+
listResources(): Promise<any>;
|
|
26
|
+
readResource(uri: string): Promise<any>;
|
|
27
|
+
listPrompts(): Promise<any>;
|
|
28
|
+
getPrompt(name: string, args?: Record<string, any>): Promise<any>;
|
|
29
|
+
ping(): Promise<any>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=BaseMcpClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseMcpClient.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/testing/BaseMcpClient.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,SAAS,CAAC,MAAM,SAAK;IACrB,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAEnC,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAIvD;;OAEG;cACa,WAAW,CAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAIzE;;OAEG;IACG,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAI7B;;OAEG;IACG,UAAU,CAAC,CAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAMzC,SAAS;IAKT,QAAQ,CAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM;IAI1D,aAAa;IAKb,YAAY,CAAE,GAAG,EAAE,MAAM;IAIzB,WAAW;IAKX,SAAS,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM;IAIvD,IAAI;CAGX"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// noinspection UnnecessaryLocalVariableJS
|
|
2
|
+
/**
|
|
3
|
+
* Base MCP Client with common functionality
|
|
4
|
+
*
|
|
5
|
+
* Provides shared MCP methods that are identical across all transport implementations.
|
|
6
|
+
* Transport-specific methods should be overridden in child classes.
|
|
7
|
+
*/
|
|
8
|
+
export class BaseMcpClient {
|
|
9
|
+
nextId = 1;
|
|
10
|
+
customHeaders;
|
|
11
|
+
constructor(customHeaders = {}) {
|
|
12
|
+
this.customHeaders = customHeaders;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Transport-specific request method - must be implemented by child classes
|
|
16
|
+
*/
|
|
17
|
+
async sendRequest(_method, _params) {
|
|
18
|
+
throw new Error('sendRequest must be implemented by child class');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Close connection - base implementation (can be overridden)
|
|
22
|
+
*/
|
|
23
|
+
async close() {
|
|
24
|
+
// Base implementation - can be overridden for specific transport needs
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Initialize connection - base implementation (can be overridden)
|
|
28
|
+
*/
|
|
29
|
+
async initialize(_params) {
|
|
30
|
+
// Base implementation - can be overridden for specific transport needs
|
|
31
|
+
}
|
|
32
|
+
// Common MCP methods - identical across all clients
|
|
33
|
+
async listTools() {
|
|
34
|
+
const result = await this.sendRequest('tools/list', {});
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
async callTool(toolName, args = {}) {
|
|
38
|
+
return this.sendRequest('tools/call', { name: toolName, arguments: args });
|
|
39
|
+
}
|
|
40
|
+
async listResources() {
|
|
41
|
+
const result = await this.sendRequest('resources/list', {});
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
async readResource(uri) {
|
|
45
|
+
return this.sendRequest('resources/read', { uri });
|
|
46
|
+
}
|
|
47
|
+
async listPrompts() {
|
|
48
|
+
const result = await this.sendRequest('prompts/list', {});
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
async getPrompt(name, args = {}) {
|
|
52
|
+
return this.sendRequest('prompts/get', { name, arguments: args });
|
|
53
|
+
}
|
|
54
|
+
async ping() {
|
|
55
|
+
return this.sendRequest('ping', {});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=BaseMcpClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseMcpClient.js","sourceRoot":"","sources":["../../../../src/core/utils/testing/BaseMcpClient.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAE1C;;;;;GAKG;AACH,MAAM,OAAO,aAAa;IACd,MAAM,GAAG,CAAC,CAAC;IACX,aAAa,CAAyB;IAEhD,YAAa,gBAAwC,EAAE;QACrD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,WAAW,CAAE,OAAe,EAAE,OAAY;QACxD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,uEAAuE;IACzE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAG,OAAa;QAC9B,uEAAuE;IACzE,CAAC;IAED,oDAAoD;IAEpD,KAAK,CAAC,SAAS;QACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACxD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAE,QAAgB,EAAE,OAA4B,EAAE;QAC9D,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAC5D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,YAAY,CAAE,GAAW;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,SAAS,CAAE,IAAY,EAAE,OAA4B,EAAE;QAC3D,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BaseMcpClient } from './BaseMcpClient.js';
|
|
1
2
|
type Json = any;
|
|
2
3
|
/**
|
|
3
4
|
* MCP Simple HTTP Client
|
|
@@ -5,11 +6,9 @@ type Json = any;
|
|
|
5
6
|
* Uses simple POST requests instead of streaming HTTP for compatibility
|
|
6
7
|
* with the current server implementation
|
|
7
8
|
*/
|
|
8
|
-
export declare class McpHttpClient {
|
|
9
|
+
export declare class McpHttpClient extends BaseMcpClient {
|
|
9
10
|
private readonly baseUrl;
|
|
10
11
|
private readonly endpointPath;
|
|
11
|
-
private readonly customHeaders;
|
|
12
|
-
private nextId;
|
|
13
12
|
serverInfo?: {
|
|
14
13
|
name: string;
|
|
15
14
|
version: string;
|
|
@@ -30,16 +29,10 @@ export declare class McpHttpClient {
|
|
|
30
29
|
};
|
|
31
30
|
}): Promise<any>;
|
|
32
31
|
close(): Promise<void>;
|
|
33
|
-
private
|
|
32
|
+
private sendHttpRequest;
|
|
34
33
|
notify(method: string, params?: Json): void;
|
|
35
34
|
sendRpc<T = any>(method: string, params?: Json): Promise<T>;
|
|
36
|
-
|
|
37
|
-
callTool(toolName: string, args?: Record<string, any>): Promise<any>;
|
|
38
|
-
listResources(): Promise<any>;
|
|
39
|
-
readResource(uri: string): Promise<any>;
|
|
40
|
-
listPrompts(): Promise<any>;
|
|
41
|
-
getPrompt(name: string, args?: Record<string, any>): Promise<any>;
|
|
42
|
-
ping(): Promise<any>;
|
|
35
|
+
protected sendRequest(method: string, params: any): Promise<any>;
|
|
43
36
|
}
|
|
44
37
|
export {};
|
|
45
38
|
//# sourceMappingURL=McpHttpClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpHttpClient.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/testing/McpHttpClient.ts"],"names":[],"mappings":"AAEA,KAAK,IAAI,GAAG,GAAG,CAAC;AA6BhB;;;;;GAKG;AACH,qBAAa,aAAa;
|
|
1
|
+
{"version":3,"file":"McpHttpClient.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/testing/McpHttpClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAInD,KAAK,IAAI,GAAG,GAAG,CAAC;AA6BhB;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAE/B,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;gBAEnB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QACtC,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B;IAMc,UAAU,CAAE,MAAM,GAAE;QACjC,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,GAAG,CAAC;QACnB,UAAU,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;KAC3C;IAWS,KAAK;YAIN,eAAe;IAqB7B,MAAM,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI;IAQ/B,OAAO,CAAC,CAAC,GAAG,GAAG,EAAG,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;cAwBzC,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;CAGjF"}
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
// noinspection UnnecessaryLocalVariableJS
|
|
2
|
+
import { BaseMcpClient } from './BaseMcpClient.js';
|
|
2
3
|
/**
|
|
3
4
|
* MCP Simple HTTP Client
|
|
4
5
|
*
|
|
5
6
|
* Uses simple POST requests instead of streaming HTTP for compatibility
|
|
6
7
|
* with the current server implementation
|
|
7
8
|
*/
|
|
8
|
-
export class McpHttpClient {
|
|
9
|
+
export class McpHttpClient extends BaseMcpClient {
|
|
9
10
|
baseUrl;
|
|
10
11
|
endpointPath;
|
|
11
|
-
customHeaders;
|
|
12
|
-
nextId = 1;
|
|
13
12
|
serverInfo;
|
|
14
13
|
capabilities;
|
|
15
14
|
protocolVersion;
|
|
16
15
|
constructor(baseUrl, options) {
|
|
16
|
+
super(options?.headers ?? {});
|
|
17
17
|
this.baseUrl = baseUrl.replace(/\/$/, '');
|
|
18
18
|
this.endpointPath = options?.endpointPath ?? '/mcp';
|
|
19
|
-
this.customHeaders = options?.headers ?? {};
|
|
20
19
|
}
|
|
21
20
|
async initialize(params = {}) {
|
|
22
21
|
const res = await this.sendRpc('initialize', params);
|
|
@@ -30,7 +29,7 @@ export class McpHttpClient {
|
|
|
30
29
|
async close() {
|
|
31
30
|
// No persistent connection to close for simple HTTP client
|
|
32
31
|
}
|
|
33
|
-
async
|
|
32
|
+
async sendHttpRequest(request) {
|
|
34
33
|
const headers = {
|
|
35
34
|
'Content-Type': 'application/json',
|
|
36
35
|
'Accept': 'application/json',
|
|
@@ -50,14 +49,14 @@ export class McpHttpClient {
|
|
|
50
49
|
notify(method, params) {
|
|
51
50
|
const req = { jsonrpc: '2.0', method, params };
|
|
52
51
|
// Fire and forget for notifications
|
|
53
|
-
this.
|
|
52
|
+
this.sendHttpRequest(req).catch(() => {
|
|
54
53
|
// Ignore errors for notifications
|
|
55
54
|
});
|
|
56
55
|
}
|
|
57
56
|
async sendRpc(method, params) {
|
|
58
57
|
const id = this.nextId++;
|
|
59
58
|
const req = { jsonrpc: '2.0', id, method, params };
|
|
60
|
-
const response = await this.
|
|
59
|
+
const response = await this.sendHttpRequest(req);
|
|
61
60
|
// Handle response
|
|
62
61
|
if (response.result !== undefined && typeof response.id === 'number') {
|
|
63
62
|
const { result } = response;
|
|
@@ -72,28 +71,9 @@ export class McpHttpClient {
|
|
|
72
71
|
}
|
|
73
72
|
throw new Error(`Invalid MCP response: ${JSON.stringify(response)}`);
|
|
74
73
|
}
|
|
75
|
-
//
|
|
76
|
-
async
|
|
77
|
-
|
|
78
|
-
return res?.tools ?? res;
|
|
79
|
-
}
|
|
80
|
-
async callTool(toolName, args = {}) {
|
|
81
|
-
return this.sendRpc('tools/call', { name: toolName, arguments: args });
|
|
82
|
-
}
|
|
83
|
-
async listResources() {
|
|
84
|
-
return this.sendRpc('resources/list');
|
|
85
|
-
}
|
|
86
|
-
async readResource(uri) {
|
|
87
|
-
return this.sendRpc('resources/read', { uri });
|
|
88
|
-
}
|
|
89
|
-
async listPrompts() {
|
|
90
|
-
return this.sendRpc('prompts/list');
|
|
91
|
-
}
|
|
92
|
-
async getPrompt(name, args = {}) {
|
|
93
|
-
return this.sendRpc('prompts/get', { name, arguments: args });
|
|
94
|
-
}
|
|
95
|
-
async ping() {
|
|
96
|
-
return this.sendRpc('ping');
|
|
74
|
+
// Override sendRequest to handle JSON-RPC requests
|
|
75
|
+
async sendRequest(method, params) {
|
|
76
|
+
return this.sendRpc(method, params);
|
|
97
77
|
}
|
|
98
78
|
}
|
|
99
79
|
//# sourceMappingURL=McpHttpClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpHttpClient.js","sourceRoot":"","sources":["../../../../src/core/utils/testing/McpHttpClient.ts"],"names":[],"mappings":"AAAA,0CAA0C;
|
|
1
|
+
{"version":3,"file":"McpHttpClient.js","sourceRoot":"","sources":["../../../../src/core/utils/testing/McpHttpClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BaseMcpClient } from './BaseMcpClient.js';
|
|
1
2
|
/**
|
|
2
3
|
* MCP SSE Client for testing (improved)
|
|
3
4
|
*
|
|
@@ -5,15 +6,18 @@
|
|
|
5
6
|
* and sends JSON-RPC requests as separate HTTP POSTs to /rpc.
|
|
6
7
|
* Supports routing by id and per-operation timeouts.
|
|
7
8
|
*/
|
|
8
|
-
export declare class McpSseClient {
|
|
9
|
+
export declare class McpSseClient extends BaseMcpClient {
|
|
9
10
|
private readonly baseUrl;
|
|
10
|
-
private readonly customHeaders;
|
|
11
11
|
private requestId;
|
|
12
12
|
private sseAbort?;
|
|
13
13
|
private sseReaderTask?;
|
|
14
14
|
private connected;
|
|
15
15
|
private pending;
|
|
16
16
|
constructor(baseUrl: string, customHeaders?: Record<string, string>);
|
|
17
|
+
/**
|
|
18
|
+
* Create client with automatic unhandledRejection handling for npm package usage
|
|
19
|
+
*/
|
|
20
|
+
static createWithErrorHandler(baseUrl: string, customHeaders?: Record<string, string>): McpSseClient;
|
|
17
21
|
/** Public API: close SSE and reject all pending */
|
|
18
22
|
close(): Promise<void>;
|
|
19
23
|
/** Ensure SSE stream established */
|
|
@@ -27,14 +31,7 @@ export declare class McpSseClient {
|
|
|
27
31
|
/**
|
|
28
32
|
* Send JSON-RPC request over HTTP; await response via SSE stream
|
|
29
33
|
*/
|
|
30
|
-
sendRequest(method: string, params?: Record<string, any>): Promise<any>;
|
|
31
|
-
listTools(): Promise<any>;
|
|
32
|
-
callTool(toolName: string, parameters?: {}): Promise<any>;
|
|
33
|
-
listResources(): Promise<any>;
|
|
34
|
-
readResource(uri: string): Promise<any>;
|
|
35
|
-
listPrompts(): Promise<any>;
|
|
36
|
-
getPrompt(name: string, args?: Record<string, any>): Promise<any>;
|
|
37
|
-
ping(): Promise<any>;
|
|
34
|
+
protected sendRequest(method: string, params?: Record<string, any>): Promise<any>;
|
|
38
35
|
health(): Promise<unknown>;
|
|
39
36
|
}
|
|
40
37
|
//# sourceMappingURL=McpSseClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpSseClient.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/testing/McpSseClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"McpSseClient.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/testing/McpSseClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAWnD;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,aAAa;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,SAAS,CAAS;IAG1B,OAAO,CAAC,QAAQ,CAAC,CAA8B;IAC/C,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,SAAS,CAAS;IAG1B,OAAO,CAAC,OAAO,CAKV;gBAEQ,OAAO,EAAE,MAAM,EAAE,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAMxE;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAE,OAAO,EAAE,MAAM,EAAE,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,YAAY;IAkBzG,mDAAmD;IACpC,KAAK;IAkBpB,oCAAoC;YACtB,eAAe;IAO7B,sDAAsD;YACxC,OAAO;IAqCrB,4DAA4D;YAC9C,WAAW;IAgCzB,0EAA0E;IAC1E,OAAO,CAAC,cAAc;IA0EtB;;OAEG;cACsB,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAyD/F,MAAM;CAIb"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getJsonFromResult } from '../../index.js';
|
|
2
|
+
import { BaseMcpClient } from './BaseMcpClient.js';
|
|
2
3
|
async function safeReadText(res) {
|
|
3
4
|
try {
|
|
4
5
|
const text = await res.text();
|
|
@@ -15,9 +16,8 @@ async function safeReadText(res) {
|
|
|
15
16
|
* and sends JSON-RPC requests as separate HTTP POSTs to /rpc.
|
|
16
17
|
* Supports routing by id and per-operation timeouts.
|
|
17
18
|
*/
|
|
18
|
-
export class McpSseClient {
|
|
19
|
+
export class McpSseClient extends BaseMcpClient {
|
|
19
20
|
baseUrl;
|
|
20
|
-
customHeaders;
|
|
21
21
|
requestId;
|
|
22
22
|
// SSE connection state
|
|
23
23
|
sseAbort;
|
|
@@ -26,10 +26,28 @@ export class McpSseClient {
|
|
|
26
26
|
// pending requests awaiting response by id
|
|
27
27
|
pending = new Map();
|
|
28
28
|
constructor(baseUrl, customHeaders = {}) {
|
|
29
|
+
super(customHeaders);
|
|
29
30
|
this.baseUrl = baseUrl.replace(/\/$/, '');
|
|
30
|
-
this.customHeaders = customHeaders;
|
|
31
31
|
this.requestId = 1;
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Create client with automatic unhandledRejection handling for npm package usage
|
|
35
|
+
*/
|
|
36
|
+
static createWithErrorHandler(baseUrl, customHeaders = {}) {
|
|
37
|
+
const client = new McpSseClient(baseUrl, customHeaders);
|
|
38
|
+
// Set up global unhandled rejection handler if not already present
|
|
39
|
+
if (!global._faMcpSdkRejectionHandler) {
|
|
40
|
+
global._faMcpSdkRejectionHandler = (reason) => {
|
|
41
|
+
// Check if this is an MCP-related error
|
|
42
|
+
if (typeof reason === 'object' && reason?.message?.includes('MCP Error:')) {
|
|
43
|
+
// Silently handle MCP errors to prevent unhandledRejection
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
process.on('unhandledRejection', global._faMcpSdkRejectionHandler);
|
|
48
|
+
}
|
|
49
|
+
return client;
|
|
50
|
+
}
|
|
33
51
|
/** Public API: close SSE and reject all pending */
|
|
34
52
|
async close() {
|
|
35
53
|
this.connected = false;
|
|
@@ -167,26 +185,34 @@ export class McpSseClient {
|
|
|
167
185
|
// In test environment, log validation errors but don't crash
|
|
168
186
|
if (errorMessage.includes('invalid_type')) {
|
|
169
187
|
console.log(` ⚠️ Parameter validation error: ${errorMessage}`);
|
|
170
|
-
pending.resolve(
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
188
|
+
pending.resolve(null);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
// For tool execution errors, we want to throw them so tests can verify expected failures
|
|
192
|
+
if (errorMessage.includes('Failed to execute tool')) {
|
|
193
|
+
console.log(` ⚠️ Error: ${errorMessage}`);
|
|
194
|
+
const err = new Error(`MCP Error: ${errorMessage}`);
|
|
195
|
+
err.data = payload.error?.data;
|
|
196
|
+
err.fullMcpResponse = payload;
|
|
197
|
+
err.method = pending.method; // Attach method for error handling
|
|
198
|
+
pending.reject(err);
|
|
174
199
|
return;
|
|
175
200
|
}
|
|
176
201
|
const err = new Error(`MCP Error: ${errorMessage}`);
|
|
177
202
|
err.data = payload.error?.data;
|
|
178
203
|
err.fullMcpResponse = payload;
|
|
179
|
-
pending.
|
|
204
|
+
err.method = pending.method; // Attach method for error handling
|
|
205
|
+
// Use setImmediate to avoid synchronous rejection that can cause unhandledRejection
|
|
206
|
+
setImmediate(() => {
|
|
207
|
+
pending.reject(err);
|
|
208
|
+
});
|
|
180
209
|
}
|
|
181
210
|
else {
|
|
182
211
|
const res = getJsonFromResult(payload.result);
|
|
183
212
|
if (res?.message) {
|
|
184
213
|
console.log(' message:', res.message);
|
|
185
214
|
}
|
|
186
|
-
pending.resolve(
|
|
187
|
-
result: payload.result,
|
|
188
|
-
requestHeaders: this.customHeaders,
|
|
189
|
-
});
|
|
215
|
+
pending.resolve(payload.result);
|
|
190
216
|
}
|
|
191
217
|
}
|
|
192
218
|
/**
|
|
@@ -211,46 +237,39 @@ export class McpSseClient {
|
|
|
211
237
|
'Content-Type': 'application/json',
|
|
212
238
|
...this.customHeaders,
|
|
213
239
|
};
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
240
|
+
try {
|
|
241
|
+
const res = await fetch(`${this.baseUrl}/sse`, {
|
|
242
|
+
method: 'POST',
|
|
243
|
+
headers,
|
|
244
|
+
body: JSON.stringify(request),
|
|
245
|
+
});
|
|
246
|
+
if (!res.ok) {
|
|
247
|
+
clearTimeout(timeoutRef);
|
|
248
|
+
this.pending.delete(id);
|
|
249
|
+
const text = await safeReadText(res);
|
|
250
|
+
const error = new Error(`RPC send failed: ${res.status} ${res.statusText}${text ? ' - ' + text : ''}`);
|
|
251
|
+
// Attach method info for better error handling
|
|
252
|
+
error.method = method;
|
|
253
|
+
throw error;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
catch (fetchError) {
|
|
257
|
+
// Handle fetch errors and clean up pending request
|
|
220
258
|
clearTimeout(timeoutRef);
|
|
221
259
|
this.pending.delete(id);
|
|
222
|
-
|
|
223
|
-
|
|
260
|
+
// Preserve method information for error handling
|
|
261
|
+
fetchError.method = method;
|
|
262
|
+
throw fetchError;
|
|
224
263
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
return this.sendRequest('tools/call', {
|
|
233
|
-
name: toolName,
|
|
234
|
-
arguments: parameters,
|
|
264
|
+
// Add catch block to handle promise rejection gracefully
|
|
265
|
+
return promise.catch((error) => {
|
|
266
|
+
// Ensure method info is available
|
|
267
|
+
if (!error.method) {
|
|
268
|
+
error.method = method;
|
|
269
|
+
}
|
|
270
|
+
throw error;
|
|
235
271
|
});
|
|
236
272
|
}
|
|
237
|
-
async listResources() {
|
|
238
|
-
const { result } = await this.sendRequest('resources/list');
|
|
239
|
-
return result;
|
|
240
|
-
}
|
|
241
|
-
async readResource(uri) {
|
|
242
|
-
return this.sendRequest('resources/read', { uri });
|
|
243
|
-
}
|
|
244
|
-
async listPrompts() {
|
|
245
|
-
const { result } = await this.sendRequest('prompts/list');
|
|
246
|
-
return result;
|
|
247
|
-
}
|
|
248
|
-
async getPrompt(name, args = {}) {
|
|
249
|
-
return this.sendRequest('prompts/get', { name, arguments: args });
|
|
250
|
-
}
|
|
251
|
-
async ping() {
|
|
252
|
-
return this.sendRequest('ping');
|
|
253
|
-
}
|
|
254
273
|
async health() {
|
|
255
274
|
const response = await fetch(`${this.baseUrl}/health`);
|
|
256
275
|
return response.json();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpSseClient.js","sourceRoot":"","sources":["../../../../src/core/utils/testing/McpSseClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,KAAK,UAAU,YAAY,CAAE,GAAa;IACxC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"McpSseClient.js","sourceRoot":"","sources":["../../../../src/core/utils/testing/McpSseClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
import '../../bootstrap/dotenv.js';
|
|
2
2
|
import { ChildProcess } from 'child_process';
|
|
3
|
-
|
|
3
|
+
import { BaseMcpClient } from './BaseMcpClient.js';
|
|
4
|
+
export declare class McpStdioClient extends BaseMcpClient {
|
|
4
5
|
private proc;
|
|
5
|
-
private nextId;
|
|
6
6
|
private pending;
|
|
7
7
|
private buffer;
|
|
8
8
|
constructor(proc: ChildProcess);
|
|
9
9
|
processLines(): void;
|
|
10
10
|
send(method: string, params?: {}, timeoutMs?: number): Promise<unknown>;
|
|
11
|
-
|
|
12
|
-
callTool(name: string, args?: Record<string, any>): Promise<unknown>;
|
|
13
|
-
listResources(): Promise<unknown>;
|
|
14
|
-
readResource(uri: string): Promise<unknown>;
|
|
15
|
-
listPrompts(): Promise<unknown>;
|
|
16
|
-
getPrompt(name: string, args?: Record<string, any>): Promise<unknown>;
|
|
11
|
+
protected sendRequest(method: string, params: any): Promise<any>;
|
|
17
12
|
}
|
|
18
13
|
//# sourceMappingURL=McpStdioClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpStdioClient.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/testing/McpStdioClient.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"McpStdioClient.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/testing/McpStdioClient.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAYnD,qBAAa,cAAe,SAAQ,aAAa;IAC/C,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,MAAM,CAAS;gBAEV,IAAI,EAAE,YAAY;IAqB/B,YAAY;IA+BZ,IAAI,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,EAAE,SAAS,SAAQ;cAsB3B,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;CAGjF"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import '../../bootstrap/dotenv.js';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
+
import { BaseMcpClient } from './BaseMcpClient.js';
|
|
3
4
|
const SHOW_IN = process.env.TEST_SHOW_IN === 'true';
|
|
4
5
|
const SHOW_OUT = process.env.TEST_SHOW_OUT === 'true';
|
|
5
6
|
const SHOW_ERR = process.env.TEST_SHOW_ERR === 'true';
|
|
6
|
-
export class McpStdioClient {
|
|
7
|
+
export class McpStdioClient extends BaseMcpClient {
|
|
7
8
|
proc;
|
|
8
|
-
nextId;
|
|
9
9
|
pending;
|
|
10
10
|
buffer;
|
|
11
11
|
constructor(proc) {
|
|
12
|
+
super({});
|
|
12
13
|
this.proc = proc;
|
|
13
|
-
this.nextId = 1;
|
|
14
14
|
this.pending = new Map();
|
|
15
15
|
this.buffer = '';
|
|
16
16
|
if (this.proc.stdout) {
|
|
@@ -80,23 +80,9 @@ export class McpStdioClient {
|
|
|
80
80
|
this.pending.set(id, { resolve, reject, t });
|
|
81
81
|
});
|
|
82
82
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
callTool(name, args = {}) {
|
|
87
|
-
return this.send('tools/call', { name, arguments: args });
|
|
88
|
-
}
|
|
89
|
-
listResources() {
|
|
90
|
-
return this.send('resources/list');
|
|
91
|
-
}
|
|
92
|
-
readResource(uri) {
|
|
93
|
-
return this.send('resources/read', { uri });
|
|
94
|
-
}
|
|
95
|
-
listPrompts() {
|
|
96
|
-
return this.send('prompts/list');
|
|
97
|
-
}
|
|
98
|
-
getPrompt(name, args = {}) {
|
|
99
|
-
return this.send('prompts/get', { name, arguments: args });
|
|
83
|
+
// Override sendRequest to use the existing send method
|
|
84
|
+
async sendRequest(method, params) {
|
|
85
|
+
return this.send(method, params);
|
|
100
86
|
}
|
|
101
87
|
}
|
|
102
88
|
//# sourceMappingURL=McpStdioClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpStdioClient.js","sourceRoot":"","sources":["../../../../src/core/utils/testing/McpStdioClient.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AACnC,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"McpStdioClient.js","sourceRoot":"","sources":["../../../../src/core/utils/testing/McpStdioClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BaseMcpClient } from './BaseMcpClient.js';
|
|
1
2
|
type Json = any;
|
|
2
3
|
/**
|
|
3
4
|
* MCP Streamable HTTP Client
|
|
@@ -5,10 +6,9 @@ type Json = any;
|
|
|
5
6
|
* Supports a long-lived connection over HTTP (NDJSON),
|
|
6
7
|
* multiple requests/responses and incoming notifications.
|
|
7
8
|
*/
|
|
8
|
-
export declare class McpStreamableHttpClient {
|
|
9
|
+
export declare class McpStreamableHttpClient extends BaseMcpClient {
|
|
9
10
|
private readonly baseUrl;
|
|
10
11
|
private readonly endpointPath;
|
|
11
|
-
private readonly customHeaders;
|
|
12
12
|
private readonly requestTimeoutMs;
|
|
13
13
|
private encoder;
|
|
14
14
|
private decoder;
|
|
@@ -18,7 +18,6 @@ export declare class McpStreamableHttpClient {
|
|
|
18
18
|
private reader;
|
|
19
19
|
private abort;
|
|
20
20
|
private readLoopPromise;
|
|
21
|
-
private nextId;
|
|
22
21
|
private pending;
|
|
23
22
|
private notifications;
|
|
24
23
|
serverInfo?: {
|
|
@@ -50,13 +49,7 @@ export declare class McpStreamableHttpClient {
|
|
|
50
49
|
private writeNdjson;
|
|
51
50
|
notify(method: string, params?: Json): void;
|
|
52
51
|
sendRpc<T = any>(method: string, params?: Json, timeoutMs?: number): Promise<T>;
|
|
53
|
-
|
|
54
|
-
callTool(toolName: string, parameters?: Record<string, any>): Promise<any>;
|
|
55
|
-
listResources(): Promise<any>;
|
|
56
|
-
readResource(uri: string): Promise<any>;
|
|
57
|
-
listPrompts(): Promise<any>;
|
|
58
|
-
getPrompt(name: string, arguments_?: Record<string, any>): Promise<any>;
|
|
59
|
-
ping(): Promise<any>;
|
|
52
|
+
protected sendRequest(method: string, params: any): Promise<any>;
|
|
60
53
|
}
|
|
61
54
|
export {};
|
|
62
55
|
//# sourceMappingURL=McpStreamableHttpClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpStreamableHttpClient.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/testing/McpStreamableHttpClient.ts"],"names":[],"mappings":"AAAA,KAAK,IAAI,GAAG,GAAG,CAAC;AA6BhB;;;;;GAKG;AACH,qBAAa,
|
|
1
|
+
{"version":3,"file":"McpStreamableHttpClient.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/testing/McpStreamableHttpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,KAAK,IAAI,GAAG,GAAG,CAAC;AA6BhB;;;;;GAKG;AACH,qBAAa,uBAAwB,SAAQ,aAAa;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,MAAM,CAAsD;IACpE,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,eAAe,CAA4B;IAEjD,OAAO,CAAC,OAAO,CAA2F;IAC5G,OAAO,CAAC,aAAa,CAAiD;IAE/D,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;gBAEnB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QACtC,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B;IAOD,cAAc,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI;IAM9D,OAAO,CAAC,gBAAgB;IAWlB,OAAO;IAsCE,UAAU,CAAE,MAAM,GAAE;QACjC,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,GAAG,CAAC;QACnB,UAAU,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;KAC3C;IAYS,KAAK;IAyBpB,OAAO,CAAC,OAAO;YAOD,QAAQ;IAwBtB,OAAO,CAAC,aAAa;IAqCrB,OAAO,CAAC,WAAW;IAKnB,MAAM,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI;IAK/B,OAAO,CAAC,CAAC,GAAG,GAAG,EAAG,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,SAAwB,GAAG,OAAO,CAAC,CAAC,CAAC;cAgB5E,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;CAGjF"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
+
import { BaseMcpClient } from './BaseMcpClient.js';
|
|
1
2
|
/**
|
|
2
3
|
* MCP Streamable HTTP Client
|
|
3
4
|
*
|
|
4
5
|
* Supports a long-lived connection over HTTP (NDJSON),
|
|
5
6
|
* multiple requests/responses and incoming notifications.
|
|
6
7
|
*/
|
|
7
|
-
export class McpStreamableHttpClient {
|
|
8
|
+
export class McpStreamableHttpClient extends BaseMcpClient {
|
|
8
9
|
baseUrl;
|
|
9
10
|
endpointPath;
|
|
10
|
-
customHeaders;
|
|
11
11
|
requestTimeoutMs;
|
|
12
12
|
encoder = new TextEncoder();
|
|
13
13
|
decoder = new TextDecoder();
|
|
@@ -17,16 +17,15 @@ export class McpStreamableHttpClient {
|
|
|
17
17
|
reader;
|
|
18
18
|
abort;
|
|
19
19
|
readLoopPromise;
|
|
20
|
-
nextId = 1;
|
|
21
20
|
pending = new Map();
|
|
22
21
|
notifications = new Map();
|
|
23
22
|
serverInfo;
|
|
24
23
|
capabilities;
|
|
25
24
|
protocolVersion;
|
|
26
25
|
constructor(baseUrl, options) {
|
|
26
|
+
super(options?.headers ?? {});
|
|
27
27
|
this.baseUrl = baseUrl.replace(/\/$/, '');
|
|
28
28
|
this.endpointPath = options?.endpointPath ?? '/mcp';
|
|
29
|
-
this.customHeaders = options?.headers ?? {};
|
|
30
29
|
this.requestTimeoutMs = options?.requestTimeoutMs ?? 120_000;
|
|
31
30
|
}
|
|
32
31
|
onNotification(method, handler) {
|
|
@@ -215,28 +214,9 @@ export class McpStreamableHttpClient {
|
|
|
215
214
|
this.writeNdjson(req);
|
|
216
215
|
return p;
|
|
217
216
|
}
|
|
218
|
-
//
|
|
219
|
-
async
|
|
220
|
-
|
|
221
|
-
return res?.tools ?? res;
|
|
222
|
-
}
|
|
223
|
-
async callTool(toolName, parameters = {}) {
|
|
224
|
-
return this.sendRpc('tools/call', { name: toolName, arguments: parameters });
|
|
225
|
-
}
|
|
226
|
-
async listResources() {
|
|
227
|
-
return this.sendRpc('resources/list');
|
|
228
|
-
}
|
|
229
|
-
async readResource(uri) {
|
|
230
|
-
return this.sendRpc('resources/read', { uri });
|
|
231
|
-
}
|
|
232
|
-
async listPrompts() {
|
|
233
|
-
return this.sendRpc('prompts/list');
|
|
234
|
-
}
|
|
235
|
-
async getPrompt(name, arguments_ = {}) {
|
|
236
|
-
return this.sendRpc('prompts/get', { name, arguments: arguments_ });
|
|
237
|
-
}
|
|
238
|
-
async ping() {
|
|
239
|
-
return this.sendRpc('ping');
|
|
217
|
+
// Override sendRequest to use sendRpc for consistency
|
|
218
|
+
async sendRequest(method, params) {
|
|
219
|
+
return this.sendRpc(method, params);
|
|
240
220
|
}
|
|
241
221
|
}
|
|
242
222
|
//# sourceMappingURL=McpStreamableHttpClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpStreamableHttpClient.js","sourceRoot":"","sources":["../../../../src/core/utils/testing/McpStreamableHttpClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"McpStreamableHttpClient.js","sourceRoot":"","sources":["../../../../src/core/utils/testing/McpStreamableHttpClient.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fa-mcp-sdk",
|
|
3
3
|
"productName": "FA MCP SDK",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.20",
|
|
5
5
|
"description": "Core infrastructure and templates for building Model Context Protocol (MCP) servers with TypeScript",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/core/index.js",
|