@lleverage-ai/agent-sdk 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/LICENSE +21 -0
- package/README.md +2321 -0
- package/dist/agent.d.ts +52 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +2122 -0
- package/dist/agent.js.map +1 -0
- package/dist/backend.d.ts +378 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +71 -0
- package/dist/backend.js.map +1 -0
- package/dist/backends/composite.d.ts +258 -0
- package/dist/backends/composite.d.ts.map +1 -0
- package/dist/backends/composite.js +437 -0
- package/dist/backends/composite.js.map +1 -0
- package/dist/backends/filesystem.d.ts +268 -0
- package/dist/backends/filesystem.d.ts.map +1 -0
- package/dist/backends/filesystem.js +623 -0
- package/dist/backends/filesystem.js.map +1 -0
- package/dist/backends/index.d.ts +14 -0
- package/dist/backends/index.d.ts.map +1 -0
- package/dist/backends/index.js +14 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/backends/persistent.d.ts +312 -0
- package/dist/backends/persistent.d.ts.map +1 -0
- package/dist/backends/persistent.js +519 -0
- package/dist/backends/persistent.js.map +1 -0
- package/dist/backends/sandbox.d.ts +315 -0
- package/dist/backends/sandbox.d.ts.map +1 -0
- package/dist/backends/sandbox.js +490 -0
- package/dist/backends/sandbox.js.map +1 -0
- package/dist/backends/state.d.ts +225 -0
- package/dist/backends/state.d.ts.map +1 -0
- package/dist/backends/state.js +396 -0
- package/dist/backends/state.js.map +1 -0
- package/dist/checkpointer/file-saver.d.ts +182 -0
- package/dist/checkpointer/file-saver.d.ts.map +1 -0
- package/dist/checkpointer/file-saver.js +298 -0
- package/dist/checkpointer/file-saver.js.map +1 -0
- package/dist/checkpointer/index.d.ts +40 -0
- package/dist/checkpointer/index.d.ts.map +1 -0
- package/dist/checkpointer/index.js +40 -0
- package/dist/checkpointer/index.js.map +1 -0
- package/dist/checkpointer/kv-saver.d.ts +142 -0
- package/dist/checkpointer/kv-saver.d.ts.map +1 -0
- package/dist/checkpointer/kv-saver.js +176 -0
- package/dist/checkpointer/kv-saver.js.map +1 -0
- package/dist/checkpointer/memory-saver.d.ts +158 -0
- package/dist/checkpointer/memory-saver.d.ts.map +1 -0
- package/dist/checkpointer/memory-saver.js +222 -0
- package/dist/checkpointer/memory-saver.js.map +1 -0
- package/dist/checkpointer/types.d.ts +353 -0
- package/dist/checkpointer/types.d.ts.map +1 -0
- package/dist/checkpointer/types.js +159 -0
- package/dist/checkpointer/types.js.map +1 -0
- package/dist/context-manager.d.ts +627 -0
- package/dist/context-manager.d.ts.map +1 -0
- package/dist/context-manager.js +1039 -0
- package/dist/context-manager.js.map +1 -0
- package/dist/context.d.ts +57 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +76 -0
- package/dist/context.js.map +1 -0
- package/dist/errors/index.d.ts +611 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +1023 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/generation-helpers.d.ts +126 -0
- package/dist/generation-helpers.d.ts.map +1 -0
- package/dist/generation-helpers.js +181 -0
- package/dist/generation-helpers.js.map +1 -0
- package/dist/hooks/audit.d.ts +210 -0
- package/dist/hooks/audit.d.ts.map +1 -0
- package/dist/hooks/audit.js +305 -0
- package/dist/hooks/audit.js.map +1 -0
- package/dist/hooks/cache.d.ts +180 -0
- package/dist/hooks/cache.d.ts.map +1 -0
- package/dist/hooks/cache.js +273 -0
- package/dist/hooks/cache.js.map +1 -0
- package/dist/hooks/guardrails.d.ts +145 -0
- package/dist/hooks/guardrails.d.ts.map +1 -0
- package/dist/hooks/guardrails.js +326 -0
- package/dist/hooks/guardrails.js.map +1 -0
- package/dist/hooks/index.d.ts +18 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +32 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/logging.d.ts +193 -0
- package/dist/hooks/logging.d.ts.map +1 -0
- package/dist/hooks/logging.js +345 -0
- package/dist/hooks/logging.js.map +1 -0
- package/dist/hooks/parallel-guardrails.d.ts +268 -0
- package/dist/hooks/parallel-guardrails.d.ts.map +1 -0
- package/dist/hooks/parallel-guardrails.js +416 -0
- package/dist/hooks/parallel-guardrails.js.map +1 -0
- package/dist/hooks/rate-limit.d.ts +305 -0
- package/dist/hooks/rate-limit.d.ts.map +1 -0
- package/dist/hooks/rate-limit.js +372 -0
- package/dist/hooks/rate-limit.js.map +1 -0
- package/dist/hooks/retry.d.ts +144 -0
- package/dist/hooks/retry.d.ts.map +1 -0
- package/dist/hooks/retry.js +210 -0
- package/dist/hooks/retry.js.map +1 -0
- package/dist/hooks/secrets.d.ts +174 -0
- package/dist/hooks/secrets.d.ts.map +1 -0
- package/dist/hooks/secrets.js +306 -0
- package/dist/hooks/secrets.js.map +1 -0
- package/dist/hooks.d.ts +229 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +352 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +97 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +182 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/env.d.ts +25 -0
- package/dist/mcp/env.d.ts.map +1 -0
- package/dist/mcp/env.js +18 -0
- package/dist/mcp/env.js.map +1 -0
- package/dist/mcp/index.d.ts +16 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +17 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +184 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +446 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/types.d.ts +58 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +7 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/mcp/validation.d.ts +119 -0
- package/dist/mcp/validation.d.ts.map +1 -0
- package/dist/mcp/validation.js +407 -0
- package/dist/mcp/validation.js.map +1 -0
- package/dist/mcp/virtual-server.d.ts +78 -0
- package/dist/mcp/virtual-server.d.ts.map +1 -0
- package/dist/mcp/virtual-server.js +137 -0
- package/dist/mcp/virtual-server.js.map +1 -0
- package/dist/memory/filesystem-store.d.ts +217 -0
- package/dist/memory/filesystem-store.d.ts.map +1 -0
- package/dist/memory/filesystem-store.js +343 -0
- package/dist/memory/filesystem-store.js.map +1 -0
- package/dist/memory/index.d.ts +46 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +46 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/loader.d.ts +396 -0
- package/dist/memory/loader.d.ts.map +1 -0
- package/dist/memory/loader.js +419 -0
- package/dist/memory/loader.js.map +1 -0
- package/dist/memory/permissions.d.ts +282 -0
- package/dist/memory/permissions.d.ts.map +1 -0
- package/dist/memory/permissions.js +297 -0
- package/dist/memory/permissions.js.map +1 -0
- package/dist/memory/rules.d.ts +249 -0
- package/dist/memory/rules.d.ts.map +1 -0
- package/dist/memory/rules.js +362 -0
- package/dist/memory/rules.js.map +1 -0
- package/dist/memory/store.d.ts +286 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +263 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/middleware/apply.d.ts +73 -0
- package/dist/middleware/apply.d.ts.map +1 -0
- package/dist/middleware/apply.js +219 -0
- package/dist/middleware/apply.js.map +1 -0
- package/dist/middleware/context.d.ts +33 -0
- package/dist/middleware/context.d.ts.map +1 -0
- package/dist/middleware/context.js +176 -0
- package/dist/middleware/context.js.map +1 -0
- package/dist/middleware/index.d.ts +31 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +32 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/logging.d.ts +137 -0
- package/dist/middleware/logging.d.ts.map +1 -0
- package/dist/middleware/logging.js +374 -0
- package/dist/middleware/logging.js.map +1 -0
- package/dist/middleware/types.d.ts +183 -0
- package/dist/middleware/types.d.ts.map +1 -0
- package/dist/middleware/types.js +11 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/observability/events.d.ts +183 -0
- package/dist/observability/events.d.ts.map +1 -0
- package/dist/observability/events.js +305 -0
- package/dist/observability/events.js.map +1 -0
- package/dist/observability/index.d.ts +55 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +87 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/logger.d.ts +318 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +436 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/metrics.d.ts +341 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +490 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/preset.d.ts +161 -0
- package/dist/observability/preset.d.ts.map +1 -0
- package/dist/observability/preset.js +133 -0
- package/dist/observability/preset.js.map +1 -0
- package/dist/observability/streaming.d.ts +113 -0
- package/dist/observability/streaming.d.ts.map +1 -0
- package/dist/observability/streaming.js +114 -0
- package/dist/observability/streaming.js.map +1 -0
- package/dist/observability/tracing.d.ts +378 -0
- package/dist/observability/tracing.d.ts.map +1 -0
- package/dist/observability/tracing.js +539 -0
- package/dist/observability/tracing.js.map +1 -0
- package/dist/plugins.d.ts +55 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +63 -0
- package/dist/plugins.js.map +1 -0
- package/dist/presets/index.d.ts +7 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +7 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/presets/production.d.ts +262 -0
- package/dist/presets/production.d.ts.map +1 -0
- package/dist/presets/production.js +295 -0
- package/dist/presets/production.js.map +1 -0
- package/dist/security/index.d.ts +179 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +323 -0
- package/dist/security/index.js.map +1 -0
- package/dist/subagents/advanced.d.ts +413 -0
- package/dist/subagents/advanced.d.ts.map +1 -0
- package/dist/subagents/advanced.js +396 -0
- package/dist/subagents/advanced.js.map +1 -0
- package/dist/subagents/index.d.ts +14 -0
- package/dist/subagents/index.d.ts.map +1 -0
- package/dist/subagents/index.js +15 -0
- package/dist/subagents/index.js.map +1 -0
- package/dist/subagents.d.ts +73 -0
- package/dist/subagents.d.ts.map +1 -0
- package/dist/subagents.js +213 -0
- package/dist/subagents.js.map +1 -0
- package/dist/task-store/file-store.d.ts +76 -0
- package/dist/task-store/file-store.d.ts.map +1 -0
- package/dist/task-store/file-store.js +190 -0
- package/dist/task-store/file-store.js.map +1 -0
- package/dist/task-store/index.d.ts +11 -0
- package/dist/task-store/index.d.ts.map +1 -0
- package/dist/task-store/index.js +10 -0
- package/dist/task-store/index.js.map +1 -0
- package/dist/task-store/kv-store.d.ts +140 -0
- package/dist/task-store/kv-store.d.ts.map +1 -0
- package/dist/task-store/kv-store.js +169 -0
- package/dist/task-store/kv-store.js.map +1 -0
- package/dist/task-store/memory-store.d.ts +66 -0
- package/dist/task-store/memory-store.d.ts.map +1 -0
- package/dist/task-store/memory-store.js +125 -0
- package/dist/task-store/memory-store.js.map +1 -0
- package/dist/task-store/types.d.ts +235 -0
- package/dist/task-store/types.d.ts.map +1 -0
- package/dist/task-store/types.js +110 -0
- package/dist/task-store/types.js.map +1 -0
- package/dist/testing/assertions.d.ts +401 -0
- package/dist/testing/assertions.d.ts.map +1 -0
- package/dist/testing/assertions.js +630 -0
- package/dist/testing/assertions.js.map +1 -0
- package/dist/testing/index.d.ts +343 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +360 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-agent.d.ts +214 -0
- package/dist/testing/mock-agent.d.ts.map +1 -0
- package/dist/testing/mock-agent.js +448 -0
- package/dist/testing/mock-agent.js.map +1 -0
- package/dist/testing/recorder.d.ts +288 -0
- package/dist/testing/recorder.d.ts.map +1 -0
- package/dist/testing/recorder.js +499 -0
- package/dist/testing/recorder.js.map +1 -0
- package/dist/tools/execute.d.ts +104 -0
- package/dist/tools/execute.d.ts.map +1 -0
- package/dist/tools/execute.js +191 -0
- package/dist/tools/execute.js.map +1 -0
- package/dist/tools/factory.d.ts +260 -0
- package/dist/tools/factory.d.ts.map +1 -0
- package/dist/tools/factory.js +241 -0
- package/dist/tools/factory.js.map +1 -0
- package/dist/tools/filesystem.d.ts +215 -0
- package/dist/tools/filesystem.d.ts.map +1 -0
- package/dist/tools/filesystem.js +311 -0
- package/dist/tools/filesystem.js.map +1 -0
- package/dist/tools/index.d.ts +33 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +33 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/search.d.ts +59 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +94 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/skills.d.ts +354 -0
- package/dist/tools/skills.d.ts.map +1 -0
- package/dist/tools/skills.js +413 -0
- package/dist/tools/skills.js.map +1 -0
- package/dist/tools/task.d.ts +272 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +521 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/todos.d.ts +131 -0
- package/dist/tools/todos.d.ts.map +1 -0
- package/dist/tools/todos.js +120 -0
- package/dist/tools/todos.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +424 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +607 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/user-interaction.d.ts +116 -0
- package/dist/tools/user-interaction.d.ts.map +1 -0
- package/dist/tools/user-interaction.js +147 -0
- package/dist/tools/user-interaction.js.map +1 -0
- package/dist/tools/utils.d.ts +124 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +189 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools.d.ts +74 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +73 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +2421 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +55 -0
- package/dist/types.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Manager for unified tool management.
|
|
3
|
+
*
|
|
4
|
+
* Handles both inline plugin tools (via VirtualMCPServer) and
|
|
5
|
+
* external MCP servers (via official SDK).
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
10
|
+
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
11
|
+
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
12
|
+
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
13
|
+
import { tool } from "ai";
|
|
14
|
+
import { expandEnvVars } from "./env.js";
|
|
15
|
+
import { isSchemaEmpty, jsonSchemaToZod, MCPInputValidator } from "./validation.js";
|
|
16
|
+
import { VirtualMCPServer } from "./virtual-server.js";
|
|
17
|
+
/**
|
|
18
|
+
* Manages MCP tool registration, discovery, and execution.
|
|
19
|
+
*
|
|
20
|
+
* Provides a unified interface for tools from:
|
|
21
|
+
* - Inline plugin definitions (wrapped as virtual MCP servers)
|
|
22
|
+
* - External MCP servers (stdio, http, sse)
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const manager = new MCPManager();
|
|
27
|
+
*
|
|
28
|
+
* // Register inline plugin tools
|
|
29
|
+
* manager.registerPluginTools("my-plugin", { myTool: tool(...) });
|
|
30
|
+
*
|
|
31
|
+
* // Connect to external MCP server
|
|
32
|
+
* await manager.connectServer("github", {
|
|
33
|
+
* type: "stdio",
|
|
34
|
+
* command: "npx",
|
|
35
|
+
* args: ["-y", "@modelcontextprotocol/server-github"],
|
|
36
|
+
* env: { GITHUB_TOKEN: "${GITHUB_TOKEN}" },
|
|
37
|
+
* });
|
|
38
|
+
*
|
|
39
|
+
* // Search and use tools
|
|
40
|
+
* const tools = manager.searchTools("github issues");
|
|
41
|
+
* const toolSet = manager.getToolSet();
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @category MCP
|
|
45
|
+
*/
|
|
46
|
+
export class MCPManager {
|
|
47
|
+
/** Virtual servers for inline plugin tools */
|
|
48
|
+
virtualServers = new Map();
|
|
49
|
+
/** Connected external MCP clients */
|
|
50
|
+
externalClients = new Map();
|
|
51
|
+
/** Cached tool metadata for search */
|
|
52
|
+
toolMetadataCache = [];
|
|
53
|
+
/** Whether cache needs refresh */
|
|
54
|
+
cacheInvalid = true;
|
|
55
|
+
/** Set of tools that are loaded and available for use */
|
|
56
|
+
loadedTools = new Set();
|
|
57
|
+
/** Track which servers have auto-load enabled */
|
|
58
|
+
autoLoadServers = new Set();
|
|
59
|
+
/** Connection failure callback */
|
|
60
|
+
onConnectionFailed;
|
|
61
|
+
/** Connection restored callback */
|
|
62
|
+
onConnectionRestored;
|
|
63
|
+
/** Input validator for MCP tools */
|
|
64
|
+
validator = new MCPInputValidator();
|
|
65
|
+
/**
|
|
66
|
+
* Creates a new MCP manager.
|
|
67
|
+
*
|
|
68
|
+
* @param options - Configuration options including hook callbacks
|
|
69
|
+
*/
|
|
70
|
+
constructor(options = {}) {
|
|
71
|
+
this.onConnectionFailed = options.onConnectionFailed;
|
|
72
|
+
this.onConnectionRestored = options.onConnectionRestored;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Connect to an external MCP server.
|
|
76
|
+
*
|
|
77
|
+
* @param name - Unique name for this server (used in tool naming)
|
|
78
|
+
* @param config - Server connection configuration
|
|
79
|
+
* @throws If server with same name is already connected
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* // Connect to stdio server
|
|
84
|
+
* await manager.connectServer("github", {
|
|
85
|
+
* type: "stdio",
|
|
86
|
+
* command: "npx",
|
|
87
|
+
* args: ["-y", "@modelcontextprotocol/server-github"],
|
|
88
|
+
* env: { GITHUB_TOKEN: "${GITHUB_TOKEN}" },
|
|
89
|
+
* });
|
|
90
|
+
*
|
|
91
|
+
* // Connect to HTTP server
|
|
92
|
+
* await manager.connectServer("docs", {
|
|
93
|
+
* type: "http",
|
|
94
|
+
* url: "https://docs.example.com/mcp",
|
|
95
|
+
* headers: { Authorization: "Bearer ${API_TOKEN}" },
|
|
96
|
+
* });
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
async connectServer(name, config) {
|
|
100
|
+
// Check for duplicate
|
|
101
|
+
if (this.externalClients.has(name) || this.virtualServers.has(name)) {
|
|
102
|
+
throw new Error(`Server '${name}' is already connected`);
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
// Create transport based on config type
|
|
106
|
+
const transport = this.createTransport(config);
|
|
107
|
+
// Create and connect client
|
|
108
|
+
const client = new Client({
|
|
109
|
+
name: `agent-sdk-${name}`,
|
|
110
|
+
version: "1.0.0",
|
|
111
|
+
});
|
|
112
|
+
await client.connect(transport);
|
|
113
|
+
// Fetch available tools
|
|
114
|
+
const { tools: serverTools } = await client.listTools();
|
|
115
|
+
// Convert to MCPToolMetadata and apply security filters
|
|
116
|
+
const sourceType = config.type;
|
|
117
|
+
const allowedToolsSet = config.allowedTools ? new Set(config.allowedTools) : null;
|
|
118
|
+
const tools = [];
|
|
119
|
+
for (const t of serverTools) {
|
|
120
|
+
// Apply allowlist filter
|
|
121
|
+
if (allowedToolsSet && !allowedToolsSet.has(t.name)) {
|
|
122
|
+
continue; // Skip tools not in allowlist
|
|
123
|
+
}
|
|
124
|
+
const schema = t.inputSchema ?? {
|
|
125
|
+
type: "object",
|
|
126
|
+
properties: {},
|
|
127
|
+
};
|
|
128
|
+
// Apply requireSchema filter
|
|
129
|
+
if (config.requireSchema && isSchemaEmpty(schema)) {
|
|
130
|
+
continue; // Skip tools without meaningful schema
|
|
131
|
+
}
|
|
132
|
+
const mcpName = `mcp__${name}__${t.name}`;
|
|
133
|
+
tools.push({
|
|
134
|
+
name: mcpName,
|
|
135
|
+
description: t.description ?? "",
|
|
136
|
+
inputSchema: schema,
|
|
137
|
+
source: name,
|
|
138
|
+
sourceType,
|
|
139
|
+
});
|
|
140
|
+
// Register schema for validation if enabled
|
|
141
|
+
if (config.validateInputs) {
|
|
142
|
+
this.validator.registerSchema(mcpName, schema);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Store client and metadata
|
|
146
|
+
this.externalClients.set(name, { client, sourceType, tools, config });
|
|
147
|
+
this.cacheInvalid = true;
|
|
148
|
+
// Auto-load external server tools (they're always available once connected)
|
|
149
|
+
for (const t of tools) {
|
|
150
|
+
this.loadedTools.add(t.name);
|
|
151
|
+
}
|
|
152
|
+
// Emit connection restored event (for reconnections)
|
|
153
|
+
await this.onConnectionRestored?.({
|
|
154
|
+
server_name: name,
|
|
155
|
+
tool_count: tools.length,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
// Emit connection failed event
|
|
160
|
+
await this.onConnectionFailed?.({
|
|
161
|
+
server_name: name,
|
|
162
|
+
config,
|
|
163
|
+
error: error,
|
|
164
|
+
});
|
|
165
|
+
// Re-throw the error
|
|
166
|
+
throw error;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Create transport for MCP connection.
|
|
171
|
+
* @internal
|
|
172
|
+
*/
|
|
173
|
+
createTransport(config) {
|
|
174
|
+
switch (config.type) {
|
|
175
|
+
case "stdio": {
|
|
176
|
+
const stdioConfig = config;
|
|
177
|
+
return new StdioClientTransport({
|
|
178
|
+
command: stdioConfig.command,
|
|
179
|
+
args: stdioConfig.args,
|
|
180
|
+
env: stdioConfig.env ? expandEnvVars(stdioConfig.env) : undefined,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
case "http": {
|
|
184
|
+
const httpConfig = config;
|
|
185
|
+
const url = new URL(expandEnvVars(httpConfig.url));
|
|
186
|
+
return new StreamableHTTPClientTransport(url, {
|
|
187
|
+
requestInit: httpConfig.headers
|
|
188
|
+
? { headers: expandEnvVars(httpConfig.headers) }
|
|
189
|
+
: undefined,
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
case "sse": {
|
|
193
|
+
const sseConfig = config;
|
|
194
|
+
const url = new URL(expandEnvVars(sseConfig.url));
|
|
195
|
+
return new SSEClientTransport(url, {
|
|
196
|
+
requestInit: sseConfig.headers
|
|
197
|
+
? { headers: expandEnvVars(sseConfig.headers) }
|
|
198
|
+
: undefined,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
default:
|
|
202
|
+
throw new Error(`Unknown MCP server type: ${config.type}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Register inline plugin tools as a virtual MCP server.
|
|
207
|
+
*
|
|
208
|
+
* Tools will be exposed with naming pattern `mcp__<pluginName>__<toolName>`.
|
|
209
|
+
*
|
|
210
|
+
* @param pluginName - Plugin/server name
|
|
211
|
+
* @param tools - AI SDK tools to register
|
|
212
|
+
* @param options - Registration options
|
|
213
|
+
*/
|
|
214
|
+
registerPluginTools(pluginName, tools, options = {}) {
|
|
215
|
+
const { autoLoad = true } = options;
|
|
216
|
+
const server = new VirtualMCPServer(pluginName, tools);
|
|
217
|
+
this.virtualServers.set(pluginName, server);
|
|
218
|
+
this.cacheInvalid = true;
|
|
219
|
+
// Track auto-load setting and mark tools as loaded if auto-load is enabled
|
|
220
|
+
if (autoLoad) {
|
|
221
|
+
this.autoLoadServers.add(pluginName);
|
|
222
|
+
// Mark all tools from this server as loaded
|
|
223
|
+
const serverTools = server.getToolSet();
|
|
224
|
+
for (const name of Object.keys(serverTools)) {
|
|
225
|
+
this.loadedTools.add(name);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* List all available tools from all sources.
|
|
231
|
+
*
|
|
232
|
+
* @returns Array of tool metadata
|
|
233
|
+
*/
|
|
234
|
+
listTools() {
|
|
235
|
+
this.refreshCacheIfNeeded();
|
|
236
|
+
return [...this.toolMetadataCache];
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Search tools by query string.
|
|
240
|
+
*
|
|
241
|
+
* Matches against tool name and description (case-insensitive).
|
|
242
|
+
*
|
|
243
|
+
* @param query - Search query
|
|
244
|
+
* @param limit - Maximum results to return
|
|
245
|
+
* @returns Matching tool metadata
|
|
246
|
+
*/
|
|
247
|
+
searchTools(query, limit = 10) {
|
|
248
|
+
this.refreshCacheIfNeeded();
|
|
249
|
+
if (!query) {
|
|
250
|
+
return this.toolMetadataCache.slice(0, limit);
|
|
251
|
+
}
|
|
252
|
+
const lowerQuery = query.toLowerCase();
|
|
253
|
+
const matches = this.toolMetadataCache.filter((tool) => tool.name.toLowerCase().includes(lowerQuery) ||
|
|
254
|
+
tool.description.toLowerCase().includes(lowerQuery));
|
|
255
|
+
return matches.slice(0, limit);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get AI SDK compatible ToolSet.
|
|
259
|
+
*
|
|
260
|
+
* Only returns tools that have been loaded (either via autoLoad or explicit loadTools call).
|
|
261
|
+
*
|
|
262
|
+
* @param filter - Optional list of tool names to include
|
|
263
|
+
* @returns ToolSet with MCP-named tools
|
|
264
|
+
*/
|
|
265
|
+
getToolSet(filter) {
|
|
266
|
+
const toolSet = {};
|
|
267
|
+
const filterSet = filter ? new Set(filter) : null;
|
|
268
|
+
// Include virtual server tools (only if loaded)
|
|
269
|
+
for (const server of this.virtualServers.values()) {
|
|
270
|
+
const serverTools = server.getToolSet();
|
|
271
|
+
for (const [name, t] of Object.entries(serverTools)) {
|
|
272
|
+
// Only include if loaded and passes filter
|
|
273
|
+
if (this.loadedTools.has(name)) {
|
|
274
|
+
if (!filterSet || filterSet.has(name)) {
|
|
275
|
+
toolSet[name] = t;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// Include external server tools (only if loaded)
|
|
281
|
+
for (const [serverName, { tools }] of this.externalClients) {
|
|
282
|
+
for (const metadata of tools) {
|
|
283
|
+
if (this.loadedTools.has(metadata.name)) {
|
|
284
|
+
if (!filterSet || filterSet.has(metadata.name)) {
|
|
285
|
+
toolSet[metadata.name] = this.createExternalTool(serverName, metadata);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return toolSet;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Extract text result from MCP tool response.
|
|
294
|
+
* @internal
|
|
295
|
+
*/
|
|
296
|
+
extractTextResult(result) {
|
|
297
|
+
if (result && typeof result === "object" && "content" in result) {
|
|
298
|
+
const content = result.content;
|
|
299
|
+
if (Array.isArray(content)) {
|
|
300
|
+
const textContent = content.find((c) => c.type === "text");
|
|
301
|
+
if (textContent && "text" in textContent) {
|
|
302
|
+
return textContent.text;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return typeof result === "object" ? JSON.stringify(result) : result;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Create an AI SDK tool for an external MCP tool.
|
|
310
|
+
* @internal
|
|
311
|
+
*/
|
|
312
|
+
createExternalTool(serverName, metadata) {
|
|
313
|
+
const originalName = metadata.name.replace(`mcp__${serverName}__`, "");
|
|
314
|
+
// Convert JSON Schema to Zod schema for tighter model-facing validation
|
|
315
|
+
// This gives the AI model better constraints about what inputs are valid
|
|
316
|
+
const conversionResult = jsonSchemaToZod(metadata.inputSchema);
|
|
317
|
+
const inputSchema = conversionResult.schema;
|
|
318
|
+
return tool({
|
|
319
|
+
description: metadata.description,
|
|
320
|
+
inputSchema,
|
|
321
|
+
execute: async (args) => {
|
|
322
|
+
const connected = this.externalClients.get(serverName);
|
|
323
|
+
if (!connected) {
|
|
324
|
+
throw new Error(`Server '${serverName}' is not connected`);
|
|
325
|
+
}
|
|
326
|
+
// Validate inputs if enabled for this server (belt-and-suspenders with Zod)
|
|
327
|
+
if (connected.config.validateInputs) {
|
|
328
|
+
this.validator.validate(metadata.name, args);
|
|
329
|
+
}
|
|
330
|
+
const result = await connected.client.callTool({
|
|
331
|
+
name: originalName,
|
|
332
|
+
arguments: args,
|
|
333
|
+
});
|
|
334
|
+
return this.extractTextResult(result);
|
|
335
|
+
},
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Call a tool by its MCP name.
|
|
340
|
+
*
|
|
341
|
+
* @param mcpName - Full MCP tool name (mcp__<source>__<tool>)
|
|
342
|
+
* @param args - Tool arguments
|
|
343
|
+
* @returns Tool execution result
|
|
344
|
+
*/
|
|
345
|
+
async callTool(mcpName, args) {
|
|
346
|
+
// Parse MCP name: mcp__<source>__<tool>
|
|
347
|
+
const parts = mcpName.split("__");
|
|
348
|
+
if (parts.length < 3 || parts[0] !== "mcp") {
|
|
349
|
+
throw new Error(`Invalid MCP tool name format: ${mcpName}`);
|
|
350
|
+
}
|
|
351
|
+
// Try to find a matching server
|
|
352
|
+
// Start by assuming the tool name is just the last part
|
|
353
|
+
for (let i = parts.length - 1; i >= 2; i--) {
|
|
354
|
+
const sourceName = parts.slice(1, i).join("__");
|
|
355
|
+
const toolName = parts.slice(i).join("__");
|
|
356
|
+
// Check virtual servers first
|
|
357
|
+
const virtualServer = this.virtualServers.get(sourceName);
|
|
358
|
+
if (virtualServer?.hasTool(toolName)) {
|
|
359
|
+
return virtualServer.callTool(toolName, args);
|
|
360
|
+
}
|
|
361
|
+
// Check external clients
|
|
362
|
+
const externalClient = this.externalClients.get(sourceName);
|
|
363
|
+
if (externalClient) {
|
|
364
|
+
const hasMatchingTool = externalClient.tools.some((t) => t.name === mcpName);
|
|
365
|
+
if (hasMatchingTool) {
|
|
366
|
+
// Validate inputs if enabled for this server
|
|
367
|
+
if (externalClient.config.validateInputs) {
|
|
368
|
+
this.validator.validate(mcpName, args);
|
|
369
|
+
}
|
|
370
|
+
const result = await externalClient.client.callTool({
|
|
371
|
+
name: toolName,
|
|
372
|
+
arguments: args,
|
|
373
|
+
});
|
|
374
|
+
return this.extractTextResult(result);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
throw new Error(`Tool not found: ${mcpName}`);
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Load specific tools by name, making them available via getToolSet().
|
|
382
|
+
*
|
|
383
|
+
* @param toolNames - MCP tool names to load
|
|
384
|
+
* @returns Load result with loaded/alreadyLoaded/notFound lists
|
|
385
|
+
*/
|
|
386
|
+
loadTools(toolNames) {
|
|
387
|
+
this.refreshCacheIfNeeded();
|
|
388
|
+
const loaded = [];
|
|
389
|
+
const alreadyLoaded = [];
|
|
390
|
+
const notFound = [];
|
|
391
|
+
for (const name of toolNames) {
|
|
392
|
+
const metadata = this.toolMetadataCache.find((t) => t.name === name);
|
|
393
|
+
if (metadata) {
|
|
394
|
+
if (this.loadedTools.has(name)) {
|
|
395
|
+
alreadyLoaded.push(name);
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
this.loadedTools.add(name);
|
|
399
|
+
loaded.push(name);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
notFound.push(name);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
return { loaded, alreadyLoaded, notFound };
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Disconnect all external MCP servers.
|
|
410
|
+
*/
|
|
411
|
+
async disconnect() {
|
|
412
|
+
// Close external clients
|
|
413
|
+
for (const { client } of this.externalClients.values()) {
|
|
414
|
+
try {
|
|
415
|
+
await client.close();
|
|
416
|
+
}
|
|
417
|
+
catch {
|
|
418
|
+
// Ignore close errors
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
this.externalClients.clear();
|
|
422
|
+
// Clear virtual servers
|
|
423
|
+
this.virtualServers.clear();
|
|
424
|
+
this.cacheInvalid = true;
|
|
425
|
+
// Clear all validators
|
|
426
|
+
this.validator.clear();
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Refresh metadata cache if invalid.
|
|
430
|
+
*/
|
|
431
|
+
refreshCacheIfNeeded() {
|
|
432
|
+
if (!this.cacheInvalid)
|
|
433
|
+
return;
|
|
434
|
+
this.toolMetadataCache = [];
|
|
435
|
+
// Add virtual server tools
|
|
436
|
+
for (const server of this.virtualServers.values()) {
|
|
437
|
+
this.toolMetadataCache.push(...server.getToolMetadata());
|
|
438
|
+
}
|
|
439
|
+
// Add external server tools
|
|
440
|
+
for (const { tools } of this.externalClients.values()) {
|
|
441
|
+
this.toolMetadataCache.push(...tools);
|
|
442
|
+
}
|
|
443
|
+
this.cacheInvalid = false;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP-specific type definitions.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
import type { JSONSchema7 } from "json-schema";
|
|
7
|
+
/**
|
|
8
|
+
* Source type for MCP tools.
|
|
9
|
+
*
|
|
10
|
+
* - `inline` - Tool defined in plugin code (virtual MCP server)
|
|
11
|
+
* - `stdio` - Tool from stdio-based MCP server
|
|
12
|
+
* - `http` - Tool from HTTP-based MCP server
|
|
13
|
+
* - `sse` - Tool from SSE-based MCP server
|
|
14
|
+
*
|
|
15
|
+
* @category MCP
|
|
16
|
+
*/
|
|
17
|
+
export type MCPToolSource = "inline" | "stdio" | "http" | "sse";
|
|
18
|
+
/**
|
|
19
|
+
* Metadata for an MCP tool.
|
|
20
|
+
*
|
|
21
|
+
* Used for tool discovery and search without loading full tool definition.
|
|
22
|
+
*
|
|
23
|
+
* @category MCP
|
|
24
|
+
*/
|
|
25
|
+
export interface MCPToolMetadata {
|
|
26
|
+
/**
|
|
27
|
+
* Full MCP tool name.
|
|
28
|
+
* Format: `mcp__<source>__<tool-name>`
|
|
29
|
+
*/
|
|
30
|
+
name: string;
|
|
31
|
+
/** Human-readable description of what the tool does */
|
|
32
|
+
description: string;
|
|
33
|
+
/** JSON Schema for the tool's input parameters */
|
|
34
|
+
inputSchema: JSONSchema7;
|
|
35
|
+
/** Plugin or server name this tool comes from */
|
|
36
|
+
source: string;
|
|
37
|
+
/** How this tool is provided */
|
|
38
|
+
sourceType: MCPToolSource;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Result from loading MCP tools.
|
|
42
|
+
*
|
|
43
|
+
* @category MCP
|
|
44
|
+
*/
|
|
45
|
+
export interface MCPToolLoadResult {
|
|
46
|
+
/** Tools that were successfully loaded */
|
|
47
|
+
loaded: string[];
|
|
48
|
+
/** Tools that were already loaded (skipped) */
|
|
49
|
+
alreadyLoaded: string[];
|
|
50
|
+
/** Tools that could not be found */
|
|
51
|
+
notFound: string[];
|
|
52
|
+
/** Any errors that occurred during loading */
|
|
53
|
+
errors?: Array<{
|
|
54
|
+
tool: string;
|
|
55
|
+
error: Error;
|
|
56
|
+
}>;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhE;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IAEpB,kDAAkD;IAClD,WAAW,EAAE,WAAW,CAAC;IAEzB,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IAEf,gCAAgC;IAChC,UAAU,EAAE,aAAa,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,EAAE,CAAC;IAExB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC;CAChD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input validation utilities for MCP tools.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
import type { JSONSchema7 } from "json-schema";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
/**
|
|
9
|
+
* Validation error thrown when MCP tool input validation fails.
|
|
10
|
+
*
|
|
11
|
+
* @category MCP
|
|
12
|
+
*/
|
|
13
|
+
export declare class MCPInputValidationError extends Error {
|
|
14
|
+
readonly toolName: string;
|
|
15
|
+
readonly errors: string[];
|
|
16
|
+
constructor(toolName: string, errors: string[]);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Check if a JSON Schema is non-empty and meaningful.
|
|
20
|
+
* An empty schema is one that accepts anything (no properties, no required fields, etc.).
|
|
21
|
+
*
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
export declare function isSchemaEmpty(schema: JSONSchema7): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Validator for MCP tool inputs using AJV.
|
|
27
|
+
*
|
|
28
|
+
* @category MCP
|
|
29
|
+
*/
|
|
30
|
+
export declare class MCPInputValidator {
|
|
31
|
+
private ajv;
|
|
32
|
+
private validators;
|
|
33
|
+
constructor();
|
|
34
|
+
/**
|
|
35
|
+
* Register a tool's input schema for validation.
|
|
36
|
+
*
|
|
37
|
+
* @param toolName - Full MCP tool name
|
|
38
|
+
* @param schema - JSON Schema for the tool's inputs
|
|
39
|
+
*/
|
|
40
|
+
registerSchema(toolName: string, schema: JSONSchema7): void;
|
|
41
|
+
/**
|
|
42
|
+
* Validate tool input against its registered schema.
|
|
43
|
+
*
|
|
44
|
+
* @param toolName - Full MCP tool name
|
|
45
|
+
* @param input - Tool input to validate
|
|
46
|
+
* @throws {MCPInputValidationError} If validation fails
|
|
47
|
+
*/
|
|
48
|
+
validate(toolName: string, input: unknown): void;
|
|
49
|
+
/**
|
|
50
|
+
* Check if a tool has a registered schema.
|
|
51
|
+
*
|
|
52
|
+
* @param toolName - Full MCP tool name
|
|
53
|
+
* @returns True if schema is registered
|
|
54
|
+
*/
|
|
55
|
+
hasSchema(toolName: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Unregister a tool's schema.
|
|
58
|
+
*
|
|
59
|
+
* @param toolName - Full MCP tool name
|
|
60
|
+
*/
|
|
61
|
+
unregisterSchema(toolName: string): void;
|
|
62
|
+
/**
|
|
63
|
+
* Clear all registered schemas.
|
|
64
|
+
*/
|
|
65
|
+
clear(): void;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Result of JSON Schema to Zod conversion.
|
|
69
|
+
*
|
|
70
|
+
* @category MCP
|
|
71
|
+
*/
|
|
72
|
+
export interface JsonSchemaToZodResult {
|
|
73
|
+
/** Whether the conversion succeeded */
|
|
74
|
+
success: boolean;
|
|
75
|
+
/** The converted Zod schema (permissive fallback if conversion failed) */
|
|
76
|
+
schema: z.ZodType;
|
|
77
|
+
/** Error message if conversion failed */
|
|
78
|
+
error?: string;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Convert a JSON Schema to a Zod schema for AI SDK tool definitions.
|
|
82
|
+
*
|
|
83
|
+
* This is a best-effort conversion that handles common JSON Schema patterns.
|
|
84
|
+
* Falls back to a permissive schema if conversion fails.
|
|
85
|
+
*
|
|
86
|
+
* Supported JSON Schema features:
|
|
87
|
+
* - Primitive types: string, number, integer, boolean, null
|
|
88
|
+
* - Objects with properties and required fields
|
|
89
|
+
* - Arrays with items
|
|
90
|
+
* - Enums
|
|
91
|
+
* - anyOf/oneOf unions
|
|
92
|
+
* - Basic format validators (date-time, email, uri, uuid)
|
|
93
|
+
* - String constraints (minLength, maxLength, pattern)
|
|
94
|
+
* - Number constraints (minimum, maximum, exclusiveMinimum, exclusiveMaximum)
|
|
95
|
+
* - Array constraints (minItems, maxItems)
|
|
96
|
+
*
|
|
97
|
+
* @param jsonSchema - JSON Schema to convert
|
|
98
|
+
* @returns Conversion result with Zod schema
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```typescript
|
|
102
|
+
* const result = jsonSchemaToZod({
|
|
103
|
+
* type: "object",
|
|
104
|
+
* properties: {
|
|
105
|
+
* name: { type: "string" },
|
|
106
|
+
* age: { type: "number" }
|
|
107
|
+
* },
|
|
108
|
+
* required: ["name"]
|
|
109
|
+
* });
|
|
110
|
+
*
|
|
111
|
+
* if (result.success) {
|
|
112
|
+
* // Use result.schema for AI SDK tool definition
|
|
113
|
+
* }
|
|
114
|
+
* ```
|
|
115
|
+
*
|
|
116
|
+
* @category MCP
|
|
117
|
+
*/
|
|
118
|
+
export declare function jsonSchemaToZod(jsonSchema: JSONSchema7): JsonSchemaToZodResult;
|
|
119
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/mcp/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;aAE9B,QAAQ,EAAE,MAAM;aAChB,MAAM,EAAE,MAAM,EAAE;gBADhB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EAAE;CAKnC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CA8B1D;AAED;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,UAAU,CAA4C;;IAW9D;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI;IAa3D;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAiBhD;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpC;;;;OAIG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,0EAA0E;IAC1E,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;IAClB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,WAAW,GAAG,qBAAqB,CAW9E"}
|