@toolsdk.ai/registry 1.0.121 → 1.0.122

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.
@@ -5,5 +5,13 @@ import type { ToolExecutor } from "./executor-types";
5
5
  * Creates appropriate executor based on sandbox provider configuration
6
6
  */
7
7
  export declare class ExecutorFactory {
8
- static create(provider: MCPSandboxProvider): ToolExecutor;
8
+ /**
9
+ * Validate if the provided sandbox provider is valid
10
+ */
11
+ private static isValidProvider;
12
+ /**
13
+ * Create executor with optional provider override
14
+ * If sandboxProvider is provided, it takes priority over environment config
15
+ */
16
+ static create(overrideProvider?: MCPSandboxProvider): ToolExecutor;
9
17
  }
@@ -1,3 +1,5 @@
1
+ import { getSandboxProvider } from "../../shared/config/environment";
2
+ import { VALID_SANDBOX_PROVIDERS } from "../sandbox/sandbox-types";
1
3
  import { LocalExecutor } from "./local-executor";
2
4
  import { SandboxExecutor } from "./sandbox-executor";
3
5
  /**
@@ -6,7 +8,20 @@ import { SandboxExecutor } from "./sandbox-executor";
6
8
  */
7
9
  // biome-ignore lint/complexity/noStaticOnlyClass: Factory pattern
