Node Runner MCP Server

Node Runner MCP Server

Enables running Node.js scripts and npm commands with permission prompts via node-notifier, including server management, script execution with stdin, and npm package documentation fetching.

Category
访问服务器

README

Node Runner MCP Server

Node.js Version

An MCP server that allows you to run Node.js scripts and npm commands, with permission prompts via node-notifier.

Requirements

  • Node.js >= 22.0.0

Features

  • Run Node.js scripts with arguments and standard input
  • Execute npm scripts from package.json files with standard input
  • Run JavaScript code directly with Node's eval and provide standard input
  • Start Node.js servers that continue running in the background
  • List running servers and view their status
  • Stop running servers gracefully or forcefully when needed
  • Retrieve and filter server logs for debugging and monitoring
  • Select specific Node.js versions using NVM
  • View available npm scripts in package.json files
  • Fetch documentation for npm packages with README and metadata
  • Permission prompts before any execution (can be disabled)

Setup

  1. Clone this repository
  2. Install dependencies:
    npm install
    
  3. Build the TypeScript code:
    npm run build
    

Project Structure

  • src/index.ts - Main MCP server implementation
  • test.js - Sample test script to run with the server

Usage with Claude for Desktop

  1. Build the project with npm run build
  2. Add the server to your Claude for Desktop configuration:
{
  "mcpServers": {
    "node-runner": {
      "command": "npx",
      "args": ["-y", "mcp-node@latest"],
      "env": {
        "DISABLE_NOTIFICATIONS": "true",  // Optional: disable permission prompts
        "EVAL_DIRECTORIES": "/path/to/safe/dir1:/path/to/safe/dir2"  // Optional: additional allowed eval directories
      }
    }
  }
}
  1. Restart Claude for Desktop
  2. You can now ask Claude to run Node.js scripts or npm commands
  3. (Optional) Use the env configuration to disable notification prompts as shown above

Available Tools

start-node-server

Starts a Node.js server that continues running in the background, even after the command completes.

Parameters:

  • scriptPath: Path to the Node.js server script to execute
  • cwd: Directory to run the server in
  • serverName: (Optional) Friendly name for the server (defaults to the script filename)
  • nodeArgs: (Optional) Arguments to pass to the Node.js executable itself
  • args: (Optional) Array of arguments to pass to the server script

Example prompt: "Start an Express server from server.js and keep it running"

Example usage:

start-node-server({
  scriptPath: "/absolute/path/to/server.js",
  cwd: "/absolute/path/to/project",
  serverName: "My Express API",
  args: ["--port", "3000"]
});

list-servers

Lists all running Node.js servers started via the MCP server.

Parameters:

  • showLogs: (Optional) Boolean to include recent logs in the output (default: false)
  • serverId: (Optional) Server ID to get details for a specific server

Example prompt: "Show me all running Node.js servers"

Example to view detailed logs for a specific server:

list-servers({
  serverId: "server-1234567890-1234",
  showLogs: true
});

stop-server

Stops a running Node.js server.

Parameters:

  • serverId: ID of the server to stop
  • force: (Optional) Boolean to force kill the server with SIGKILL instead of SIGTERM (default: false)

Example prompt: "Stop the Node.js server with ID server-1234567890-1234"

Example to forcefully terminate a server:

stop-server({
  serverId: "server-1234567890-1234",
  force: true
});

get-server-logs

Retrieves the last N lines of logs from a running server with filtering options. This tool is essential for debugging and monitoring server behavior without having to stop it.

Parameters:

  • serverId: ID of the server to get logs from
  • lines: (Optional) Number of log lines to retrieve (default: 50)
  • filter: (Optional) String to filter logs (case-insensitive)
  • stdout: (Optional) Boolean to include stdout logs (default: true)
  • stderr: (Optional) Boolean to include stderr logs (default: true)

Key features:

  • Retrieves logs from both running and exited servers
  • Filters logs to show only stdout or stderr as needed
  • Searches for specific text within logs
  • Shows server status alongside the logs
  • Limits output to exactly the number of lines requested

Example prompt: "Show me the last 100 logs from the server with ID server-1234567890-1234"

Example to view only error output:

get-server-logs({
  serverId: "server-1234567890-1234",
  stderr: true,
  stdout: false
});

Example with text filtering:

get-server-logs({
  serverId: "server-1234567890-1234",
  lines: 100,
  filter: "error"
});

run-node-script

Executes a Node.js script file.

Parameters:

  • scriptPath: Path to the Node.js script to execute
  • nodeArgs: (Optional) Arguments to pass to the Node.js executable itself
  • args: (Optional) Array of arguments to pass to the script
  • stdin: (Optional) Text to provide as standard input to the script
  • cwd: (Optional) Directory to run the script in (defaults to OS temp directory if not specified)
  • timeout: (Optional) Timeout in milliseconds after which the process is killed (defaults to 60000ms)

Example prompt: "Run the test.js script with arguments 'hello' and 'world'"

Example with working directory:

run-node-script({
  scriptPath: "/absolute/path/to/my-script.js",
  args: ["arg1", "arg2"],
  cwd: "/absolute/path/to/project"
});

Example with timeout:

run-node-script({
  scriptPath: "/absolute/path/to/long-running-script.js",
  timeout: 10000  // Kill after 10 seconds
});

run-npm-script

Executes an npm script from a package.json file.

Parameters:

  • packageDir: Directory containing the package.json
  • scriptName: Name of the script to run
  • args: (Optional) Array of arguments to pass to the script
  • stdin: (Optional) Text to provide as standard input to the script

Example prompt: "Run the 'start' script from the package.json in the current directory"

run-npm-install

Executes npm install to install all dependencies or a specific package.

