@toolsdk.ai/registry 1.0.121 → 1.0.123
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/README.md +12 -12
- package/dist/domains/executor/executor-factory.d.ts +9 -1
- package/dist/domains/executor/executor-factory.js +16 -1
- package/dist/domains/executor/executor-types.d.ts +3 -1
- package/dist/domains/package/package-handler.d.ts +4 -3
- package/dist/domains/package/package-handler.js +6 -5
- package/dist/domains/package/package-route.js +5 -5
- package/dist/domains/package/package-schema.d.ts +89 -16
- package/dist/domains/package/package-schema.js +14 -8
- package/dist/domains/package/package-so.d.ts +2 -40
- package/dist/domains/package/package-so.js +1 -8
- package/dist/domains/sandbox/sandbox-types.d.ts +1 -0
- package/dist/domains/sandbox/sandbox-types.js +6 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
#
|
|
3
|
+
# ToolSDK MCP Registry
|
|
4
4
|
|
|
5
5
|
**Your private, secure, and customizable MCP Registry — take full control of your tools.**
|
|
6
6
|
|
|
7
7
|
[](https://www.producthunt.com/products/toolsdk-ai)
|
|
8
8
|
|
|
9
|
-

|
|
10
|
+

|
|
11
11
|
|
|
12
12
|
🚀 **Open-source**, **production-ready**, and **developer-friendly** registry for 4108+ Model Context Protocol (MCP) servers, plugins, and AI agent tools.
|
|
13
13
|
|
|
@@ -17,9 +17,9 @@ Perfect for **AI automation**, **chatbot development**, **LLM integrations**, an
|
|
|
17
17
|
|
|
18
18
|
</div>
|
|
19
19
|
|
|
20
|
-
## 🌟 Why
|
|
20
|
+
## 🌟 Why ToolSDK MCP Registry?
|
|
21
21
|
|
|
22
|
-
**
|
|
22
|
+
**ToolSDK MCP Registry** is the most comprehensive, self-hosted registry for Model Context Protocol (MCP) servers and AI agent tools. Built for developers, teams, and enterprises who need full control over their AI infrastructure.
|
|
23
23
|
|
|
24
24
|
### 🎯 Key Features
|
|
25
25
|
|
|
@@ -55,7 +55,7 @@ This open-source registry provides:
|
|
|
55
55
|
|
|
56
56
|
- 📄 `README.md` - Human-readable documentation
|
|
57
57
|
- 📦 [npm package](https://www.npmjs.com/package/@toolsdk.ai/registry) - TypeScript/JavaScript SDK
|
|
58
|
-
- 🔗 [packages-list.json](https://toolsdk-ai.github.io/
|
|
58
|
+
- 🔗 [packages-list.json](https://toolsdk-ai.github.io/toolsdk-mcp-registry/indexes/packages-list.json) - Raw data API
|
|
59
59
|
|
|
60
60
|
---
|
|
61
61
|
|
|
@@ -68,7 +68,7 @@ This open-source registry provides:
|
|
|
68
68
|
- [📄 Submit New MCP Servers](#submit-new-mcp-servers)
|
|
69
69
|
- [📖 Development Guide](./docs/DEVELOPMENT.md)
|
|
70
70
|
- [🤝 Contributing Guide](./docs/guide.md)
|
|
71
|
-
- [⭐
|
|
71
|
+
- [⭐ ToolSDK MCP Servers](#mcp-servers)
|
|
72
72
|
|
|
73
73
|
- [Uncategorized](#uncategorized)
|
|
74
74
|
- [Aggregators](#aggregators)
|
|
@@ -148,7 +148,7 @@ curl -X POST http://localhost:3003/api/v1/packages/run \
|
|
|
148
148
|
"packageName": "@modelcontextprotocol/server-everything",
|
|
149
149
|
"toolKey": "echo",
|
|
150
150
|
"inputData": {
|
|
151
|
-
"message": "Hello from
|
|
151
|
+
"message": "Hello from ToolSDK MCP Registry!"
|
|
152
152
|
},
|
|
153
153
|
"envs": {}
|
|
154
154
|
}'
|
|
@@ -185,13 +185,13 @@ import mcpServerLists from '@toolsdk.ai/registry/indexes/packages-lists.json';
|
|
|
185
185
|
Fetch the complete MCP server registry programmatically - ideal for AI applications, integrations, and automation:
|
|
186
186
|
|
|
187
187
|
```bash
|
|
188
|
-
curl https://toolsdk-ai.github.io/
|
|
188
|
+
curl https://toolsdk-ai.github.io/toolsdk-mcp-registry/indexes/packages-list.json
|
|
189
189
|
```
|
|
190
190
|
|
|
191
191
|
```ts
|
|
192
192
|
// JavaScript/TypeScript - Fetch API
|
|
193
193
|
const mcpServers = await (
|
|
194
|
-
await fetch('https://toolsdk-ai.github.io/
|
|
194
|
+
await fetch('https://toolsdk-ai.github.io/toolsdk-mcp-registry/indexes/packages-list.json')
|
|
195
195
|
).json();
|
|
196
196
|
|
|
197
197
|
// Use for AI agent tool discovery, LLM integrations, etc.
|
|
@@ -203,7 +203,7 @@ console.log(mcpServers);
|
|
|
203
203
|
import requests
|
|
204
204
|
|
|
205
205
|
mcp_servers = requests.get(
|
|
206
|
-
'https://toolsdk-ai.github.io/
|
|
206
|
+
'https://toolsdk-ai.github.io/toolsdk-mcp-registry/indexes/packages-list.json'
|
|
207
207
|
).json()
|
|
208
208
|
|
|
209
209
|
# Perfect for LangChain, CrewAI, AutoGen integrations
|
|
@@ -239,7 +239,7 @@ Help grow the world's largest open-source MCP registry! Share your AI tools, plu
|
|
|
239
239
|
|
|
240
240
|
**2. Submit via Pull Request**
|
|
241
241
|
|
|
242
|
-
- [Fork this repository](https://github.com/toolsdk-ai/
|
|
242
|
+
- [Fork this repository](https://github.com/toolsdk-ai/toolsdk-mcp-registry/fork)
|
|
243
243
|
- Create `your-mcp-server.json` in [packages/uncategorized](./packages/uncategorized)
|
|
244
244
|
- Submit a PR and join 4108+ MCP servers!
|
|
245
245
|
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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 =
|
|
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[];
|