indusagi 0.12.13 → 0.12.15

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 (142) hide show
  1. package/dist/agent/tools/registry.d.ts +1 -1
  2. package/dist/agent/tools/registry.d.ts.map +1 -1
  3. package/dist/agent/types.d.ts +1 -0
  4. package/dist/agent/types.d.ts.map +1 -1
  5. package/dist/agent/types.js.map +1 -1
  6. package/dist/ai/models.generated.d.ts +621 -53
  7. package/dist/ai/models.generated.d.ts.map +1 -1
  8. package/dist/ai/models.generated.js +548 -0
  9. package/dist/ai/models.generated.js.map +1 -1
  10. package/dist/index.d.ts +1 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +1 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/mcp/client-pool.d.ts +106 -0
  15. package/dist/mcp/client-pool.d.ts.map +1 -0
  16. package/dist/mcp/client-pool.js +233 -0
  17. package/dist/mcp/client-pool.js.map +1 -0
  18. package/dist/mcp/client.d.ts +158 -0
  19. package/dist/mcp/client.d.ts.map +1 -0
  20. package/dist/mcp/client.js +586 -0
  21. package/dist/mcp/client.js.map +1 -0
  22. package/dist/mcp/config.d.ts +61 -0
  23. package/dist/mcp/config.d.ts.map +1 -0
  24. package/dist/mcp/config.js +250 -0
  25. package/dist/mcp/config.js.map +1 -0
  26. package/dist/mcp/errors.d.ts +104 -0
  27. package/dist/mcp/errors.d.ts.map +1 -0
  28. package/dist/mcp/errors.js +138 -0
  29. package/dist/mcp/errors.js.map +1 -0
  30. package/dist/mcp/index.d.ts +56 -0
  31. package/dist/mcp/index.d.ts.map +1 -0
  32. package/dist/mcp/index.js +83 -0
  33. package/dist/mcp/index.js.map +1 -0
  34. package/dist/mcp/schema-converter.d.ts +68 -0
  35. package/dist/mcp/schema-converter.d.ts.map +1 -0
  36. package/dist/mcp/schema-converter.js +230 -0
  37. package/dist/mcp/schema-converter.js.map +1 -0
  38. package/dist/mcp/server.d.ts +111 -0
  39. package/dist/mcp/server.d.ts.map +1 -0
  40. package/dist/mcp/server.js +300 -0
  41. package/dist/mcp/server.js.map +1 -0
  42. package/dist/mcp/tool-factory.d.ts +63 -0
  43. package/dist/mcp/tool-factory.d.ts.map +1 -0
  44. package/dist/mcp/tool-factory.js +228 -0
  45. package/dist/mcp/tool-factory.js.map +1 -0
  46. package/dist/mcp/types.d.ts +289 -0
  47. package/dist/mcp/types.d.ts.map +1 -0
  48. package/dist/mcp/types.js +8 -0
  49. package/dist/mcp/types.js.map +1 -0
  50. package/dist/mcp.d.ts +6 -0
  51. package/dist/mcp.d.ts.map +1 -0
  52. package/dist/mcp.js +6 -0
  53. package/dist/mcp.js.map +1 -0
  54. package/dist/memory/embedder/base.d.ts +41 -0
  55. package/dist/memory/embedder/base.d.ts.map +1 -0
  56. package/dist/memory/embedder/base.js +10 -0
  57. package/dist/memory/embedder/base.js.map +1 -0
  58. package/dist/memory/embedder/index.d.ts +8 -0
  59. package/dist/memory/embedder/index.d.ts.map +1 -0
  60. package/dist/memory/embedder/index.js +6 -0
  61. package/dist/memory/embedder/index.js.map +1 -0
  62. package/dist/memory/embedder/openai.d.ts +35 -0
  63. package/dist/memory/embedder/openai.d.ts.map +1 -0
  64. package/dist/memory/embedder/openai.js +103 -0
  65. package/dist/memory/embedder/openai.js.map +1 -0
  66. package/dist/memory/index.d.ts +33 -0
  67. package/dist/memory/index.d.ts.map +1 -0
  68. package/dist/memory/index.js +31 -0
  69. package/dist/memory/index.js.map +1 -0
  70. package/dist/memory/memory.d.ts +126 -0
  71. package/dist/memory/memory.d.ts.map +1 -0
  72. package/dist/memory/memory.js +280 -0
  73. package/dist/memory/memory.js.map +1 -0
  74. package/dist/memory/processors/base.d.ts +42 -0
  75. package/dist/memory/processors/base.d.ts.map +1 -0
  76. package/dist/memory/processors/base.js +6 -0
  77. package/dist/memory/processors/base.js.map +1 -0
  78. package/dist/memory/processors/index.d.ts +16 -0
  79. package/dist/memory/processors/index.d.ts.map +1 -0
  80. package/dist/memory/processors/index.js +18 -0
  81. package/dist/memory/processors/index.js.map +1 -0
  82. package/dist/memory/processors/message-history.d.ts +35 -0
  83. package/dist/memory/processors/message-history.d.ts.map +1 -0
  84. package/dist/memory/processors/message-history.js +51 -0
  85. package/dist/memory/processors/message-history.js.map +1 -0
  86. package/dist/memory/processors/observational-memory/index.d.ts +82 -0
  87. package/dist/memory/processors/observational-memory/index.d.ts.map +1 -0
  88. package/dist/memory/processors/observational-memory/index.js +234 -0
  89. package/dist/memory/processors/observational-memory/index.js.map +1 -0
  90. package/dist/memory/processors/observational-memory/observer-agent.d.ts +64 -0
  91. package/dist/memory/processors/observational-memory/observer-agent.d.ts.map +1 -0
  92. package/dist/memory/processors/observational-memory/observer-agent.js +362 -0
  93. package/dist/memory/processors/observational-memory/observer-agent.js.map +1 -0
  94. package/dist/memory/processors/observational-memory/reflector-agent.d.ts +38 -0
  95. package/dist/memory/processors/observational-memory/reflector-agent.d.ts.map +1 -0
  96. package/dist/memory/processors/observational-memory/reflector-agent.js +213 -0
  97. package/dist/memory/processors/observational-memory/reflector-agent.js.map +1 -0
  98. package/dist/memory/processors/observational-memory/token-counter.d.ts +35 -0
  99. package/dist/memory/processors/observational-memory/token-counter.d.ts.map +1 -0
  100. package/dist/memory/processors/observational-memory/token-counter.js +90 -0
  101. package/dist/memory/processors/observational-memory/token-counter.js.map +1 -0
  102. package/dist/memory/processors/semantic-recall.d.ts +55 -0
  103. package/dist/memory/processors/semantic-recall.d.ts.map +1 -0
  104. package/dist/memory/processors/semantic-recall.js +143 -0
  105. package/dist/memory/processors/semantic-recall.js.map +1 -0
  106. package/dist/memory/processors/working-memory.d.ts +41 -0
  107. package/dist/memory/processors/working-memory.d.ts.map +1 -0
  108. package/dist/memory/processors/working-memory.js +82 -0
  109. package/dist/memory/processors/working-memory.js.map +1 -0
  110. package/dist/memory/storage/base.d.ts +288 -0
  111. package/dist/memory/storage/base.d.ts.map +1 -0
  112. package/dist/memory/storage/base.js +211 -0
  113. package/dist/memory/storage/base.js.map +1 -0
  114. package/dist/memory/storage/index.d.ts +9 -0
  115. package/dist/memory/storage/index.d.ts.map +1 -0
  116. package/dist/memory/storage/index.js +7 -0
  117. package/dist/memory/storage/index.js.map +1 -0
  118. package/dist/memory/storage/inmemory.d.ts +93 -0
  119. package/dist/memory/storage/inmemory.d.ts.map +1 -0
  120. package/dist/memory/storage/inmemory.js +646 -0
  121. package/dist/memory/storage/inmemory.js.map +1 -0
  122. package/dist/memory/tools/working-memory.d.ts +100 -0
  123. package/dist/memory/tools/working-memory.d.ts.map +1 -0
  124. package/dist/memory/tools/working-memory.js +237 -0
  125. package/dist/memory/tools/working-memory.js.map +1 -0
  126. package/dist/memory/types.d.ts +386 -0
  127. package/dist/memory/types.d.ts.map +1 -0
  128. package/dist/memory/types.js +58 -0
  129. package/dist/memory/types.js.map +1 -0
  130. package/dist/memory/vector/base.d.ts +145 -0
  131. package/dist/memory/vector/base.d.ts.map +1 -0
  132. package/dist/memory/vector/base.js +83 -0
  133. package/dist/memory/vector/base.js.map +1 -0
  134. package/dist/memory/vector/index.d.ts +8 -0
  135. package/dist/memory/vector/index.d.ts.map +1 -0
  136. package/dist/memory/vector/index.js +7 -0
  137. package/dist/memory/vector/index.js.map +1 -0
  138. package/dist/memory/vector/inmemory.d.ts +47 -0
  139. package/dist/memory/vector/inmemory.d.ts.map +1 -0
  140. package/dist/memory/vector/inmemory.js +234 -0
  141. package/dist/memory/vector/inmemory.js.map +1 -0
  142. package/package.json +32 -2
