diff --git a/package-lock.json b/package-lock.json index be13ef1..f295cad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mcp-framework", - "version": "0.1.17", + "version": "0.1.20", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mcp-framework", - "version": "0.1.17", + "version": "0.1.20", "dependencies": { "@types/prompts": "^2.4.9", "commander": "^12.1.0", diff --git a/package.json b/package.json index 95cf31e..c8b1444 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mcp-framework", -"version": "0.1.20", +"version": "0.1.21", "description": "Framework for building Model Context Protocol (MCP) servers in Typescript", "type": "module", "author": "Alex Andru ", diff --git a/src/cli/framework/build.ts b/src/cli/framework/build.ts index a44536d..9b008dc 100644 --- a/src/cli/framework/build.ts +++ b/src/cli/framework/build.ts @@ -11,38 +11,26 @@ export async function buildFramework() { const startDir = process.cwd(); process.stderr.write(`Starting search from: ${startDir}\n`); - let projectRoot: string | null = null; + if (process.argv.includes('create')) { + process.stderr.write(`Skipping build for create command\n`); + return; + } + try { const pkgPath = join(startDir, 'package.json'); - const tsConfigPath = join(startDir, 'tsconfig.json'); - - process.stderr.write(`Checking for package.json at: ${pkgPath}\n`); - const [pkgContent, _tsConfigContent] = await Promise.all([ - readFile(pkgPath, 'utf8'), - readFile(tsConfigPath, 'utf8') - ]); - + const pkgContent = await readFile(pkgPath, 'utf8'); const pkg = JSON.parse(pkgContent); - if (pkg.dependencies?.["mcp-framework"]) { - projectRoot = startDir; - process.stderr.write(`Found MCP project at current directory: ${projectRoot}\n`); + + if (!pkg.dependencies?.["mcp-framework"]) { + throw new Error("This directory is not an MCP project (mcp-framework not found in dependencies)"); } - } catch (error) { - process.stderr.write(`Error checking current directory: ${error instanceof Error ? error.message : String(error)}\n`); - } - - if (!projectRoot) { - process.stderr.write("Error: Current directory is not an MCP project\n"); - throw new Error('Current directory must be an MCP project with mcp-framework as a dependency'); - } - - try { - process.stderr.write(`Running tsc in ${projectRoot}\n`); + + process.stderr.write(`Running tsc in ${startDir}\n`); const tscCommand = process.platform === 'win32' ? ['npx.cmd', 'tsc'] : ['npx', 'tsc']; await execa(tscCommand[0], [tscCommand[1]], { - cwd: projectRoot, + cwd: startDir, stdio: "inherit", env: { ...process.env, @@ -51,7 +39,7 @@ export async function buildFramework() { } }); - const distPath = join(projectRoot, "dist"); + const distPath = join(startDir, "dist"); const projectIndexPath = join(distPath, "index.js"); const shebang = "#!/usr/bin/env node\n"; @@ -68,7 +56,7 @@ export async function buildFramework() { process.stderr.write("Build completed successfully!\n"); } catch (error) { - process.stderr.write(`Build error: ${error instanceof Error ? error.message : String(error)}\n`); + process.stderr.write(`Error: ${error instanceof Error ? error.message : String(error)}\n`); process.exit(1); } } @@ -80,3 +68,5 @@ if (import.meta.url.startsWith('file:')) { process.exit(1); }); } + +export default buildFramework; diff --git a/src/cli/index.ts b/src/cli/index.ts index d8f86ea..75f7b0e 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -11,7 +11,7 @@ const program = new Command(); program .name("mcp") .description("CLI for managing MCP server projects") - .version("0.1.20"); + .version("0.1.21"); program .command("build") diff --git a/src/cli/project/create.ts b/src/cli/project/create.ts index deac5ba..1b51191 100644 --- a/src/cli/project/create.ts +++ b/src/cli/project/create.ts @@ -3,6 +3,7 @@ import { mkdir, writeFile } from "fs/promises"; import { join } from "path"; import prompts from "prompts"; import { generateReadme } from "../templates/readme.js"; +import { execa } from "execa"; export async function createProject(name?: string) { let projectName: string; @@ -148,15 +149,28 @@ export default ExampleTool;`; throw new Error("Failed to install dependencies"); } - console.log("Building project..."); - const npmBuild = spawnSync("npm", ["run", "build"], { + console.log("Building TypeScript..."); + const tscBuild = await execa('npx', ['tsc'], { + cwd: projectDir, + stdio: "inherit", + }); + + if (tscBuild.exitCode !== 0) { + throw new Error("Failed to build TypeScript"); + } + + console.log("Adding shebang..."); + const mcpBuild = spawnSync("npm", ["run", "build"], { stdio: "inherit", shell: true, - env: process.env + env: { + ...process.env, + FORCE_COLOR: "1" + } }); - if (npmBuild.status !== 0) { - throw new Error("Failed to build project"); + if (mcpBuild.status !== 0) { + throw new Error("Failed to add shebang"); } console.log(`