Parameters:

  • packageDir: Directory containing package.json
  • dependency: (Optional) Specific dependency to install (leave empty to install all dependencies from package.json)

Example prompt: "Install express in the current project"

Example usage:

run-npm-install({
  packageDir: "/absolute/path/to/project",
  dependency: "express"
});

run-node-eval

Executes JavaScript code directly.

Parameters:

  • code: JavaScript code to execute
  • evalDirectory: (Optional) Directory to execute the code in
  • stdin: (Optional) Text to provide as standard input to the code
  • timeout: (Optional) Timeout in milliseconds after which the process is killed (defaults to 5000ms)

Example prompt: "Run this JavaScript code: console.log('Hello world');"

Example with timeout:

run-node-eval({
  code: `
    // This code would be terminated after 3 seconds
    console.log('Starting long operation...');
    setTimeout(() => {
      console.log('This will never be logged');
    }, 5000);
  `,
  timeout: 3000  // Kill after 3 seconds
});

fetch-npm-docs

Fetches documentation for an npm module, including README and metadata. Downloads the package, extracts the README, and caches results to avoid redundant downloads.

Parameters:

  • packageName: Name of the npm package
  • version: (Optional) Specific version to fetch (defaults to latest)

Key features:

  • Retrieves package metadata using npm view
  • Downloads and extracts the package tarball to get the README
  • Caches packages both in memory and on disk to avoid redundant downloads
  • Works with the selected Node.js version

Example prompt: "Show me the documentation for the express package"

Example usage:

fetch-npm-docs({
  packageName: "express",
  version: "4.18.2"
});

list-node-versions

Lists all available Node.js versions installed via NVM (Node Version Manager).

Parameters: None

Example prompt: "Show me all installed Node.js versions"

select-node-version

Selects a specific Node.js version to use for subsequent script executions.

Parameters:

  • version: Node.js version to use (e.g., 'v18.20.5', 'system', 'lts/*', or other NVM aliases)

Example prompt: "Use Node.js version 18 for running scripts"

get-node-version

Displays information about the currently selected Node.js version.

Parameters: None

Example prompt: "What Node.js version is currently being used?"

Examples of Using Standard Input

Passing Input to a Node Script

// Example script: process-data.js
process.stdin.on('data', (data) => {
  const input = data.toString().trim();
  console.log(`Received: ${input}`);
  // Process the input...
});

You can execute this with standard input and a specific working directory:

run-node-script({
  scriptPath: "/absolute/path/to/process-data.js",
  stdin: "This is input data",
  cwd: "/absolute/path/to/my-project-directory"  // Sets the working directory for the script
});

Using Standard Input with Eval

run-node-eval({
  code: `
    let data = '';
    process.stdin.on('data', (chunk) => { data += chunk; });
    process.stdin.on('end', () => { 
      console.log('Received:', data);
    });
  `,
  stdin: "Data to process"
});

Reading a File Then Using It As Standard Input

// First read the file
const fileContent = read_file({ path: "/absolute/path/to/data.txt" });

// Then pass it as standard input to a script
run-node-script({
  scriptPath: "/absolute/path/to/process-data.js",
  stdin: fileContent,
  cwd: "/absolute/path/to/working-directory"
});

Server Management and Monitoring

This MCP server provides a complete solution for running and monitoring Node.js servers in the background:

  1. Starting Servers: Use start-node-server to launch servers that keep running even after the command completes.

  2. Monitoring: Monitor server logs in real-time with get-server-logs to keep track of activity and troubleshoot issues.

  3. Process Management: View all running servers with list-servers and get detailed information about their status.

  4. Graceful Shutdown: Stop servers gracefully with stop-server, preserving any in-flight operations.

Example Server Monitoring Workflow:

// 1. Start a server
const serverInfo = start-node-server({
  scriptPath: "/path/to/server.js",
  cwd: "/path/to/project",
  serverName: "API Server"
});

// Extract server ID from the response
const serverId = serverInfo.content[0].text.match(/Server ID: ([\w-]+)/)[1];

// 2. Monitor logs in real-time (periodic polling)
get-server-logs({
  serverId: serverId,
  lines: 20
});

// 3. Filter logs for errors only
get-server-logs({
  serverId: serverId,
  filter: "error",
  lines: 50
});

// 4. When finished, stop the server
stop-server({
  serverId: serverId
});

Debugging Complex Issues:

When troubleshooting server issues, you can use a combination of tools:

  1. Check server status with list-servers
  2. View filtered logs with get-server-logs
  3. If the server is unresponsive, force stop it with stop-server({ serverId, force: true })

Resources

node-version

Displays information about the Node.js environment running the MCP server.

URI template: node-version://info

Example prompt: "What version of Node.js is being used to run the scripts?"

npm-scripts

Lists all available npm scripts in a package.json file.

URI template: npm-scripts://{directory}

Example prompt: "Show me the available npm scripts in this project"

Security Considerations

  • The server will always prompt for permission before executing any command
  • Scripts run with the same permissions as the MCP server process
  • Be cautious when running scripts from untrusted sources

Environment Variables

DISABLE_NOTIFICATIONS

Set DISABLE_NOTIFICATIONS=true to automatically approve all permission requests without showing notification prompts:

# Run with notifications disabled
DISABLE_NOTIFICATIONS=true npm run dev

This is useful for automation scenarios or when you don't want to be prompted for each action.

EVAL_DIRECTORIES

Specify a colon-separated list of directories where JavaScript code can be evaluated using the run-node-eval tool:

# Allow code evaluation in specific directories
EVAL_DIRECTORIES=/path/to/dir1:/path/to/dir2 npm run dev

By default, only the system temporary directory is allowed. This environment variable lets you add additional safe directories.

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选