#!/usr/bin/env node
/**
* Docker MCP Server - Wrapper for mcp-docker package
*
* This script serves as a launcher for the mcp-docker server,
* loading environment variables and providing additional logging.
*/
import { spawn } from 'child_process';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';
import * as dotenv from 'dotenv';
import fs from 'fs';
// Load environment variables
dotenv.config();
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const projectRoot = dirname(__dirname);
// Log startup information
console.error('🐳 Starting Docker MCP Server...');
console.error(`📁 Project root: ${projectRoot}`);
// Check Docker socket access
const dockerSocket = process.env.DOCKER_SOCKET || '/var/run/docker.sock';
if (dockerSocket && !dockerSocket.startsWith('tcp://') && !dockerSocket.startsWith('http')) {
try {
fs.accessSync(dockerSocket, fs.constants.R_OK | fs.constants.W_OK);
console.error(`✅ Docker socket accessible: ${dockerSocket}`);
} catch (error) {
console.error(`❌ Warning: Cannot access Docker socket at ${dockerSocket}`);
console.error(` Make sure Docker is running and user has permissions`);
}
}
// Display configuration
console.error('⚙️ Configuration:');
if (process.env.DOCKER_SOCKET) {
console.error(` Socket: ${process.env.DOCKER_SOCKET}`);
}
if (process.env.DOCKER_HOST) {
console.error(` Host: ${process.env.DOCKER_HOST}:${process.env.DOCKER_PORT || 2375}`);
}
if (process.env.DOCKER_SERVERS) {
console.error(` Multiple servers: ${process.env.DOCKER_SERVERS}`);
}
// Path to the actual mcp-docker server
const mcpDockerPath = join(projectRoot, 'node_modules', 'mcp-docker', 'build', 'index.js');
// Check if mcp-docker is installed
if (!fs.existsSync(mcpDockerPath)) {
console.error(`❌ Error: mcp-docker not found at ${mcpDockerPath}`);
console.error(' Run: npm install mcp-docker');
process.exit(1);
}
console.error(`🚀 Launching mcp-docker from: ${mcpDockerPath}`);
console.error('---');
// Launch the actual mcp-docker server
const child = spawn('node', [mcpDockerPath], {
stdio: 'inherit',
env: process.env
});
// Handle process termination
child.on('exit', (code) => {
console.error(`📊 Docker MCP Server exited with code: ${code}`);
process.exit(code);
});
child.on('error', (error) => {
console.error(`❌ Failed to start Docker MCP Server: ${error.message}`);
process.exit(1);
});
// Handle graceful shutdown
process.on('SIGTERM', () => {
console.error('🛑 Received SIGTERM, shutting down...');
child.kill('SIGTERM');
});
process.on('SIGINT', () => {
console.error('🛑 Received SIGINT, shutting down...');
child.kill('SIGINT');
});