Skip to main content
Glama
masamunet

npm-dev-mcp

by masamunet

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
NameRequiredDescriptionDefault
directoryNo再起動対象のディレクトリ(複数起動時に指定。未指定時は唯一のプロセスまたはエラー)

Implementation Reference

  • 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)
        });
      }
    }
  • 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);
    }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/masamunet/npm-dev-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server