Java-based MCP server that provides comprehensive system information including OS details, memory usage, CPU information, disk space, Java runtime details, system properties, and environment variables
This Java MCP server provides 10 system information tools with acceptable naming and basic descriptions, but critical gaps in schema definition, parameter documentation, and error handling severely limit production readiness. All tools use empty input schemas (`{}`) with no parameter descriptions, violating the rubric's requirement that 'every parameter needs a description.' Descriptions are present but generic (50-150 chars, within acceptable range). No structured output schemas are documented, only untyped text responses. The server exposes sensitive system information without access controls or audit logging. Error handling is absent (no visible error classification or recovery guidance). Tools are properly verb-named but lack the sophistication needed for reliable agent integration.
Get all environment variables available in the system
Get all system properties available in the JVM
Get CPU information including available processors, system load average, and architecture
Get disk space information for all available file system roots
Get an environment variable by name (e.g., 'PATH', 'JAVA_HOME')
Get memory usage information including total, free, used, and max memory
Get operating system information including name, version, architecture, and user details
All tools use empty input schemas (`{}`). The rubric requires: 'Every parameter needs a description explaining what it controls.' Tools 1-6 and 9-10 have no parameters documented (schema score = 0). Tools 7-8 accept a parameter ('key', 'name') but the schema shows only `{}` with descriptions in text only, schemas are not machine-parseable.
No output schemas documented. The rubric states: 'Document the output schema. LLMs need to know what fields to expect.' All 10 tools return untyped text via `TextContent` with no schema describing the structure. LLMs cannot parse unstructured output reliably and cannot chain results to downstream tools.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 42 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 32 | - | v1 |
Get Java runtime information including JVM version, vendor, and uptime
Get comprehensive system information including OS, memory, CPU, disk, and runtime details
Get a specific system property by key (e.g., 'java.version', 'user.home')
No error handling or recovery guidance. Code shows no try-catch blocks, no error classification (retryable vs. fatal), and no recovery hints. E.g., if an environment variable is not set, the tool fails silently. The rubric requires: 'Error responses must tell the LLM what to do next.'
No input validation. Tools accept parameters ('key', 'name') but no code validates them (e.g., non-empty, type checking). The rubric states: 'Treat all agent-provided input as untrusted.' An agent could pass null, empty string, or malicious keys without feedback.
No permission checks or audit logging. Tools expose sensitive system information (OS details, environment variables, JVM properties) without authentication or access control. The rubric requires: 'Gate destructive or sensitive tools behind permission checks' and 'Log who called what tool.' Sensitive data here includes PATH, JAVA_HOME, memory config, and disk layout.
Parameter descriptions are text-only, not in the JSON Schema. Tools 7-8 document 'key' and 'name' in descriptions ('System property key to retrieve'; 'Environment variable name to retrieve'), but the input schema is empty `{}`. LLMs cannot parse text descriptions from schema definitions reliably. The rubric requires: 'When a parameter could be an ID, name, email, or position, suffix it with the type.'
No pagination support. Tools returning large datasets (get_all_env_variables, get_all_system_properties) have no limit, offset, or cursor parameters. The rubric states: 'Tools returning lists should accept page/offset and limit parameters and return a total count or next_cursor. Without pagination, large results blow the context window.' Java systems can have 100+ environment variables and properties.
Responses are unstructured text, not typed objects. Code shows `formatMapToString(systemInfo)` converting maps to text. The rubric requires: 'Return structured objects with typed fields. Free-text responses require the LLM to parse unstructured output, which is error-prone and wastes tokens.' An LLM cannot reliably extract 'total_memory' from 'Total Memory: 16384 MB'.