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.
- package/dist/agent/tools/registry.d.ts +1 -1
- package/dist/agent/tools/registry.d.ts.map +1 -1
- package/dist/agent/types.d.ts +1 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/ai/models.generated.d.ts +621 -53
- package/dist/ai/models.generated.d.ts.map +1 -1
- package/dist/ai/models.generated.js +548 -0
- package/dist/ai/models.generated.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/client-pool.d.ts +106 -0
- package/dist/mcp/client-pool.d.ts.map +1 -0
- package/dist/mcp/client-pool.js +233 -0
- package/dist/mcp/client-pool.js.map +1 -0
- package/dist/mcp/client.d.ts +158 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +586 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/config.d.ts +61 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +250 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/errors.d.ts +104 -0
- package/dist/mcp/errors.d.ts.map +1 -0
- package/dist/mcp/errors.js +138 -0
- package/dist/mcp/errors.js.map +1 -0
- package/dist/mcp/index.d.ts +56 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +83 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/schema-converter.d.ts +68 -0
- package/dist/mcp/schema-converter.d.ts.map +1 -0
- package/dist/mcp/schema-converter.js +230 -0
- package/dist/mcp/schema-converter.js.map +1 -0
- package/dist/mcp/server.d.ts +111 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +300 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tool-factory.d.ts +63 -0
- package/dist/mcp/tool-factory.d.ts.map +1 -0
- package/dist/mcp/tool-factory.js +228 -0
- package/dist/mcp/tool-factory.js.map +1 -0
- package/dist/mcp/types.d.ts +289 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +8 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/mcp.d.ts +6 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +6 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory/embedder/base.d.ts +41 -0
- package/dist/memory/embedder/base.d.ts.map +1 -0
- package/dist/memory/embedder/base.js +10 -0
- package/dist/memory/embedder/base.js.map +1 -0
- package/dist/memory/embedder/index.d.ts +8 -0
- package/dist/memory/embedder/index.d.ts.map +1 -0
- package/dist/memory/embedder/index.js +6 -0
- package/dist/memory/embedder/index.js.map +1 -0
- package/dist/memory/embedder/openai.d.ts +35 -0
- package/dist/memory/embedder/openai.d.ts.map +1 -0
- package/dist/memory/embedder/openai.js +103 -0
- package/dist/memory/embedder/openai.js.map +1 -0
- package/dist/memory/index.d.ts +33 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +31 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/memory.d.ts +126 -0
- package/dist/memory/memory.d.ts.map +1 -0
- package/dist/memory/memory.js +280 -0
- package/dist/memory/memory.js.map +1 -0
- package/dist/memory/processors/base.d.ts +42 -0
- package/dist/memory/processors/base.d.ts.map +1 -0
- package/dist/memory/processors/base.js +6 -0
- package/dist/memory/processors/base.js.map +1 -0
- package/dist/memory/processors/index.d.ts +16 -0
- package/dist/memory/processors/index.d.ts.map +1 -0
- package/dist/memory/processors/index.js +18 -0
- package/dist/memory/processors/index.js.map +1 -0
- package/dist/memory/processors/message-history.d.ts +35 -0
- package/dist/memory/processors/message-history.d.ts.map +1 -0
- package/dist/memory/processors/message-history.js +51 -0
- package/dist/memory/processors/message-history.js.map +1 -0
- package/dist/memory/processors/observational-memory/index.d.ts +82 -0
- package/dist/memory/processors/observational-memory/index.d.ts.map +1 -0
- package/dist/memory/processors/observational-memory/index.js +234 -0
- package/dist/memory/processors/observational-memory/index.js.map +1 -0
- package/dist/memory/processors/observational-memory/observer-agent.d.ts +64 -0
- package/dist/memory/processors/observational-memory/observer-agent.d.ts.map +1 -0
- package/dist/memory/processors/observational-memory/observer-agent.js +362 -0
- package/dist/memory/processors/observational-memory/observer-agent.js.map +1 -0
- package/dist/memory/processors/observational-memory/reflector-agent.d.ts +38 -0
- package/dist/memory/processors/observational-memory/reflector-agent.d.ts.map +1 -0
- package/dist/memory/processors/observational-memory/reflector-agent.js +213 -0
- package/dist/memory/processors/observational-memory/reflector-agent.js.map +1 -0
- package/dist/memory/processors/observational-memory/token-counter.d.ts +35 -0
- package/dist/memory/processors/observational-memory/token-counter.d.ts.map +1 -0
- package/dist/memory/processors/observational-memory/token-counter.js +90 -0
- package/dist/memory/processors/observational-memory/token-counter.js.map +1 -0
- package/dist/memory/processors/semantic-recall.d.ts +55 -0
- package/dist/memory/processors/semantic-recall.d.ts.map +1 -0
- package/dist/memory/processors/semantic-recall.js +143 -0
- package/dist/memory/processors/semantic-recall.js.map +1 -0
- package/dist/memory/processors/working-memory.d.ts +41 -0
- package/dist/memory/processors/working-memory.d.ts.map +1 -0
- package/dist/memory/processors/working-memory.js +82 -0
- package/dist/memory/processors/working-memory.js.map +1 -0
- package/dist/memory/storage/base.d.ts +288 -0
- package/dist/memory/storage/base.d.ts.map +1 -0
- package/dist/memory/storage/base.js +211 -0
- package/dist/memory/storage/base.js.map +1 -0
- package/dist/memory/storage/index.d.ts +9 -0
- package/dist/memory/storage/index.d.ts.map +1 -0
- package/dist/memory/storage/index.js +7 -0
- package/dist/memory/storage/index.js.map +1 -0
- package/dist/memory/storage/inmemory.d.ts +93 -0
- package/dist/memory/storage/inmemory.d.ts.map +1 -0
- package/dist/memory/storage/inmemory.js +646 -0
- package/dist/memory/storage/inmemory.js.map +1 -0
- package/dist/memory/tools/working-memory.d.ts +100 -0
- package/dist/memory/tools/working-memory.d.ts.map +1 -0
- package/dist/memory/tools/working-memory.js +237 -0
- package/dist/memory/tools/working-memory.js.map +1 -0
- package/dist/memory/types.d.ts +386 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +58 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/memory/vector/base.d.ts +145 -0
- package/dist/memory/vector/base.d.ts.map +1 -0
- package/dist/memory/vector/base.js +83 -0
- package/dist/memory/vector/base.js.map +1 -0
- package/dist/memory/vector/index.d.ts +8 -0
- package/dist/memory/vector/index.d.ts.map +1 -0
- package/dist/memory/vector/index.js +7 -0
- package/dist/memory/vector/index.js.map +1 -0
- package/dist/memory/vector/inmemory.d.ts +47 -0
- package/dist/memory/vector/inmemory.d.ts.map +1 -0
- package/dist/memory/vector/inmemory.js +234 -0
- package/dist/memory/vector/inmemory.js.map +1 -0
- 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"}
|