mirror of
https://github.com/samanhappy/mcphub.git
synced 2025-12-23 18:29:21 -05:00
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: samanhappy <2755122+samanhappy@users.noreply.github.com> Co-authored-by: samanhappy <samanhappy@gmail.com>
98 lines
2.9 KiB
JavaScript
Executable File
98 lines
2.9 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
import path from 'path';
|
|
import { fileURLToPath, pathToFileURL } from 'url';
|
|
import fs from 'fs';
|
|
|
|
// Enable debug logging if needed
|
|
// process.env.DEBUG = 'true';
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = path.dirname(__filename);
|
|
|
|
// Start with more debug information
|
|
console.log('📋 MCPHub CLI');
|
|
console.log(`📁 CLI script location: ${__dirname}`);
|
|
|
|
// The npm package directory structure when installed is:
|
|
// node_modules/@samanhappy/mcphub/
|
|
// - dist/
|
|
// - bin/
|
|
// - frontend/dist/
|
|
|
|
// Get the package root - this is where package.json is located
|
|
function findPackageRoot() {
|
|
const isDebug = process.env.DEBUG === 'true';
|
|
|
|
// Possible locations for package.json
|
|
const possibleRoots = [
|
|
// Standard npm package location
|
|
path.resolve(__dirname, '..'),
|
|
// When installed via npx
|
|
path.resolve(__dirname, '..', '..', '..')
|
|
];
|
|
|
|
// Special handling for npx
|
|
if (process.argv[1] && process.argv[1].includes('_npx')) {
|
|
const npxDir = path.dirname(process.argv[1]);
|
|
possibleRoots.unshift(path.resolve(npxDir, '..'));
|
|
}
|
|
|
|
if (isDebug) {
|
|
console.log('DEBUG: Checking for package.json in:', possibleRoots);
|
|
}
|
|
|
|
for (const root of possibleRoots) {
|
|
const packageJsonPath = path.join(root, 'package.json');
|
|
if (fs.existsSync(packageJsonPath)) {
|
|
try {
|
|
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
if (pkg.name === 'mcphub' || pkg.name === '@samanhappy/mcphub') {
|
|
if (isDebug) {
|
|
console.log(`DEBUG: Found package.json at ${packageJsonPath}`);
|
|
}
|
|
return root;
|
|
}
|
|
} catch (e) {
|
|
// Continue to the next potential root
|
|
}
|
|
}
|
|
}
|
|
|
|
console.log('⚠️ Could not find package.json, using default path');
|
|
return path.resolve(__dirname, '..');
|
|
}
|
|
|
|
// Locate and check the frontend distribution
|
|
function checkFrontend(packageRoot) {
|
|
const isDebug = process.env.DEBUG === 'true';
|
|
const frontendDistPath = path.join(packageRoot, 'frontend', 'dist');
|
|
|
|
if (isDebug) {
|
|
console.log(`DEBUG: Checking frontend at: ${frontendDistPath}`);
|
|
}
|
|
|
|
if (fs.existsSync(frontendDistPath) && fs.existsSync(path.join(frontendDistPath, 'index.html'))) {
|
|
console.log('✅ Frontend distribution found');
|
|
return true;
|
|
} else {
|
|
console.log('⚠️ Frontend distribution not found at', frontendDistPath);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
const projectRoot = findPackageRoot();
|
|
console.log(`📦 Using package root: ${projectRoot}`);
|
|
|
|
// Check if frontend exists
|
|
checkFrontend(projectRoot);
|
|
|
|
// Start the server
|
|
console.log('🚀 Starting MCPHub server...');
|
|
const entryPath = path.join(projectRoot, 'dist', 'index.js');
|
|
// Convert to file:// URL for cross-platform ESM compatibility (required on Windows)
|
|
const entryUrl = pathToFileURL(entryPath).href;
|
|
import(entryUrl).catch(err => {
|
|
console.error('Failed to start MCPHub:', err);
|
|
process.exit(1);
|
|
}); |