@samanhappy/mcphub 0.0.18 → 0.0.20
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/bin/cli.js +60 -27
- package/dist/server.js +53 -32
- package/dist/server.js.map +1 -1
- package/package.json +3 -5
- package/mcp_settings.json +0 -45
- package/servers.json +0 -74722
package/bin/cli.js
CHANGED
|
@@ -5,26 +5,53 @@ import { fileURLToPath } from 'url';
|
|
|
5
5
|
import { execSync } from 'child_process';
|
|
6
6
|
import fs from 'fs';
|
|
7
7
|
|
|
8
|
+
// Enable debug logging if needed
|
|
9
|
+
// process.env.DEBUG = 'true';
|
|
10
|
+
|
|
8
11
|
const __filename = fileURLToPath(import.meta.url);
|
|
9
12
|
const __dirname = path.dirname(__filename);
|
|
10
13
|
|
|
11
|
-
//
|
|
14
|
+
// Start with more debug information
|
|
15
|
+
console.log('📋 MCPHub CLI');
|
|
16
|
+
console.log(`📁 CLI script location: ${__dirname}`);
|
|
17
|
+
|
|
18
|
+
// The npm package directory structure when installed is:
|
|
19
|
+
// node_modules/@samanhappy/mcphub/
|
|
20
|
+
// - dist/
|
|
21
|
+
// - bin/
|
|
22
|
+
// - frontend/dist/
|
|
23
|
+
|
|
24
|
+
// Get the package root - this is where package.json is located
|
|
12
25
|
function findPackageRoot() {
|
|
13
|
-
|
|
26
|
+
const isDebug = process.env.DEBUG === 'true';
|
|
27
|
+
|
|
28
|
+
// Possible locations for package.json
|
|
14
29
|
const possibleRoots = [
|
|
15
|
-
//
|
|
30
|
+
// Standard npm package location
|
|
16
31
|
path.resolve(__dirname, '..'),
|
|
17
|
-
// When installed
|
|
18
|
-
path.resolve(__dirname, '..', '..', '..')
|
|
19
|
-
// Global install or npx context
|
|
20
|
-
path.resolve(path.dirname(process.argv[1]), '..')
|
|
32
|
+
// When installed via npx
|
|
33
|
+
path.resolve(__dirname, '..', '..', '..')
|
|
21
34
|
];
|
|
22
|
-
|
|
35
|
+
|
|
36
|
+
// Special handling for npx
|
|
37
|
+
if (process.argv[1] && process.argv[1].includes('_npx')) {
|
|
38
|
+
const npxDir = path.dirname(process.argv[1]);
|
|
39
|
+
possibleRoots.unshift(path.resolve(npxDir, '..'));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (isDebug) {
|
|
43
|
+
console.log('DEBUG: Checking for package.json in:', possibleRoots);
|
|
44
|
+
}
|
|
45
|
+
|
|
23
46
|
for (const root of possibleRoots) {
|
|
24
|
-
|
|
47
|
+
const packageJsonPath = path.join(root, 'package.json');
|
|
48
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
25
49
|
try {
|
|
26
|
-
const pkg = JSON.parse(fs.readFileSync(
|
|
27
|
-
if (pkg.name === 'mcphub') {
|
|
50
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
51
|
+
if (pkg.name === 'mcphub' || pkg.name === '@samanhappy/mcphub') {
|
|
52
|
+
if (isDebug) {
|
|
53
|
+
console.log(`DEBUG: Found package.json at ${packageJsonPath}`);
|
|
54
|
+
}
|
|
28
55
|
return root;
|
|
29
56
|
}
|
|
30
57
|
} catch (e) {
|
|
@@ -33,31 +60,37 @@ function findPackageRoot() {
|
|
|
33
60
|
}
|
|
34
61
|
}
|
|
35
62
|
|
|
36
|
-
|
|
63
|
+
console.log('⚠️ Could not find package.json, using default path');
|
|
37
64
|
return path.resolve(__dirname, '..');
|
|
38
65
|
}
|
|
39
66
|
|
|
67
|
+
// Locate and check the frontend distribution
|
|
68
|
+
function checkFrontend(packageRoot) {
|
|
69
|
+
const isDebug = process.env.DEBUG === 'true';
|
|
70
|
+
const frontendDistPath = path.join(packageRoot, 'frontend', 'dist');
|
|
71
|
+
|
|
72
|
+
if (isDebug) {
|
|
73
|
+
console.log(`DEBUG: Checking frontend at: ${frontendDistPath}`);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (fs.existsSync(frontendDistPath) && fs.existsSync(path.join(frontendDistPath, 'index.html'))) {
|
|
77
|
+
console.log('✅ Frontend distribution found');
|
|
78
|
+
return true;
|
|
79
|
+
} else {
|
|
80
|
+
console.log('⚠️ Frontend distribution not found at', frontendDistPath);
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
40
85
|
const projectRoot = findPackageRoot();
|
|
41
86
|
console.log(`📦 Using package root: ${projectRoot}`);
|
|
42
87
|
|
|
43
|
-
// Check if frontend
|
|
44
|
-
|
|
45
|
-
if (!fs.existsSync(frontendDistPath) || !fs.existsSync(path.join(frontendDistPath, 'index.html'))) {
|
|
46
|
-
console.log('📦 Frontend dist not found, building...');
|
|
47
|
-
try {
|
|
48
|
-
execSync('npm run frontend:build', { stdio: 'inherit', cwd: projectRoot });
|
|
49
|
-
console.log('✅ Frontend build successful');
|
|
50
|
-
} catch (error) {
|
|
51
|
-
console.error('❌ Failed to build frontend:', error);
|
|
52
|
-
console.log('⚠️ Will start server without frontend. Please build frontend manually.');
|
|
53
|
-
}
|
|
54
|
-
} else {
|
|
55
|
-
console.log('✅ Frontend dist found');
|
|
56
|
-
}
|
|
88
|
+
// Check if frontend exists
|
|
89
|
+
checkFrontend(projectRoot);
|
|
57
90
|
|
|
58
91
|
// Start the server
|
|
59
92
|
console.log('🚀 Starting MCPHub server...');
|
|
60
|
-
import('
|
|
93
|
+
import(path.join(projectRoot, 'dist', 'index.js')).catch(err => {
|
|
61
94
|
console.error('Failed to start MCPHub:', err);
|
|
62
95
|
process.exit(1);
|
|
63
96
|
});
|
package/dist/server.js
CHANGED
|
@@ -14,6 +14,7 @@ const __filename = fileURLToPath(import.meta.url);
|
|
|
14
14
|
const __dirname = path.dirname(__filename);
|
|
15
15
|
export class AppServer {
|
|
16
16
|
constructor() {
|
|
17
|
+
this.frontendPath = null;
|
|
17
18
|
this.app = express();
|
|
18
19
|
this.port = config.port;
|
|
19
20
|
}
|
|
@@ -26,10 +27,8 @@ export class AppServer {
|
|
|
26
27
|
initMiddlewares(this.app);
|
|
27
28
|
initRoutes(this.app);
|
|
28
29
|
console.log('Server initialized successfully');
|
|
29
|
-
//
|
|
30
|
-
|
|
31
|
-
console.log(`Serving frontend from: ${frontendDistPath}`);
|
|
32
|
-
this.app.use(express.static(frontendDistPath));
|
|
30
|
+
// Find and serve frontend
|
|
31
|
+
this.findAndServeFrontend();
|
|
33
32
|
initMcpServer(config.mcpHubName, config.mcpHubVersion)
|
|
34
33
|
.then(() => {
|
|
35
34
|
console.log('MCP server initialized successfully');
|
|
@@ -42,20 +41,6 @@ export class AppServer {
|
|
|
42
41
|
.catch((error) => {
|
|
43
42
|
console.error('Error initializing MCP server:', error);
|
|
44
43
|
throw error;
|
|
45
|
-
})
|
|
46
|
-
.finally(() => {
|
|
47
|
-
// Make sure frontend index.html exists before setting this route
|
|
48
|
-
if (fs.existsSync(path.join(this.getFrontendDistPath(), 'index.html'))) {
|
|
49
|
-
this.app.get('*', (_req, res) => {
|
|
50
|
-
res.sendFile(path.join(this.getFrontendDistPath(), 'index.html'));
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
console.error('Frontend files not found. Please make sure the frontend is built correctly.');
|
|
55
|
-
this.app.get('*', (_req, res) => {
|
|
56
|
-
res.status(500).send('Frontend not found. Please run "npm run build" to build the project.');
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
44
|
});
|
|
60
45
|
}
|
|
61
46
|
catch (error) {
|
|
@@ -63,37 +48,73 @@ export class AppServer {
|
|
|
63
48
|
throw error;
|
|
64
49
|
}
|
|
65
50
|
}
|
|
51
|
+
findAndServeFrontend() {
|
|
52
|
+
// Find frontend path
|
|
53
|
+
this.frontendPath = this.findFrontendDistPath();
|
|
54
|
+
if (this.frontendPath) {
|
|
55
|
+
console.log(`Serving frontend from: ${this.frontendPath}`);
|
|
56
|
+
this.app.use(express.static(this.frontendPath));
|
|
57
|
+
// Add the wildcard route for SPA
|
|
58
|
+
if (fs.existsSync(path.join(this.frontendPath, 'index.html'))) {
|
|
59
|
+
this.app.get('*', (_req, res) => {
|
|
60
|
+
res.sendFile(path.join(this.frontendPath, 'index.html'));
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
console.warn('Frontend dist directory not found. Server will run without frontend.');
|
|
66
|
+
this.app.get('/', (_req, res) => {
|
|
67
|
+
res.status(404).send('Frontend not found. MCPHub API is running, but the UI is not available.');
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
66
71
|
start() {
|
|
67
72
|
this.app.listen(this.port, () => {
|
|
68
73
|
console.log(`Server is running on port ${this.port}`);
|
|
69
|
-
|
|
74
|
+
if (this.frontendPath) {
|
|
75
|
+
console.log(`Open http://localhost:${this.port} in your browser to access MCPHub UI`);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.log(`MCPHub API is running on http://localhost:${this.port}, but the UI is not available`);
|
|
79
|
+
}
|
|
70
80
|
});
|
|
71
81
|
}
|
|
72
82
|
getApp() {
|
|
73
83
|
return this.app;
|
|
74
84
|
}
|
|
75
85
|
// Helper method to find frontend dist path in different environments
|
|
76
|
-
|
|
86
|
+
findFrontendDistPath() {
|
|
87
|
+
// Debug flag for detailed logging
|
|
88
|
+
const debug = process.env.DEBUG === 'true';
|
|
89
|
+
// Get the base directory of the current file
|
|
90
|
+
const baseDir = __dirname;
|
|
91
|
+
const projectRoot = path.resolve(baseDir, '..', '..');
|
|
92
|
+
if (debug) {
|
|
93
|
+
console.log('DEBUG: Current directory:', process.cwd());
|
|
94
|
+
console.log('DEBUG: Script directory:', __dirname);
|
|
95
|
+
console.log('DEBUG: Project root:', projectRoot);
|
|
96
|
+
}
|
|
97
|
+
// Check all possible locations for the frontend dist folder
|
|
77
98
|
const possiblePaths = [
|
|
78
|
-
|
|
79
|
-
path.join(__dirname, '..', '..', 'frontend', 'dist'),
|
|
80
|
-
path.join(__dirname, '..', '..', '..', 'frontend', 'dist'),
|
|
81
|
-
// 2. When running in the package directory with node_modules/.bin/mcphub
|
|
82
|
-
path.join(__dirname, '..', '..', '..', '..', 'frontend', 'dist'),
|
|
83
|
-
// 3. When running in local development environment
|
|
99
|
+
path.join(projectRoot, 'frontend', 'dist'),
|
|
84
100
|
path.join(process.cwd(), 'frontend', 'dist'),
|
|
85
|
-
|
|
86
|
-
path.join(__dirname, '..', '..', '..', '
|
|
87
|
-
// 5. Check for npm package path resolution
|
|
88
|
-
path.join(path.dirname(path.dirname(process.argv[1])), 'frontend', 'dist')
|
|
101
|
+
path.join(__dirname, '..', '..', 'frontend', 'dist'),
|
|
102
|
+
path.join(__dirname, '..', '..', '..', 'frontend', 'dist')
|
|
89
103
|
];
|
|
104
|
+
// Special handling for npx
|
|
105
|
+
if (process.argv[1] && process.argv[1].includes('_npx')) {
|
|
106
|
+
const npxDir = path.dirname(process.argv[1]);
|
|
107
|
+
possiblePaths.push(path.join(npxDir, '..', 'frontend', 'dist'));
|
|
108
|
+
}
|
|
109
|
+
if (debug) {
|
|
110
|
+
console.log('DEBUG: Checking paths:', possiblePaths);
|
|
111
|
+
}
|
|
90
112
|
for (const possiblePath of possiblePaths) {
|
|
91
113
|
if (fs.existsSync(possiblePath) && fs.existsSync(path.join(possiblePath, 'index.html'))) {
|
|
92
114
|
return possiblePath;
|
|
93
115
|
}
|
|
94
116
|
}
|
|
95
|
-
|
|
96
|
-
return path.join(process.cwd(), 'frontend', 'dist');
|
|
117
|
+
return null;
|
|
97
118
|
}
|
|
98
119
|
}
|
|
99
120
|
export default AppServer;
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,gCAAgC;AAChC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,OAAO,SAAS;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@samanhappy/mcphub",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.20",
|
|
4
4
|
"description": "A hub server for mcp servers",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
|
-
"mcphub": "
|
|
8
|
+
"mcphub": "bin/cli.js"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"dist",
|
|
12
12
|
"bin",
|
|
13
|
-
"mcp_settings.json",
|
|
14
|
-
"servers.json",
|
|
15
13
|
"frontend/dist",
|
|
16
14
|
"README.md",
|
|
17
15
|
"LICENSE"
|
|
@@ -28,7 +26,7 @@
|
|
|
28
26
|
"frontend:build": "cd frontend && vite build",
|
|
29
27
|
"frontend:preview": "cd frontend && vite preview",
|
|
30
28
|
"dev": "concurrently \"npm run backend:dev\" \"npm run frontend:dev\"",
|
|
31
|
-
"prepublishOnly": "npm run build"
|
|
29
|
+
"prepublishOnly": "npm run build && node scripts/verify-dist.js"
|
|
32
30
|
},
|
|
33
31
|
"keywords": [
|
|
34
32
|
"typescript",
|
package/mcp_settings.json
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"mcpServers": {
|
|
3
|
-
"amap": {
|
|
4
|
-
"command": "npx",
|
|
5
|
-
"args": [
|
|
6
|
-
"-y",
|
|
7
|
-
"@amap/amap-maps-mcp-server"
|
|
8
|
-
],
|
|
9
|
-
"env": {
|
|
10
|
-
"AMAP_MAPS_API_KEY": "your-api-key"
|
|
11
|
-
}
|
|
12
|
-
},
|
|
13
|
-
"playwright": {
|
|
14
|
-
"command": "npx",
|
|
15
|
-
"args": [
|
|
16
|
-
"@playwright/mcp@latest",
|
|
17
|
-
"--headless"
|
|
18
|
-
]
|
|
19
|
-
},
|
|
20
|
-
"fetch": {
|
|
21
|
-
"command": "uvx",
|
|
22
|
-
"args": [
|
|
23
|
-
"mcp-server-fetch"
|
|
24
|
-
]
|
|
25
|
-
},
|
|
26
|
-
"slack": {
|
|
27
|
-
"command": "npx",
|
|
28
|
-
"args": [
|
|
29
|
-
"-y",
|
|
30
|
-
"@modelcontextprotocol/server-slack"
|
|
31
|
-
],
|
|
32
|
-
"env": {
|
|
33
|
-
"SLACK_BOT_TOKEN": "your-bot-token",
|
|
34
|
-
"SLACK_TEAM_ID": "your-team-id"
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
"users": [
|
|
39
|
-
{
|
|
40
|
-
"username": "admin",
|
|
41
|
-
"password": "$2b$10$Vt7krIvjNgyN67LXqly0uOcTpN0LI55cYRbcKC71pUDAP0nJ7RPa.",
|
|
42
|
-
"isAdmin": true
|
|
43
|
-
}
|
|
44
|
-
]
|
|
45
|
-
}
|