mcp-use 0.1.0 → 0.1.2
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/examples/add_server_tool.js +19 -5
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/src/agents/mcp_agent.d.ts +16 -1
- package/dist/src/agents/mcp_agent.d.ts.map +1 -1
- package/dist/src/agents/mcp_agent.js +86 -8
- package/dist/src/client.d.ts +2 -0
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/client.js +6 -0
- package/dist/src/connectors/base.d.ts +2 -0
- package/dist/src/connectors/base.d.ts.map +1 -1
- package/dist/src/connectors/http.d.ts +1 -0
- package/dist/src/connectors/http.d.ts.map +1 -1
- package/dist/src/connectors/http.js +6 -0
- package/dist/src/connectors/stdio.d.ts +1 -0
- package/dist/src/connectors/stdio.d.ts.map +1 -1
- package/dist/src/connectors/stdio.js +6 -0
- package/dist/src/connectors/websocket.d.ts +1 -0
- package/dist/src/connectors/websocket.d.ts.map +1 -1
- package/dist/src/connectors/websocket.js +6 -0
- package/dist/src/logging.js +2 -2
- package/dist/src/managers/server_manager.d.ts +3 -1
- package/dist/src/managers/server_manager.d.ts.map +1 -1
- package/dist/src/managers/server_manager.js +10 -4
- package/dist/src/managers/tools/{add_server.d.ts → add_server_from_config.d.ts} +2 -2
- package/dist/src/managers/tools/add_server_from_config.d.ts.map +1 -0
- package/dist/src/managers/tools/{add_server.js → add_server_from_config.js} +3 -3
- package/dist/src/managers/tools/index.d.ts +1 -0
- package/dist/src/managers/tools/index.d.ts.map +1 -1
- package/dist/src/managers/tools/index.js +1 -0
- package/dist/src/telemetry/events.d.ts +35 -0
- package/dist/src/telemetry/events.d.ts.map +1 -0
- package/dist/src/telemetry/events.js +44 -0
- package/dist/src/telemetry/index.d.ts +5 -0
- package/dist/src/telemetry/index.d.ts.map +1 -0
- package/dist/src/telemetry/index.js +8 -0
- package/dist/src/telemetry/telemetry.d.ts +33 -0
- package/dist/src/telemetry/telemetry.d.ts.map +1 -0
- package/dist/src/telemetry/telemetry.js +278 -0
- package/dist/src/telemetry/utils.d.ts +6 -0
- package/dist/src/telemetry/utils.d.ts.map +1 -0
- package/dist/src/telemetry/utils.js +35 -0
- package/package.json +3 -1
- package/dist/src/managers/tools/add_server.d.ts.map +0 -1
@@ -9,6 +9,7 @@ import { config } from 'dotenv';
|
|
9
9
|
import { MCPAgent, MCPClient } from '../index.js';
|
10
10
|
import { LangChainAdapter } from '../src/adapters/langchain_adapter.js';
|
11
11
|
import { ServerManager } from '../src/managers/server_manager.js';
|
12
|
+
import { AddMCPServerFromConfigTool } from '../src/managers/tools/add_server_from_config.js';
|
12
13
|
// Load environment variables from .env file
|
13
14
|
config();
|
14
15
|
async function main() {
|
@@ -16,19 +17,21 @@ async function main() {
|
|
16
17
|
const client = new MCPClient();
|
17
18
|
// The LLM to power the agent
|
18
19
|
const llm = new ChatOpenAI({ model: 'gpt-4o', temperature: 0 });
|
20
|
+
const serverManager = new ServerManager(client, new LangChainAdapter());
|
21
|
+
serverManager.setManagementTools([new AddMCPServerFromConfigTool(serverManager)]);
|
19
22
|
// Create the agent, enabling the ServerManager
|
20
23
|
const agent = new MCPAgent({
|
21
24
|
llm,
|
22
25
|
client,
|
23
26
|
maxSteps: 30,
|
24
|
-
useServerManager: true,
|
25
|
-
serverManagerFactory: client => new ServerManager(client, new LangChainAdapter()),
|
26
27
|
autoInitialize: true,
|
28
|
+
useServerManager: true,
|
29
|
+
serverManagerFactory: () => serverManager,
|
27
30
|
});
|
28
31
|
// Define the server configuration that the agent will be asked to add.
|
29
32
|
const serverConfigA = {
|
30
33
|
command: 'npx',
|
31
|
-
args: ['@playwright/mcp@latest'],
|
34
|
+
args: ['@playwright/mcp@latest', '--headless'],
|
32
35
|
env: {
|
33
36
|
DISPLAY: ':1',
|
34
37
|
},
|
@@ -54,8 +57,19 @@ async function main() {
|
|
54
57
|
\`\`\`
|
55
58
|
and give me a house in the location of the company mcp-use.
|
56
59
|
`;
|
57
|
-
// Run the agent.
|
58
|
-
const
|
60
|
+
// Run the agent. We call `stream()` to get the async generator.
|
61
|
+
const stepIterator = agent.stream(query);
|
62
|
+
let result;
|
63
|
+
while (true) {
|
64
|
+
const { done, value } = await stepIterator.next();
|
65
|
+
if (done) {
|
66
|
+
result = value;
|
67
|
+
break;
|
68
|
+
}
|
69
|
+
// You can inspect the intermediate steps here.
|
70
|
+
console.log('--- Agent Step ---');
|
71
|
+
console.dir(value, { depth: 4 });
|
72
|
+
}
|
59
73
|
console.log(`\n✅ Final Result:\n${result}`);
|
60
74
|
// Clean up the session created by the agent
|
61
75
|
await client.closeAllSessions();
|
package/dist/index.d.ts
CHANGED
@@ -9,5 +9,7 @@ import { Logger, logger } from './src/logging.js';
|
|
9
9
|
import { MCPSession } from './src/session.js';
|
10
10
|
export { BaseAdapter, LangChainAdapter } from './src/adapters/index.js';
|
11
11
|
export { ServerManager } from './src/managers/server_manager.js';
|
12
|
+
export * from './src/managers/tools/index.js';
|
13
|
+
export { setTelemetrySource, Telemetry } from './src/telemetry/index.js';
|
12
14
|
export { BaseConnector, HttpConnector, loadConfigFile, Logger, logger, MCPAgent, MCPClient, MCPSession, StdioConnector, WebSocketConnector };
|
13
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAChE,cAAc,+BAA+B,CAAA;AAG7C,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAExE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAA"}
|
package/dist/index.js
CHANGED
@@ -9,4 +9,7 @@ import { Logger, logger } from './src/logging.js';
|
|
9
9
|
import { MCPSession } from './src/session.js';
|
10
10
|
export { BaseAdapter, LangChainAdapter } from './src/adapters/index.js';
|
11
11
|
export { ServerManager } from './src/managers/server_manager.js';
|
12
|
+
export * from './src/managers/tools/index.js';
|
13
|
+
// Export telemetry utilities
|
14
|
+
export { setTelemetrySource, Telemetry } from './src/telemetry/index.js';
|
12
15
|
export { BaseConnector, HttpConnector, loadConfigFile, Logger, logger, MCPAgent, MCPClient, MCPSession, StdioConnector, WebSocketConnector };
|
@@ -1,10 +1,12 @@
|
|
1
1
|
import type { BaseLanguageModelInterface } from '@langchain/core/language_models/base';
|
2
2
|
import type { BaseMessage } from '@langchain/core/messages';
|
3
|
+
import type { StructuredToolInterface } from '@langchain/core/tools';
|
4
|
+
import type { AgentStep } from 'langchain/agents';
|
3
5
|
import type { MCPClient } from '../client.js';
|
4
6
|
import type { BaseConnector } from '../connectors/base.js';
|
5
|
-
import type { ServerManager } from '../managers/server_manager.js';
|
6
7
|
import { SystemMessage } from '@langchain/core/messages';
|
7
8
|
import { LangChainAdapter } from '../adapters/langchain_adapter.js';
|
9
|
+
import { ServerManager } from '../managers/server_manager.js';
|
8
10
|
export declare class MCPAgent {
|
9
11
|
private llm;
|
10
12
|
private client?;
|
@@ -13,6 +15,7 @@ export declare class MCPAgent {
|
|
13
15
|
private autoInitialize;
|
14
16
|
private memoryEnabled;
|
15
17
|
private disallowedTools;
|
18
|
+
private additionalTools;
|
16
19
|
private useServerManager;
|
17
20
|
private verbose;
|
18
21
|
private systemPrompt?;
|
@@ -26,6 +29,9 @@ export declare class MCPAgent {
|
|
26
29
|
private tools;
|
27
30
|
private adapter;
|
28
31
|
private serverManager;
|
32
|
+
private telemetry;
|
33
|
+
private modelProvider;
|
34
|
+
private modelName;
|
29
35
|
constructor(options: {
|
30
36
|
llm: BaseLanguageModelInterface;
|
31
37
|
client?: MCPClient;
|
@@ -37,6 +43,7 @@ export declare class MCPAgent {
|
|
37
43
|
systemPromptTemplate?: string | null;
|
38
44
|
additionalInstructions?: string | null;
|
39
45
|
disallowedTools?: string[];
|
46
|
+
additionalTools?: StructuredToolInterface[];
|
40
47
|
useServerManager?: boolean;
|
41
48
|
verbose?: boolean;
|
42
49
|
adapter?: LangChainAdapter;
|
@@ -52,7 +59,15 @@ export declare class MCPAgent {
|
|
52
59
|
setSystemMessage(message: string): void;
|
53
60
|
setDisallowedTools(disallowedTools: string[]): void;
|
54
61
|
getDisallowedTools(): string[];
|
62
|
+
private _consumeAndReturn;
|
63
|
+
/**
|
64
|
+
* Runs the agent and returns a promise for the final result.
|
65
|
+
*/
|
55
66
|
run(query: string, maxSteps?: number, manageConnector?: boolean, externalHistory?: BaseMessage[]): Promise<string>;
|
67
|
+
/**
|
68
|
+
* Runs the agent and yields intermediate steps as an async generator.
|
69
|
+
*/
|
70
|
+
stream(query: string, maxSteps?: number, manageConnector?: boolean, externalHistory?: BaseMessage[]): AsyncGenerator<AgentStep, string, void>;
|
56
71
|
close(): Promise<void>;
|
57
72
|
}
|
58
73
|
//# sourceMappingURL=mcp_agent.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mcp_agent.d.ts","sourceRoot":"","sources":["../../../src/agents/mcp_agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAqB,MAAM,sCAAsC,CAAA;AACzG,OAAO,KAAK,EACV,WAAW,EACZ,MAAM,0BAA0B,CAAA;
|
1
|
+
{"version":3,"file":"mcp_agent.d.ts","sourceRoot":"","sources":["../../../src/agents/mcp_agent.ts"],"names":[],"mappings":"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"}
|
@@ -4,6 +4,8 @@ import { ChatPromptTemplate, MessagesPlaceholder, } from '@langchain/core/prompt
|
|
4
4
|
import { AgentExecutor, createToolCallingAgent, } from 'langchain/agents';
|
5
5
|
import { LangChainAdapter } from '../adapters/langchain_adapter.js';
|
6
6
|
import { logger } from '../logging.js';
|
7
|
+
import { ServerManager } from '../managers/server_manager.js';
|
8
|
+
import { extractModelInfo, Telemetry } from '../telemetry/index.js';
|
7
9
|
import { createSystemMessage } from './prompts/system_prompt_builder.js';
|
8
10
|
import { DEFAULT_SYSTEM_PROMPT_TEMPLATE, SERVER_MANAGER_SYSTEM_PROMPT_TEMPLATE } from './prompts/templates.js';
|
9
11
|
export class MCPAgent {
|
@@ -14,6 +16,7 @@ export class MCPAgent {
|
|
14
16
|
autoInitialize;
|
15
17
|
memoryEnabled;
|
16
18
|
disallowedTools;
|
19
|
+
additionalTools;
|
17
20
|
useServerManager;
|
18
21
|
verbose;
|
19
22
|
systemPrompt;
|
@@ -27,6 +30,9 @@ export class MCPAgent {
|
|
27
30
|
tools = [];
|
28
31
|
adapter;
|
29
32
|
serverManager = null;
|
33
|
+
telemetry;
|
34
|
+
modelProvider;
|
35
|
+
modelName;
|
30
36
|
constructor(options) {
|
31
37
|
this.llm = options.llm;
|
32
38
|
this.client = options.client;
|
@@ -38,6 +44,7 @@ export class MCPAgent {
|
|
38
44
|
this.systemPromptTemplateOverride = options.systemPromptTemplate ?? null;
|
39
45
|
this.additionalInstructions = options.additionalInstructions ?? null;
|
40
46
|
this.disallowedTools = options.disallowedTools ?? [];
|
47
|
+
this.additionalTools = options.additionalTools ?? [];
|
41
48
|
this.useServerManager = options.useServerManager ?? false;
|
42
49
|
this.verbose = options.verbose ?? false;
|
43
50
|
if (!this.client && this.connectors.length === 0) {
|
@@ -47,15 +54,19 @@ export class MCPAgent {
|
|
47
54
|
if (!this.client) {
|
48
55
|
throw new Error('\'client\' must be provided when \'useServerManager\' is true.');
|
49
56
|
}
|
50
|
-
|
51
|
-
|
52
|
-
}
|
53
|
-
else {
|
54
|
-
throw new Error('No serverManagerFactory passed to MCPAgent constructor.');
|
55
|
-
}
|
57
|
+
this.adapter = options.adapter ?? new LangChainAdapter(this.disallowedTools);
|
58
|
+
this.serverManager = options.serverManagerFactory?.(this.client) ?? new ServerManager(this.client, this.adapter);
|
56
59
|
}
|
57
60
|
// Let consumers swap allowed tools dynamically
|
58
|
-
|
61
|
+
else {
|
62
|
+
this.adapter = options.adapter ?? new LangChainAdapter(this.disallowedTools);
|
63
|
+
}
|
64
|
+
// Initialize telemetry
|
65
|
+
this.telemetry = Telemetry.getInstance();
|
66
|
+
// Track model info for telemetry
|
67
|
+
const [provider, name] = extractModelInfo(this.llm);
|
68
|
+
this.modelProvider = provider;
|
69
|
+
this.modelName = name;
|
59
70
|
}
|
60
71
|
async initialize() {
|
61
72
|
logger.info('🚀 Initializing MCP agent and connecting to services...');
|
@@ -65,6 +76,7 @@ export class MCPAgent {
|
|
65
76
|
// Get server management tools
|
66
77
|
const managementTools = this.serverManager.tools;
|
67
78
|
this.tools = managementTools;
|
79
|
+
this.tools.push(...this.additionalTools);
|
68
80
|
logger.info(`🔧 Server manager mode active with ${managementTools.length} management tools`);
|
69
81
|
// Create the system message based on available tools
|
70
82
|
await this.createSystemMessageFromTools(this.tools);
|
@@ -83,6 +95,7 @@ export class MCPAgent {
|
|
83
95
|
}
|
84
96
|
// Create LangChain tools directly from the client using the adapter
|
85
97
|
this.tools = await LangChainAdapter.createTools(this.client);
|
98
|
+
this.tools.push(...this.additionalTools);
|
86
99
|
logger.info(`🛠️ Created ${this.tools.length} LangChain tools from client`);
|
87
100
|
}
|
88
101
|
else {
|
@@ -95,6 +108,7 @@ export class MCPAgent {
|
|
95
108
|
}
|
96
109
|
// Create LangChain tools using the adapter with connectors
|
97
110
|
this.tools = await this.adapter.createToolsFromConnectors(this.connectors);
|
111
|
+
this.tools.push(...this.additionalTools);
|
98
112
|
logger.info(`🛠️ Created ${this.tools.length} LangChain tools from connectors`);
|
99
113
|
}
|
100
114
|
// Get all tools for system message generation
|
@@ -173,9 +187,34 @@ export class MCPAgent {
|
|
173
187
|
getDisallowedTools() {
|
174
188
|
return this.disallowedTools;
|
175
189
|
}
|
176
|
-
async
|
190
|
+
async _consumeAndReturn(generator) {
|
191
|
+
// Manually iterate through the generator to consume the steps.
|
192
|
+
// The for-await-of loop is not used because it discards the generator's
|
193
|
+
// final return value. We need to capture that value when `done` is true.
|
194
|
+
while (true) {
|
195
|
+
const { done, value } = await generator.next();
|
196
|
+
if (done) {
|
197
|
+
return value;
|
198
|
+
}
|
199
|
+
}
|
200
|
+
}
|
201
|
+
/**
|
202
|
+
* Runs the agent and returns a promise for the final result.
|
203
|
+
*/
|
204
|
+
async run(query, maxSteps, manageConnector, externalHistory) {
|
205
|
+
const generator = this.stream(query, maxSteps, manageConnector, externalHistory);
|
206
|
+
return this._consumeAndReturn(generator);
|
207
|
+
}
|
208
|
+
/**
|
209
|
+
* Runs the agent and yields intermediate steps as an async generator.
|
210
|
+
*/
|
211
|
+
async *stream(query, maxSteps, manageConnector = true, externalHistory) {
|
177
212
|
let result = '';
|
178
213
|
let initializedHere = false;
|
214
|
+
const startTime = Date.now();
|
215
|
+
const toolsUsedNames = [];
|
216
|
+
let stepsTaken = 0;
|
217
|
+
let success = false;
|
179
218
|
try {
|
180
219
|
if (manageConnector && !this.initialized) {
|
181
220
|
await this.initialize();
|
@@ -208,6 +247,7 @@ export class MCPAgent {
|
|
208
247
|
let nameToToolMap = Object.fromEntries(this.tools.map(t => [t.name, t]));
|
209
248
|
logger.info(`🏁 Starting agent execution with max_steps=${steps}`);
|
210
249
|
for (let stepNum = 0; stepNum < steps; stepNum++) {
|
250
|
+
stepsTaken = stepNum + 1;
|
211
251
|
if (this.useServerManager && this.serverManager) {
|
212
252
|
const currentTools = this.serverManager.tools;
|
213
253
|
const currentToolNames = new Set(currentTools.map(t => t.name));
|
@@ -217,6 +257,7 @@ export class MCPAgent {
|
|
217
257
|
if (changed) {
|
218
258
|
logger.info(`🔄 Tools changed before step ${stepNum + 1}, updating agent. New tools: ${[...currentToolNames].join(', ')}`);
|
219
259
|
this.tools = currentTools;
|
260
|
+
this.tools.push(...this.additionalTools);
|
220
261
|
await this.createSystemMessageFromTools(this.tools);
|
221
262
|
this.agentExecutor = this.createAgent();
|
222
263
|
this.agentExecutor.maxIterations = steps;
|
@@ -235,8 +276,10 @@ export class MCPAgent {
|
|
235
276
|
const stepArray = nextStepOutput;
|
236
277
|
intermediateSteps.push(...stepArray);
|
237
278
|
for (const step of stepArray) {
|
279
|
+
yield step;
|
238
280
|
const { action, observation } = step;
|
239
281
|
const toolName = action.tool;
|
282
|
+
toolsUsedNames.push(toolName);
|
240
283
|
let toolInputStr = String(action.toolInput);
|
241
284
|
if (toolInputStr.length > 100)
|
242
285
|
toolInputStr = `${toolInputStr.slice(0, 97)}...`;
|
@@ -279,6 +322,7 @@ export class MCPAgent {
|
|
279
322
|
this.addToHistory(new AIMessage(result));
|
280
323
|
}
|
281
324
|
logger.info('🎉 Agent execution complete');
|
325
|
+
success = true;
|
282
326
|
return result;
|
283
327
|
}
|
284
328
|
catch (e) {
|
@@ -290,6 +334,40 @@ export class MCPAgent {
|
|
290
334
|
throw e;
|
291
335
|
}
|
292
336
|
finally {
|
337
|
+
// Track comprehensive execution data
|
338
|
+
const executionTimeMs = Date.now() - startTime;
|
339
|
+
let serverCount = 0;
|
340
|
+
if (this.client) {
|
341
|
+
serverCount = Object.keys(await this.client.getAllActiveSessions()).length;
|
342
|
+
}
|
343
|
+
else if (this.connectors) {
|
344
|
+
serverCount = this.connectors.length;
|
345
|
+
}
|
346
|
+
const conversationHistoryLength = this.memoryEnabled ? this.conversationHistory.length : 0;
|
347
|
+
await this.telemetry.trackAgentExecution({
|
348
|
+
executionMethod: 'stream',
|
349
|
+
query,
|
350
|
+
success,
|
351
|
+
modelProvider: this.modelProvider,
|
352
|
+
modelName: this.modelName,
|
353
|
+
serverCount,
|
354
|
+
serverIdentifiers: this.connectors.map(connector => connector.publicIdentifier),
|
355
|
+
totalToolsAvailable: this.tools.length,
|
356
|
+
toolsAvailableNames: this.tools.map(t => t.name),
|
357
|
+
maxStepsConfigured: this.maxSteps,
|
358
|
+
memoryEnabled: this.memoryEnabled,
|
359
|
+
useServerManager: this.useServerManager,
|
360
|
+
maxStepsUsed: maxSteps ?? null,
|
361
|
+
manageConnector,
|
362
|
+
externalHistoryUsed: externalHistory !== undefined,
|
363
|
+
stepsTaken,
|
364
|
+
toolsUsedCount: toolsUsedNames.length,
|
365
|
+
toolsUsedNames,
|
366
|
+
response: result,
|
367
|
+
executionTimeMs,
|
368
|
+
errorType: success ? null : 'execution_error',
|
369
|
+
conversationHistoryLength,
|
370
|
+
});
|
293
371
|
if (manageConnector && !this.client && initializedHere) {
|
294
372
|
logger.info('🧹 Closing agent after query completion');
|
295
373
|
await this.close();
|
package/dist/src/client.d.ts
CHANGED
@@ -9,6 +9,8 @@ export declare class MCPClient {
|
|
9
9
|
addServer(name: string, serverConfig: Record<string, any>): void;
|
10
10
|
removeServer(name: string): void;
|
11
11
|
getServerNames(): string[];
|
12
|
+
getServerConfig(name: string): Record<string, any>;
|
13
|
+
getConfig(): Record<string, any>;
|
12
14
|
saveConfig(filepath: string): void;
|
13
15
|
createSession(serverName: string, autoInitialize?: boolean): Promise<MCPSession>;
|
14
16
|
createAllSessions(autoInitialize?: boolean): Promise<Record<string, MCPSession>>;
|
package/dist/src/client.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,QAAQ,CAAiC;IAC1C,cAAc,EAAE,MAAM,EAAE,CAAK;gBAExB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;WAWnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS;WAI7C,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAI9C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAKhE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOhC,cAAc,IAAI,MAAM,EAAE;IAI1B,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQ5B,aAAa,CACxB,UAAU,EAAE,MAAM,EAClB,cAAc,UAAO,GACpB,OAAO,CAAC,UAAU,CAAC;IAwBT,iBAAiB,CAC5B,cAAc,UAAO,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAc/B,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAWjD,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;IAM5C,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB/C,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CAqB/C"}
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,QAAQ,CAAiC;IAC1C,cAAc,EAAE,MAAM,EAAE,CAAK;gBAExB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;WAWnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS;WAI7C,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAI9C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAKhE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOhC,cAAc,IAAI,MAAM,EAAE;IAI1B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAIlD,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAIhC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQ5B,aAAa,CACxB,UAAU,EAAE,MAAM,EAClB,cAAc,UAAO,GACpB,OAAO,CAAC,UAAU,CAAC;IAwBT,iBAAiB,CAC5B,cAAc,UAAO,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAc/B,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAWjD,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;IAM5C,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB/C,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CAqB/C"}
|
package/dist/src/client.js
CHANGED
@@ -36,6 +36,12 @@ export class MCPClient {
|
|
36
36
|
getServerNames() {
|
37
37
|
return Object.keys(this.config.mcpServers ?? {});
|
38
38
|
}
|
39
|
+
getServerConfig(name) {
|
40
|
+
return this.config.mcpServers?.[name];
|
41
|
+
}
|
42
|
+
getConfig() {
|
43
|
+
return this.config ?? {};
|
44
|
+
}
|
39
45
|
saveConfig(filepath) {
|
40
46
|
const dir = path.dirname(filepath);
|
41
47
|
if (!fs.existsSync(dir)) {
|
@@ -25,6 +25,8 @@ export declare abstract class BaseConnector {
|
|
25
25
|
constructor(opts?: ConnectorInitOptions);
|
26
26
|
/** Establish the connection and create the SDK client. */
|
27
27
|
abstract connect(): Promise<void>;
|
28
|
+
/** Get the identifier for the connector. */
|
29
|
+
abstract get publicIdentifier(): Record<string, string>;
|
28
30
|
/** Disconnect and release resources. */
|
29
31
|
disconnect(): Promise<void>;
|
30
32
|
/** Check if the client is connected */
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/connectors/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAA;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAA;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAA;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAGjE,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,cAAc,CAAA;CACvC;AAED;;GAEG;AACH,8BAAsB,aAAa;IACjC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAO;IACtC,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAO;IACjE,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,CAAO;IAC1C,SAAS,CAAC,SAAS,UAAQ;IAC3B,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAA;gBAEjC,IAAI,GAAE,oBAAyB;IAI3C,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAEjC,wCAAwC;IAClC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC,uCAAuC;IACvC,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED;;;;;;OAMG;IACG,UAAU,CAAC,qBAAqB,GAAE,cAAsD,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAkBrJ,2CAA2C;IAC3C,IAAI,KAAK,IAAI,IAAI,EAAE,CAKlB;IAED,iCAAiC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAW1G,sCAAsC;IAChC,aAAa,CAAC,OAAO,CAAC,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;IAS5C,8BAA8B;IACxB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc;;;;IAUlD,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IASX,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IASvD,6CAA6C;IACvC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,EAAE,OAAO,CAAC,EAAE,cAAc;IASjG;;OAEG;cACa,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CAsClD"}
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/connectors/base.ts"],"names":[],"mappings":"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"}
|
@@ -19,5 +19,6 @@ export declare class HttpConnector extends BaseConnector {
|
|
19
19
|
constructor(baseUrl: string, opts?: HttpConnectorOptions);
|
20
20
|
/** Establish connection to the MCP implementation via SSE. */
|
21
21
|
connect(): Promise<void>;
|
22
|
+
get publicIdentifier(): Record<string, string>;
|
22
23
|
}
|
23
24
|
//# sourceMappingURL=http.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/connectors/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAIrD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C;AAED,qBAAa,aAAc,SAAQ,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmC;gBAElD,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB;IAc5D,8DAA8D;IACxD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/connectors/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAIrD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C;AAED,qBAAa,aAAc,SAAQ,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmC;gBAElD,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB;IAc5D,8DAA8D;IACxD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqC9B,IAAI,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK7C;CACF"}
|
@@ -21,5 +21,6 @@ export declare class StdioConnector extends BaseConnector {
|
|
21
21
|
} & StdioConnectorOptions);
|
22
22
|
/** Establish connection to the MCP implementation. */
|
23
23
|
connect(): Promise<void>;
|
24
|
+
get publicIdentifier(): Record<string, string>;
|
24
25
|
}
|
25
26
|
//# sourceMappingURL=stdio.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/connectors/stdio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAMrD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C;AAED,qBAAa,cAAe,SAAQ,aAAa;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmC;gBAG5D,EACE,OAAe,EACf,IAAS,EACT,GAAG,EACH,MAAuB,EACvB,GAAG,IAAI,EACR,GAAE;QACD,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;QACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC5B,MAAM,CAAC,EAAE,QAAQ,CAAA;KAClB,GAAG,qBAA0B;IAWhC,sDAAsD;IAChD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;
|
1
|
+
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/connectors/stdio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAMrD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C;AAED,qBAAa,cAAe,SAAQ,aAAa;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmC;gBAG5D,EACE,OAAe,EACf,IAAS,EACT,GAAG,EACH,MAAuB,EACvB,GAAG,IAAI,EACR,GAAE;QACD,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;QACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC5B,MAAM,CAAC,EAAE,QAAQ,CAAA;KAClB,GAAG,qBAA0B;IAWhC,sDAAsD;IAChD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgD9B,IAAI,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK7C;CACF"}
|
@@ -30,5 +30,6 @@ export declare class WebSocketConnector extends BaseConnector {
|
|
30
30
|
request(method: string, params?: Record<string, any> | null): Promise<any>;
|
31
31
|
get tools(): Tool[];
|
32
32
|
protected cleanupResources(): Promise<void>;
|
33
|
+
get publicIdentifier(): Record<string, string>;
|
33
34
|
}
|
34
35
|
//# sourceMappingURL=websocket.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../src/connectors/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,IAAI,EACL,MAAM,oCAAoC,CAAA;AAG3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC;AAED,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAEhD,SAAS,CAAC,iBAAiB,EAAE,0BAA0B,GAAG,IAAI,CAAO;IACrE,OAAO,CAAC,EAAE,CAAkD;IAC5D,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,OAAO,CACF;IAEb,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,CAAO;gBAE9B,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,yBAA8B;IAQvD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC,OAAO,CAAC,WAAW;YAiBL,WAAW;IAyCzB,OAAO,CAAC,SAAS;IAKX,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAS1C,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAK5B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAI1E,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IAK7B,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAK9E,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAItF,IAAI,KAAK,IAAI,IAAI,EAAE,CAIlB;cAEe,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../src/connectors/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,IAAI,EACL,MAAM,oCAAoC,CAAA;AAG3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC;AAED,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAEhD,SAAS,CAAC,iBAAiB,EAAE,0BAA0B,GAAG,IAAI,CAAO;IACrE,OAAO,CAAC,EAAE,CAAkD;IAC5D,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,OAAO,CACF;IAEb,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,CAAO;gBAE9B,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,yBAA8B;IAQvD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC,OAAO,CAAC,WAAW;YAiBL,WAAW;IAyCzB,OAAO,CAAC,SAAS;IAKX,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAS1C,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAK5B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAI1E,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IAK7B,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAK9E,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAItF,IAAI,KAAK,IAAI,IAAI,EAAE,CAIlB;cAEe,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjD,IAAI,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK7C;CACF"}
|
package/dist/src/logging.js
CHANGED
@@ -10,7 +10,7 @@ function resolveLevel(env) {
|
|
10
10
|
case '1':
|
11
11
|
return 'info';
|
12
12
|
default:
|
13
|
-
return '
|
13
|
+
return 'info';
|
14
14
|
}
|
15
15
|
}
|
16
16
|
const minimalFormatter = printf(({ level, message, label, timestamp }) => {
|
@@ -77,7 +77,7 @@ export class Logger {
|
|
77
77
|
else if (enabled === 1)
|
78
78
|
level = 'info';
|
79
79
|
else
|
80
|
-
level = '
|
80
|
+
level = 'info';
|
81
81
|
Object.values(this.instances).forEach((logger) => {
|
82
82
|
logger.level = level;
|
83
83
|
});
|
@@ -7,7 +7,9 @@ export declare class ServerManager {
|
|
7
7
|
readonly client: MCPClient;
|
8
8
|
readonly adapter: LangChainAdapter;
|
9
9
|
activeServer: string | null;
|
10
|
-
|
10
|
+
private overrideManagementTools?;
|
11
|
+
constructor(client: MCPClient, adapter: LangChainAdapter, managementTools?: StructuredToolInterface[]);
|
12
|
+
setManagementTools(tools: StructuredToolInterface[]): void;
|
11
13
|
logState(context: string): void;
|
12
14
|
initialize(): void;
|
13
15
|
prefetchServerTools(): Promise<void>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"server_manager.d.ts","sourceRoot":"","sources":["../../../src/managers/server_manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAW7C,qBAAa,aAAa;IACxB,SAAgB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAK;IAChE,SAAgB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAK;IAE3E,SAAgB,MAAM,EAAE,SAAS,CAAA;IACjC,SAAgB,OAAO,EAAE,gBAAgB,CAAA;IAClC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAO;
|
1
|
+
{"version":3,"file":"server_manager.d.ts","sourceRoot":"","sources":["../../../src/managers/server_manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAW7C,qBAAa,aAAa;IACxB,SAAgB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAK;IAChE,SAAgB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAK;IAE3E,SAAgB,MAAM,EAAE,SAAS,CAAA;IACjC,SAAgB,OAAO,EAAE,gBAAgB,CAAA;IAClC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAO;IACzC,OAAO,CAAC,uBAAuB,CAAC,CAA2B;gBAGzD,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,gBAAgB,EACzB,eAAe,CAAC,EAAE,uBAAuB,EAAE;IAOtC,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,EAAE,GAAG,IAAI;IAO1D,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAqBtC,UAAU,IAAI,IAAI;IAOZ,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoD1C,IAAI,KAAK,IAAI,uBAAuB,EAAE,CAsBrC;CACF"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { isEqual } from 'lodash-es';
|
2
2
|
import { logger } from '../logging.js';
|
3
3
|
import { AcquireActiveMCPServerTool } from './tools/acquire_active_mcp_server.js';
|
4
|
-
import {
|
4
|
+
import { AddMCPServerFromConfigTool } from './tools/add_server_from_config.js';
|
5
5
|
import { ConnectMCPServerTool } from './tools/connect_mcp_server.js';
|
6
6
|
import { ListMCPServersTool } from './tools/list_mcp_servers.js';
|
7
7
|
import { ReleaseMCPServerConnectionTool } from './tools/release_mcp_server_connection.js';
|
@@ -11,9 +11,15 @@ export class ServerManager {
|
|
11
11
|
client;
|
12
12
|
adapter;
|
13
13
|
activeServer = null;
|
14
|
-
|
14
|
+
overrideManagementTools;
|
15
|
+
constructor(client, adapter, managementTools) {
|
15
16
|
this.client = client;
|
16
17
|
this.adapter = adapter;
|
18
|
+
this.overrideManagementTools = managementTools;
|
19
|
+
}
|
20
|
+
setManagementTools(tools) {
|
21
|
+
this.overrideManagementTools = tools;
|
22
|
+
logger.info(`Overriding default management tools with a new set of ${tools.length} tools.`);
|
17
23
|
}
|
18
24
|
logState(context) {
|
19
25
|
const allServerNames = this.client.getServerNames();
|
@@ -83,8 +89,8 @@ export class ServerManager {
|
|
83
89
|
if (logger.level === 'debug') {
|
84
90
|
this.logState('Providing tools to agent');
|
85
91
|
}
|
86
|
-
const managementTools = [
|
87
|
-
new
|
92
|
+
const managementTools = this.overrideManagementTools ?? [
|
93
|
+
new AddMCPServerFromConfigTool(this),
|
88
94
|
new ListMCPServersTool(this),
|
89
95
|
new ConnectMCPServerTool(this),
|
90
96
|
new AcquireActiveMCPServerTool(this),
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import type { ServerManager } from '../server_manager.js';
|
2
2
|
import { StructuredTool } from 'langchain/tools';
|
3
3
|
import { z } from 'zod';
|
4
|
-
export declare class
|
4
|
+
export declare class AddMCPServerFromConfigTool extends StructuredTool {
|
5
5
|
name: string;
|
6
6
|
description: string;
|
7
7
|
schema: z.ZodObject<{
|
@@ -18,4 +18,4 @@ export declare class AddMCPServerTool extends StructuredTool {
|
|
18
18
|
constructor(manager: ServerManager);
|
19
19
|
protected _call({ serverName, serverConfig, }: z.infer<typeof this.schema>): Promise<string>;
|
20
20
|
}
|
21
|
-
//# sourceMappingURL=
|
21
|
+
//# sourceMappingURL=add_server_from_config.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"add_server_from_config.d.ts","sourceRoot":"","sources":["../../../../src/managers/tools/add_server_from_config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,qBAAa,0BAA2B,SAAQ,cAAc;IAC5D,IAAI,SAA+B;IACnC,WAAW,SAC0G;IAErH,MAAM;;;;;;;;;OAOJ;IAEF,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,EAAE,aAAa;cAKlB,KAAK,CAAC,EACpB,UAAU,EACV,YAAY,GACb,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CA6BjD"}
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import { StructuredTool } from 'langchain/tools';
|
2
2
|
import { z } from 'zod';
|
3
3
|
import { logger } from '../../logging.js';
|
4
|
-
export class
|
5
|
-
name = '
|
6
|
-
description = 'Adds a new MCP server to the client and connects to it, making its tools available.';
|
4
|
+
export class AddMCPServerFromConfigTool extends StructuredTool {
|
5
|
+
name = 'add_mcp_server_from_config';
|
6
|
+
description = 'Adds a new MCP server to the client from a configuration object and connects to it, making its tools available.';
|
7
7
|
schema = z.object({
|
8
8
|
serverName: z.string().describe('The name for the new MCP server.'),
|
9
9
|
serverConfig: z
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/managers/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA;AAC9C,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oCAAoC,CAAA"}
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/managers/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA;AAC9C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oCAAoC,CAAA"}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
export declare abstract class BaseTelemetryEvent {
|
2
|
+
abstract get name(): string;
|
3
|
+
abstract get properties(): Record<string, any>;
|
4
|
+
}
|
5
|
+
export interface MCPAgentExecutionEventData {
|
6
|
+
executionMethod: string;
|
7
|
+
query: string;
|
8
|
+
success: boolean;
|
9
|
+
modelProvider: string;
|
10
|
+
modelName: string;
|
11
|
+
serverCount: number;
|
12
|
+
serverIdentifiers: Array<Record<string, string>>;
|
13
|
+
totalToolsAvailable: number;
|
14
|
+
toolsAvailableNames: string[];
|
15
|
+
maxStepsConfigured: number;
|
16
|
+
memoryEnabled: boolean;
|
17
|
+
useServerManager: boolean;
|
18
|
+
maxStepsUsed: number | null;
|
19
|
+
manageConnector: boolean;
|
20
|
+
externalHistoryUsed: boolean;
|
21
|
+
stepsTaken?: number | null;
|
22
|
+
toolsUsedCount?: number | null;
|
23
|
+
toolsUsedNames?: string[] | null;
|
24
|
+
response?: string | null;
|
25
|
+
executionTimeMs?: number | null;
|
26
|
+
errorType?: string | null;
|
27
|
+
conversationHistoryLength?: number | null;
|
28
|
+
}
|
29
|
+
export declare class MCPAgentExecutionEvent extends BaseTelemetryEvent {
|
30
|
+
private data;
|
31
|
+
constructor(data: MCPAgentExecutionEventData);
|
32
|
+
get name(): string;
|
33
|
+
get properties(): Record<string, any>;
|
34
|
+
}
|
35
|
+
//# sourceMappingURL=events.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/telemetry/events.ts"],"names":[],"mappings":"AAAA,8BAAsB,kBAAkB;IACtC,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAA;IAC3B,QAAQ,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC/C;AAED,MAAM,WAAW,0BAA0B;IAEzC,eAAe,EAAE,MAAM,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAGhB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAChD,mBAAmB,EAAE,MAAM,CAAA;IAC3B,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,OAAO,CAAA;IACtB,gBAAgB,EAAE,OAAO,CAAA;IAGzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,eAAe,EAAE,OAAO,CAAA;IACxB,mBAAmB,EAAE,OAAO,CAAA;IAG5B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAGzB,yBAAyB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1C;AAED,qBAAa,sBAAuB,SAAQ,kBAAkB;IAChD,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,0BAA0B;IAIpD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+BpC;CACF"}
|
@@ -0,0 +1,44 @@
|
|
1
|
+
export class BaseTelemetryEvent {
|
2
|
+
}
|
3
|
+
export class MCPAgentExecutionEvent extends BaseTelemetryEvent {
|
4
|
+
data;
|
5
|
+
constructor(data) {
|
6
|
+
super();
|
7
|
+
this.data = data;
|
8
|
+
}
|
9
|
+
get name() {
|
10
|
+
return 'mcp_agent_execution';
|
11
|
+
}
|
12
|
+
get properties() {
|
13
|
+
return {
|
14
|
+
// Core execution info
|
15
|
+
execution_method: this.data.executionMethod,
|
16
|
+
query: this.data.query,
|
17
|
+
query_length: this.data.query.length,
|
18
|
+
success: this.data.success,
|
19
|
+
// Agent configuration
|
20
|
+
model_provider: this.data.modelProvider,
|
21
|
+
model_name: this.data.modelName,
|
22
|
+
server_count: this.data.serverCount,
|
23
|
+
server_identifiers: this.data.serverIdentifiers,
|
24
|
+
total_tools_available: this.data.totalToolsAvailable,
|
25
|
+
tools_available_names: this.data.toolsAvailableNames,
|
26
|
+
max_steps_configured: this.data.maxStepsConfigured,
|
27
|
+
memory_enabled: this.data.memoryEnabled,
|
28
|
+
use_server_manager: this.data.useServerManager,
|
29
|
+
// Execution parameters (always include, even if null)
|
30
|
+
max_steps_used: this.data.maxStepsUsed,
|
31
|
+
manage_connector: this.data.manageConnector,
|
32
|
+
external_history_used: this.data.externalHistoryUsed,
|
33
|
+
// Execution results (always include, even if null)
|
34
|
+
steps_taken: this.data.stepsTaken ?? null,
|
35
|
+
tools_used_count: this.data.toolsUsedCount ?? null,
|
36
|
+
tools_used_names: this.data.toolsUsedNames ?? null,
|
37
|
+
response: this.data.response ?? null,
|
38
|
+
response_length: this.data.response ? this.data.response.length : null,
|
39
|
+
execution_time_ms: this.data.executionTimeMs ?? null,
|
40
|
+
error_type: this.data.errorType ?? null,
|
41
|
+
conversation_history_length: this.data.conversationHistoryLength ?? null,
|
42
|
+
};
|
43
|
+
}
|
44
|
+
}
|
@@ -0,0 +1,5 @@
|
|
1
|
+
export { BaseTelemetryEvent, MCPAgentExecutionEvent, MCPAgentExecutionEventData } from './events.js';
|
2
|
+
export { Telemetry } from './telemetry.js';
|
3
|
+
export { extractModelInfo, getModelName, getModelProvider, getPackageVersion } from './utils.js';
|
4
|
+
export declare function setTelemetrySource(source: string): void;
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/telemetry/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AACpG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAGhG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEvD"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { Telemetry } from './telemetry.js';
|
2
|
+
export { BaseTelemetryEvent, MCPAgentExecutionEvent } from './events.js';
|
3
|
+
export { Telemetry } from './telemetry.js';
|
4
|
+
export { extractModelInfo, getModelName, getModelProvider, getPackageVersion } from './utils.js';
|
5
|
+
// Convenience function to set telemetry source globally
|
6
|
+
export function setTelemetrySource(source) {
|
7
|
+
Telemetry.getInstance().setSource(source);
|
8
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
import type { BaseTelemetryEvent, MCPAgentExecutionEventData } from './events.js';
|
2
|
+
export declare class Telemetry {
|
3
|
+
private static instance;
|
4
|
+
private readonly USER_ID_PATH;
|
5
|
+
private readonly VERSION_DOWNLOAD_PATH;
|
6
|
+
private readonly PROJECT_API_KEY;
|
7
|
+
private readonly HOST;
|
8
|
+
private readonly SCARF_GATEWAY_URL;
|
9
|
+
private readonly UNKNOWN_USER_ID;
|
10
|
+
private _currUserId;
|
11
|
+
private _posthogClient;
|
12
|
+
private _scarfClient;
|
13
|
+
private _source;
|
14
|
+
private constructor();
|
15
|
+
static getInstance(): Telemetry;
|
16
|
+
/**
|
17
|
+
* Set the source identifier for telemetry events.
|
18
|
+
* This allows tracking usage from different applications.
|
19
|
+
* @param source - The source identifier (e.g., "my-app", "cli", "vs-code-extension")
|
20
|
+
*/
|
21
|
+
setSource(source: string): void;
|
22
|
+
/**
|
23
|
+
* Get the current source identifier.
|
24
|
+
*/
|
25
|
+
getSource(): string;
|
26
|
+
get userId(): string;
|
27
|
+
capture(event: BaseTelemetryEvent): Promise<void>;
|
28
|
+
trackPackageDownload(properties?: Record<string, any>): Promise<void>;
|
29
|
+
trackAgentExecution(data: MCPAgentExecutionEventData): Promise<void>;
|
30
|
+
flush(): void;
|
31
|
+
shutdown(): void;
|
32
|
+
}
|
33
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../../src/telemetry/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AA0EjF,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAyB;IAEhD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8D;IAC3F,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA2D;IACjG,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoD;IACpF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAClD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA8C;IAChF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;IAEpD,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,OAAO,CAAuB;IAEtC,OAAO;IAwCP,MAAM,CAAC,WAAW,IAAI,SAAS;IAO/B;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB,IAAI,MAAM,IAAI,MAAM,CAgCnB;IAEK,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CjD,oBAAoB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDrE,mBAAmB,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1E,KAAK,IAAI,IAAI;IAkBb,QAAQ,IAAI,IAAI;CAiBjB"}
|
@@ -0,0 +1,278 @@
|
|
1
|
+
import * as fs from 'node:fs';
|
2
|
+
import * as os from 'node:os';
|
3
|
+
import * as path from 'node:path';
|
4
|
+
import { PostHog } from 'posthog-node';
|
5
|
+
import { v4 as uuidv4 } from 'uuid';
|
6
|
+
import { logger } from '../logging.js';
|
7
|
+
import { MCPAgentExecutionEvent } from './events.js';
|
8
|
+
import { getPackageVersion } from './utils.js';
|
9
|
+
// Simple Scarf event logger implementation
|
10
|
+
class ScarfEventLogger {
|
11
|
+
endpoint;
|
12
|
+
timeout;
|
13
|
+
constructor(endpoint, timeout = 3000) {
|
14
|
+
this.endpoint = endpoint;
|
15
|
+
this.timeout = timeout;
|
16
|
+
}
|
17
|
+
async logEvent(properties) {
|
18
|
+
try {
|
19
|
+
const controller = new AbortController();
|
20
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
21
|
+
const response = await fetch(this.endpoint, {
|
22
|
+
method: 'POST',
|
23
|
+
headers: {
|
24
|
+
'Content-Type': 'application/json',
|
25
|
+
},
|
26
|
+
body: JSON.stringify(properties),
|
27
|
+
signal: controller.signal,
|
28
|
+
});
|
29
|
+
clearTimeout(timeoutId);
|
30
|
+
if (!response.ok) {
|
31
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
32
|
+
}
|
33
|
+
}
|
34
|
+
catch (error) {
|
35
|
+
// Silently fail - telemetry should not break the application
|
36
|
+
logger.debug(`Failed to send Scarf event: ${error}`);
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}
|
40
|
+
function getCacheHome() {
|
41
|
+
// XDG_CACHE_HOME for Linux and manually set envs
|
42
|
+
const envVar = process.env.XDG_CACHE_HOME;
|
43
|
+
if (envVar && path.isAbsolute(envVar)) {
|
44
|
+
return envVar;
|
45
|
+
}
|
46
|
+
const platform = process.platform;
|
47
|
+
const homeDir = os.homedir();
|
48
|
+
if (platform === 'win32') {
|
49
|
+
const appdata = process.env.LOCALAPPDATA || process.env.APPDATA;
|
50
|
+
if (appdata) {
|
51
|
+
return appdata;
|
52
|
+
}
|
53
|
+
return path.join(homeDir, 'AppData', 'Local');
|
54
|
+
}
|
55
|
+
else if (platform === 'darwin') {
|
56
|
+
// macOS
|
57
|
+
return path.join(homeDir, 'Library', 'Caches');
|
58
|
+
}
|
59
|
+
else {
|
60
|
+
// Linux or other Unix
|
61
|
+
return path.join(homeDir, '.cache');
|
62
|
+
}
|
63
|
+
}
|
64
|
+
export class Telemetry {
|
65
|
+
static instance = null;
|
66
|
+
USER_ID_PATH = path.join(getCacheHome(), 'mcp_use_3', 'telemetry_user_id');
|
67
|
+
VERSION_DOWNLOAD_PATH = path.join(getCacheHome(), 'mcp_use', 'download_version');
|
68
|
+
PROJECT_API_KEY = 'phc_lyTtbYwvkdSbrcMQNPiKiiRWrrM1seyKIMjycSvItEI';
|
69
|
+
HOST = 'https://eu.i.posthog.com';
|
70
|
+
SCARF_GATEWAY_URL = 'https://mcpuse.gateway.scarf.sh/events-ts';
|
71
|
+
UNKNOWN_USER_ID = 'UNKNOWN_USER_ID';
|
72
|
+
_currUserId = null;
|
73
|
+
_posthogClient = null;
|
74
|
+
_scarfClient = null;
|
75
|
+
_source = 'typescript';
|
76
|
+
constructor() {
|
77
|
+
const telemetryDisabled = process.env.MCP_USE_ANONYMIZED_TELEMETRY?.toLowerCase() === 'false';
|
78
|
+
// Check for source from environment variable, default to 'typescript'
|
79
|
+
this._source = process.env.MCP_USE_TELEMETRY_SOURCE || 'typescript';
|
80
|
+
if (telemetryDisabled) {
|
81
|
+
this._posthogClient = null;
|
82
|
+
this._scarfClient = null;
|
83
|
+
logger.debug('Telemetry disabled');
|
84
|
+
}
|
85
|
+
else {
|
86
|
+
logger.info('Anonymized telemetry enabled. Set MCP_USE_ANONYMIZED_TELEMETRY=false to disable.');
|
87
|
+
// Initialize PostHog
|
88
|
+
try {
|
89
|
+
this._posthogClient = new PostHog(this.PROJECT_API_KEY, {
|
90
|
+
host: this.HOST,
|
91
|
+
disableGeoip: false,
|
92
|
+
});
|
93
|
+
}
|
94
|
+
catch (e) {
|
95
|
+
logger.warn(`Failed to initialize PostHog telemetry: ${e}`);
|
96
|
+
this._posthogClient = null;
|
97
|
+
}
|
98
|
+
// Initialize Scarf
|
99
|
+
try {
|
100
|
+
this._scarfClient = new ScarfEventLogger(this.SCARF_GATEWAY_URL, 3000);
|
101
|
+
}
|
102
|
+
catch (e) {
|
103
|
+
logger.warn(`Failed to initialize Scarf telemetry: ${e}`);
|
104
|
+
this._scarfClient = null;
|
105
|
+
}
|
106
|
+
}
|
107
|
+
}
|
108
|
+
static getInstance() {
|
109
|
+
if (!Telemetry.instance) {
|
110
|
+
Telemetry.instance = new Telemetry();
|
111
|
+
}
|
112
|
+
return Telemetry.instance;
|
113
|
+
}
|
114
|
+
/**
|
115
|
+
* Set the source identifier for telemetry events.
|
116
|
+
* This allows tracking usage from different applications.
|
117
|
+
* @param source - The source identifier (e.g., "my-app", "cli", "vs-code-extension")
|
118
|
+
*/
|
119
|
+
setSource(source) {
|
120
|
+
this._source = source;
|
121
|
+
logger.debug(`Telemetry source set to: ${source}`);
|
122
|
+
}
|
123
|
+
/**
|
124
|
+
* Get the current source identifier.
|
125
|
+
*/
|
126
|
+
getSource() {
|
127
|
+
return this._source;
|
128
|
+
}
|
129
|
+
get userId() {
|
130
|
+
if (this._currUserId) {
|
131
|
+
return this._currUserId;
|
132
|
+
}
|
133
|
+
try {
|
134
|
+
const isFirstTime = !fs.existsSync(this.USER_ID_PATH);
|
135
|
+
if (isFirstTime) {
|
136
|
+
logger.debug(`Creating user ID path: ${this.USER_ID_PATH}`);
|
137
|
+
fs.mkdirSync(path.dirname(this.USER_ID_PATH), { recursive: true });
|
138
|
+
const newUserId = uuidv4();
|
139
|
+
fs.writeFileSync(this.USER_ID_PATH, newUserId);
|
140
|
+
this._currUserId = newUserId;
|
141
|
+
logger.debug(`User ID path created: ${this.USER_ID_PATH}`);
|
142
|
+
}
|
143
|
+
else {
|
144
|
+
this._currUserId = fs.readFileSync(this.USER_ID_PATH, 'utf-8').trim();
|
145
|
+
}
|
146
|
+
// Always check for version-based download tracking
|
147
|
+
// Note: We can't await here since this is a getter, so we fire and forget
|
148
|
+
this.trackPackageDownload({
|
149
|
+
triggered_by: 'user_id_property',
|
150
|
+
}).catch(e => logger.debug(`Failed to track package download: ${e}`));
|
151
|
+
}
|
152
|
+
catch (e) {
|
153
|
+
logger.debug(`Failed to get/create user ID: ${e}`);
|
154
|
+
this._currUserId = this.UNKNOWN_USER_ID;
|
155
|
+
}
|
156
|
+
return this._currUserId;
|
157
|
+
}
|
158
|
+
async capture(event) {
|
159
|
+
if (!this._posthogClient && !this._scarfClient) {
|
160
|
+
return;
|
161
|
+
}
|
162
|
+
// Send to PostHog
|
163
|
+
if (this._posthogClient) {
|
164
|
+
try {
|
165
|
+
// Add package version, language flag, and source to all events
|
166
|
+
const properties = { ...event.properties };
|
167
|
+
properties.mcp_use_version = getPackageVersion();
|
168
|
+
properties.language = 'typescript';
|
169
|
+
properties.source = this._source;
|
170
|
+
this._posthogClient.capture({
|
171
|
+
distinctId: this.userId,
|
172
|
+
event: event.name,
|
173
|
+
properties,
|
174
|
+
});
|
175
|
+
}
|
176
|
+
catch (e) {
|
177
|
+
logger.debug(`Failed to track PostHog event ${event.name}: ${e}`);
|
178
|
+
}
|
179
|
+
}
|
180
|
+
// Send to Scarf (when implemented)
|
181
|
+
if (this._scarfClient) {
|
182
|
+
try {
|
183
|
+
// Add package version, user_id, language flag, and source to all events
|
184
|
+
const properties = {};
|
185
|
+
properties.mcp_use_version = getPackageVersion();
|
186
|
+
properties.user_id = this.userId;
|
187
|
+
properties.event = event.name;
|
188
|
+
properties.language = 'typescript';
|
189
|
+
properties.source = this._source;
|
190
|
+
await this._scarfClient.logEvent(properties);
|
191
|
+
}
|
192
|
+
catch (e) {
|
193
|
+
logger.debug(`Failed to track Scarf event ${event.name}: ${e}`);
|
194
|
+
}
|
195
|
+
}
|
196
|
+
}
|
197
|
+
async trackPackageDownload(properties) {
|
198
|
+
if (!this._scarfClient) {
|
199
|
+
return;
|
200
|
+
}
|
201
|
+
try {
|
202
|
+
const currentVersion = getPackageVersion();
|
203
|
+
let shouldTrack = false;
|
204
|
+
let firstDownload = false;
|
205
|
+
// Check if version file exists
|
206
|
+
if (!fs.existsSync(this.VERSION_DOWNLOAD_PATH)) {
|
207
|
+
// First download
|
208
|
+
shouldTrack = true;
|
209
|
+
firstDownload = true;
|
210
|
+
// Create directory and save version
|
211
|
+
fs.mkdirSync(path.dirname(this.VERSION_DOWNLOAD_PATH), { recursive: true });
|
212
|
+
fs.writeFileSync(this.VERSION_DOWNLOAD_PATH, currentVersion);
|
213
|
+
}
|
214
|
+
else {
|
215
|
+
// Read saved version
|
216
|
+
const savedVersion = fs.readFileSync(this.VERSION_DOWNLOAD_PATH, 'utf-8').trim();
|
217
|
+
// Compare versions (simple string comparison for now)
|
218
|
+
if (currentVersion > savedVersion) {
|
219
|
+
shouldTrack = true;
|
220
|
+
firstDownload = false;
|
221
|
+
// Update saved version
|
222
|
+
fs.writeFileSync(this.VERSION_DOWNLOAD_PATH, currentVersion);
|
223
|
+
}
|
224
|
+
}
|
225
|
+
if (shouldTrack) {
|
226
|
+
logger.debug(`Tracking package download event with properties: ${JSON.stringify(properties)}`);
|
227
|
+
// Add package version, user_id, language flag, and source to event
|
228
|
+
const eventProperties = { ...(properties || {}) };
|
229
|
+
eventProperties.mcp_use_version = currentVersion;
|
230
|
+
eventProperties.user_id = this.userId;
|
231
|
+
eventProperties.event = 'package_download';
|
232
|
+
eventProperties.first_download = firstDownload;
|
233
|
+
eventProperties.language = 'typescript';
|
234
|
+
eventProperties.source = this._source;
|
235
|
+
await this._scarfClient.logEvent(eventProperties);
|
236
|
+
}
|
237
|
+
}
|
238
|
+
catch (e) {
|
239
|
+
logger.debug(`Failed to track Scarf package_download event: ${e}`);
|
240
|
+
}
|
241
|
+
}
|
242
|
+
async trackAgentExecution(data) {
|
243
|
+
const event = new MCPAgentExecutionEvent(data);
|
244
|
+
await this.capture(event);
|
245
|
+
}
|
246
|
+
flush() {
|
247
|
+
// Flush PostHog
|
248
|
+
if (this._posthogClient) {
|
249
|
+
try {
|
250
|
+
this._posthogClient.flush();
|
251
|
+
logger.debug('PostHog client telemetry queue flushed');
|
252
|
+
}
|
253
|
+
catch (e) {
|
254
|
+
logger.debug(`Failed to flush PostHog client: ${e}`);
|
255
|
+
}
|
256
|
+
}
|
257
|
+
// Scarf events are sent immediately, no flush needed
|
258
|
+
if (this._scarfClient) {
|
259
|
+
logger.debug('Scarf telemetry events sent immediately (no flush needed)');
|
260
|
+
}
|
261
|
+
}
|
262
|
+
shutdown() {
|
263
|
+
// Shutdown PostHog
|
264
|
+
if (this._posthogClient) {
|
265
|
+
try {
|
266
|
+
this._posthogClient.shutdown();
|
267
|
+
logger.debug('PostHog client shutdown successfully');
|
268
|
+
}
|
269
|
+
catch (e) {
|
270
|
+
logger.debug(`Error shutting down PostHog client: ${e}`);
|
271
|
+
}
|
272
|
+
}
|
273
|
+
// Scarf doesn't require explicit shutdown
|
274
|
+
if (this._scarfClient) {
|
275
|
+
logger.debug('Scarf telemetry client shutdown (no action needed)');
|
276
|
+
}
|
277
|
+
}
|
278
|
+
}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import type { BaseLanguageModel } from '@langchain/core/language_models/base';
|
2
|
+
export declare function getPackageVersion(): string;
|
3
|
+
export declare function getModelProvider(llm: BaseLanguageModel): string;
|
4
|
+
export declare function getModelName(llm: BaseLanguageModel): string;
|
5
|
+
export declare function extractModelInfo(llm: BaseLanguageModel): [string, string];
|
6
|
+
//# sourceMappingURL=utils.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/telemetry/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAA;AAI7E,wBAAgB,iBAAiB,IAAI,MAAM,CAS1C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,CAG/D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,CAgB3D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzE"}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import * as fs from 'node:fs';
|
2
|
+
import * as path from 'node:path';
|
3
|
+
export function getPackageVersion() {
|
4
|
+
try {
|
5
|
+
const packagePath = path.join(__dirname, '../../package.json');
|
6
|
+
const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));
|
7
|
+
return packageJson.version || 'unknown';
|
8
|
+
}
|
9
|
+
catch {
|
10
|
+
return 'unknown';
|
11
|
+
}
|
12
|
+
}
|
13
|
+
export function getModelProvider(llm) {
|
14
|
+
// Use LangChain's standard _llm_type property for identification
|
15
|
+
return llm._llm_type || llm.constructor.name.toLowerCase();
|
16
|
+
}
|
17
|
+
export function getModelName(llm) {
|
18
|
+
// First try _identifying_params which may contain model info
|
19
|
+
if ('_identifyingParams' in llm) {
|
20
|
+
const identifyingParams = llm._identifyingParams;
|
21
|
+
if (typeof identifyingParams === 'object' && identifyingParams !== null) {
|
22
|
+
// Common keys that contain model names
|
23
|
+
for (const key of ['model', 'modelName', 'model_name', 'modelId', 'model_id', 'deploymentName', 'deployment_name']) {
|
24
|
+
if (key in identifyingParams) {
|
25
|
+
return String(identifyingParams[key]);
|
26
|
+
}
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
30
|
+
// Fallback to direct model attributes
|
31
|
+
return llm.model || llm.modelName || llm.constructor.name;
|
32
|
+
}
|
33
|
+
export function extractModelInfo(llm) {
|
34
|
+
return [getModelProvider(llm), getModelName(llm)];
|
35
|
+
}
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "mcp-use",
|
3
3
|
"type": "module",
|
4
|
-
"version": "0.1.
|
4
|
+
"version": "0.1.2",
|
5
5
|
"packageManager": "pnpm@10.6.1",
|
6
6
|
"description": "A utility library for integrating Model Context Protocol (MCP) with LangChain, Zod, and related tools. Provides helpers for schema conversion, event streaming, and SDK usage.",
|
7
7
|
"author": "Zane",
|
@@ -75,11 +75,13 @@
|
|
75
75
|
"@langchain/core": "0.3.58",
|
76
76
|
"@langchain/openai": "^0.5.15",
|
77
77
|
"@modelcontextprotocol/sdk": "1.12.1",
|
78
|
+
"@scarf/scarf": "^1.4.0",
|
78
79
|
"dotenv": "^16.5.0",
|
79
80
|
"eventsource": "^3.0.6",
|
80
81
|
"fastembed": "^1.14.4",
|
81
82
|
"langchain": "^0.3.27",
|
82
83
|
"lodash-es": "^4.17.21",
|
84
|
+
"posthog-node": "^5.1.1",
|
83
85
|
"uuid": "^11.1.0",
|
84
86
|
"winston": "^3.17.0",
|
85
87
|
"ws": "^8.18.2",
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"add_server.d.ts","sourceRoot":"","sources":["../../../../src/managers/tools/add_server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,qBAAa,gBAAiB,SAAQ,cAAc;IAClD,IAAI,SAAmB;IACvB,WAAW,SAC8E;IAEzF,MAAM;;;;;;;;;OAOJ;IAEF,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,EAAE,aAAa;cAKlB,KAAK,CAAC,EACpB,UAAU,EACV,YAAY,GACb,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CA6BjD"}
|