8
10
  export class ExecutorFactory {
9
- static create(provider) {
11
+ /**
12
+ * Validate if the provided sandbox provider is valid
13
+ */
14
+ static isValidProvider(provider) {
15
+ return VALID_SANDBOX_PROVIDERS.includes(provider);
16
+ }
17
+ /**
18
+ * Create executor with optional provider override
19
+ * If sandboxProvider is provided, it takes priority over environment config
20
+ */
21
+ static create(overrideProvider) {
22
+ const provider = ExecutorFactory.isValidProvider(overrideProvider)
23
+ ? overrideProvider
24
+ : getSandboxProvider();
10
25
  if (provider === "LOCAL") {
11
26
  console.log("[ExecutorFactory] Creating LocalExecutor");
12
27
  return new LocalExecutor();
@@ -1,9 +1,11 @@
1
1
  import type { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ import type { MCPSandboxProvider } from "../sandbox/sandbox-types";
2
3
  export interface ToolExecuteRequest {
3
4
  packageName: string;
4
5
  toolKey: string;
5
6
  inputData: Record<string, unknown>;
6
7
  envs?: Record<string, string>;
8
+ sandboxProvider?: MCPSandboxProvider;
7
9
  }
8
10
  /**
9
11
  * Tool Executor Interface
@@ -11,5 +13,5 @@ export interface ToolExecuteRequest {
11
13
  */
12
14
  export interface ToolExecutor {
13
15
  executeTool(request: ToolExecuteRequest): Promise<unknown>;
14
- listTools(packageName: string): Promise<Tool[]>;
16
+ listTools(packageName: string, sandboxProvider?: MCPSandboxProvider): Promise<Tool[]>;
15
17
  }
@@ -1,15 +1,16 @@
1
+ import type { MCPSandboxProvider } from "../sandbox/sandbox-types";
1
2
  export declare const packageHandler: {
2
- getPackageDetail: (packageName: string) => Promise<{
3
+ getPackageDetail: (packageName: string, sandboxProvider?: MCPSandboxProvider) => Promise<{
3
4
  success: boolean;
4
5
  code: number;
5
6
  message: string;
6
7
  }>;
7
- executeTool: (packageName: string, toolKey: string, inputData: Record<string, unknown>, envs?: Record<string, string>) => Promise<{
8
+ executeTool: (packageName: string, toolKey: string, inputData: Record<string, unknown>, envs?: Record<string, string>, sandboxProvider?: MCPSandboxProvider) => Promise<{
8
9
  success: boolean;
9
10
  code: number;
10
11
  message: string;
11
12
  }>;
12
- listTools: (packageName: string) => Promise<{
13
+ listTools: (packageName: string, sandboxProvider?: MCPSandboxProvider) => Promise<{
13
14
  success: boolean;
14
15
  code: number;
15
16
  message: string;
@@ -1,5 +1,4 @@
1
1
  import path from "node:path";
2
- import { getSandboxProvider } from "../../shared/config/environment";
3
2
  import { getDirname } from "../../shared/utils/file-util";
4
3
  import { createErrorResponse, createResponse } from "../../shared/utils/response-util";
5
4
  import { ExecutorFactory } from "../executor/executor-factory";
@@ -8,10 +7,10 @@ import { PackageSO } from "./package-so";
8
7
  const __dirname = getDirname(import.meta.url);
9
8
  const packagesDir = path.join(__dirname, "../../../packages");
10
9
  const repository = new PackageRepository(packagesDir);
11
- const executor = ExecutorFactory.create(getSandboxProvider());
12
10
  export const packageHandler = {
13
- getPackageDetail: async (packageName) => {
11
+ getPackageDetail: async (packageName, sandboxProvider) => {
14
12
  try {
13
+ const executor = ExecutorFactory.create(sandboxProvider);
15
14
  const packageSO = await PackageSO.init(packageName, repository, executor);
16
15
  const result = await packageSO.getDetailWithTools();
17
16
  return createResponse(result);
@@ -23,8 +22,9 @@ export const packageHandler = {
23
22
  throw error;
24
23
  }
25
24
  },
26
- executeTool: async (packageName, toolKey, inputData, envs) => {
25
+ executeTool: async (packageName, toolKey, inputData, envs, sandboxProvider) => {
27
26
  try {
27
+ const executor = ExecutorFactory.create(sandboxProvider);
28
28
  const packageSO = await PackageSO.init(packageName, repository, executor);
29
29
  const result = await packageSO.executeTool(toolKey, inputData, envs);
30
30
  return createResponse(result);
@@ -42,8 +42,9 @@ export const packageHandler = {
42
42
  throw error;
43
43
  }
44
44
  },
45
- listTools: async (packageName) => {
45
+ listTools: async (packageName, sandboxProvider) => {
46
46
  try {
47
+ const executor = ExecutorFactory.create(sandboxProvider);
47
48
  const packageSO = await PackageSO.init(packageName, repository, executor);
48
49
  const tools = await packageSO.getTools();
49
50
  return createResponse(tools);
@@ -13,8 +13,8 @@ const packageDetailRoute = createRoute({
13
13
  }),
14
14
  });
15
15
  packageRoutes.openapi(packageDetailRoute, async (c) => {
16
- const { packageName } = c.req.valid("query");
17
- const result = await packageHandler.getPackageDetail(packageName);
16
+ const { packageName, sandboxProvider } = c.req.valid("query");
17
+ const result = await packageHandler.getPackageDetail(packageName, sandboxProvider);
18
18
  return c.json(result, 200);
19
19
  });
20
20
  const toolsRoute = createRoute({
@@ -26,8 +26,8 @@ const toolsRoute = createRoute({
26
26
  }),
27
27
  });
28
28
  packageRoutes.openapi(toolsRoute, async (c) => {
29
- const { packageName } = c.req.valid("query");
30
- const result = await packageHandler.listTools(packageName);
29
+ const { packageName, sandboxProvider } = c.req.valid("query");
30
+ const result = await packageHandler.listTools(packageName, sandboxProvider);
31
31
  return c.json(result, 200);
32
32
  });
33
33
  const executeToolRoute = createRoute({
@@ -49,7 +49,7 @@ const executeToolRoute = createRoute({
49
49
  });
50
50
  packageRoutes.openapi(executeToolRoute, async (c) => {
51
51
  const body = c.req.valid("json");
52
- const result = await packageHandler.executeTool(body.packageName, body.toolKey, body.inputData, body.envs);
52
+ const result = await packageHandler.executeTool(body.packageName, body.toolKey, body.inputData, body.envs, body.sandboxProvider);
53
53
  return c.json(result, 200);
54
54
  });
55
55
  const packagesListRoute = createRoute({
@@ -1,26 +1,32 @@
1
1
  import { z } from "@hono/zod-openapi";
2
2
  export declare const packageNameQuerySchema: z.ZodObject<{
3
3
  packageName: z.ZodString;
4
+ sandboxProvider: z.ZodOptional<z.ZodEnum<["LOCAL", "DAYTONA", "SANDOCK", "E2B"]>>;
4
5
  }, "strip", z.ZodTypeAny, {
5
6
  packageName: string;
7
+ sandboxProvider?: "SANDOCK" | "DAYTONA" | "E2B" | "LOCAL" | undefined;
6
8
  }, {
7
9
  packageName: string;
10
+ sandboxProvider?: "SANDOCK" | "DAYTONA" | "E2B" | "LOCAL" | undefined;
8
11
  }>;
9
12
  export declare const ToolExecuteSchema: z.ZodObject<{
10
13
  packageName: z.ZodString;
11
14
  toolKey: z.ZodString;
12
15
  inputData: z.ZodRecord<z.ZodString, z.ZodUnknown>;
13
16
  envs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
17
+ sandboxProvider: z.ZodOptional<z.ZodEnum<["LOCAL", "DAYTONA", "SANDOCK", "E2B"]>>;
14
18
  }, "strip", z.ZodTypeAny, {
15
19
  packageName: string;
16
20
  toolKey: string;
17
21
  inputData: Record<string, unknown>;
18
22
  envs?: Record<string, string> | undefined;
23
+ sandboxProvider?: "SANDOCK" | "DAYTONA" | "E2B" | "LOCAL" | undefined;
19
24
  }, {
20
25
  packageName: string;
21
26
  toolKey: string;
22
27
  inputData: Record<string, unknown>;
23
28
  envs?: Record<string, string> | undefined;
29
+ sandboxProvider?: "SANDOCK" | "DAYTONA" | "E2B" | "LOCAL" | undefined;
24
30
  }>;
25
31
  export declare const PackageDetailResponseSchema: z.ZodObject<{
26
32
  success: z.ZodBoolean;
@@ -28,12 +34,31 @@ export declare const PackageDetailResponseSchema: z.ZodObject<{
28
34
  message: z.ZodString;
29
35
  } & {
30
36
  data: z.ZodOptional<z.ZodObject<{
31
- name: z.ZodOptional<z.ZodString>;
37
+ type: z.ZodLiteral<"mcp-server">;
38
+ runtime: z.ZodEnum<["node", "python", "java", "go"]>;
32
39
  packageName: z.ZodString;
40
+ packageVersion: z.ZodOptional<z.ZodString>;
41
+ bin: z.ZodOptional<z.ZodString>;
42
+ binArgs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
43
+ key: z.ZodOptional<z.ZodString>;
44
+ name: z.ZodOptional<z.ZodString>;
33
45
  description: z.ZodOptional<z.ZodString>;
34
- category: z.ZodOptional<z.ZodString>;
35
- validated: z.ZodOptional<z.ZodBoolean>;
36
- runtime: z.ZodOptional<z.ZodEnum<["node", "python", "java", "go"]>>;
46
+ readme: z.ZodOptional<z.ZodString>;
47
+ url: z.ZodOptional<z.ZodString>;
48
+ license: z.ZodOptional<z.ZodString>;
49
+ logo: z.ZodOptional<z.ZodString>;
50
+ author: z.ZodOptional<z.ZodString>;
51
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
52
+ description: z.ZodString;
53
+ required: z.ZodBoolean;
54
+ }, "strip", z.ZodTypeAny, {
55
+ description: string;
56
+ required: boolean;
57
+ }, {
58
+ description: string;
59
+ required: boolean;
60
+ }>>>;
61
+ } & {
37
62
  tools: z.ZodOptional<z.ZodArray<z.ZodObject<{
38
63
  name: z.ZodString;
39
64
  description: z.ZodOptional<z.ZodString>;
@@ -68,12 +93,24 @@ export declare const PackageDetailResponseSchema: z.ZodObject<{
68
93
  } | undefined;
69
94
  }>, "many">>;
70
95
  }, "strip", z.ZodTypeAny, {
96
+ type: "mcp-server";
97
+ runtime: "node" | "python" | "java" | "go";
71
98
  packageName: string;
72
99
  description?: string | undefined;
73
100
  name?: string | undefined;
74
- runtime?: "node" | "python" | "java" | "go" | undefined;
75
- category?: string | undefined;
76
- validated?: boolean | undefined;
101
+ key?: string | undefined;
102
+ packageVersion?: string | undefined;
103
+ bin?: string | undefined;
104
+ binArgs?: string[] | undefined;
105
+ readme?: string | undefined;
106
+ url?: string | undefined;
107
+ license?: string | undefined;
108
+ logo?: string | undefined;
109
+ author?: string | undefined;
110
+ env?: Record<string, {
111
+ description: string;
112
+ required: boolean;
113
+ }> | undefined;
77
114
  tools?: {
78
115
  name: string;
79
116
  description?: string | undefined;
@@ -84,12 +121,24 @@ export declare const PackageDetailResponseSchema: z.ZodObject<{
84
121
  } | undefined;
85
122
  }[] | undefined;
86
123
  }, {
124
+ type: "mcp-server";
125
+ runtime: "node" | "python" | "java" | "go";
87
126
  packageName: string;
88
127
  description?: string | undefined;
89
128
  name?: string | undefined;
90
- runtime?: "node" | "python" | "java" | "go" | undefined;
91
- category?: string | undefined;
92
- validated?: boolean | undefined;
129
+ key?: string | undefined;
130
+ packageVersion?: string | undefined;
131
+ bin?: string | undefined;
132
+ binArgs?: string[] | undefined;
133
+ readme?: string | undefined;
134
+ url?: string | undefined;
135
+ license?: string | undefined;
136
+ logo?: string | undefined;
137
+ author?: string | undefined;
138
+ env?: Record<string, {
139
+ description: string;
140
+ required: boolean;
141
+ }> | undefined;
93
142
  tools?: {
94
143
  name: string;
95
144
  description?: string | undefined;
@@ -105,12 +154,24 @@ export declare const PackageDetailResponseSchema: z.ZodObject<{
105
154
  code: number;
106
155
  message: string;
107
156
  data?: {
157
+ type: "mcp-server";
158
+ runtime: "node" | "python" | "java" | "go";
108
159
  packageName: string;
109
160
  description?: string | undefined;
110
161
  name?: string | undefined;
111
- runtime?: "node" | "python" | "java" | "go" | undefined;
112
- category?: string | undefined;
113
- validated?: boolean | undefined;
162
+ key?: string | undefined;
163
+ packageVersion?: string | undefined;
164
+ bin?: string | undefined;
165
+ binArgs?: string[] | undefined;
166
+ readme?: string | undefined;
167
+ url?: string | undefined;
168
+ license?: string | undefined;
169
+ logo?: string | undefined;
170
+ author?: string | undefined;
171
+ env?: Record<string, {
172
+ description: string;
173
+ required: boolean;
174
+ }> | undefined;
114
175
  tools?: {
115
176
  name: string;
116
177
  description?: string | undefined;
@@ -126,12 +187,24 @@ export declare const PackageDetailResponseSchema: z.ZodObject<{
126
187
  code: number;
127
188
  message: string;
128
189
  data?: {
190
+ type: "mcp-server";
191
+ runtime: "node" | "python" | "java" | "go";
129
192
  packageName: string;
130
193
  description?: string | undefined;
131
194
  name?: string | undefined;
132
- runtime?: "node" | "python" | "java" | "go" | undefined;
133
- category?: string | undefined;
134
- validated?: boolean | undefined;
195
+ key?: string | undefined;
196
+ packageVersion?: string | undefined;
197
+ bin?: string | undefined;
198
+ binArgs?: string[] | undefined;
199
+ readme?: string | undefined;
200
+ url?: string | undefined;
201
+ license?: string | undefined;
202
+ logo?: string | undefined;
203
+ author?: string | undefined;
204
+ env?: Record<string, {
205
+ description: string;
206
+ required: boolean;
207
+ }> | undefined;
135
208
  tools?: {
136
209
  name: string;
137
210
  description?: string | undefined;
@@ -1,5 +1,5 @@
1
1
  import { z } from "@hono/zod-openapi";
2
- import { BaseResponseSchema } from "../../shared/schemas/common-schema";
2
+ import { BaseResponseSchema, MCPServerPackageConfigSchema, } from "../../shared/schemas/common-schema";
3
3
  export const packageNameQuerySchema = z.object({
4
4
  packageName: z
5
5
  .string()
@@ -9,6 +9,14 @@ export const packageNameQuerySchema = z.object({
9
9
  example: "@modelcontextprotocol/server-filesystem",
10
10
  description: "Package name",
11
11
  }),
12
+ sandboxProvider: z
13
+ .enum(["LOCAL", "DAYTONA", "SANDOCK", "E2B"])
14
+ .optional()
15
+ .openapi({
16
+ param: { name: "sandboxProvider", in: "query" },
17
+ example: "LOCAL",
18
+ description: "Optional sandbox provider to override default (LOCAL, DAYTONA, SANDOCK, E2B)",
19
+ }),
12
20
  });
13
21
  export const ToolExecuteSchema = z
14
22
  .object({
@@ -16,6 +24,10 @@ export const ToolExecuteSchema = z
16
24
  toolKey: z.string().openapi({ example: "read_file" }),
17
25
  inputData: z.record(z.unknown()).openapi({ example: { path: "/tmp/test.txt" } }),
18
26
  envs: z.record(z.string()).optional(),
27
+ sandboxProvider: z.enum(["LOCAL", "DAYTONA", "SANDOCK", "E2B"]).optional().openapi({
28
+ example: "LOCAL",
29
+ description: "Optional sandbox provider to override default (LOCAL, DAYTONA, SANDOCK, E2B)",
30
+ }),
19
31
  })
20
32
  .openapi("ToolExecute");
21
33
  const ToolDataSchema = z.object({
@@ -29,13 +41,7 @@ const ToolDataSchema = z.object({
29
41
  })
30
42
  .optional(),
31
43
  });
32
- const PackageDetailDataSchema = z.object({
33
- name: z.string().optional(),
34
- packageName: z.string(),
35
- description: z.string().optional(),
36
- category: z.string().optional(),
37
- validated: z.boolean().optional(),
38
- runtime: z.enum(["node", "python", "java", "go"]).optional(),
44
+ const PackageDetailDataSchema = MCPServerPackageConfigSchema.extend({
39
45
  tools: z.array(ToolDataSchema).optional(),
40
46
  });
41
47
  export const PackageDetailResponseSchema = BaseResponseSchema.extend({
@@ -1,6 +1,7 @@
1
1
  import type { Tool } from "@modelcontextprotocol/sdk/types.js";
2
2
  import type { ToolExecutor } from "../executor/executor-types";
3
3
  import type { PackageRepository } from "./package-repository";
4
+ import type { MCPServerPackageConfigWithTools } from "./package-types";
4
5
  export declare class PackageSO {
5
6
  private readonly _packageName;
6
7
  private readonly _config;
@@ -35,44 +36,5 @@ export declare class PackageSO {
35
36
  static init(packageName: string, repository: PackageRepository, executor: ToolExecutor): Promise<PackageSO>;
36
37
  getTools(): Promise<Tool[]>;
37
38
  executeTool(toolKey: string, inputData: Record<string, unknown>, envs?: Record<string, string>): Promise<unknown>;
38
- getDetailWithTools(): Promise<{
39
- name: string | undefined;
40
- packageName: string;
41
- description: string | undefined;
42
- category: string | undefined;
43
- validated: boolean | undefined;
44
- tools: {
45
- [x: string]: unknown;
46
- name: string;
47
- inputSchema: {
48
- [x: string]: unknown;
49
- type: "object";
50
- properties?: {
51
- [x: string]: unknown;
52
- } | undefined;
53
- required?: string[] | undefined;
54
- };
55
- description?: string | undefined;
56
- title?: string | undefined;
57
- outputSchema?: {
58
- [x: string]: unknown;
59
- type: "object";
60
- properties?: {
61
- [x: string]: unknown;
62
- } | undefined;
63
- required?: string[] | undefined;
64
- } | undefined;
65
- annotations?: {
66
- [x: string]: unknown;
67
- title?: string | undefined;
68
- readOnlyHint?: boolean | undefined;
69
- destructiveHint?: boolean | undefined;
70
- idempotentHint?: boolean | undefined;
71
- openWorldHint?: boolean | undefined;
72
- } | undefined;
73
- _meta?: {
74
- [x: string]: unknown;
75
- } | undefined;
76
- }[] | undefined;
77
- }>;
39
+ getDetailWithTools(): Promise<MCPServerPackageConfigWithTools>;
78
40
  }
@@ -49,13 +49,6 @@ export class PackageSO {
49
49
  console.warn(`[PackageSO] Failed to get tools for ${this.packageName}:`, error);
50
50
  tools = undefined;
51
51
  }
52
- return {
53
- name: this.name,
54
- packageName: this.packageName,
55
- description: this.description,
56
- category: this.category,
57
- validated: this.validated,
58
- tools,
59
- };
52
+ return Object.assign(Object.assign({}, this._config), { tools });
60
53
  }
61
54
  }
@@ -14,6 +14,7 @@ export interface SandboxClient {
14
14
  destroy(): Promise<void>;
15
15
  }
16
16
  export type MCPSandboxProvider = "SANDOCK" | "DAYTONA" | "E2B" | "LOCAL";
17
+ export declare const VALID_SANDBOX_PROVIDERS: readonly MCPSandboxProvider[];
17
18
  export interface MCPToolResult {
18
19
  toolCount: number;
19
20
  tools: Tool[];
@@ -1 +1,6 @@
1
- export {};
1
+ export const VALID_SANDBOX_PROVIDERS = [
2
+ "LOCAL",
3
+ "DAYTONA",
4
+ "SANDOCK",
5
+ "E2B",
6
+ ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toolsdk.ai/registry",
3
- "version": "1.0.121",
3
+ "version": "1.0.122",
4
4
  "description": "An Open, Structured, and Standard Registry for MCP Servers and Packages.",
5
5
  "keywords": [
6
6
  "mcp",