restart_dev_server
Restart the npm run dev process to apply changes or resolve issues during development. Specify a directory when multiple processes are running.
Instructions
npm run devプロセス再起動
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | 再起動対象のディレクトリ(複数起動時に指定。未指定時は唯一のプロセスまたはエラー) |
Implementation Reference
- src/tools/restartDevServer.ts:22-105 (handler)The primary handler function for the 'restart_dev_server' MCP tool. It checks for existing processes, calls ProcessManager to restart, gathers status info, and returns a formatted JSON response with success/error details.export async function restartDevServer(args: { directory?: string } = {}): Promise<string> { try { const processManager = ProcessManager.getInstance(); // Check if target process exists BEFORE restarting const targetProcess = processManager.getProcess(args.directory); const directoryToRestart = targetProcess?.directory || args.directory; if (!targetProcess && !args.directory) { return JSON.stringify({ success: false, message: 'Dev serverが起動していません(またはディレクトリが指定されていません)。start_dev_serverを使用して開始してください。', restarted: false }); } logger.info('Restarting dev server', { directory: directoryToRestart }); const previousDirectory = targetProcess?.directory || args.directory || 'unknown'; const previousPid = targetProcess?.pid; const previousPorts = targetProcess ? [...targetProcess.ports] : []; const previousUptime = targetProcess ? Date.now() - targetProcess.startTime.getTime() : 0; // Restart the dev server const newProcess = await processManager.restartDevServer(args.directory); // Wait a moment to get updated status await new Promise(resolve => setTimeout(resolve, 3000)); // Get new status from correct process const allProcesses = await processManager.getStatus(); const newStatus = allProcesses.find(p => p.directory === newProcess.directory); const result: any = { success: true, message: 'Dev serverを正常に再起動しました', restarted: true, newProcess: { pid: newProcess.pid, directory: newProcess.directory, status: newProcess.status, startTime: newProcess.startTime, ports: newStatus?.ports || newProcess.ports } }; if (previousPid) { result.previousProcess = { pid: previousPid, directory: previousDirectory, ports: previousPorts, uptime: previousUptime }; } if (newProcess.ports.length > 0) { result.message += `\n新しいプロセスのポート: ${newProcess.ports.join(', ')}`; } // Compare ports if they changed const currentPorts = newStatus?.ports || newProcess.ports; const portsChanged = JSON.stringify(previousPorts.sort()) !== JSON.stringify([...currentPorts].sort()); if (portsChanged && previousPorts.length > 0) { result.message += `\nポートが変更されました: ${previousPorts.join(', ')} → ${currentPorts.join(', ')}`; } logger.info('Dev server restart completed', { previousPid: previousPid, newPid: newProcess.pid, newPorts: newProcess.ports }); return JSON.stringify(result, null, 2); } catch (error) { logger.error('Failed to restart dev server', { error }); return JSON.stringify({ success: false, message: `Dev serverの再起動に失敗しました: ${error}`, restarted: false, error: String(error) }); } }
- src/tools/restartDevServer.ts:7-20 (schema)The input schema definition for the 'restart_dev_server' tool, defining the optional 'directory' parameter.export const restartDevServerSchema: Tool = { name: 'restart_dev_server', description: 'npm run devプロセス再起動', inputSchema: { type: 'object', properties: { directory: { type: 'string', description: '再起動対象のディレクトリ(複数起動時に指定。未指定時は唯一のプロセスまたはエラー)' } }, additionalProperties: false } };
- src/index.ts:177-185 (registration)The registration and dispatch point in the main MCP server handler (CallToolRequestSchema), which calls the tool handler function.case 'restart_dev_server': return { content: [ { type: 'text', text: await restartDevServer(args as { directory?: string }), }, ], };
- src/index.ts:55-65 (registration)The tools array registration where restartDevServerSchema is included for ListToolsRequestSchema.const tools = [ scanProjectDirsSchema, startDevServerSchema, getDevStatusSchema, getDevLogsSchema, stopDevServerSchema, restartDevServerSchema, getHealthStatusSchema, recoverFromStateSchema, autoRecoverSchema, ];
- Supporting helper method in ProcessManager that performs the actual stop + start logic for restarting the dev server process.async restartDevServer(directory?: string): Promise<DevProcess> { this.logger.info(`Restarting dev server${directory ? ` for ${directory}` : ''}`); const targetDirectory = this.resolveTargetDirectory(directory); await this.stopDevServer(targetDirectory); // Wait a moment before restarting await new Promise(resolve => setTimeout(resolve, 1000)); return this.startDevServer(targetDirectory); }