get_environment
Retrieve current server environment details including operating system, Node.js version, process info, CPU, memory usage, and hostname.
Instructions
Get information about the current server environment.
Returns:
Operating system details (platform, arch, release)
Node.js version
Server process info (PID, uptime, memory usage)
CPU information
Memory (total, free, used)
Network hostname
This tool does not require any parameters. No sensitive environment variables or secrets are exposed.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/tools/environment.ts:11-95 (registration)The `registerEnvironmentTool` function calls `server.tool("get_environment", ...)` to register the tool on the MCP server. This is where the tool name, description, schema (empty object — no params), and handler are all defined.
export function registerEnvironmentTool(server: McpServer): void { server.tool( "get_environment", `Get information about the current server environment. Returns: - Operating system details (platform, arch, release) - Node.js version - Server process info (PID, uptime, memory usage) - CPU information - Memory (total, free, used) - Network hostname This tool does not require any parameters. No sensitive environment variables or secrets are exposed.`, {}, async () => { try { const cpus = os.cpus(); const totalMem = os.totalmem(); const freeMem = os.freemem(); return { content: [ { type: "text" as const, text: JSON.stringify( { server: { name: "mcp-toolkit-server", version: "1.0.0", pid: process.pid, uptime: formatUptime(process.uptime()), }, runtime: { name: process.release.name, version: process.version, versions: process.versions, }, os: { platform: os.platform(), arch: os.arch(), release: os.release(), hostname: os.hostname(), type: os.type(), totalMemory: formatBytes(totalMem), freeMemory: formatBytes(freeMem), usedMemory: formatBytes(totalMem - freeMem), memoryUsagePercent: ( ((totalMem - freeMem) / totalMem) * 100 ).toFixed(1) + "%", }, cpu: { model: cpus[0]?.model || "unknown", cores: cpus.length, speed: cpus[0]?.speed || 0, }, processMemory: { rss: formatBytes(process.memoryUsage().rss), heapUsed: formatBytes(process.memoryUsage().heapUsed), heapTotal: formatBytes(process.memoryUsage().heapTotal), external: formatBytes(process.memoryUsage().external), }, }, null, 2 ), }, ], }; } catch (err: any) { return { content: [ { type: "text" as const, text: `Environment Error: ${err.message}`, }, ], isError: true, }; } } ); } - src/tools/environment.ts:27-93 (handler)The async handler function that executes the tool logic. It gathers OS details (platform, arch, release, hostname), CPU info (model, cores, speed), memory info (total/free/used with percent), Node.js version and process versions, server identity, and process memory (rss, heap, external), then returns them as a JSON string in a text content block.
async () => { try { const cpus = os.cpus(); const totalMem = os.totalmem(); const freeMem = os.freemem(); return { content: [ { type: "text" as const, text: JSON.stringify( { server: { name: "mcp-toolkit-server", version: "1.0.0", pid: process.pid, uptime: formatUptime(process.uptime()), }, runtime: { name: process.release.name, version: process.version, versions: process.versions, }, os: { platform: os.platform(), arch: os.arch(), release: os.release(), hostname: os.hostname(), type: os.type(), totalMemory: formatBytes(totalMem), freeMemory: formatBytes(freeMem), usedMemory: formatBytes(totalMem - freeMem), memoryUsagePercent: ( ((totalMem - freeMem) / totalMem) * 100 ).toFixed(1) + "%", }, cpu: { model: cpus[0]?.model || "unknown", cores: cpus.length, speed: cpus[0]?.speed || 0, }, processMemory: { rss: formatBytes(process.memoryUsage().rss), heapUsed: formatBytes(process.memoryUsage().heapUsed), heapTotal: formatBytes(process.memoryUsage().heapTotal), external: formatBytes(process.memoryUsage().external), }, }, null, 2 ), }, ], }; } catch (err: any) { return { content: [ { type: "text" as const, text: `Environment Error: ${err.message}`, }, ], isError: true, }; } } - src/tools/environment.ts:97-123 (helper)Two helper functions used by the handler: `formatUptime` (converts seconds to a human-readable duration string like '1d 2h 30m 15s') and `formatBytes` (converts bytes to a human-readable string with units like '1.5 GB').
function formatUptime(seconds: number): string { const days = Math.floor(seconds / 86400); const hours = Math.floor((seconds % 86400) / 3600); const minutes = Math.floor((seconds % 3600) / 60); const secs = Math.floor(seconds % 60); const parts: string[] = []; if (days > 0) parts.push(`${days}d`); if (hours > 0) parts.push(`${hours}h`); if (minutes > 0) parts.push(`${minutes}m`); parts.push(`${secs}s`); return parts.join(" "); } function formatBytes(bytes: number): string { const units = ["B", "KB", "MB", "GB", "TB"]; let index = 0; let size = bytes; while (size >= 1024 && index < units.length - 1) { size /= 1024; index++; } return `${size.toFixed(1)} ${units[index]}`; } - src/tools/environment.ts:13-26 (schema)The schema for get_environment: an empty object `{}` meaning no parameters are required. The description documents that it returns OS details, Node.js version, PID, uptime, memory usage, CPU info, and hostname, and notes no sensitive info is exposed.
"get_environment", `Get information about the current server environment. Returns: - Operating system details (platform, arch, release) - Node.js version - Server process info (PID, uptime, memory usage) - CPU information - Memory (total, free, used) - Network hostname This tool does not require any parameters. No sensitive environment variables or secrets are exposed.`, {}, - src/index.ts:13-13 (registration)Import of the `registerEnvironmentTool` function from `./tools/environment.js` in the main server file. Called on line 56 to register the tool on startup.
import { registerEnvironmentTool } from "./tools/environment.js";