@adhd/agent-mcp 0.0.1
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/drizzle/0000_nifty_sasquatch.sql +55 -0
- package/drizzle/meta/0000_snapshot.json +387 -0
- package/drizzle/meta/_journal.json +13 -0
- package/package.json +51 -0
- package/src/clients/http-client.d.ts +24 -0
- package/src/clients/http-client.d.ts.map +1 -0
- package/src/clients/http-client.js +96 -0
- package/src/clients/http-client.js.map +1 -0
- package/src/clients/in-process.d.ts +27 -0
- package/src/clients/in-process.d.ts.map +1 -0
- package/src/clients/in-process.js +32 -0
- package/src/clients/in-process.js.map +1 -0
- package/src/clients/index.d.ts +7 -0
- package/src/clients/index.d.ts.map +1 -0
- package/src/clients/index.js +5 -0
- package/src/clients/index.js.map +1 -0
- package/src/clients/registry.d.ts +37 -0
- package/src/clients/registry.d.ts.map +1 -0
- package/src/clients/registry.js +125 -0
- package/src/clients/registry.js.map +1 -0
- package/src/clients/stdio-client.d.ts +16 -0
- package/src/clients/stdio-client.d.ts.map +1 -0
- package/src/clients/stdio-client.js +90 -0
- package/src/clients/stdio-client.js.map +1 -0
- package/src/clients/types.d.ts +14 -0
- package/src/clients/types.d.ts.map +1 -0
- package/src/clients/types.js +2 -0
- package/src/clients/types.js.map +1 -0
- package/src/db/client.d.ts +6 -0
- package/src/db/client.d.ts.map +1 -0
- package/src/db/client.js +19 -0
- package/src/db/client.js.map +1 -0
- package/src/db/migrate.d.ts +6 -0
- package/src/db/migrate.d.ts.map +1 -0
- package/src/db/migrate.js +12 -0
- package/src/db/migrate.js.map +1 -0
- package/src/db/schema.d.ts +733 -0
- package/src/db/schema.d.ts.map +1 -0
- package/src/db/schema.js +100 -0
- package/src/db/schema.js.map +1 -0
- package/src/engine/orchestrator.d.ts +24 -0
- package/src/engine/orchestrator.d.ts.map +1 -0
- package/src/engine/orchestrator.js +231 -0
- package/src/engine/orchestrator.js.map +1 -0
- package/src/engine/policy.d.ts +42 -0
- package/src/engine/policy.d.ts.map +1 -0
- package/src/engine/policy.js +45 -0
- package/src/engine/policy.js.map +1 -0
- package/src/engine/queue.d.ts +23 -0
- package/src/engine/queue.d.ts.map +1 -0
- package/src/engine/queue.js +45 -0
- package/src/engine/queue.js.map +1 -0
- package/src/index.d.ts +3 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +51 -0
- package/src/index.js.map +1 -0
- package/src/logger.d.ts +11 -0
- package/src/logger.d.ts.map +1 -0
- package/src/logger.js +17 -0
- package/src/logger.js.map +1 -0
- package/src/providers/anthropic.d.ts +11 -0
- package/src/providers/anthropic.d.ts.map +1 -0
- package/src/providers/anthropic.js +133 -0
- package/src/providers/anthropic.js.map +1 -0
- package/src/providers/factory.d.ts +7 -0
- package/src/providers/factory.d.ts.map +1 -0
- package/src/providers/factory.js +21 -0
- package/src/providers/factory.js.map +1 -0
- package/src/providers/index.d.ts +6 -0
- package/src/providers/index.d.ts.map +1 -0
- package/src/providers/index.js +5 -0
- package/src/providers/index.js.map +1 -0
- package/src/providers/lmstudio.d.ts +8 -0
- package/src/providers/lmstudio.d.ts.map +1 -0
- package/src/providers/lmstudio.js +15 -0
- package/src/providers/lmstudio.js.map +1 -0
- package/src/providers/openai.d.ts +12 -0
- package/src/providers/openai.d.ts.map +1 -0
- package/src/providers/openai.js +129 -0
- package/src/providers/openai.js.map +1 -0
- package/src/providers/types.d.ts +32 -0
- package/src/providers/types.d.ts.map +1 -0
- package/src/providers/types.js +2 -0
- package/src/providers/types.js.map +1 -0
- package/src/server.d.ts +23 -0
- package/src/server.d.ts.map +1 -0
- package/src/server.js +539 -0
- package/src/server.js.map +1 -0
- package/src/store/agent-store.d.ts +12 -0
- package/src/store/agent-store.d.ts.map +1 -0
- package/src/store/agent-store.js +97 -0
- package/src/store/agent-store.js.map +1 -0
- package/src/store/index.d.ts +4 -0
- package/src/store/index.d.ts.map +1 -0
- package/src/store/index.js +4 -0
- package/src/store/index.js.map +1 -0
- package/src/store/session-store.d.ts +23 -0
- package/src/store/session-store.d.ts.map +1 -0
- package/src/store/session-store.js +152 -0
- package/src/store/session-store.js.map +1 -0
- package/src/store/task-store.d.ts +49 -0
- package/src/store/task-store.d.ts.map +1 -0
- package/src/store/task-store.js +154 -0
- package/src/store/task-store.js.map +1 -0
- package/src/tools/agent-crud.d.ts +13 -0
- package/src/tools/agent-crud.d.ts.map +1 -0
- package/src/tools/agent-crud.js +17 -0
- package/src/tools/agent-crud.js.map +1 -0
- package/src/tools/session.d.ts +21 -0
- package/src/tools/session.d.ts.map +1 -0
- package/src/tools/session.js +41 -0
- package/src/tools/session.js.map +1 -0
- package/src/tools/task.d.ts +38 -0
- package/src/tools/task.d.ts.map +1 -0
- package/src/tools/task.js +136 -0
- package/src/tools/task.js.map +1 -0
- package/src/types/agent.d.ts +2 -0
- package/src/types/agent.d.ts.map +1 -0
- package/src/types/agent.js +3 -0
- package/src/types/agent.js.map +1 -0
- package/src/types/execution.d.ts +2 -0
- package/src/types/execution.d.ts.map +1 -0
- package/src/types/execution.js +3 -0
- package/src/types/execution.js.map +1 -0
- package/src/types/index.d.ts +2 -0
- package/src/types/index.d.ts.map +1 -0
- package/src/types/index.js +2 -0
- package/src/types/index.js.map +1 -0
- package/src/types/mcp.d.ts +2 -0
- package/src/types/mcp.d.ts.map +1 -0
- package/src/types/mcp.js +3 -0
- package/src/types/mcp.js.map +1 -0
- package/src/types/message.d.ts +2 -0
- package/src/types/message.d.ts.map +1 -0
- package/src/types/message.js +3 -0
- package/src/types/message.js.map +1 -0
- package/src/types/session.d.ts +2 -0
- package/src/types/session.d.ts.map +1 -0
- package/src/types/session.js +3 -0
- package/src/types/session.js.map +1 -0
- package/src/types/task.d.ts +2 -0
- package/src/types/task.d.ts.map +1 -0
- package/src/types/task.js +3 -0
- package/src/types/task.js.map +1 -0
- package/src/utils/ids.d.ts +2 -0
- package/src/utils/ids.d.ts.map +1 -0
- package/src/utils/ids.js +5 -0
- package/src/utils/ids.js.map +1 -0
- package/src/utils/logger.d.ts +2 -0
- package/src/utils/logger.d.ts.map +1 -0
- package/src/utils/logger.js +5 -0
- package/src/utils/logger.js.map +1 -0
- package/src/utils/timestamps.d.ts +2 -0
- package/src/utils/timestamps.d.ts.map +1 -0
- package/src/utils/timestamps.js +4 -0
- package/src/utils/timestamps.js.map +1 -0
- package/src/validation/agent.d.ts +276 -0
- package/src/validation/agent.d.ts.map +1 -0
- package/src/validation/agent.js +94 -0
- package/src/validation/agent.js.map +1 -0
- package/src/validation/agents.d.ts +2 -0
- package/src/validation/agents.d.ts.map +1 -0
- package/src/validation/agents.js +3 -0
- package/src/validation/agents.js.map +1 -0
- package/src/validation/errors.d.ts +23 -0
- package/src/validation/errors.d.ts.map +1 -0
- package/src/validation/errors.js +33 -0
- package/src/validation/errors.js.map +1 -0
- package/src/validation/execution.d.ts +83 -0
- package/src/validation/execution.d.ts.map +1 -0
- package/src/validation/execution.js +23 -0
- package/src/validation/execution.js.map +1 -0
- package/src/validation/index.d.ts +8 -0
- package/src/validation/index.d.ts.map +1 -0
- package/src/validation/index.js +8 -0
- package/src/validation/index.js.map +1 -0
- package/src/validation/mcp.d.ts +43 -0
- package/src/validation/mcp.d.ts.map +1 -0
- package/src/validation/mcp.js +28 -0
- package/src/validation/mcp.js.map +1 -0
- package/src/validation/message.d.ts +46 -0
- package/src/validation/message.d.ts.map +1 -0
- package/src/validation/message.js +23 -0
- package/src/validation/message.js.map +1 -0
- package/src/validation/session.d.ts +49 -0
- package/src/validation/session.d.ts.map +1 -0
- package/src/validation/session.js +34 -0
- package/src/validation/session.js.map +1 -0
- package/src/validation/task.d.ts +94 -0
- package/src/validation/task.d.ts.map +1 -0
- package/src/validation/task.js +60 -0
- package/src/validation/task.js.map +1 -0
- package/src/validation/tasks.d.ts +2 -0
- package/src/validation/tasks.d.ts.map +1 -0
- package/src/validation/tasks.js +3 -0
- package/src/validation/tasks.js.map +1 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InProcessMcpClient routes tool calls directly to runtime handler
|
|
3
|
+
* functions without any network round-trip.
|
|
4
|
+
*
|
|
5
|
+
* This is the client used when an agent definition includes an
|
|
6
|
+
* "agent-mcp" server entry — it allows recursive delegation while
|
|
7
|
+
* preserving the ExecutionContext thread.
|
|
8
|
+
*/
|
|
9
|
+
export class InProcessMcpClient {
|
|
10
|
+
tools;
|
|
11
|
+
handler;
|
|
12
|
+
context;
|
|
13
|
+
constructor(tools, handler, context) {
|
|
14
|
+
this.tools = tools;
|
|
15
|
+
this.handler = handler;
|
|
16
|
+
this.context = context;
|
|
17
|
+
}
|
|
18
|
+
async listTools() {
|
|
19
|
+
return this.tools.map(t => ({
|
|
20
|
+
name: t.name,
|
|
21
|
+
description: t.description,
|
|
22
|
+
inputSchema: t.inputSchema,
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
async callTool(toolName, args) {
|
|
26
|
+
return this.handler(toolName, args, this.context);
|
|
27
|
+
}
|
|
28
|
+
async close() {
|
|
29
|
+
// no-op — in-process, nothing to tear down
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=in-process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-process.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/clients/in-process.ts"],"names":[],"mappings":"AAgBA;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAkB;IAEN;IACA;IACA;IAHrB,YACqB,KAAgC,EAChC,OAA6B,EAC7B,OAAyB;QAFzB,UAAK,GAAL,KAAK,CAA2B;QAChC,YAAO,GAAP,OAAO,CAAsB;QAC7B,YAAO,GAAP,OAAO,CAAkB;IAC3C,CAAC;IAEJ,KAAK,CAAC,SAAS;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;SAC7B,CAAC,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,IAAa;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,KAAK;QACP,2CAA2C;IAC/C,CAAC;CACJ"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { IMcpClient } from "./types.js";
|
|
2
|
+
export { InProcessMcpClient } from "./in-process.js";
|
|
3
|
+
export type { InProcessToolHandler, InProcessToolDescriptor } from "./in-process.js";
|
|
4
|
+
export { StdioMcpClient } from "./stdio-client.js";
|
|
5
|
+
export { HttpMcpClient, SseMcpClient } from "./http-client.js";
|
|
6
|
+
export { McpClientRegistry } from "./registry.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/clients/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/clients/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ToolDefinition } from "../providers/types.js";
|
|
2
|
+
import type { ExecutionContext, McpServerConfig } from "../validation/index.js";
|
|
3
|
+
import type { InProcessToolDescriptor, InProcessToolHandler } from "./in-process.js";
|
|
4
|
+
import type { IMcpClient } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* McpClientRegistry — per-task lifetime.
|
|
7
|
+
*
|
|
8
|
+
* Created fresh for each task() call and torn down in the Orchestrator's
|
|
9
|
+
* finally block via closeAll(). Never reused across tasks.
|
|
10
|
+
*
|
|
11
|
+
* Self-referential detection (routes to InProcessMcpClient):
|
|
12
|
+
* 1. Key === "agent-mcp" (always applies)
|
|
13
|
+
* 2. URL matches selfUrl (only when selfUrl is defined — http/sse transport)
|
|
14
|
+
* When TRANSPORT=stdio, selfUrl is undefined and only condition 1 applies.
|
|
15
|
+
*/
|
|
16
|
+
export declare class McpClientRegistry {
|
|
17
|
+
private readonly mcpServers;
|
|
18
|
+
private readonly selfUrl;
|
|
19
|
+
private readonly inProcessDescriptors;
|
|
20
|
+
private readonly inProcessHandler;
|
|
21
|
+
private readonly context;
|
|
22
|
+
private readonly clients;
|
|
23
|
+
private readonly connectPromises;
|
|
24
|
+
constructor(mcpServers: Record<string, McpServerConfig>, selfUrl: string | undefined, inProcessDescriptors: InProcessToolDescriptor[], inProcessHandler: InProcessToolHandler, context: ExecutionContext);
|
|
25
|
+
private isSelfReferential;
|
|
26
|
+
private getOrCreateClient;
|
|
27
|
+
/** Get a client for a specific server, connecting lazily if needed */
|
|
28
|
+
getClient(name: string): Promise<IMcpClient>;
|
|
29
|
+
/**
|
|
30
|
+
* List all tools across all configured servers.
|
|
31
|
+
* Prefixes each tool name with "<server>__<tool>" for disambiguation.
|
|
32
|
+
*/
|
|
33
|
+
listAllTools(): Promise<ToolDefinition[]>;
|
|
34
|
+
/** Tear down all clients — called from Orchestrator's finally block */
|
|
35
|
+
closeAll(): Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/clients/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,KAAK,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAIrF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;;;GAUG;AACH,qBAAa,iBAAiB;IAKtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAR5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoC;gBAG/C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EAC3C,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,oBAAoB,EAAE,uBAAuB,EAAE,EAC/C,gBAAgB,EAAE,oBAAoB,EACtC,OAAO,EAAE,gBAAgB;IAG9C,OAAO,CAAC,iBAAiB;YAcX,iBAAiB;IAiD/B,sEAAsE;IAChE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIlD;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAyB/C,uEAAuE;IACjE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAgBlC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { logger } from "../logger.js";
|
|
2
|
+
import { InProcessMcpClient } from "./in-process.js";
|
|
3
|
+
import { HttpMcpClient, SseMcpClient } from "./http-client.js";
|
|
4
|
+
import { StdioMcpClient } from "./stdio-client.js";
|
|
5
|
+
/**
|
|
6
|
+
* McpClientRegistry — per-task lifetime.
|
|
7
|
+
*
|
|
8
|
+
* Created fresh for each task() call and torn down in the Orchestrator's
|
|
9
|
+
* finally block via closeAll(). Never reused across tasks.
|
|
10
|
+
*
|
|
11
|
+
* Self-referential detection (routes to InProcessMcpClient):
|
|
12
|
+
* 1. Key === "agent-mcp" (always applies)
|
|
13
|
+
* 2. URL matches selfUrl (only when selfUrl is defined — http/sse transport)
|
|
14
|
+
* When TRANSPORT=stdio, selfUrl is undefined and only condition 1 applies.
|
|
15
|
+
*/
|
|
16
|
+
export class McpClientRegistry {
|
|
17
|
+
mcpServers;
|
|
18
|
+
selfUrl;
|
|
19
|
+
inProcessDescriptors;
|
|
20
|
+
inProcessHandler;
|
|
21
|
+
context;
|
|
22
|
+
clients = new Map();
|
|
23
|
+
connectPromises = new Map();
|
|
24
|
+
constructor(mcpServers, selfUrl, inProcessDescriptors, inProcessHandler, context) {
|
|
25
|
+
this.mcpServers = mcpServers;
|
|
26
|
+
this.selfUrl = selfUrl;
|
|
27
|
+
this.inProcessDescriptors = inProcessDescriptors;
|
|
28
|
+
this.inProcessHandler = inProcessHandler;
|
|
29
|
+
this.context = context;
|
|
30
|
+
}
|
|
31
|
+
isSelfReferential(name, config) {
|
|
32
|
+
if (name === "agent-mcp")
|
|
33
|
+
return true;
|
|
34
|
+
if (this.selfUrl &&
|
|
35
|
+
(config.transport === "http" || config.transport === "sse") &&
|
|
36
|
+
config.url === this.selfUrl) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
async getOrCreateClient(name) {
|
|
42
|
+
const existing = this.clients.get(name);
|
|
43
|
+
if (existing)
|
|
44
|
+
return existing;
|
|
45
|
+
const config = this.mcpServers[name];
|
|
46
|
+
if (!config) {
|
|
47
|
+
throw new Error(`No MCP server config found for server: '${name}'`);
|
|
48
|
+
}
|
|
49
|
+
if (this.isSelfReferential(name, config)) {
|
|
50
|
+
const client = new InProcessMcpClient(this.inProcessDescriptors, this.inProcessHandler, this.context);
|
|
51
|
+
this.clients.set(name, client);
|
|
52
|
+
return client;
|
|
53
|
+
}
|
|
54
|
+
// Create and connect the appropriate transport client
|
|
55
|
+
let connectPromise = this.connectPromises.get(name);
|
|
56
|
+
if (connectPromise) {
|
|
57
|
+
await connectPromise;
|
|
58
|
+
return this.clients.get(name);
|
|
59
|
+
}
|
|
60
|
+
let client;
|
|
61
|
+
if (config.transport === "stdio") {
|
|
62
|
+
client = new StdioMcpClient(name, config);
|
|
63
|
+
}
|
|
64
|
+
else if (config.transport === "http") {
|
|
65
|
+
client = new HttpMcpClient(name, config);
|
|
66
|
+
}
|
|
67
|
+
else if (config.transport === "sse") {
|
|
68
|
+
client = new SseMcpClient(name, config);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
const exhaustive = config;
|
|
72
|
+
throw new Error(`Unknown MCP transport: ${exhaustive.transport}`);
|
|
73
|
+
}
|
|
74
|
+
connectPromise = client.connect().then(() => {
|
|
75
|
+
this.clients.set(name, client);
|
|
76
|
+
logger.debug({ server: name }, "MCP client connected");
|
|
77
|
+
});
|
|
78
|
+
this.connectPromises.set(name, connectPromise);
|
|
79
|
+
await connectPromise;
|
|
80
|
+
return this.clients.get(name);
|
|
81
|
+
}
|
|
82
|
+
/** Get a client for a specific server, connecting lazily if needed */
|
|
83
|
+
async getClient(name) {
|
|
84
|
+
return this.getOrCreateClient(name);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* List all tools across all configured servers.
|
|
88
|
+
* Prefixes each tool name with "<server>__<tool>" for disambiguation.
|
|
89
|
+
*/
|
|
90
|
+
async listAllTools() {
|
|
91
|
+
const allTools = [];
|
|
92
|
+
for (const serverName of Object.keys(this.mcpServers)) {
|
|
93
|
+
try {
|
|
94
|
+
const client = await this.getOrCreateClient(serverName);
|
|
95
|
+
const tools = await client.listTools();
|
|
96
|
+
for (const tool of tools) {
|
|
97
|
+
allTools.push({
|
|
98
|
+
...tool,
|
|
99
|
+
name: `${serverName}__${tool.name}`,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
logger.warn({ server: serverName, error }, "Failed to list tools from MCP server");
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return allTools;
|
|
108
|
+
}
|
|
109
|
+
/** Tear down all clients — called from Orchestrator's finally block */
|
|
110
|
+
async closeAll() {
|
|
111
|
+
const closePromises = Array.from(this.clients.entries()).map(async ([name, client]) => {
|
|
112
|
+
try {
|
|
113
|
+
await client.close();
|
|
114
|
+
logger.debug({ server: name }, "MCP client closed");
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
logger.warn({ server: name, error }, "Error closing MCP client");
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
await Promise.allSettled(closePromises);
|
|
121
|
+
this.clients.clear();
|
|
122
|
+
this.connectPromises.clear();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/clients/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ToolDefinition } from "../providers/types.js";
|
|
2
|
+
import type { McpStdioConfig } from "../validation/index.js";
|
|
3
|
+
import type { IMcpClient } from "./types.js";
|
|
4
|
+
export declare class StdioMcpClient implements IMcpClient {
|
|
5
|
+
private readonly serverName;
|
|
6
|
+
private readonly config;
|
|
7
|
+
private client;
|
|
8
|
+
private transport;
|
|
9
|
+
private childProcess;
|
|
10
|
+
constructor(serverName: string, config: McpStdioConfig);
|
|
11
|
+
connect(): Promise<void>;
|
|
12
|
+
listTools(): Promise<ToolDefinition[]>;
|
|
13
|
+
callTool(toolName: string, args: unknown): Promise<unknown>;
|
|
14
|
+
close(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=stdio-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-client.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/clients/stdio-client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,qBAAa,cAAe,YAAW,UAAU;IAMzC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAN3B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,YAAY,CAA6B;gBAG5B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,cAAc;IAGrC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCxB,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAgBtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB/B"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
2
|
+
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
3
|
+
import { logger } from "../logger.js";
|
|
4
|
+
import { ToolError } from "../validation/errors.js";
|
|
5
|
+
export class StdioMcpClient {
|
|
6
|
+
serverName;
|
|
7
|
+
config;
|
|
8
|
+
client = null;
|
|
9
|
+
transport = null;
|
|
10
|
+
childProcess = null;
|
|
11
|
+
constructor(serverName, config) {
|
|
12
|
+
this.serverName = serverName;
|
|
13
|
+
this.config = config;
|
|
14
|
+
}
|
|
15
|
+
async connect() {
|
|
16
|
+
const transport = new StdioClientTransport({
|
|
17
|
+
command: this.config.command,
|
|
18
|
+
args: this.config.args ?? [],
|
|
19
|
+
env: {
|
|
20
|
+
...process.env,
|
|
21
|
+
...this.config.env,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
this.transport = transport;
|
|
25
|
+
// Capture child process reference for lifecycle management.
|
|
26
|
+
// The StdioClientTransport exposes it after start().
|
|
27
|
+
const client = new Client({ name: "agent-mcp-client", version: "1.0.0" }, { capabilities: {} });
|
|
28
|
+
this.client = client;
|
|
29
|
+
await client.connect(transport);
|
|
30
|
+
// Attach exit handler to the underlying child process.
|
|
31
|
+
// StdioClientTransport exposes `process` after connect().
|
|
32
|
+
const childProc = transport.process;
|
|
33
|
+
if (childProc) {
|
|
34
|
+
this.childProcess = childProc;
|
|
35
|
+
childProc.on("exit", (code, signal) => {
|
|
36
|
+
logger.warn({
|
|
37
|
+
server: this.serverName,
|
|
38
|
+
exitCode: code,
|
|
39
|
+
signal,
|
|
40
|
+
}, "MCP child process exited unexpectedly");
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async listTools() {
|
|
45
|
+
if (!this.client) {
|
|
46
|
+
throw new ToolError("MCP_CLIENT_ERROR", `Client '${this.serverName}' not connected`);
|
|
47
|
+
}
|
|
48
|
+
const response = await this.client.listTools();
|
|
49
|
+
return response.tools.map(tool => ({
|
|
50
|
+
name: tool.name,
|
|
51
|
+
description: tool.description ?? "",
|
|
52
|
+
inputSchema: tool.inputSchema ?? {
|
|
53
|
+
type: "object",
|
|
54
|
+
properties: {},
|
|
55
|
+
},
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
async callTool(toolName, args) {
|
|
59
|
+
if (!this.client) {
|
|
60
|
+
throw new ToolError("MCP_CLIENT_ERROR", `Client '${this.serverName}' not connected`);
|
|
61
|
+
}
|
|
62
|
+
const signal = this.config.timeoutMs
|
|
63
|
+
? AbortSignal.timeout(this.config.timeoutMs)
|
|
64
|
+
: undefined;
|
|
65
|
+
const result = await this.client.callTool({ name: toolName, arguments: args }, undefined, { signal });
|
|
66
|
+
if (result.isError) {
|
|
67
|
+
throw new ToolError("MCP_CLIENT_ERROR", `Tool '${toolName}' on server '${this.serverName}' returned an error: ${JSON.stringify(result.content)}`);
|
|
68
|
+
}
|
|
69
|
+
return result.content;
|
|
70
|
+
}
|
|
71
|
+
async close() {
|
|
72
|
+
try {
|
|
73
|
+
await this.client?.close();
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// ignore close errors
|
|
77
|
+
}
|
|
78
|
+
if (this.childProcess && !this.childProcess.killed) {
|
|
79
|
+
this.childProcess.kill("SIGTERM");
|
|
80
|
+
// Force-kill after 5 seconds if still alive
|
|
81
|
+
const killTimer = setTimeout(() => {
|
|
82
|
+
if (this.childProcess && !this.childProcess.killed) {
|
|
83
|
+
this.childProcess.kill("SIGKILL");
|
|
84
|
+
}
|
|
85
|
+
}, 5_000);
|
|
86
|
+
killTimer.unref();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=stdio-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-client.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/clients/stdio-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ToolDefinition } from "../providers/types.js";
|
|
2
|
+
export interface IMcpClient {
|
|
3
|
+
/** Returns all tools advertised by this MCP server */
|
|
4
|
+
listTools(): Promise<ToolDefinition[]>;
|
|
5
|
+
/**
|
|
6
|
+
* Call a single tool on this server.
|
|
7
|
+
* @param toolName the tool name (without server prefix)
|
|
8
|
+
* @param args the arguments to pass
|
|
9
|
+
*/
|
|
10
|
+
callTool(toolName: string, args: unknown): Promise<unknown>;
|
|
11
|
+
/** Tear down the client (kill child processes, close connections) */
|
|
12
|
+
close(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/clients/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,UAAU;IACvB,sDAAsD;IACtD,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAEvC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5D,qEAAqE;IACrE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/clients/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/db/client.ts"],"names":[],"mappings":"AAGA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAwBtC,eAAO,MAAM,EAAE;;CAA8B,CAAC"}
|
package/src/db/client.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import Database from "better-sqlite3";
|
|
4
|
+
import { drizzle } from "drizzle-orm/better-sqlite3";
|
|
5
|
+
import * as schema from "./schema.js";
|
|
6
|
+
const databasePath = process.env["DATABASE_PATH"] ||
|
|
7
|
+
"./data/agents.db";
|
|
8
|
+
const resolvedPath = path.resolve(databasePath);
|
|
9
|
+
const directory = path.dirname(resolvedPath);
|
|
10
|
+
if (!fs.existsSync(directory)) {
|
|
11
|
+
fs.mkdirSync(directory, {
|
|
12
|
+
recursive: true
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
const sqlite = new Database(resolvedPath);
|
|
16
|
+
sqlite.pragma("journal_mode = WAL");
|
|
17
|
+
sqlite.pragma("foreign_keys = ON");
|
|
18
|
+
export const db = drizzle(sqlite, { schema });
|
|
19
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/db/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAErD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,MAAM,YAAY,GACd,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC5B,kBAAkB,CAAC;AAEvB,MAAM,YAAY,GACd,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAE/B,MAAM,SAAS,GACX,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAE/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;IAC5B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE;QACpB,SAAS,EAAE,IAAI;KAClB,CAAC,CAAC;AACP,CAAC;AAED,MAAM,MAAM,GACR,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC;AAE/B,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;AACpC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAEnC,MAAM,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/db/migrate.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAOpC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { migrate } from "drizzle-orm/better-sqlite3/migrator";
|
|
2
|
+
import { db } from "./client.js";
|
|
3
|
+
/**
|
|
4
|
+
* Runs pending Drizzle migrations synchronously before the server starts.
|
|
5
|
+
* Migrations are read from the ./drizzle folder (generated by drizzle-kit).
|
|
6
|
+
*/
|
|
7
|
+
export function runMigrations() {
|
|
8
|
+
migrate(db, {
|
|
9
|
+
migrationsFolder: new URL("../../drizzle", import.meta.url).pathname
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/db/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC;;;GAGG;AACH,MAAM,UAAU,aAAa;IACzB,OAAO,CAAC,EAAE,EAAE;QACR,gBAAgB,EAAE,IAAI,GAAG,CACrB,eAAe,EACf,MAAM,CAAC,IAAI,CAAC,GAAG,CAClB,CAAC,QAAQ;KACb,CAAC,CAAC;AACP,CAAC"}
|