@cicctencent/agent-core 0.1.102 → 0.1.104
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/dist/cjs/mcp/http-client.d.ts +9 -1
- package/dist/cjs/mcp/http-client.d.ts.map +1 -1
- package/dist/cjs/mcp/http-client.js +73 -27
- package/dist/cjs/mcp/http-client.js.map +1 -1
- package/dist/esm/mcp/http-client.d.ts +9 -1
- package/dist/esm/mcp/http-client.d.ts.map +1 -1
- package/dist/esm/mcp/http-client.js +73 -27
- package/dist/esm/mcp/http-client.js.map +1 -1
- package/package.json +1 -1
|
@@ -12,13 +12,21 @@ export declare class HttpMCPClient extends MCPClientBase {
|
|
|
12
12
|
protected doDisconnect(): void;
|
|
13
13
|
/** 根据 auth 配置生成鉴权请求头(value 支持 ${vars.x} / ${env.x} 模板)。vars 随请求显式传入,避免共享状态。 */
|
|
14
14
|
private buildAuthHeaders;
|
|
15
|
+
/** MCP 协议版本(与 base-client connect() 中 initialize params 一致) */
|
|
16
|
+
private static readonly PROTOCOL_VERSION;
|
|
15
17
|
protected send(request: {
|
|
16
18
|
jsonrpc: string;
|
|
17
19
|
id: number;
|
|
18
20
|
method: string;
|
|
19
21
|
params?: Record<string, unknown>;
|
|
20
22
|
}, vars?: Record<string, unknown>): void;
|
|
21
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* 解析 SSE 文本块中的 JSON-RPC 响应。
|
|
25
|
+
*
|
|
26
|
+
* 遵循 SSE 规范:同一事件内多个连续 `data:` 行需用 `\n` 拼接为一个完整字符串,
|
|
27
|
+
* 空行(事件分隔符)触发 flush 并尝试 JSON.parse。
|
|
28
|
+
* 旧实现逐行独立 parse 导致多行 JSON 解析失败,是 tools/list 返回空的根本原因。
|
|
29
|
+
*/
|
|
22
30
|
private parseSSE;
|
|
23
31
|
private headersToObject;
|
|
24
32
|
private normalizeException;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/mcp/http-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,qBAAa,aAAc,SAAQ,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,qDAAqD;IACrD,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,cAAc;IACd,OAAO,CAAC,UAAU,CAAC,CAAiD;cACpD,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjE,SAAS,CAAC,YAAY,IAAI,IAAI;IAS9B,+EAA+E;IAC/E,OAAO,CAAC,gBAAgB;IAmBxB,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/mcp/http-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,qBAAa,aAAc,SAAQ,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,qDAAqD;IACrD,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,cAAc;IACd,OAAO,CAAC,UAAU,CAAC,CAAiD;cACpD,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjE,SAAS,CAAC,YAAY,IAAI,IAAI;IAS9B,+EAA+E;IAC/E,OAAO,CAAC,gBAAgB;IAmBxB,+DAA+D;IAC/D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;IAExD,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAyIhJ;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;IAgChB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;CAe3B"}
|
|
@@ -54,12 +54,17 @@ class HttpMCPClient extends base_client_ts_1.MCPClientBase {
|
|
|
54
54
|
return {};
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
+
/** MCP 协议版本(与 base-client connect() 中 initialize params 一致) */
|
|
58
|
+
static PROTOCOL_VERSION = '2024-11-05';
|
|
57
59
|
send(request, vars) {
|
|
58
60
|
// 通知(id=0)不需要响应,用 fire-and-forget
|
|
59
61
|
const isNotification = request.id === 0;
|
|
60
62
|
const headers = {
|
|
61
63
|
'Content-Type': 'application/json',
|
|
62
64
|
'Accept': 'application/json, text/event-stream',
|
|
65
|
+
// Streamable HTTP 规范要求后续请求携带 MCP-Protocol-Version 头部,
|
|
66
|
+
// 部分服务器会校验此头缺失则直接返回 400/406,导致 tools/list 等请求失败。
|
|
67
|
+
'MCP-Protocol-Version': HttpMCPClient.PROTOCOL_VERSION,
|
|
63
68
|
};
|
|
64
69
|
// MCP SSE/StreamableHTTP 传输可能返回 session id
|
|
65
70
|
if (this.sessionId) {
|
|
@@ -84,8 +89,14 @@ class HttpMCPClient extends base_client_ts_1.MCPClientBase {
|
|
|
84
89
|
if (this.proxyDispatcher)
|
|
85
90
|
fetchOptions.dispatcher = this.proxyDispatcher;
|
|
86
91
|
fetch(this.endpoint, fetchOptions).then(async (res) => {
|
|
87
|
-
|
|
92
|
+
// 即使是通知(无需处理响应),也必须消费响应体以释放 HTTP keep-alive 连接。
|
|
93
|
+
// 否则连接停留在 "body unconsumed" 状态,后续请求(如 tools/list)无法复用
|
|
94
|
+
// 该连接,最终等到连接池耗尽后超时 —— 这是 debug(逐步 await)能拿到工具
|
|
95
|
+
// 但实际 client(fire-and-forget 通知)拿不到的根本原因。
|
|
96
|
+
if (isNotification) {
|
|
97
|
+
await res.text().catch(() => { });
|
|
88
98
|
return;
|
|
99
|
+
}
|
|
89
100
|
const connectDuration = Date.now() - startTime;
|
|
90
101
|
const contentType = res.headers.get('content-type') || '';
|
|
91
102
|
// 捕获 session id
|
|
@@ -132,15 +143,27 @@ class HttpMCPClient extends base_client_ts_1.MCPClientBase {
|
|
|
132
143
|
sseParsed: contentType.includes('text/event-stream'),
|
|
133
144
|
},
|
|
134
145
|
});
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
146
|
+
try {
|
|
147
|
+
if (contentType.includes('text/event-stream')) {
|
|
148
|
+
// SSE 响应:解析事件流中的 JSON-RPC 响应
|
|
149
|
+
const text = await res.text();
|
|
150
|
+
this.parseSSE(text);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
// 普通 JSON 响应
|
|
154
|
+
const data = await res.json();
|
|
155
|
+
this.handleResponse(data);
|
|
156
|
+
}
|
|
139
157
|
}
|
|
140
|
-
|
|
141
|
-
//
|
|
142
|
-
|
|
143
|
-
|
|
158
|
+
catch (parseErr) {
|
|
159
|
+
// res.text() / res.json() / SSE 解析异常时,reject pending promise
|
|
160
|
+
// 避免 promise 永远 pending 直到超时(30s),用户看到超时而非真实错误
|
|
161
|
+
console.error(`[MCP:HTTP] Response parse failed for id=${request.id}:`, parseErr?.message);
|
|
162
|
+
this.handleResponse({
|
|
163
|
+
jsonrpc: '2.0',
|
|
164
|
+
id: request.id,
|
|
165
|
+
error: { code: -32700, message: `Response parse error: ${parseErr?.message || String(parseErr)}` },
|
|
166
|
+
});
|
|
144
167
|
}
|
|
145
168
|
}).catch((err) => {
|
|
146
169
|
if (isNotification)
|
|
@@ -153,31 +176,54 @@ class HttpMCPClient extends base_client_ts_1.MCPClientBase {
|
|
|
153
176
|
error: err?.message || String(err),
|
|
154
177
|
exception: this.normalizeException(err),
|
|
155
178
|
});
|
|
156
|
-
//
|
|
157
|
-
|
|
158
|
-
|
|
179
|
+
// fetch 本身失败(网络错误等)时,reject pending promise 而非等待超时
|
|
180
|
+
console.error(`[MCP:HTTP] Request failed for id=${request.id}:`, err?.message || err);
|
|
181
|
+
this.handleResponse({
|
|
182
|
+
jsonrpc: '2.0',
|
|
183
|
+
id: request.id,
|
|
184
|
+
error: { code: -32000, message: err?.message || 'Network request failed' },
|
|
185
|
+
});
|
|
159
186
|
});
|
|
160
187
|
}
|
|
161
|
-
/**
|
|
188
|
+
/**
|
|
189
|
+
* 解析 SSE 文本块中的 JSON-RPC 响应。
|
|
190
|
+
*
|
|
191
|
+
* 遵循 SSE 规范:同一事件内多个连续 `data:` 行需用 `\n` 拼接为一个完整字符串,
|
|
192
|
+
* 空行(事件分隔符)触发 flush 并尝试 JSON.parse。
|
|
193
|
+
* 旧实现逐行独立 parse 导致多行 JSON 解析失败,是 tools/list 返回空的根本原因。
|
|
194
|
+
*/
|
|
162
195
|
parseSSE(text) {
|
|
163
|
-
// 支持 \r\n 和 \n 行分隔符
|
|
164
196
|
const lines = text.replace(/\r\n/g, '\n').split('\n');
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
// 非 JSON data 忽略
|
|
197
|
+
let dataLines = [];
|
|
198
|
+
const flush = () => {
|
|
199
|
+
if (!dataLines.length)
|
|
200
|
+
return;
|
|
201
|
+
const raw = dataLines.join('\n').trim();
|
|
202
|
+
dataLines = [];
|
|
203
|
+
if (!raw)
|
|
204
|
+
return;
|
|
205
|
+
try {
|
|
206
|
+
const data = JSON.parse(raw);
|
|
207
|
+
if (data.id !== undefined && data.id !== 0) {
|
|
208
|
+
this.handleResponse(data);
|
|
178
209
|
}
|
|
179
210
|
}
|
|
211
|
+
catch {
|
|
212
|
+
// 非 JSON data 忽略
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
for (const line of lines) {
|
|
216
|
+
if (!line.trim()) {
|
|
217
|
+
// 空行 = 事件边界,触发 flush
|
|
218
|
+
flush();
|
|
219
|
+
}
|
|
220
|
+
else if (line.startsWith('data:')) {
|
|
221
|
+
dataLines.push(line.slice(5).trim());
|
|
222
|
+
}
|
|
223
|
+
// 忽略 event: / id: / retry: 等其他 SSE 字段
|
|
180
224
|
}
|
|
225
|
+
// 处理末尾未以空行结束的最后一个事件
|
|
226
|
+
flush();
|
|
181
227
|
}
|
|
182
228
|
headersToObject(headers) {
|
|
183
229
|
const result = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/mcp/http-client.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,yCAAyC;AACzC,+DAA+D;;;AAE/D,qDAAiD;AAEjD,gDAA6G;AAC7G,4DAAyF;AAEzF,MAAa,aAAc,SAAQ,8BAAa;IACtC,QAAQ,GAAG,EAAE,CAAC;IACd,SAAS,CAAU;IACnB,eAAe,CAAkB;IACzC,qDAAqD;IAC7C,eAAe,CAA0B;IACjD,cAAc;IACN,UAAU,CAAkD;IAC1D,KAAK,CAAC,SAAS,CAAC,MAAuB;QAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,CAAC,SAAS,iDAAiD,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAA,uCAA4B,EAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAC/E,IAAI,CAAC,eAAe,GAAG,MAAM,IAAA,gCAAqB,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,CAAC;IAES,YAAY;QACpB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;IACnC,CAAC;IAED,+EAA+E;IACvE,gBAAgB,CAAC,IAA8B;QACrD,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAChC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAA,uCAAsB,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACrD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,QAAQ;gBACX,OAAO,EAAE,aAAa,EAAE,UAAU,QAAQ,EAAE,EAAE,CAAC;YACjD,KAAK,OAAO;gBACV,gCAAgC;gBAChC,OAAO,EAAE,aAAa,EAAE,SAAS,QAAQ,EAAE,EAAE,CAAC;YAChD,KAAK,QAAQ;gBACX,OAAO,EAAE,CAAC,IAAI,IAAI,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC;YAC7C,KAAK,QAAQ;gBACX,OAAO,EAAE,CAAC,IAAI,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC;YACjD;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/mcp/http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,13 +12,21 @@ export declare class HttpMCPClient extends MCPClientBase {
|
|
|
12
12
|
protected doDisconnect(): void;
|
|
13
13
|
/** 根据 auth 配置生成鉴权请求头(value 支持 ${vars.x} / ${env.x} 模板)。vars 随请求显式传入,避免共享状态。 */
|
|
14
14
|
private buildAuthHeaders;
|
|
15
|
+
/** MCP 协议版本(与 base-client connect() 中 initialize params 一致) */
|
|
16
|
+
private static readonly PROTOCOL_VERSION;
|
|
15
17
|
protected send(request: {
|
|
16
18
|
jsonrpc: string;
|
|
17
19
|
id: number;
|
|
18
20
|
method: string;
|
|
19
21
|
params?: Record<string, unknown>;
|
|
20
22
|
}, vars?: Record<string, unknown>): void;
|
|
21
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* 解析 SSE 文本块中的 JSON-RPC 响应。
|
|
25
|
+
*
|
|
26
|
+
* 遵循 SSE 规范:同一事件内多个连续 `data:` 行需用 `\n` 拼接为一个完整字符串,
|
|
27
|
+
* 空行(事件分隔符)触发 flush 并尝试 JSON.parse。
|
|
28
|
+
* 旧实现逐行独立 parse 导致多行 JSON 解析失败,是 tools/list 返回空的根本原因。
|
|
29
|
+
*/
|
|
22
30
|
private parseSSE;
|
|
23
31
|
private headersToObject;
|
|
24
32
|
private normalizeException;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/mcp/http-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,qBAAa,aAAc,SAAQ,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,qDAAqD;IACrD,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,cAAc;IACd,OAAO,CAAC,UAAU,CAAC,CAAiD;cACpD,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjE,SAAS,CAAC,YAAY,IAAI,IAAI;IAS9B,+EAA+E;IAC/E,OAAO,CAAC,gBAAgB;IAmBxB,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/mcp/http-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,qBAAa,aAAc,SAAQ,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,qDAAqD;IACrD,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,cAAc;IACd,OAAO,CAAC,UAAU,CAAC,CAAiD;cACpD,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjE,SAAS,CAAC,YAAY,IAAI,IAAI;IAS9B,+EAA+E;IAC/E,OAAO,CAAC,gBAAgB;IAmBxB,+DAA+D;IAC/D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;IAExD,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAyIhJ;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;IAgChB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;CAe3B"}
|
|
@@ -51,12 +51,17 @@ export class HttpMCPClient extends MCPClientBase {
|
|
|
51
51
|
return {};
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
+
/** MCP 协议版本(与 base-client connect() 中 initialize params 一致) */
|
|
55
|
+
static PROTOCOL_VERSION = '2024-11-05';
|
|
54
56
|
send(request, vars) {
|
|
55
57
|
// 通知(id=0)不需要响应,用 fire-and-forget
|
|
56
58
|
const isNotification = request.id === 0;
|
|
57
59
|
const headers = {
|
|
58
60
|
'Content-Type': 'application/json',
|
|
59
61
|
'Accept': 'application/json, text/event-stream',
|
|
62
|
+
// Streamable HTTP 规范要求后续请求携带 MCP-Protocol-Version 头部,
|
|
63
|
+
// 部分服务器会校验此头缺失则直接返回 400/406,导致 tools/list 等请求失败。
|
|
64
|
+
'MCP-Protocol-Version': HttpMCPClient.PROTOCOL_VERSION,
|
|
60
65
|
};
|
|
61
66
|
// MCP SSE/StreamableHTTP 传输可能返回 session id
|
|
62
67
|
if (this.sessionId) {
|
|
@@ -81,8 +86,14 @@ export class HttpMCPClient extends MCPClientBase {
|
|
|
81
86
|
if (this.proxyDispatcher)
|
|
82
87
|
fetchOptions.dispatcher = this.proxyDispatcher;
|
|
83
88
|
fetch(this.endpoint, fetchOptions).then(async (res) => {
|
|
84
|
-
|
|
89
|
+
// 即使是通知(无需处理响应),也必须消费响应体以释放 HTTP keep-alive 连接。
|
|
90
|
+
// 否则连接停留在 "body unconsumed" 状态,后续请求(如 tools/list)无法复用
|
|
91
|
+
// 该连接,最终等到连接池耗尽后超时 —— 这是 debug(逐步 await)能拿到工具
|
|
92
|
+
// 但实际 client(fire-and-forget 通知)拿不到的根本原因。
|
|
93
|
+
if (isNotification) {
|
|
94
|
+
await res.text().catch(() => { });
|
|
85
95
|
return;
|
|
96
|
+
}
|
|
86
97
|
const connectDuration = Date.now() - startTime;
|
|
87
98
|
const contentType = res.headers.get('content-type') || '';
|
|
88
99
|
// 捕获 session id
|
|
@@ -129,15 +140,27 @@ export class HttpMCPClient extends MCPClientBase {
|
|
|
129
140
|
sseParsed: contentType.includes('text/event-stream'),
|
|
130
141
|
},
|
|
131
142
|
});
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
143
|
+
try {
|
|
144
|
+
if (contentType.includes('text/event-stream')) {
|
|
145
|
+
// SSE 响应:解析事件流中的 JSON-RPC 响应
|
|
146
|
+
const text = await res.text();
|
|
147
|
+
this.parseSSE(text);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// 普通 JSON 响应
|
|
151
|
+
const data = await res.json();
|
|
152
|
+
this.handleResponse(data);
|
|
153
|
+
}
|
|
136
154
|
}
|
|
137
|
-
|
|
138
|
-
//
|
|
139
|
-
|
|
140
|
-
|
|
155
|
+
catch (parseErr) {
|
|
156
|
+
// res.text() / res.json() / SSE 解析异常时,reject pending promise
|
|
157
|
+
// 避免 promise 永远 pending 直到超时(30s),用户看到超时而非真实错误
|
|
158
|
+
console.error(`[MCP:HTTP] Response parse failed for id=${request.id}:`, parseErr?.message);
|
|
159
|
+
this.handleResponse({
|
|
160
|
+
jsonrpc: '2.0',
|
|
161
|
+
id: request.id,
|
|
162
|
+
error: { code: -32700, message: `Response parse error: ${parseErr?.message || String(parseErr)}` },
|
|
163
|
+
});
|
|
141
164
|
}
|
|
142
165
|
}).catch((err) => {
|
|
143
166
|
if (isNotification)
|
|
@@ -150,31 +173,54 @@ export class HttpMCPClient extends MCPClientBase {
|
|
|
150
173
|
error: err?.message || String(err),
|
|
151
174
|
exception: this.normalizeException(err),
|
|
152
175
|
});
|
|
153
|
-
//
|
|
154
|
-
|
|
155
|
-
|
|
176
|
+
// fetch 本身失败(网络错误等)时,reject pending promise 而非等待超时
|
|
177
|
+
console.error(`[MCP:HTTP] Request failed for id=${request.id}:`, err?.message || err);
|
|
178
|
+
this.handleResponse({
|
|
179
|
+
jsonrpc: '2.0',
|
|
180
|
+
id: request.id,
|
|
181
|
+
error: { code: -32000, message: err?.message || 'Network request failed' },
|
|
182
|
+
});
|
|
156
183
|
});
|
|
157
184
|
}
|
|
158
|
-
/**
|
|
185
|
+
/**
|
|
186
|
+
* 解析 SSE 文本块中的 JSON-RPC 响应。
|
|
187
|
+
*
|
|
188
|
+
* 遵循 SSE 规范:同一事件内多个连续 `data:` 行需用 `\n` 拼接为一个完整字符串,
|
|
189
|
+
* 空行(事件分隔符)触发 flush 并尝试 JSON.parse。
|
|
190
|
+
* 旧实现逐行独立 parse 导致多行 JSON 解析失败,是 tools/list 返回空的根本原因。
|
|
191
|
+
*/
|
|
159
192
|
parseSSE(text) {
|
|
160
|
-
// 支持 \r\n 和 \n 行分隔符
|
|
161
193
|
const lines = text.replace(/\r\n/g, '\n').split('\n');
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
// 非 JSON data 忽略
|
|
194
|
+
let dataLines = [];
|
|
195
|
+
const flush = () => {
|
|
196
|
+
if (!dataLines.length)
|
|
197
|
+
return;
|
|
198
|
+
const raw = dataLines.join('\n').trim();
|
|
199
|
+
dataLines = [];
|
|
200
|
+
if (!raw)
|
|
201
|
+
return;
|
|
202
|
+
try {
|
|
203
|
+
const data = JSON.parse(raw);
|
|
204
|
+
if (data.id !== undefined && data.id !== 0) {
|
|
205
|
+
this.handleResponse(data);
|
|
175
206
|
}
|
|
176
207
|
}
|
|
208
|
+
catch {
|
|
209
|
+
// 非 JSON data 忽略
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
for (const line of lines) {
|
|
213
|
+
if (!line.trim()) {
|
|
214
|
+
// 空行 = 事件边界,触发 flush
|
|
215
|
+
flush();
|
|
216
|
+
}
|
|
217
|
+
else if (line.startsWith('data:')) {
|
|
218
|
+
dataLines.push(line.slice(5).trim());
|
|
219
|
+
}
|
|
220
|
+
// 忽略 event: / id: / retry: 等其他 SSE 字段
|
|
177
221
|
}
|
|
222
|
+
// 处理末尾未以空行结束的最后一个事件
|
|
223
|
+
flush();
|
|
178
224
|
}
|
|
179
225
|
headersToObject(headers) {
|
|
180
226
|
const result = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/mcp/http-client.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,yCAAyC;AACzC,+DAA+D;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAuB,MAAM,mBAAmB,CAAC;AAC7G,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEzF,MAAM,OAAO,aAAc,SAAQ,aAAa;IACtC,QAAQ,GAAG,EAAE,CAAC;IACd,SAAS,CAAU;IACnB,eAAe,CAAkB;IACzC,qDAAqD;IAC7C,eAAe,CAA0B;IACjD,cAAc;IACN,UAAU,CAAkD;IAC1D,KAAK,CAAC,SAAS,CAAC,MAAuB;QAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,CAAC,SAAS,iDAAiD,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,4BAA4B,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAC/E,IAAI,CAAC,eAAe,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,CAAC;IAES,YAAY;QACpB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;IACnC,CAAC;IAED,+EAA+E;IACvE,gBAAgB,CAAC,IAA8B;QACrD,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAChC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAC9C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACrD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,QAAQ;gBACX,OAAO,EAAE,aAAa,EAAE,UAAU,QAAQ,EAAE,EAAE,CAAC;YACjD,KAAK,OAAO;gBACV,gCAAgC;gBAChC,OAAO,EAAE,aAAa,EAAE,SAAS,QAAQ,EAAE,EAAE,CAAC;YAChD,KAAK,QAAQ;gBACX,OAAO,EAAE,CAAC,IAAI,IAAI,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC;YAC7C,KAAK,QAAQ;gBACX,OAAO,EAAE,CAAC,IAAI,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC;YACjD;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/mcp/http-client.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cicctencent/agent-core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.104",
|
|
4
4
|
"description": "Core engine for AI agent — LLM orchestration, tool execution, MCP, skill routing, security, and memory pipeline.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|