@weapp-vite/mcp 2.1.0 → 2.2.0
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 +1 -1
- package/dist/index.d.ts +0 -24
- package/dist/index.mjs +24 -47
- package/package.json +9 -9
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
## 启动
|
|
21
21
|
|
|
22
|
-
直接使用 `@weapp-vite/mcp
|
|
22
|
+
直接使用 `@weapp-vite/mcp`、`@weapp-vite/acceptance` 或通过 `weapp-vite` 命令使用时,均需满足 Node.js 范围 `^22.23.4 || ^24.22.1 || >=26.12.1`。
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
25
|
pnpm --filter @weapp-vite/mcp start
|
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,6 @@ import { z } from "zod";
|
|
|
5
5
|
import { DevtoolsRuntimeHooks } from "@weapp-vite/devtools-runtime";
|
|
6
6
|
import { Buffer } from "node:buffer";
|
|
7
7
|
import { WechatDevtoolsSelectionOptions } from "weapp-ide-cli";
|
|
8
|
-
//#region src/server/runtime/shared.d.ts
|
|
9
8
|
interface MiniProgramElement {
|
|
10
9
|
tagName?: string;
|
|
11
10
|
$?: (selector: string) => Promise<MiniProgramElement | null>;
|
|
@@ -92,12 +91,8 @@ declare class RuntimeSessionManager {
|
|
|
92
91
|
private detach;
|
|
93
92
|
private pushLog;
|
|
94
93
|
}
|
|
95
|
-
//#endregion
|
|
96
|
-
//#region src/acceptance.d.ts
|
|
97
94
|
export declare function acceptanceRuntime(parent: RuntimeSessionManager): RuntimeConnector;
|
|
98
95
|
export declare function createRuntimeAcceptanceService(root: string, options?: AcceptanceOptions, hooks?: DevtoolsRuntimeHooks): Promise<AcceptanceService>;
|
|
99
|
-
//#endregion
|
|
100
|
-
//#region src/constants.d.ts
|
|
101
96
|
export declare const MCP_SERVER_NAME = "@weapp-vite/mcp";
|
|
102
97
|
export declare const MCP_SERVER_VERSION: string;
|
|
103
98
|
export declare const EXPOSED_PACKAGES: {
|
|
@@ -126,8 +121,6 @@ export declare const DEFAULT_MAX_OUTPUT_CHARS = 120000;
|
|
|
126
121
|
export declare const DEFAULT_MAX_FILE_CHARS = 80000;
|
|
127
122
|
export declare const DEFAULT_MAX_RESULTS = 200;
|
|
128
123
|
export declare const SKIPPED_DIR_NAMES: Set<string>;
|
|
129
|
-
//#endregion
|
|
130
|
-
//#region src/exposedPackages.d.ts
|
|
131
124
|
interface ResolvedExposedPackage {
|
|
132
125
|
id: ExposedPackageId;
|
|
133
126
|
label: string;
|
|
@@ -143,13 +136,9 @@ interface ResolvedExposedPackage {
|
|
|
143
136
|
sourceRoot?: string;
|
|
144
137
|
cliPath?: string;
|
|
145
138
|
}
|
|
146
|
-
//#endregion
|
|
147
|
-
//#region src/catalog.d.ts
|
|
148
139
|
export interface ExposedPackageSummary extends ResolvedExposedPackage {}
|
|
149
140
|
export declare function loadPackageSummary(workspaceRoot: string, id: ExposedPackageId): Promise<ExposedPackageSummary>;
|
|
150
141
|
export declare function loadExposedCatalog(workspaceRoot: string): Promise<ResolvedExposedPackage[]>;
|
|
151
|
-
//#endregion
|
|
152
|
-
//#region src/commandOps.d.ts
|
|
153
142
|
export interface CommandResult {
|
|
154
143
|
command: string;
|
|
155
144
|
args: string[];
|
|
@@ -164,8 +153,6 @@ export declare function runCommand(workspaceRoot: string, command: string, args:
|
|
|
164
153
|
timeoutMs?: number;
|
|
165
154
|
maxOutputChars?: number;
|
|
166
155
|
}): Promise<CommandResult>;
|
|
167
|
-
//#endregion
|
|
168
|
-
//#region src/fileOps.d.ts
|
|
169
156
|
export interface SearchMatch {
|
|
170
157
|
filePath: string;
|
|
171
158
|
line: number;
|
|
@@ -185,8 +172,6 @@ export declare function searchTextInDirectory(root: string, query: string, optio
|
|
|
185
172
|
relativeDirectory?: string;
|
|
186
173
|
maxResults?: number;
|
|
187
174
|
}): Promise<SearchMatch[]>;
|
|
188
|
-
//#endregion
|
|
189
|
-
//#region src/server/index.d.ts
|
|
190
175
|
export interface CreateServerOptions {
|
|
191
176
|
runtimeHooks?: DevtoolsRuntimeHooks;
|
|
192
177
|
workspaceRoot?: string;
|
|
@@ -204,8 +189,6 @@ export declare function createWeappViteMcpServer(options?: CreateServerOptions):
|
|
|
204
189
|
server: McpServer;
|
|
205
190
|
workspaceRoot: string;
|
|
206
191
|
}>;
|
|
207
|
-
//#endregion
|
|
208
|
-
//#region src/runtime.d.ts
|
|
209
192
|
export interface StartMcpServerOptions extends CreateServerOptions {
|
|
210
193
|
transport?: 'stdio' | 'streamable-http';
|
|
211
194
|
host?: string;
|
|
@@ -222,11 +205,7 @@ export interface McpServerHandle {
|
|
|
222
205
|
}
|
|
223
206
|
export declare function startStdioServer(options?: CreateServerOptions): Promise<McpServerHandle>;
|
|
224
207
|
export declare function startWeappViteMcpServer(options?: StartMcpServerOptions): Promise<McpServerHandle>;
|
|
225
|
-
//#endregion
|
|
226
|
-
//#region src/server/acceptance.d.ts
|
|
227
208
|
export declare function registerAcceptanceTools(server: McpServer, service: () => Promise<AcceptanceService>): McpServer;
|
|
228
|
-
//#endregion
|
|
229
|
-
//#region src/utils.d.ts
|
|
230
209
|
export declare function formatJson(value: unknown): string;
|
|
231
210
|
export declare function normalizeErrorMessage(error: unknown): string;
|
|
232
211
|
export declare function toToolResult(data: unknown, text?: string): {
|
|
@@ -245,10 +224,7 @@ export declare function toToolError(error: unknown): {
|
|
|
245
224
|
text: string;
|
|
246
225
|
}[];
|
|
247
226
|
};
|
|
248
|
-
//#endregion
|
|
249
|
-
//#region src/workspace.d.ts
|
|
250
227
|
export declare function resolveWorkspaceRoot(start?: string): string;
|
|
251
228
|
export declare function assertInsideRoot(root: string, targetPath: string): string;
|
|
252
229
|
export declare function resolveSubPath(root: string, relativePath: string): string;
|
|
253
|
-
//#endregion
|
|
254
230
|
export { DEFAULT_MCP_ENDPOINT, DEFAULT_MCP_HOST, DEFAULT_MCP_PORT, DEFAULT_RUNTIME_REST_ENDPOINT };
|
package/dist/index.mjs
CHANGED
|
@@ -14,7 +14,7 @@ import { acquireRuntimeLease, acquireSharedMiniProgram, closeOwnedSharedMiniProg
|
|
|
14
14
|
import fs$1 from "node:fs/promises";
|
|
15
15
|
import { Buffer } from "node:buffer";
|
|
16
16
|
import { spawn } from "node:child_process";
|
|
17
|
-
|
|
17
|
+
// src/utils.ts
|
|
18
18
|
function formatJson(value) {
|
|
19
19
|
return JSON.stringify(value, null, 2);
|
|
20
20
|
}
|
|
@@ -40,8 +40,7 @@ function toToolError(error) {
|
|
|
40
40
|
}]
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
|
-
|
|
44
|
-
//#region src/server/runtime/shared.ts
|
|
43
|
+
// src/server/runtime/shared.ts
|
|
45
44
|
const DEFAULT_SCREENSHOT_TIMEOUT = 6e4;
|
|
46
45
|
const SCREENSHOT_RETRY_DELAY = 500;
|
|
47
46
|
const connectionSchema$1 = z.object({
|
|
@@ -487,8 +486,7 @@ function createUnavailableRuntimeHooks() {
|
|
|
487
486
|
throw new Error("未配置 DevTools runtime hooks。请通过 createWeappViteMcpServer({ runtimeHooks }) 注入 automator 连接能力。");
|
|
488
487
|
} };
|
|
489
488
|
}
|
|
490
|
-
|
|
491
|
-
//#region src/server/runtime/devtools.ts
|
|
489
|
+
// src/server/runtime/devtools.ts
|
|
492
490
|
const navigateSchema = {
|
|
493
491
|
...connectionInputSchema,
|
|
494
492
|
path: z.string().trim().min(1).optional(),
|
|
@@ -683,8 +681,7 @@ function registerDevtoolsRuntimeTools(server, manager) {
|
|
|
683
681
|
}
|
|
684
682
|
});
|
|
685
683
|
}
|
|
686
|
-
|
|
687
|
-
//#region src/server/runtime/runtimeNode.ts
|
|
684
|
+
// src/server/runtime/runtimeNode.ts
|
|
688
685
|
const elementSelectorSchema = {
|
|
689
686
|
...connectionInputSchema,
|
|
690
687
|
selector: z.string().trim().min(1),
|
|
@@ -983,8 +980,7 @@ function toRecord(value) {
|
|
|
983
980
|
function toNumber(value) {
|
|
984
981
|
return typeof value === "number" && Number.isFinite(value) ? value : void 0;
|
|
985
982
|
}
|
|
986
|
-
|
|
987
|
-
//#region src/server/runtime/runtimePage.ts
|
|
983
|
+
// src/server/runtime/runtimePage.ts
|
|
988
984
|
const selectorSchema = {
|
|
989
985
|
...connectionInputSchema,
|
|
990
986
|
selector: z.string().trim().min(1),
|
|
@@ -1186,8 +1182,7 @@ function registerRuntimePageTools(server, manager) {
|
|
|
1186
1182
|
}
|
|
1187
1183
|
});
|
|
1188
1184
|
}
|
|
1189
|
-
|
|
1190
|
-
//#region src/server/runtime/index.ts
|
|
1185
|
+
// src/server/runtime/index.ts
|
|
1191
1186
|
function registerRuntimeTools(server, options) {
|
|
1192
1187
|
const manager = options.manager ?? new RuntimeSessionManager(options.workspaceRoot, options.runtimeHooks);
|
|
1193
1188
|
registerDevtoolsRuntimeTools(server, manager);
|
|
@@ -1195,8 +1190,7 @@ function registerRuntimeTools(server, options) {
|
|
|
1195
1190
|
registerRuntimeNodeTools(server, manager);
|
|
1196
1191
|
return manager;
|
|
1197
1192
|
}
|
|
1198
|
-
|
|
1199
|
-
//#region src/acceptance.ts
|
|
1193
|
+
// src/acceptance.ts
|
|
1200
1194
|
function acceptanceRuntime(parent) {
|
|
1201
1195
|
return async (_server, context) => {
|
|
1202
1196
|
const lease = await acquireRuntimeLease(context.root);
|
|
@@ -1280,11 +1274,9 @@ async function createRuntimeAcceptanceService(root, options = {}, hooks) {
|
|
|
1280
1274
|
};
|
|
1281
1275
|
return service;
|
|
1282
1276
|
}
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
//#endregion
|
|
1287
|
-
//#region src/constants.ts
|
|
1277
|
+
// package.json
|
|
1278
|
+
var version = "2.2.0";
|
|
1279
|
+
// src/constants.ts
|
|
1288
1280
|
const MCP_SERVER_NAME = "@weapp-vite/mcp";
|
|
1289
1281
|
const MCP_SERVER_VERSION = version;
|
|
1290
1282
|
const EXPOSED_PACKAGES = {
|
|
@@ -1318,8 +1310,7 @@ const SKIPPED_DIR_NAMES = /* @__PURE__ */ new Set([
|
|
|
1318
1310
|
"dist",
|
|
1319
1311
|
"coverage"
|
|
1320
1312
|
]);
|
|
1321
|
-
|
|
1322
|
-
//#region src/workspace.ts
|
|
1313
|
+
// src/workspace.ts
|
|
1323
1314
|
function hasWorkspaceMarkers(dir) {
|
|
1324
1315
|
return fs.existsSync(path.join(dir, "pnpm-workspace.yaml")) && fs.existsSync(path.join(dir, "package.json"));
|
|
1325
1316
|
}
|
|
@@ -1345,8 +1336,7 @@ function resolveSubPath(root, relativePath) {
|
|
|
1345
1336
|
if (path.isAbsolute(relativePath)) throw new Error("仅支持相对路径");
|
|
1346
1337
|
return assertInsideRoot(root, path.resolve(root, relativePath));
|
|
1347
1338
|
}
|
|
1348
|
-
|
|
1349
|
-
//#region src/exposedPackages.ts
|
|
1339
|
+
// src/exposedPackages.ts
|
|
1350
1340
|
async function pathExists(filePath) {
|
|
1351
1341
|
try {
|
|
1352
1342
|
await fs$1.access(filePath);
|
|
@@ -1443,8 +1433,7 @@ async function resolveExposedPackages(workspaceRoot) {
|
|
|
1443
1433
|
return [];
|
|
1444
1434
|
}).sort((a, b) => a.id.localeCompare(b.id));
|
|
1445
1435
|
}
|
|
1446
|
-
|
|
1447
|
-
//#region src/server/acceptance.ts
|
|
1436
|
+
// src/server/acceptance.ts
|
|
1448
1437
|
function registerAcceptanceTools(server, service) {
|
|
1449
1438
|
const json = (data) => {
|
|
1450
1439
|
const structuredContent = redactValue(data);
|
|
@@ -1547,8 +1536,7 @@ function registerAcceptanceTools(server, service) {
|
|
|
1547
1536
|
}));
|
|
1548
1537
|
return server;
|
|
1549
1538
|
}
|
|
1550
|
-
|
|
1551
|
-
//#region src/server/prompts.ts
|
|
1539
|
+
// src/server/prompts.ts
|
|
1552
1540
|
function registerServerPrompts(server, options) {
|
|
1553
1541
|
const { packageIds, packageIdSchema } = options;
|
|
1554
1542
|
server.registerPrompt("plan-weapp-vite-change", {
|
|
@@ -1642,8 +1630,7 @@ function registerServerPrompts(server, options) {
|
|
|
1642
1630
|
}] };
|
|
1643
1631
|
});
|
|
1644
1632
|
}
|
|
1645
|
-
|
|
1646
|
-
//#region src/fileOps.ts
|
|
1633
|
+
// src/fileOps.ts
|
|
1647
1634
|
async function walkFilesRecursive(root, current, output, maxResults) {
|
|
1648
1635
|
if (output.length >= maxResults) return;
|
|
1649
1636
|
const entries = await fs$1.readdir(current, { withFileTypes: true });
|
|
@@ -1714,8 +1701,7 @@ async function searchTextInDirectory(root, query, options) {
|
|
|
1714
1701
|
}
|
|
1715
1702
|
return matches;
|
|
1716
1703
|
}
|
|
1717
|
-
|
|
1718
|
-
//#region src/commandOps.ts
|
|
1704
|
+
// src/commandOps.ts
|
|
1719
1705
|
const ALLOWED_COMMANDS = /* @__PURE__ */ new Set([
|
|
1720
1706
|
"pnpm",
|
|
1721
1707
|
"node",
|
|
@@ -1781,8 +1767,7 @@ async function runCommand(workspaceRoot, command, args, options) {
|
|
|
1781
1767
|
timedOut
|
|
1782
1768
|
};
|
|
1783
1769
|
}
|
|
1784
|
-
|
|
1785
|
-
//#region src/server/shared.ts
|
|
1770
|
+
// src/server/shared.ts
|
|
1786
1771
|
async function resolvePackageRoot(workspaceRoot, packageId) {
|
|
1787
1772
|
const resolved = await resolveExposedPackage(workspaceRoot, packageId);
|
|
1788
1773
|
if (!resolved.sourceRoot) throw new Error(`当前工作区中的 ${packageId} 不包含源码目录,请改为优先读取本地随包文档。`);
|
|
@@ -1803,8 +1788,7 @@ async function runWeappViteCliTool(workspaceRoot, input) {
|
|
|
1803
1788
|
if (Array.isArray(input.args) && input.args.length > 0) finalArgs.push(...input.args);
|
|
1804
1789
|
return runCommand(workspaceRoot, "node", finalArgs, { timeoutMs: input.timeoutMs ?? 12e4 });
|
|
1805
1790
|
}
|
|
1806
|
-
|
|
1807
|
-
//#region src/server/resources.ts
|
|
1791
|
+
// src/server/resources.ts
|
|
1808
1792
|
function registerServerResources(server, options) {
|
|
1809
1793
|
const { workspaceRoot, packageIds, exposedPackages } = options;
|
|
1810
1794
|
server.registerResource("workspace-catalog", "weapp-vite://workspace/catalog", {
|
|
@@ -1880,16 +1864,14 @@ function registerServerResources(server, options) {
|
|
|
1880
1864
|
}
|
|
1881
1865
|
});
|
|
1882
1866
|
}
|
|
1883
|
-
|
|
1884
|
-
//#region src/catalog.ts
|
|
1867
|
+
// src/catalog.ts
|
|
1885
1868
|
async function loadPackageSummary(workspaceRoot, id) {
|
|
1886
1869
|
return resolveExposedPackage(workspaceRoot, id);
|
|
1887
1870
|
}
|
|
1888
1871
|
async function loadExposedCatalog(workspaceRoot) {
|
|
1889
1872
|
return resolveExposedPackages(workspaceRoot);
|
|
1890
1873
|
}
|
|
1891
|
-
|
|
1892
|
-
//#region src/server/tools.ts
|
|
1874
|
+
// src/server/tools.ts
|
|
1893
1875
|
function registerServerTools(server, options) {
|
|
1894
1876
|
const { workspaceRoot, packageIds, packageIdSchema } = options;
|
|
1895
1877
|
server.registerTool("workspace_catalog", {
|
|
@@ -2137,8 +2119,7 @@ function registerServerTools(server, options) {
|
|
|
2137
2119
|
}
|
|
2138
2120
|
});
|
|
2139
2121
|
}
|
|
2140
|
-
|
|
2141
|
-
//#region src/server/index.ts
|
|
2122
|
+
// src/server/index.ts
|
|
2142
2123
|
const packageIds = Object.keys(EXPOSED_PACKAGES);
|
|
2143
2124
|
const packageIdSchema = z.enum(packageIds);
|
|
2144
2125
|
async function createWeappViteMcpServerFactory(options) {
|
|
@@ -2210,8 +2191,7 @@ async function createWeappViteMcpServer(options) {
|
|
|
2210
2191
|
workspaceRoot: factory.workspaceRoot
|
|
2211
2192
|
};
|
|
2212
2193
|
}
|
|
2213
|
-
|
|
2214
|
-
//#region src/server/runtime/rest.ts
|
|
2194
|
+
// src/server/runtime/rest.ts
|
|
2215
2195
|
const connectionSchema = z.object({
|
|
2216
2196
|
cliPath: z.string().trim().min(1).optional(),
|
|
2217
2197
|
devtoolsChannel: z.enum([
|
|
@@ -2505,8 +2485,7 @@ async function handleRuntimeRestRequest(req, res, options) {
|
|
|
2505
2485
|
}
|
|
2506
2486
|
return true;
|
|
2507
2487
|
}
|
|
2508
|
-
|
|
2509
|
-
//#region src/runtime.ts
|
|
2488
|
+
// src/runtime.ts
|
|
2510
2489
|
function normalizeEndpoint(input) {
|
|
2511
2490
|
const value = typeof input === "string" ? input.trim() : "";
|
|
2512
2491
|
if (!value) return DEFAULT_MCP_ENDPOINT;
|
|
@@ -2637,8 +2616,7 @@ async function startWeappViteMcpServer(options) {
|
|
|
2637
2616
|
if ((options?.transport ?? "stdio") === "streamable-http") return startStreamableHttpServer(options ?? {});
|
|
2638
2617
|
return await startStdioServer(options);
|
|
2639
2618
|
}
|
|
2640
|
-
|
|
2641
|
-
//#region src/index.ts
|
|
2619
|
+
// src/index.ts
|
|
2642
2620
|
function isDirectExecution() {
|
|
2643
2621
|
const entry = process.argv[1];
|
|
2644
2622
|
if (!entry) return false;
|
|
@@ -2653,5 +2631,4 @@ if (isDirectExecution()) startStdioServer().catch((error) => {
|
|
|
2653
2631
|
process.stderr.write(`[mcp] server start failed\n${message}\n`);
|
|
2654
2632
|
process.exitCode = 1;
|
|
2655
2633
|
});
|
|
2656
|
-
//#endregion
|
|
2657
2634
|
export { DEFAULT_MAX_FILE_CHARS, DEFAULT_MAX_OUTPUT_CHARS, DEFAULT_MAX_RESULTS, DEFAULT_MCP_ENDPOINT, DEFAULT_MCP_HOST, DEFAULT_MCP_PORT, DEFAULT_RUNTIME_REST_ENDPOINT, DEFAULT_TIMEOUT_MS, EXPOSED_PACKAGES, MCP_SERVER_NAME, MCP_SERVER_VERSION, SKIPPED_DIR_NAMES, acceptanceRuntime, assertInsideRoot, createRuntimeAcceptanceService, createWeappViteMcpServer, createWeappViteMcpServerFactory, formatJson, listFilesInDirectory, loadExposedCatalog, loadPackageSummary, normalizeErrorMessage, readFileContent, registerAcceptanceTools, resolveSubPath, resolveWorkspaceRoot, runCommand, searchTextInDirectory, startStdioServer, startWeappViteMcpServer, toToolError, toToolResult };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@weapp-vite/mcp",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.2.0",
|
|
5
5
|
"description": "@weapp-vite/mcp tools and runtime components for modern WeChat and multi-platform mini-program development.",
|
|
6
6
|
"author": "ice breaker <1324318532@qq.com>",
|
|
7
7
|
"license": "ISC",
|
|
@@ -37,19 +37,19 @@
|
|
|
37
37
|
"dist"
|
|
38
38
|
],
|
|
39
39
|
"engines": {
|
|
40
|
-
"node": "
|
|
40
|
+
"node": "^22.23.4 || ^24.22.1 || >=26.12.1"
|
|
41
41
|
},
|
|
42
42
|
"publishConfig": {
|
|
43
43
|
"access": "public",
|
|
44
44
|
"registry": "https://registry.npmjs.org"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@modelcontextprotocol/node": "^2.1.
|
|
48
|
-
"@modelcontextprotocol/server": "^2.
|
|
49
|
-
"@weapp-core/constants": "0.
|
|
50
|
-
"@weapp-vite/acceptance": "0.
|
|
51
|
-
"@weapp-vite/devtools-runtime": "0.
|
|
52
|
-
"weapp-ide-cli": "6.
|
|
47
|
+
"@modelcontextprotocol/node": "^2.1.2",
|
|
48
|
+
"@modelcontextprotocol/server": "^2.4.0",
|
|
49
|
+
"@weapp-core/constants": "0.5.0",
|
|
50
|
+
"@weapp-vite/acceptance": "0.2.0",
|
|
51
|
+
"@weapp-vite/devtools-runtime": "0.7.0",
|
|
52
|
+
"weapp-ide-cli": "6.4.0",
|
|
53
53
|
"zod": "^4.6.7"
|
|
54
54
|
},
|
|
55
55
|
"tsd": {
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
}
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
|
-
"@modelcontextprotocol/client": "^2.
|
|
62
|
+
"@modelcontextprotocol/client": "^2.4.0"
|
|
63
63
|
},
|
|
64
64
|
"scripts": {
|
|
65
65
|
"dev": "tsdown -w --sourcemap",
|