@@ -0,0 +1,586 @@
1
+ /**
2
+ * MCP Client - Single Server Connection
3
+ *
4
+ * Manages connection to one MCP server and provides
5
+ * methods to list/call tools, read resources, etc.
6
+ *
7
+ * Reference: @mastra/mcp packages/mcp/src/client/client.ts InternalMastraMCPClient
8
+ */
9
+ import { spawn } from "child_process";
10
+ import { MCPError, MCPErrorCode } from "./errors.js";
11
+ /** Default request timeout in milliseconds */
12
+ const DEFAULT_REQUEST_TIMEOUT = 60000;
13
+ /** Default server connect timeout in milliseconds (increased for npx downloads) */
14
+ const DEFAULT_CONNECT_TIMEOUT = 30000;
15
+ /**
16
+ * MCP Client - manages connection to a single MCP server.
17
+ *
18
+ * Supports stdio transport (subprocess communication).
19
+ * Provides methods to list tools, call tools, read resources, etc.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const client = new MCPClient({
24
+ * name: "filesystem",
25
+ * config: {
26
+ * command: "npx",
27
+ * args: ["-y", "@modelcontextprotocol/server-filesystem", "."],
28
+ * },
29
+ * });
30
+ *
31
+ * await client.connect();
32
+ * const tools = await client.listTools();
33
+ * const result = await client.callTool("read_file", { path: "./test.txt" });
34
+ * await client.disconnect();
35
+ * ```
36
+ */
37
+ export class MCPClient {
38
+ constructor(options) {
39
+ this.options = options;
40
+ this.buffer = "";
41
+ this.messageId = 0;
42
+ this.pendingRequests = new Map();
43
+ this.isConnected = false;
44
+ this.connectionPromise = null;
45
+ this.serverName = options.name;
46
+ this.config = options.config;
47
+ this.timeout = options.timeout ?? DEFAULT_REQUEST_TIMEOUT;
48
+ this.logHandler = options.logger;
49
+ this.enableServerLogs = options.enableServerLogs ?? true;
50
+ this.enableProgressTracking = options.enableProgressTracking ?? false;
51
+ this._roots = options.roots ?? [];
52
+ }
53
+ // ========================================================================
54
+ // Connection Lifecycle
55
+ // ========================================================================
56
+ /**
57
+ * Connect to the MCP server.
58
+ * Safe to call multiple times - returns existing connection if already connected.
59
+ */
60
+ async connect() {
61
+ if (this.isConnected)
62
+ return;
63
+ if (this.connectionPromise) {
64
+ return this.connectionPromise;
65
+ }
66
+ this.connectionPromise = this.doConnect();
67
+ try {
68
+ await this.connectionPromise;
69
+ }
70
+ finally {
71
+ this.connectionPromise = null;
72
+ }
73
+ }
74
+ async doConnect() {
75
+ if ("command" in this.config) {
76
+ await this.connectStdio(this.config);
77
+ }
78
+ else if ("url" in this.config) {
79
+ await this.connectHttp(this.config);
80
+ }
81
+ else {
82
+ throw new MCPError("Server configuration must include either a command or a url", MCPErrorCode.CONFIG_ERROR, undefined, { serverName: this.serverName });
83
+ }
84
+ // Send initialize request
85
+ const initResult = await this.sendRequest("initialize", {
86
+ protocolVersion: "2024-11-05",
87
+ capabilities: {
88
+ ...(this._roots.length > 0 ? { roots: { listChanged: true } } : {}),
89
+ elicitation: {},
90
+ },
91
+ clientInfo: {
92
+ name: "new_indusagi",
93
+ version: "1.0.0",
94
+ },
95
+ });
96
+ this.serverCapabilities = initResult.capabilities;
97
+ this.isConnected = true;
98
+ // Send initialized notification
99
+ await this.sendNotification("notifications/initialized", {});
100
+ this.log("info", `Connected to MCP server`);
101
+ }
102
+ async connectHttp(config) {
103
+ this.log("debug", `Starting HTTP transport: ${config.url.toString()}`);
104
+ // For HTTP, we just verify we can reach the server
105
+ // The actual connection happens per-request
106
+ this.isConnected = true;
107
+ }
108
+ async connectStdio(config) {
109
+ return new Promise((resolve, reject) => {
110
+ this.log("debug", `Starting stdio transport: ${config.command} ${(config.args ?? []).join(" ")}`);
111
+ this.process = spawn(config.command, config.args ?? [], {
112
+ env: { ...process.env, ...config.env },
113
+ cwd: config.cwd,
114
+ stdio: ["pipe", "pipe", "pipe"],
115
+ });
116
+ this.process.stdout?.on("data", (data) => {
117
+ this.buffer += data.toString("utf-8");
118
+ this.processBuffer();
119
+ });
120
+ this.process.stderr?.on("data", (data) => {
121
+ const message = data.toString("utf-8").trim();
122
+ if (message) {
123
+ this.log("debug", `[stderr] ${message}`);
124
+ }
125
+ });
126
+ this.process.on("error", (error) => {
127
+ const mcpError = new MCPError(`Failed to spawn MCP server: ${error.message}`, MCPErrorCode.CONNECTION_FAILED, { error: error.message }, { serverName: this.serverName, cause: error });
128
+ reject(mcpError);
129
+ });
130
+ this.process.on("close", (code) => {
131
+ this.isConnected = false;
132
+ if (code !== 0 && code !== null) {
133
+ this.log("warning", `Process exited with code ${code}`);
134
+ }
135
+ // Reject all pending requests
136
+ for (const [id, { reject: reqReject, timeout }] of this.pendingRequests) {
137
+ clearTimeout(timeout);
138
+ reqReject(new MCPError("Connection closed", MCPErrorCode.NOT_CONNECTED));
139
+ }
140
+ this.pendingRequests.clear();
141
+ });
142
+ // Give the process time to start up (especially for npx which may need to download)
143
+ setTimeout(resolve, 500);
144
+ });
145
+ }
146
+ /**
147
+ * Disconnect from the MCP server.
148
+ */
149
+ async disconnect() {
150
+ // For HTTP transport, just mark as disconnected
151
+ if ("url" in this.config) {
152
+ this.isConnected = false;
153
+ this.log("debug", "Disconnected from HTTP MCP server");
154
+ return;
155
+ }
156
+ // Stdio transport
157
+ if (!this.process) {
158
+ this.log("debug", "Disconnect called but no process was running");
159
+ return;
160
+ }
161
+ this.log("debug", "Disconnecting from MCP server");
162
+ try {
163
+ // Kill the process
164
+ this.process.kill();
165
+ this.process = undefined;
166
+ this.isConnected = false;
167
+ // Reject all pending requests
168
+ for (const [id, { reject, timeout }] of this.pendingRequests) {
169
+ clearTimeout(timeout);
170
+ reject(new MCPError("Connection closed", MCPErrorCode.NOT_CONNECTED));
171
+ }
172
+ this.pendingRequests.clear();
173
+ this.log("debug", "Successfully disconnected");
174
+ }
175
+ catch (error) {
176
+ this.log("error", `Error during disconnect: ${error}`);
177
+ throw error;
178
+ }
179
+ }
180
+ /**
181
+ * Whether the client is connected.
182
+ */
183
+ get connected() {
184
+ return this.isConnected;
185
+ }
186
+ // ========================================================================
187
+ // Tool Operations
188
+ // ========================================================================
189
+ /**
190
+ * List all tools available from the server.
191
+ */
192
+ async listTools() {
193
+ this.ensureConnected();
194
+ const result = await this.sendRequest("tools/list", {});
195
+ return result.tools;
196
+ }
197
+ /**
198
+ * Call a tool on the server.
199
+ */
200
+ async callTool(name, args) {
201
+ this.ensureConnected();
202
+ this.log("debug", `Calling tool: ${name}`);
203
+ try {
204
+ const result = await this.sendRequest("tools/call", {
205
+ name,
206
+ arguments: args,
207
+ });
208
+ this.log("debug", `Tool ${name} executed successfully`);
209
+ return result;
210
+ }
211
+ catch (error) {
212
+ this.log("error", `Tool ${name} failed: ${error}`);
213
+ throw error;
214
+ }
215
+ }
216
+ // ========================================================================
217
+ // Resource Operations
218
+ // ========================================================================
219
+ /**
220
+ * List all resources available from the server.
221
+ */
222
+ async listResources() {
223
+ this.ensureConnected();
224
+ if (!this.serverCapabilities?.resources) {
225
+ return [];
226
+ }
227
+ const result = await this.sendRequest("resources/list", {});
228
+ return result.resources;
229
+ }
230
+ /**
231
+ * Read a resource from the server.
232
+ */
233
+ async readResource(uri) {
234
+ this.ensureConnected();
235
+ return await this.sendRequest("resources/read", { uri });
236
+ }
237
+ /**
238
+ * Subscribe to resource updates.
239
+ */
240
+ async subscribeResource(uri) {
241
+ this.ensureConnected();
242
+ await this.sendRequest("resources/subscribe", { uri });
243
+ }
244
+ /**
245
+ * Unsubscribe from resource updates.
246
+ */
247
+ async unsubscribeResource(uri) {
248
+ this.ensureConnected();
249
+ await this.sendRequest("resources/unsubscribe", { uri });
250
+ }
251
+ // ========================================================================
252
+ // Prompt Operations
253
+ // ========================================================================
254
+ /**
255
+ * List all prompts available from the server.
256
+ */
257
+ async listPrompts() {
258
+ this.ensureConnected();
259
+ if (!this.serverCapabilities?.prompts) {
260
+ return [];
261
+ }
262
+ const result = await this.sendRequest("prompts/list", {});
263
+ return result.prompts;
264
+ }
265
+ /**
266
+ * Get a prompt from the server.
267
+ */
268
+ async getPrompt(name, args) {
269
+ this.ensureConnected();
270
+ return await this.sendRequest("prompts/get", { name, arguments: args });
271
+ }
272
+ // ========================================================================
273
+ // Roots Operations
274
+ // ========================================================================
275
+ /**
276
+ * Get the configured roots.
277
+ */
278
+ get roots() {
279
+ return [...this._roots];
280
+ }
281
+ /**
282
+ * Update the roots and notify the server.
283
+ */
284
+ async setRoots(roots) {
285
+ this.log("debug", `Updating roots to ${roots.length} entries`);
286
+ this._roots = [...roots];
287
+ if (this.isConnected) {
288
+ await this.sendNotification("notifications/roots/list_changed", {});
289
+ }
290
+ }
291
+ // ========================================================================
292
+ // Handler Registration
293
+ // ========================================================================
294
+ /**
295
+ * Set a handler for resource updated notifications.
296
+ */
297
+ setResourceUpdatedHandler(handler) {
298
+ // This would be implemented with notification handlers
299
+ // For now, this is a placeholder
300
+ this.log("debug", "Resource updated handler registered");
301
+ }
302
+ /**
303
+ * Set a handler for resource list changed notifications.
304
+ */
305
+ setResourceListChangedHandler(handler) {
306
+ this.log("debug", "Resource list changed handler registered");
307
+ }
308
+ /**
309
+ * Set a handler for prompt list changed notifications.
310
+ */
311
+ setPromptListChangedHandler(handler) {
312
+ this.log("debug", "Prompt list changed handler registered");
313
+ }
314
+ /**
315
+ * Set a handler for elicitation requests.
316
+ */
317
+ setElicitationHandler(handler) {
318
+ this.log("debug", "Elicitation handler registered");
319
+ }
320
+ /**
321
+ * Set a handler for progress notifications.
322
+ */
323
+ setProgressHandler(handler) {
324
+ this.log("debug", "Progress handler registered");
325
+ }
326
+ // ========================================================================
327
+ // Private Methods
328
+ // ========================================================================
329
+ ensureConnected() {
330
+ // For HTTP transport, we don't have a process
331
+ const isHttpTransport = "url" in this.config;
332
+ if (!this.isConnected || (!isHttpTransport && !this.process)) {
333
+ throw new MCPError("Not connected to MCP server", MCPErrorCode.NOT_CONNECTED, undefined, { serverName: this.serverName });
334
+ }
335
+ }
336
+ async sendRequest(method, params) {
337
+ // Allow requests during initialization (before isConnected is set)
338
+ // Only check connection for non-initialize requests
339
+ if (method !== "initialize") {
340
+ this.ensureConnected();
341
+ }
342
+ // Check if using HTTP transport
343
+ if ("url" in this.config) {
344
+ return this.sendHttpRequest(method, params);
345
+ }
346
+ // Stdio transport
347
+ if (!this.process) {
348
+ throw new MCPError("Not connected to MCP server", MCPErrorCode.NOT_CONNECTED, undefined, { serverName: this.serverName });
349
+ }
350
+ return new Promise((resolve, reject) => {
351
+ const id = ++this.messageId;
352
+ const timeout = setTimeout(() => {
353
+ this.pendingRequests.delete(id);
354
+ reject(new MCPError(`Request timeout: ${method}`, MCPErrorCode.TIMEOUT, { method, id }, { serverName: this.serverName }));
355
+ }, this.timeout);
356
+ this.pendingRequests.set(id, {
357
+ resolve: resolve,
358
+ reject,
359
+ timeout,
360
+ });
361
+ const message = {
362
+ jsonrpc: "2.0",
363
+ id,
364
+ method,
365
+ params,
366
+ };
367
+ this.log("debug", `Sending request: ${method} (id: ${id})`);
368
+ try {
369
+ const messageStr = JSON.stringify(message) + "\n";
370
+ this.process.stdin.write(messageStr);
371
+ }
372
+ catch (error) {
373
+ this.pendingRequests.delete(id);
374
+ clearTimeout(timeout);
375
+ reject(new MCPError(`Failed to send request: ${error}`, MCPErrorCode.TRANSPORT_ERROR, { error: String(error) }, { serverName: this.serverName }));
376
+ }
377
+ });
378
+ }
379
+ async sendHttpRequest(method, params) {
380
+ const config = this.config;
381
+ const id = ++this.messageId;
382
+ const message = {
383
+ jsonrpc: "2.0",
384
+ id,
385
+ method,
386
+ params,
387
+ };
388
+ this.log("debug", `Sending HTTP request: ${method} (id: ${id})`);
389
+ const controller = new AbortController();
390
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
391
+ try {
392
+ const response = await fetch(config.url.toString(), {
393
+ method: "POST",
394
+ headers: {
395
+ "Content-Type": "application/json",
396
+ "Accept": "application/json, text/event-stream",
397
+ ...config.headers,
398
+ },
399
+ body: JSON.stringify(message),
400
+ signal: controller.signal,
401
+ });
402
+ clearTimeout(timeoutId);
403
+ if (!response.ok) {
404
+ // Try to parse error body
405
+ const errorText = await response.text();
406
+ let errorMessage = `HTTP error: ${response.status} ${response.statusText}`;
407
+ try {
408
+ const errorJson = JSON.parse(errorText);
409
+ if (errorJson.error?.message) {
410
+ errorMessage = errorJson.error.message;
411
+ }
412
+ }
413
+ catch {
414
+ // Not JSON, use the text
415
+ if (errorText) {
416
+ errorMessage = errorText;
417
+ }
418
+ }
419
+ throw new MCPError(errorMessage, MCPErrorCode.TRANSPORT_ERROR, { status: response.status, body: errorText }, { serverName: this.serverName });
420
+ }
421
+ // Parse response - could be JSON or SSE format
422
+ const responseText = await response.text();
423
+ let result;
424
+ // Check if SSE format (starts with "event:" or "data:")
425
+ if (responseText.startsWith("event:") || responseText.startsWith("data:")) {
426
+ // Parse SSE format
427
+ const lines = responseText.split("\n");
428
+ let dataLine = "";
429
+ for (const line of lines) {
430
+ if (line.startsWith("data:")) {
431
+ dataLine = line.slice(5).trim();
432
+ break;
433
+ }
434
+ }
435
+ if (dataLine) {
436
+ result = JSON.parse(dataLine);
437
+ }
438
+ else {
439
+ throw new MCPError("Empty SSE response", MCPErrorCode.TRANSPORT_ERROR, { response: responseText }, { serverName: this.serverName });
440
+ }
441
+ }
442
+ else {
443
+ // Plain JSON
444
+ result = JSON.parse(responseText);
445
+ }
446
+ if (result.error) {
447
+ throw new MCPError(result.error.message || "MCP error", MCPErrorCode.SERVER_ERROR, result.error, { serverName: this.serverName });
448
+ }
449
+ this.log("debug", `HTTP request ${id} succeeded`);
450
+ return result.result;
451
+ }
452
+ catch (error) {
453
+ clearTimeout(timeoutId);
454
+ if (error instanceof MCPError)
455
+ throw error;
456
+ if (error instanceof Error && error.name === "AbortError") {
457
+ throw new MCPError(`Request timeout: ${method}`, MCPErrorCode.TIMEOUT, { method, id }, { serverName: this.serverName });
458
+ }
459
+ throw new MCPError(`HTTP request failed: ${error}`, MCPErrorCode.TRANSPORT_ERROR, { error: String(error) }, { serverName: this.serverName });
460
+ }
461
+ }
462
+ async sendNotification(method, params) {
463
+ const message = {
464
+ jsonrpc: "2.0",
465
+ method,
466
+ params,
467
+ };
468
+ this.log("debug", `Sending notification: ${method}`);
469
+ // For HTTP transport, notifications are sent as POST requests without expecting a response
470
+ if ("url" in this.config) {
471
+ const config = this.config;
472
+ try {
473
+ await fetch(config.url.toString(), {
474
+ method: "POST",
475
+ headers: {
476
+ "Content-Type": "application/json",
477
+ ...config.headers,
478
+ },
479
+ body: JSON.stringify(message),
480
+ });
481
+ }
482
+ catch (error) {
483
+ this.log("error", `Failed to send HTTP notification: ${error}`);
484
+ }
485
+ return;
486
+ }
487
+ // Stdio transport
488
+ if (!this.process) {
489
+ throw new MCPError("Not connected to MCP server", MCPErrorCode.NOT_CONNECTED, undefined, { serverName: this.serverName });
490
+ }
491
+ try {
492
+ const messageStr = JSON.stringify(message) + "\n";
493
+ this.process.stdin.write(messageStr);
494
+ }
495
+ catch (error) {
496
+ this.log("error", `Failed to send notification: ${error}`);
497
+ }
498
+ }
499
+ processBuffer() {
500
+ const lines = this.buffer.split("\n");
501
+ this.buffer = lines.pop() || ""; // Keep incomplete line
502
+ for (const line of lines) {
503
+ const trimmed = line.trim();
504
+ if (!trimmed)
505
+ continue;
506
+ try {
507
+ const message = JSON.parse(trimmed);
508
+ this.handleMessage(message);
509
+ }
510
+ catch (error) {
511
+ this.log("warning", `Failed to parse message: ${trimmed}`);
512
+ }
513
+ }
514
+ }
515
+ handleMessage(message) {
516
+ // Handle responses to our requests
517
+ if (message.id !== undefined && this.pendingRequests.has(message.id)) {
518
+ const { resolve, reject, timeout } = this.pendingRequests.get(message.id);
519
+ this.pendingRequests.delete(message.id);
520
+ clearTimeout(timeout);
521
+ if (message.error) {
522
+ this.log("debug", `Request ${message.id} failed: ${message.error.message}`);
523
+ reject(new MCPError(message.error.message || "Unknown error", MCPErrorCode.SERVER_ERROR, message.error, { serverName: this.serverName }));
524
+ }
525
+ else {
526
+ this.log("debug", `Request ${message.id} succeeded`);
527
+ resolve(message.result);
528
+ }
529
+ }
530
+ // Handle notifications (server-initiated messages)
531
+ if (message.method) {
532
+ this.handleNotification(message.method, message.params);
533
+ }
534
+ }
535
+ handleNotification(method, params) {
536
+ this.log("debug", `Received notification: ${method}`);
537
+ switch (method) {
538
+ case "notifications/message":
539
+ // Server log message
540
+ if (this.enableServerLogs && params) {
541
+ const { level, ...rest } = params;
542
+ this.log(level || "info", "[SERVER]", rest);
543
+ }
544
+ break;
545
+ case "notifications/progress":
546
+ // Progress notification
547
+ this.log("debug", `Progress: ${JSON.stringify(params)}`);
548
+ break;
549
+ case "notifications/resources/updated":
550
+ // Resource updated
551
+ this.log("debug", `Resource updated: ${JSON.stringify(params)}`);
552
+ break;
553
+ case "notifications/resources/list_changed":
554
+ // Resource list changed
555
+ this.log("debug", "Resource list changed");
556
+ break;
557
+ case "notifications/prompts/list_changed":
558
+ // Prompt list changed
559
+ this.log("debug", "Prompt list changed");
560
+ break;
561
+ }
562
+ }
563
+ log(level, message, details) {
564
+ const msg = `[${this.serverName}] ${message}`;
565
+ if (this.logHandler) {
566
+ this.logHandler({
567
+ level,
568
+ message: msg,
569
+ timestamp: new Date(),
570
+ serverName: this.serverName,
571
+ details,
572
+ });
573
+ }
574
+ else {
575
+ // Default console logging
576
+ const prefix = `[MCP:${level.toUpperCase()}]`;
577
+ if (details) {
578
+ console.log(prefix, msg, details);
579
+ }
580
+ else {
581
+ console.log(prefix, msg);
582
+ }
583
+ }
584
+ }
585
+ }
586
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * MCP Configuration Loading
3
+ *
4
+ * Loads MCP server configurations from XDG-compliant paths:
5
+ * - Project: ./.indusagi/mcp.json
6
+ * - User: ~/.config/indusagi/mcp.json (XDG)
7
+ * - Legacy: ~/.indusagi/agent/mcp.json
8
+ *
9
+ * Reference: @mastra/mcp configuration patterns
10
+ */
11
+ import type { MCPConnectionOptions, MCPConfigFile } from "./types.js";
12
+ /**
13
+ * Load MCP configuration from all sources.
14
+ *
15
+ * If a specific file path is provided, loads from that file directly.
16
+ * Otherwise merges configurations from:
17
+ * 1. Project-level config: ./.indusagi/mcp.json
18
+ * 2. User-level (XDG): ~/.config/indusagi/mcp.json
19
+ * 3. Legacy: ~/.indusagi/agent/mcp.json or ~/.indusagi/agent/mcp-servers.json
20
+ *
21
+ * @param configPathOrCwd - Either a specific config file path, or a working directory
22
+ * @returns Array of MCP connection options
23
+ */
24
+ export declare function loadMCPConfig(configPathOrCwd?: string): MCPConnectionOptions[];
25
+ /**
26
+ * Get the path where user config should be saved.
27
+ */
28
+ export declare function getUserConfigPath(): string;
29
+ /**
30
+ * Get the path where project config should be saved.
31
+ */
32
+ export declare function getProjectConfigPath(cwd?: string): string;
33
+ /**
34
+ * Ensure the user config directory exists.
35
+ */
36
+ export declare function ensureUserConfigDir(): string;
37
+ /**
38
+ * Ensure the project config directory exists.
39
+ */
40
+ export declare function ensureProjectConfigDir(cwd?: string): string;
41
+ /**
42
+ * Save configuration to a file.
43
+ */
44
+ export declare function saveConfig(path: string, config: MCPConfigFile): void;
45
+ /**
46
+ * Save user configuration.
47
+ */
48
+ export declare function saveUserConfig(config: MCPConfigFile): void;
49
+ /**
50
+ * Save project configuration.
51
+ */
52
+ export declare function saveProjectConfig(config: MCPConfigFile, cwd?: string): void;
53
+ /**
54
+ * Create a default configuration.
55
+ */
56
+ export declare function createDefaultConfig(): MCPConfigFile;
57
+ /**
58
+ * Example configuration for documentation.
59
+ */
60
+ export declare const EXAMPLE_CONFIG: MCPConfigFile;
61
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAmB,aAAa,EAAE,MAAM,YAAY,CAAC;AAGvF;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,eAAe,GAAE,MAAsB,GAAG,oBAAoB,EAAE,CAqE7F;AAoED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAExE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAS5C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAQ1E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAQpE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAE1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,GAAE,MAAsB,GAAG,IAAI,CAE1F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAInD;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,aA0B5B,CAAC"}