create-mcp-use-app 2.0.0-beta.0 → 2.0.0-beta.2

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 CHANGED
@@ -433,7 +433,7 @@ server.prompt("code_review", {
433
433
  **Command not found:**
434
434
 
435
435
  ```bash
436
- # Make sure you have Node.js 20.19+ installed
436
+ # Make sure you have Node.js 22.22.2+ installed
437
437
  node --version
438
438
 
439
439
  # Try with npx
package/dist/index.js CHANGED
@@ -1346,7 +1346,7 @@ function parseCli(argv) {
1346
1346
  install: { type: "boolean" },
1347
1347
  skills: { type: "boolean" },
1348
1348
  dev: { type: "boolean" },
1349
- canary: { type: "boolean" },
1349
+ "sdk-version": { type: "string" },
1350
1350
  yarn: { type: "boolean" },
1351
1351
  npm: { type: "boolean" },
1352
1352
  pnpm: { type: "boolean" },
@@ -1366,7 +1366,7 @@ function parseCli(argv) {
1366
1366
  install,
1367
1367
  skills,
1368
1368
  dev: values.dev,
1369
- canary: values.canary,
1369
+ sdkVersion: values["sdk-version"],
1370
1370
  yarn: values.yarn,
1371
1371
  npm: values.npm,
1372
1372
  pnpm: values.pnpm
@@ -1539,32 +1539,13 @@ function renderLogo() {
1539
1539
  var packageJson = JSON.parse(
1540
1540
  readFileSync2(join3(__dirname, "../package.json"), "utf-8")
1541
1541
  );
1542
- function getCurrentPackageVersions(isDevelopment = false, useCanary = false) {
1543
- const versions = {};
1544
- try {
1545
- if (isDevelopment) {
1546
- versions["mcp-use"] = "workspace:*";
1547
- } else if (useCanary) {
1548
- versions["mcp-use"] = "canary";
1549
- } else {
1550
- versions["mcp-use"] = "latest";
1551
- }
1552
- } catch (error) {
1553
- if (process.env.NODE_ENV === "development") {
1554
- console.warn(
1555
- "\u26A0\uFE0F Could not read workspace package versions, using defaults"
1556
- );
1557
- console.warn(
1558
- ` Error: ${error instanceof Error ? error.message : String(error)}`
1559
- );
1560
- if (error instanceof Error && error.stack) {
1561
- console.warn(` Stack: ${error.stack}`);
1562
- }
1563
- }
1542
+ function getCurrentPackageVersions(isDevelopment = false, sdkVersion) {
1543
+ if (isDevelopment) {
1544
+ return { "mcp-use": "workspace:*" };
1564
1545
  }
1565
- return versions;
1546
+ return { "mcp-use": sdkVersion ?? "latest" };
1566
1547
  }
1567
- function processTemplateFile(filePath, versions, isDevelopment = false, useCanary = false) {
1548
+ function processTemplateFile(filePath, versions, isDevelopment = false) {
1568
1549
  const content = readFileSync2(filePath, "utf-8");
1569
1550
  let processedContent = content;
1570
1551
  for (const [packageName, version] of Object.entries(versions)) {
@@ -1574,24 +1555,20 @@ function processTemplateFile(filePath, versions, isDevelopment = false, useCanar
1574
1555
  version
1575
1556
  );
1576
1557
  }
1558
+ const mcpUseVersion = isDevelopment ? "workspace:*" : versions["mcp-use"] || "latest";
1577
1559
  if (isDevelopment) {
1578
1560
  processedContent = processedContent.replace(
1579
1561
  /"mcp-use": "\^[^"]+"/,
1580
1562
  '"mcp-use": "workspace:*"'
1581
1563
  );
1582
- } else if (useCanary) {
1564
+ } else {
1583
1565
  processedContent = processedContent.replace(
1584
1566
  /"mcp-use": "workspace:\*"/,
1585
- `"mcp-use": "canary"`
1567
+ `"mcp-use": "${mcpUseVersion}"`
1586
1568
  );
1587
1569
  processedContent = processedContent.replace(
1588
1570
  /"mcp-use": "\^[^"]+"/,
1589
- `"mcp-use": "canary"`
1590
- );
1591
- } else {
1592
- processedContent = processedContent.replace(
1593
- /"mcp-use": "workspace:\*"/,
1594
- `"mcp-use": "${versions["mcp-use"] || "latest"}"`
1571
+ `"mcp-use": "${mcpUseVersion}"`
1595
1572
  );
1596
1573
  }
1597
1574
  return processedContent;
@@ -1779,7 +1756,7 @@ function validateTemplateName(template) {
1779
1756
  }
1780
1757
  return resolvedTemplate;
1781
1758
  }
1782
- async function copyTemplate(projectPath, template, versions, isDevelopment = false, useCanary = false) {
1759
+ async function copyTemplate(projectPath, template, versions, isDevelopment = false) {
1783
1760
  const repoInfo = parseGitHubRepoUrl(template);
1784
1761
  if (repoInfo) {
1785
1762
  const tempDir = mkdtempSync(join3(tmpdir(), "create-mcp-use-app-"));
@@ -1789,8 +1766,7 @@ async function copyTemplate(projectPath, template, versions, isDevelopment = fal
1789
1766
  tempDir,
1790
1767
  projectPath,
1791
1768
  versions,
1792
- isDevelopment,
1793
- useCanary
1769
+ isDevelopment
1794
1770
  );
1795
1771
  } finally {
1796
1772
  try {
@@ -1832,11 +1808,10 @@ async function copyTemplate(projectPath, template, versions, isDevelopment = fal
1832
1808
  templatePath,
1833
1809
  projectPath,
1834
1810
  versions,
1835
- isDevelopment,
1836
- useCanary
1811
+ isDevelopment
1837
1812
  );
1838
1813
  }
1839
- function copyDirectoryWithProcessing(src, dest, versions, isDevelopment, useCanary = false) {
1814
+ function copyDirectoryWithProcessing(src, dest, versions, isDevelopment) {
1840
1815
  const entries = readdirSync3(src, { withFileTypes: true });
1841
1816
  for (const entry of entries) {
1842
1817
  if (entry.name === ".git") {
@@ -1847,19 +1822,12 @@ function copyDirectoryWithProcessing(src, dest, versions, isDevelopment, useCana
1847
1822
  const destPath = join3(dest, destName);
1848
1823
  if (entry.isDirectory()) {
1849
1824
  mkdirSync(destPath, { recursive: true });
1850
- copyDirectoryWithProcessing(
1851
- srcPath,
1852
- destPath,
1853
- versions,
1854
- isDevelopment,
1855
- useCanary
1856
- );
1825
+ copyDirectoryWithProcessing(srcPath, destPath, versions, isDevelopment);
1857
1826
  } else if (entry.name === "package.json" || entry.name.endsWith(".json")) {
1858
1827
  const processedContent = processTemplateFile(
1859
1828
  srcPath,
1860
1829
  versions,
1861
- isDevelopment,
1862
- useCanary
1830
+ isDevelopment
1863
1831
  );
1864
1832
  writeFileSync2(destPath, processedContent);
1865
1833
  } else {
@@ -1946,7 +1914,7 @@ Options:
1946
1914
  --no-skills Skip installing skills
1947
1915
  --no-git Skip initializing a git repository
1948
1916
  --dev Use workspace dependencies for development
1949
- --canary Use canary versions of packages
1917
+ --sdk-version <version> Pin mcp-use to an npm version or dist-tag (e.g. canary, 1.34.0)
1950
1918
  --yarn Use yarn as package manager
1951
1919
  --npm Use npm as package manager
1952
1920
  --pnpm Use pnpm as package manager
@@ -1968,11 +1936,15 @@ async function main() {
1968
1936
  listTemplates();
1969
1937
  return;
1970
1938
  }
1971
- if (options.dev && options.canary) {
1972
- console.error(red("\u274C Cannot use --dev and --canary together"));
1939
+ if (options.dev && options.sdkVersion) {
1940
+ console.error(red("\u274C Cannot use --dev and --sdk-version together"));
1973
1941
  console.error(yellow(" Please choose only one dependency mode"));
1974
1942
  process.exit(1);
1975
1943
  }
1944
+ if (options.sdkVersion !== void 0 && !options.sdkVersion.trim()) {
1945
+ console.error(red("\u274C --sdk-version requires a non-empty value"));
1946
+ process.exit(1);
1947
+ }
1976
1948
  let projectName = initialProjectName;
1977
1949
  let selectedTemplate = options.template;
1978
1950
  const interactive = isInteractive();
@@ -2059,14 +2031,8 @@ async function main() {
2059
2031
  }
2060
2032
  console.log(cyan(`\u{1F680} Creating MCP server "${displayName}"...`));
2061
2033
  const validatedTemplate = validateTemplateName(selectedTemplate);
2062
- const versions = getCurrentPackageVersions(options.dev, options.canary);
2063
- await copyTemplate(
2064
- projectPath,
2065
- validatedTemplate,
2066
- versions,
2067
- options.dev,
2068
- options.canary
2069
- );
2034
+ const versions = getCurrentPackageVersions(options.dev, options.sdkVersion);
2035
+ await copyTemplate(projectPath, validatedTemplate, versions, options.dev);
2070
2036
  updatePackageJson(projectPath, packageName);
2071
2037
  updateIndexTs(projectPath, packageName);
2072
2038
  let install = options.install;
@@ -2168,8 +2134,8 @@ async function main() {
2168
2134
  console.log(
2169
2135
  yellow("\u{1F527} Development mode: Using workspace dependencies")
2170
2136
  );
2171
- } else if (options.canary) {
2172
- console.log(cyan("\u{1F680} Canary mode: Using canary versions of packages"));
2137
+ } else if (options.sdkVersion) {
2138
+ console.log(cyan(`\u{1F4CC} Using mcp-use@${options.sdkVersion}`));
2173
2139
  }
2174
2140
  console.log("");
2175
2141
  console.log(bold("\u{1F4C1} Project structure:"));
@@ -2189,7 +2155,7 @@ async function main() {
2189
2155
  console.log(" \u251C\u2500\u2500 resources/");
2190
2156
  console.log(" \u2502 \u2514\u2500\u2500 product-search-result/");
2191
2157
  console.log(" \u2502 \u2514\u2500\u2500 view.tsx");
2192
- console.log(" \u251C\u2500\u2500 src/register.d.ts");
2158
+ console.log(" \u251C\u2500\u2500 tools.d.ts");
2193
2159
  console.log(" \u251C\u2500\u2500 index.ts (server entry point)");
2194
2160
  console.log(" \u251C\u2500\u2500 package.json");
2195
2161
  console.log(" \u251C\u2500\u2500 tsconfig.json");
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "name": "mcp-use server",
3
3
  "type": "module",
4
+ "engines": {
5
+ "node": ">=22.22.2"
6
+ },
4
7
  "version": "1.0.0",
5
8
  "description": "Blank mcp-use server",
6
9
  "author": "",
@@ -16,13 +19,14 @@
16
19
  "build": "mcp-use build",
17
20
  "dev": "mcp-use dev",
18
21
  "start": "mcp-use start",
19
- "deploy": "mcp-use deploy"
22
+ "deploy": "mcp-use deploy",
23
+ "typecheck": "tsc --noEmit"
20
24
  },
21
25
  "dependencies": {
22
26
  "mcp-use": "workspace:*"
23
27
  },
24
28
  "devDependencies": {
25
- "@types/node": "^24.13.2",
26
- "typescript": "7.0.1-rc"
29
+ "@types/node": "^22.20.0",
30
+ "typescript": "^7.0.2"
27
31
  }
28
32
  }
@@ -13,11 +13,7 @@
13
13
  "forceConsistentCasingInFileNames": true,
14
14
  "skipLibCheck": true,
15
15
  "incremental": true,
16
- "tsBuildInfoFile": "./dist/.tsbuildinfo",
17
- "baseUrl": ".",
18
- "paths": {
19
- "@/*": ["src/*"]
20
- }
16
+ "tsBuildInfoFile": "./dist/.tsbuildinfo"
21
17
  },
22
18
  "include": ["index.ts", "src/**/*", "resources/**/*", "server.ts", ".mcp-use/**/*.d.ts"],
23
19
  "exclude": ["node_modules", "dist"]
@@ -15,7 +15,7 @@ const server = new MCPServer({
15
15
  description: "An MCP Apps server built with mcp-use",
16
16
  });
17
17
 
18
- server.tool(
18
+ export const searchFruits = server.tool(
19
19
  {
20
20
  name: "search-fruits",
21
21
  description: "Search the fruit catalog",
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "name": "mcp-use server",
3
3
  "type": "module",
4
+ "engines": {
5
+ "node": ">=22.22.2"
6
+ },
4
7
  "version": "1.0.0",
5
8
  "description": "MCP server with a standard MCP Apps view",
6
9
  "author": "",
@@ -26,14 +29,14 @@
26
29
  },
27
30
  "dependencies": {
28
31
  "mcp-use": "workspace:*",
29
- "react": "^19.2.4",
30
- "react-dom": "^19.2.4",
32
+ "react": "^19.2.7",
33
+ "react-dom": "^19.2.7",
31
34
  "zod": "^4.4.3"
32
35
  },
33
36
  "devDependencies": {
34
- "@types/node": "^24.13.2",
37
+ "@types/node": "^22.20.0",
35
38
  "@types/react": "^19.2.17",
36
39
  "@types/react-dom": "^19.2.3",
37
- "typescript": "7.0.1-rc"
40
+ "typescript": "^7.0.2"
38
41
  }
39
42
  }
@@ -3,14 +3,13 @@ import { useToolContext } from "mcp-use/react";
3
3
  export default function ProductSearchResult() {
4
4
  const view = useToolContext<"search-fruits">();
5
5
 
6
- if (view.status === "pending" || view.status === "streaming") {
6
+ if (view.status === "pending") {
7
7
  return (
8
8
  <p>
9
9
  Searching{view.toolInput?.query ? ` for ${view.toolInput.query}` : ""}…
10
10
  </p>
11
11
  );
12
12
  }
13
- if (view.status === "cancelled") return <p>Search cancelled.</p>;
14
13
  if (view.status === "error") return <p>{view.error.message}</p>;
15
14
 
16
15
  return (
@@ -0,0 +1,8 @@
1
+ // Created by mcp-use when missing. Existing files are never overwritten.
2
+ declare module "mcp-use/react" {
3
+ interface Register {
4
+ tools: typeof import("./index.js");
5
+ }
6
+ }
7
+
8
+ export {};
@@ -13,6 +13,6 @@
13
13
  "noUncheckedIndexedAccess": true,
14
14
  "exactOptionalPropertyTypes": true
15
15
  },
16
- "include": ["index.ts", "src/**/*", "resources/**/*"],
16
+ "include": ["index.ts", "tools.d.ts", "resources/**/*"],
17
17
  "exclude": ["node_modules", "dist"]
18
18
  }
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "name": "mcp-use server",
3
3
  "type": "module",
4
+ "engines": {
5
+ "node": ">=22.22.2"
6
+ },
4
7
  "version": "1.0.0",
5
8
  "description": "MCP server with starter tools, resources, and prompts",
6
9
  "author": "",
@@ -19,14 +22,15 @@
19
22
  "build": "mcp-use build",
20
23
  "dev": "mcp-use dev",
21
24
  "start": "mcp-use start",
22
- "deploy": "mcp-use deploy"
25
+ "deploy": "mcp-use deploy",
26
+ "typecheck": "tsc --noEmit"
23
27
  },
24
28
  "dependencies": {
25
29
  "mcp-use": "workspace:*",
26
30
  "zod": "^4.4.3"
27
31
  },
28
32
  "devDependencies": {
29
- "@types/node": "^24.13.2",
30
- "typescript": "7.0.1-rc"
33
+ "@types/node": "^22.20.0",
34
+ "typescript": "^7.0.2"
31
35
  }
32
36
  }
@@ -13,11 +13,7 @@
13
13
  "forceConsistentCasingInFileNames": true,
14
14
  "skipLibCheck": true,
15
15
  "incremental": true,
16
- "tsBuildInfoFile": "./dist/.tsbuildinfo",
17
- "baseUrl": ".",
18
- "paths": {
19
- "@/*": ["src/*"]
20
- }
16
+ "tsBuildInfoFile": "./dist/.tsbuildinfo"
21
17
  },
22
18
  "include": ["index.ts", "src/**/*", "resources/**/*", "server.ts", ".mcp-use/**/*.d.ts"],
23
19
  "exclude": ["node_modules", "dist"]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-mcp-use-app",
3
- "version": "2.0.0-beta.0",
3
+ "version": "2.0.0-beta.2",
4
4
  "type": "module",
5
5
  "description": "Create MCP-Use apps with one command",
6
6
  "author": "mcp-use, Inc.",
@@ -33,7 +33,7 @@
33
33
  "README.md"
34
34
  ],
35
35
  "engines": {
36
- "node": "^20.19.0 || >=22.12.0"
36
+ "node": ">=22.22.2"
37
37
  },
38
38
  "dependencies": {},
39
39
  "devDependencies": {
@@ -1,7 +0,0 @@
1
- declare module "mcp-use/react" {
2
- interface Register {
3
- tools: typeof import("../index.js");
4
- }
5
- }
6
-
7
- export {};