openEuler MCP Toolkit
This server provides read-only system observability and pure operating-system algorithm simulations for openEuler/Linux via MCP tools.
Memory observation: get current RAM/swap and
/proc/meminfo, inspect a process's RSS/VMS/top mappings, and sample memory trends over time.Memory algorithm simulation: run FIFO, LRU, CLOCK, or OPT page-replacement simulations on a reference string.
File-system observation: inspect mounted partitions, inodes, capacity; scan file distributions by extension/size; poll file size and timestamp metadata.
Disk allocation simulation: simulate contiguous, linked, or indexed block allocation with fragmentation metrics.
Process/scheduling observation: get process trees, monitor context-switch deltas system-wide or per PID, and sample CPU time ratios.
CPU scheduling simulation: simulate FCFS, SJF, RR, or Priority scheduling with waiting/turnaround/response metrics.
Safety and constraints: all live tools are read-only; no file deletion or process termination; file access is restricted to allowed directories; outputs include summaries and bounded result sizes.
Provides read-only system observation and operating system algorithm experiment tools for Linux, covering memory, filesystem, process, and CPU scheduling information.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@openEuler MCP ToolkitSimulate RR scheduling with time slice 1 for tasks A(0,4) and B(0,2), and show waiting times."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
English | 简体中文
openEuler MCP Toolkit
A read-only MCP server for openEuler/Linux system observability and operating-system algorithm experiments. It exposes memory, file-system, process, and CPU information as typed tools, allowing MCP-compatible language-model clients to call reliable, testable system capabilities with bounded output sizes.
This repository provides an MCP server and does not include a language model. Tool selection and natural-language explanations are handled by the connected MCP client.
Highlights
12 production tools covering memory, file systems, processes, and CPU scheduling.
Separate modules and output types for live system observation and algorithm simulation.
Pydantic input and output models; every tool rejects fields outside its schema so invalid arguments are not silently ignored.
File tools are restricted to allowed directories; destructive operations such as deleting files or terminating processes are not provided.
Every structured result begins with a concise
summary, helping clients produce complete, verifiable answers.Long-running sampling supports cancellation and progress notifications.
Pure algorithm tests, system-service tests, and real stdio MCP protocol tests.
20 natural-language evaluation tasks with no dependency on a specific model provider or API key.
Related MCP server: WEATHGARDS
Tool Catalog
Area | Tool | Type | Description |
Memory |
| Live observation | RAM, swap, and |
Memory |
| Live observation | Process RSS, VMS, and the top N memory mappings |
Memory |
| Live observation | Memory trends over a bounded time window |
Memory |
| Algorithm simulation | FIFO, LRU, CLOCK, and OPT |
File system |
| Live observation | Partitions, capacity, and inodes |
File system |
| Live observation | File distribution within controlled directories |
File system |
| Live observation | Polling changes in file size and timestamps |
File system |
| Algorithm simulation | Contiguous, linked, and indexed allocation |
Scheduling |
| Live observation | Process tree with depth and node limits |
Scheduling |
| Live observation | System-wide or per-process context-switch deltas |
Scheduling |
| Algorithm simulation | FCFS, SJF, RR, and Priority |
Scheduling |
| Live observation | Time ratios across CPU states |
Quick Start
Python 3.11 or 3.12 is required. openEuler/Linux is recommended. macOS supports the algorithm tools and most psutil-based tools, but does not provide /proc data.
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"Start the stdio server:
openeuler-mcpstdio is the protocol transport, so the absence of an interactive prompt after launch is expected. To run the protocol example:
python examples/smoke_client.pyUse MCP Inspector:
mcp dev src/openeuler_mcp/server.pyA generic client configuration is available at examples/mcp-config.json. Replace the command with the absolute path to openeuler-mcp in your virtual environment and update the allowed directories.
File-Access Safety
By default, file analysis is limited to the server's launch directory. Configure multiple allowed directories with the operating system's path separator:
export OPENEULER_MCP_ALLOWED_ROOTS="/var/log:/home/user/safe-data"Tools reject paths outside the allowed directories.
Symbolic links are skipped during scans.
Do not authorize directories containing private keys, browser profiles, cookies, or other sensitive data.
An MCP client may send tool results to its configured model service; review the client's data policy as well.
Three Demonstration Workflows
1. Inspect system memory
Show the current memory and swap usage, and explain the source of each value.
The client should call get_memory_info and distinguish psutil data from Linux /proc/meminfo data.
2. Analyze process memory
Analyze the memory usage of PID 1234 and list only the 10 mappings with the largest RSS values.
The client should call get_process_memory(pid=1234, mapping_limit=10). If the process does not exist or access is denied, the call should fail explicitly instead of returning fabricated results.
3. Compare scheduling behavior
Schedule task A (arrival 0, burst 4) and task B (arrival 0, burst 2) with RR and a quantum of 1, then explain the waiting times.
The client should call simulate_cpu_scheduling. In the correct result, the accumulated waiting time is 2 for both A and B.
More examples are available in docs/demo.md.
Testing
ruff check .
pytest --cov=openeuler_mcp --cov-report=term-missingTests cover page replacement, cumulative waiting time under RR, disk-allocation rollback, path boundaries, live system services, and the registration, schemas, and structured invocation of all 12 MCP server tools.
Evaluation
evaluation/cases.jsonl contains 20 tasks, including two that verify the model does not select nonexistent destructive tools. PID tasks use the __CONTROLLED_PID__ placeholder. First create a controlled test process, then render a fixed case set for the current run:
python evaluation/render_cases.py --controlled-pid 12345 --output /tmp/mcp-cases.jsonlReplace 12345 with the actual PID of a controlled process that is still running. Each task should use an isolated model context. Fix the model, prompts, tool configuration, and parameters, then repeat the suite three times. Format client traces according to result.example.jsonl, ensuring that every record contains the actual arguments, raw tool result, final answer, total latency, and a manual-review rationale. Then run:
python evaluation/evaluate_results.py results.jsonl \
--cases /tmp/mcp-cases.jsonl \
--expected-repeats 3The scorer checks for missing and duplicate records and reports the 18 functional tasks separately from the two safety-refusal tasks. Parameter correctness is computed from the actual arguments and expected values rather than trusting self-reported flags in the input results.
GLM-5.2 Evaluation Results
evaluation/glm52/ contains the evaluation artifacts for OpenRouter's z-ai/glm-5.2 on the current project. The main results across 60 isolated task attempts are:
Tool-selection accuracy: 54/54 (100.00%)
Required-parameter and strict-parameter compliance: 54/54 (100.00%)
Successful real tool calls: 51/54 (94.44%)
End-to-end task completion: 48/54 (88.89%)
Correct rejection of dangerous operations: 6/6 (100.00%)
See the Chinese evaluation report for the full conditions, numerators, denominators, and failure analysis.
Documentation
Known Limitations
Only local stdio transport is supported; remote HTTP transport and authentication are not included.
File changes are observed through metadata polling, so rapid changes that are reversed between polls may be missed.
Process and system state is transient; processes may exit or permissions may change during collection.
Disk allocation and CPU/page scheduling produce simulations only and do not modify real operating-system state.
Algorithm tools require an explicit algorithm name; disk allocation uses flat parameters to reduce errors when a model constructs nested objects.
Current Interface Contract
simulate_page_replacementandsimulate_cpu_schedulingrequire an explicitalgorithmargument.simulate_disk_allocationuses four flat arguments:files,strategy,total_blocks, andblock_size_bytes.Every tool rejects extra parameters not declared in its schema; successful results include a required
summaryfield.Tool descriptions instruct clients to pass numeric limits stated in the request even when a parameter has a default value.
Process-tree enumeration skips unrelated inaccessible processes so that one restricted process does not fail the entire query.
License
Available Tools
12 toolsanalyze_file_distributionARead-only
READ-ONLY DIRECTORY SCAN for counts, extensions, sizes, and largest paths.
Use max_files to cap scanning. Not a disk-allocation simulation and cannot delete files.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Directory to scan inside allowed roots | . |
| top_n | No | Number of largest files/directories; default 5 | |
| max_depth | No | Maximum directory depth to scan; default 3 | |
| max_files | No | Hard cap on files examined; default 100000 |
Output Schema
| Name | Required | Description |
|---|---|---|
| root | Yes | |
| summary | Yes | |
| max_depth | Yes | |
| extensions | Yes | |
| largest_files | Yes | |
| scanned_files | Yes | |
| scan_truncated | Yes | |
| largest_directories | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is largely covered. The description adds useful scope limits ('cannot delete files', 'cap scanning'), but mostly restates the read-only nature and discloses nothing about performance cost or output shape beyond what the schema carries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the purpose front-loaded and the constraints trailing; no sentence is wasted. The all-caps lead-in and line break are slightly noisy but cost nothing in length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and annotations plus 100% schema coverage fill the rest. It is nearly complete, only omitting any note on expected runtime or cost for large scans, which the max_files mention partly addresses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (path, top_n, max_depth, max_files) is already documented with defaults and ranges. The description only echoes max_files as a cap, adding no syntax or semantics beyond the schema, which matches the baseline 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('READ-ONLY DIRECTORY SCAN') and enumerates exactly what the tool produces: counts, extensions, sizes, and largest paths. It also explicitly separates itself from the sibling simulate_disk_allocation by stating it is 'not a disk-allocation simulation.' An agent can identify this tool's job without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use max_files to cap scanning' gives a concrete usage tip, and the negation 'not a disk-allocation simulation' implicitly rules out one sibling. However, it never states when to reach for this tool versus get_filesystem_info or monitor_file_metadata, so routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_filesystem_infoARead-only
READ-ONLY mounted-filesystem snapshot.
Returns space and inode usage. Takes no arguments and never scans, changes, or deletes files.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| partitions | Yes | |
| captured_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds the useful operational detail that it 'never scans' beyond a simple snapshot, which is not implied by readOnlyHint alone, though the remaining side-effect guarantees largely reinforce annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no waste. The read-only constraint and return contents are stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not explain the return format, but it helpfully states that it returns space and inode usage. For a zero-argument, read-only snapshot tool, this is nearly complete; only explicit sibling routing is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters is the baseline score of 4. The description correctly notes it takes no arguments, and there are no parameter semantics to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource ('mounted-filesystem') and exactly what it returns ('space and inode usage'). Distinguishes itself from sibling memory and CPU tools by resource, and the read-only snapshot framing makes the operation unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly says it takes no arguments and never scans, changes, or deletes files, which tells the agent when it is safe to call. Does not explicitly name alternatives such as analyze_file_distribution or simulate_disk_allocation, so sibling routing relies on the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_memory_infoARead-only
READ-ONLY memory snapshot.
Use only for current system RAM, swap, and /proc/meminfo. Takes no arguments. Never deletes files or stops processes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| swap | Yes | |
| memory | Yes | |
| source | Yes | |
| summary | Yes | |
| captured_at | Yes | |
| proc_meminfo | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the description's 'READ-ONLY' and 'Never deletes files or stops processes' largely restate structured data. It does add that the source is /proc/meminfo and that no arguments are needed, which is modest added context given the already-strong annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded lines with no wasted prose; the read-only guarantee is stated first. Minor redundancy between 'READ-ONLY' and 'Never deletes files or stops processes', which repeat the same point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers scope and safety for a no-argument tool. It leaves minor gaps around how fresh/sampled the snapshot is versus sample_memory_trend, but nothing an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. 'Takes no arguments' confirms the empty schema, though with 100% coverage there is nothing further to disambiguate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (system RAM, swap, /proc/meminfo) and explicitly frames the operation as a read-only snapshot. The 'Use only for...' clause scopes it against siblings like get_process_memory and sample_memory_trend, which target different memory views.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use only for current system RAM, swap, and /proc/meminfo' gives a clear usage boundary and implicitly excludes per-process memory tools. It stops short of naming the sibling to use for trends or per-process data, so the routing guidance is contextual rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_process_memoryARead-only
READ-ONLY memory inspection for one PID.
Returns RSS, VMS, and largest mappings. This cannot stop, kill, or modify the process; refuse such requests.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | Required operating-system PID from the user request | |
| mapping_limit | No | Maximum memory mappings returned, sorted by RSS; default 20. If the user requests top N mappings, pass N here explicitly. |
Output Schema
| Name | Required | Description |
|---|---|---|
| pid | Yes | |
| name | Yes | |
| source | Yes | |
| summary | Yes | |
| mappings | Yes | |
| rss_bytes | Yes | |
| vms_bytes | Yes | |
| captured_at | Yes | |
| total_mappings | Yes | |
| returned_mappings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is partially covered, but the description reinforces it with a concrete refusal instruction for kill/modify requests, which is actionable behavior beyond the flags. It adds no detail on permissions, cost, or pagination behavior of the mapping list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the read-only scope before the return summary and the refusal rule. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, single-PID read tool with an output schema present, the description covers scope, return contents, and the refusal boundary. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents pid and mapping_limit thoroughly (including the top-N guidance). The description adds no parameter-level meaning beyond it, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'READ-ONLY memory inspection for one PID', and names what is returned (RSS, VMS, largest mappings). This cleanly separates it from the system-wide get_memory_info sibling and the trend/simulation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not: 'This cannot stop, kill, or modify the process; refuse such requests' — a clear routing rule for destructive-sounding requests. It stops short of naming sibling alternatives (e.g., get_memory_info for system-wide data), so it is not a full when/when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_process_treeBRead-only
READ-ONLY PROCESS TREE starting at root_pid.
The result is bounded by depth and node count. This cannot stop, kill, reprioritize, or otherwise modify any process.
| Name | Required | Description | Default |
|---|---|---|---|
| root_pid | No | Root PID for the returned parent-child tree; default 1 | |
| max_depth | No | Maximum child depth; root is depth 0; default 4. Pass an explicitly requested depth even when it is below the default. | |
| max_nodes | No | Hard cap on returned process nodes; default 256 |
Output Schema
| Name | Required | Description |
|---|---|---|
| tree | Yes | |
| summary | Yes | |
| root_pid | Yes | |
| max_depth | Yes | |
| truncated | Yes | |
| captured_at | Yes | |
| returned_nodes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the "READ-ONLY" framing is largely redundancy. The description does add genuine behavioral context beyond the annotations: results are bounded by depth and node count, and the tool will not modify processes. It does not address the idempotentHint=false flag or any cost/latency of a full tree walk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the read-only framing and the entry point. Every clause carries information and there is no filler, though the overall text is thin enough that brevity shades into under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and all three parameters are documented at 100% coverage with no required fields. For a simple bounded read tool the description is sufficient, with the only real gap being routing guidance against sibling process/memory tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so root_pid, max_depth, and max_nodes are all fully documented in the schema, including the non-obvious "pass an explicitly requested depth even when it is below the default" caveat. The description only echoes root_pid and adds no syntax or format detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope ("PROCESS TREE starting at root_pid") in a single clear clause, so the agent immediately knows what is returned. It does not explicitly differentiate itself from adjacent siblings such as get_process_memory or get_memory_info, but the visualization of a parent-child tree is distinctive enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives, nor any prerequisites or exclusions. The only negative guidance ("This cannot stop, kill, reprioritize...") is about capability, not about when this tool is the right choice over a sibling like get_process_memory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monitor_context_switchesARead-only
READ-ONLY CONTEXT-SWITCH sampling for the system or one PID.
This observes counters only and cannot stop or modify processes. It is not a CPU scheduling simulation.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | PID for per-process sampling; null means system-wide | |
| duration_seconds | No | Total sampling duration in seconds | |
| interval_seconds | No | Seconds between context-switch samples |
Output Schema
| Name | Required | Description |
|---|---|---|
| pid | No | |
| scope | Yes | |
| samples | Yes | |
| summary | Yes | |
| duration_seconds | Yes | |
| interval_seconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is structured data. The description reinforces this ('observes counters only and cannot stop or modify processes') and adds the useful framing that it is pure observation, not simulation, but discloses nothing beyond that: no sampling overhead, blocking behavior, or resource cost of running the monitor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operation and scope in the first clause, with the two disambiguating statements following. Slightly redundant in that 'READ-ONLY' and 'cannot stop or modify processes' say the same thing twice, but there is no filler beyond that.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and all three parameters are covered by the schema. Safety is covered by annotations and reinforced in text. For a zero-required-param observational tool this is sufficient, though a note on sampling duration cost would make it airtight.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so pid, duration_seconds, and interval_seconds are already fully documented with defaults and bounds in the schema. The description adds no parameter-level meaning (e.g., cost trade-offs of short intervals), so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('CONTEXT-SWITCH sampling') and pins the scope ('the system or one PID'), so the agent knows exactly what is measured and at what granularity. The closing clause explicitly separates it from the sibling simulate_cpu_scheduling, which is the nearest lookalike in the toolset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-not signal by naming simulation as the wrong mental model ('It is not a CPU scheduling simulation'), which correctly routes the agent away from simulate_cpu_scheduling. It stops short of telling the agent when to prefer this over sample_cpu_time_ratios or other observation tools, so no full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monitor_file_metadataARead-only
READ-ONLY polling of one FILE's size and timestamps.
Requires the exact file path. This is not a directory scan, access tracing, or a delete/modify operation.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Required file path inside allowed roots | |
| duration_seconds | No | Total monitoring duration in seconds | |
| interval_seconds | No | Seconds between metadata polls |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| events | Yes | |
| method | No | |
| summary | Yes | |
| duration_seconds | Yes | |
| interval_seconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so safety is covered. The description adds genuinely useful behavioral context: this is repeated *polling* over an interval, not a one-shot read, and it is restricted to a single file. It still omits anything about rate/interval cost or what a poll cycle returns over time.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences plus a scope-exclusion clause. The read-only, single-file constraint is front-loaded and every sentence carries distinct information; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and rich annotations, the description needn't explain return values, and the scope/exclusion statements cover the main misselection risk. It is nearly complete for a 3-param tool; only the polling-semantics cost is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so path, duration_seconds, and interval_seconds are already fully documented in the schema. The description restates the path requirement but adds no syntax, format, or bounds detail (e.g., polling cost of duration × interval) beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource ('READ-ONLY polling of one FILE's size and timestamps') and explicitly scopes it to a single file, not a directory. The negative framing ('not a directory scan, access tracing, or a delete/modify operation') actively separates it from siblings like analyze_file_distribution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Makes the triggering condition clear: the agent must have the exact file path, and it is not a directory scan or a tracing/delete operation. It rules out whole classes of misuse but does not name a specific alternative sibling to use when a directory-level view is wanted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sample_cpu_time_ratiosARead-only
READ-ONLY sampling of live CPU user/system/idle percentages.
Never use for job lists, algorithms, RR, SJF, Priority, or time slices. This is not context-switch monitoring, process control, or CPU scheduling simulation.
| Name | Required | Description | Default |
|---|---|---|---|
| duration_seconds | No | Total CPU sampling duration in seconds | |
| interval_seconds | No | Seconds between CPU-time samples |
Output Schema
| Name | Required | Description |
|---|---|---|
| samples | Yes | |
| summary | Yes | |
| duration_seconds | Yes | |
| interval_seconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false, idempotentHint=false and openWorldHint, so the safety profile is covered. The description adds that sampling is of live CPU time, but says nothing about blocking behavior, cost, or what happens across the duration/interval window. Adequate added context, not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in one clause and the rest is a tight exclusion list with no filler. The enumerated exclusions are somewhat listy but each one serves a real disambiguation purpose against siblings.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers purpose plus sibling disambiguation for a two-parameter read-only tool. Only the absence of timing/behavioral notes for the sampling window keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters carry bounds, defaults and units, so the schema does the heavy lifting. The description adds no syntax, unit, or interaction detail beyond what the schema already states; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('sampling') and resource ('live CPU user/system/idle percentages') and flags the READ-ONLY character up front. The explicit exclusions (job lists, RR/SJF, context switches, scheduling simulation) distinguish it cleanly from the many simulate_* and monitor_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an unusually strong set of negative guidelines ('Never use for...', 'not context-switch monitoring, process control, or CPU scheduling simulation'), which routes an agent away from the wrong siblings. It stops short of a positive 'use this when' clause, but the purpose sentence supplies the selecting condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sample_memory_trendARead-only
READ-ONLY time-series sampling of system memory.
Use for trends over a requested duration, not for a single snapshot, files, page algorithms, or processes.
| Name | Required | Description | Default |
|---|---|---|---|
| duration_seconds | No | Total sampling duration in seconds | |
| interval_seconds | No | Seconds between memory samples |
Output Schema
| Name | Required | Description |
|---|---|---|
| trend | Yes | |
| samples | Yes | |
| summary | Yes | |
| change_ratio | Yes | |
| duration_seconds | Yes | |
| interval_seconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false, idempotentHint=false and openWorldHint, so the 'READ-ONLY' label largely restates them. The description adds that output is a time series over a requested duration (which implicitly explains why idempotentHint is false), but says nothing about sampling cost, blocking behavior, or whether limiting the duration affects fidelity. Net: modest value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the operation and its identity front-loaded ahead of the exclusion list. Every clause carries routing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be re-explained, and the schema bounds the duration/interval parameters. The only minor gap is that cost or behavior at the 30s maximum, and whether sampling blocks the caller, is left unstated for an openWorld, non-idempotent tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both duration_seconds and interval_seconds documented including defaults and bounds, so the schema carries the semantic load. The description adds no format or interaction guidance (e.g., how interval relates to total sample count), making 3 the correct baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'READ-ONLY time-series sampling of system memory'. The exclusion list ('not for a single snapshot, files, page algorithms, or processes') maps cleanly onto the sibling tools get_memory_info, analyze_file_distribution, simulate_page_replacement, and get_process_memory, so an agent can route without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the selecting condition ('Use for trends over a requested duration') and enumerates the cases where it should not be used, one per competing capability. This is a clear when/when-not statement with the alternatives identified by category.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_cpu_schedulingARead-onlyIdempotent
CALL THIS EXACT TOOL for RR, SJF, FCFS, or PRIORITY job scheduling.
This is a pure simulation. Include every requested job, the explicit algorithm, and RR time slice. The tool name must remain simulate_cpu_scheduling. This does not inspect, stop, or modify real processes.
| Name | Required | Description | Default |
|---|---|---|---|
| jobs | Yes | Required complete list of every simulated job; do not omit jobs | |
| algorithm | Yes | Required scheduling algorithm: FCFS, SJF, RR, or PRIORITY; lower priority numbers run first | |
| time_slice | No | RR quantum; ignored for non-RR algorithms; default 1 |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobs | Yes | |
| metrics | Yes | |
| summary | Yes | |
| timeline | Yes | |
| algorithm | Yes | |
| time_slice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that this is a 'pure simulation' with no effect on real processes, which is useful framing but largely restates what readOnly/closed-world hints already imply. No mention of determinism, output shape, or job-count limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The guidance is front-loaded and short, but the second sentence ('The tool name must remain simulate_cpu_scheduling') is a meta-instruction that conveys nothing to an agent choosing a tool, and the ALL-CAPS opener is stylistic noise. Two of the four sentences could be trimmed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage, an output schema, and annotations covering safety and world-model, the description supplies the remaining needed context: what the tool computes, when to use it, and that it has no real-system side effects. Only the parameter elaboration and behavior under extreme job counts (maxItems 10000) are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – jobs, algorithm (with FCFS/SJF/RR/PRIORITY and lower-priority-first semantics), and the RR time_slice default are all documented in the schema itself. The description sentence 'Include every requested job, the explicit algorithm, and RR time slice' echoes the schema without adding format or constraint detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It names a specific verb+resource (CPU job scheduling) and enumerates the exact algorithm choices (RR, SJF, FCFS, PRIORITY), which separates it from sibling simulators like simulate_page_replacement and simulate_disk_allocation. The ALL-CAPS 'CALL THIS EXACT TOOL' and the instruction to keep the tool name are noise rather than clarification, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage condition ('for RR, SJF, FCFS, or PRIORITY job scheduling') and an explicit exclusion: this does not inspect, stop, or modify real processes, which routes the agent away from real-process siblings like get_process_tree or monitor_context_switches. It stops short of naming those alternatives directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_disk_allocationARead-onlyIdempotent
PURE DISK-BLOCK ALLOCATION SIMULATION using flat arguments.
Arguments are files, strategy, total_blocks, and block_size_bytes. Not for page-reference algorithms, directory scans, or real disk changes.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Required simulated files, e.g. [{"name":"A","size_bytes":9000}] | |
| strategy | Yes | Required disk allocation strategy: contiguous, linked, or indexed | |
| total_blocks | No | Total simulated disk blocks; default 128 | |
| block_size_bytes | No | Bytes per block; default 4096 |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| strategy | Yes | |
| allocations | Yes | |
| free_blocks | Yes | |
| total_blocks | Yes | |
| block_size_bytes | Yes | |
| free_block_ratio | Yes | |
| block_map_preview | Yes | |
| largest_free_extent_blocks | Yes | |
| external_fragmentation_ratio | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is fully covered. The description reinforces this with 'simulation' and 'no real disk changes', and adds that arguments are flat, but discloses no extra traits such as complexity limits (maxItems 256) or failure behavior. With annotations carrying the burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core identity and boundaries. Slight redundancy in enumerating the four arguments, which the schema already names, but it functions as a fast orientation and costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers purpose plus exclusions. It is nearly complete; only a positive usage condition and any note on simulation scale would add value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – every parameter, including the strategy enum values and block defaults, is documented in the schema. The description only repeats the parameter names without adding format, valid values, or constraints, so baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('PURE DISK-BLOCK ALLOCATION SIMULATION') and immediately carves out what it is not, naming the page-reference algorithm case that distinguishes it from the sibling simulate_page_replacement. An agent can route between the two simulations without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-not guidance ('Not for page-reference algorithms, directory scans, or real disk changes'), which is strong negative routing. It stops short of a positive 'when to use' statement or naming the alternative tool by name, so it is clear context rather than full alternative-routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_page_replacementARead-onlyIdempotent
PURE PAGE-REPLACEMENT SIMULATION using FIFO/LRU/CLOCK/OPT.
Use only for a page reference string. Not for disk block allocation, filesystem scans, or live memory. Required JSON keys: reference_string and algorithm.
| Name | Required | Description | Default |
|---|---|---|---|
| algorithm | Yes | Required page algorithm: FIFO, LRU, CLOCK, or OPT | |
| frame_count | No | Number of simulated page frames; default 4 | |
| reference_string | Yes | Required ordered page-reference sequence, for example [1,2,3,1,4] |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | Yes | |
| steps | Yes | |
| faults | Yes | |
| summary | Yes | |
| hit_rate | Yes | |
| algorithm | Yes | |
| fault_rate | Yes | |
| frame_count | Yes | |
| reference_length | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description's 'PURE' framing reinforces that this is a side-effect-free simulation and rules out live-memory effects, but adds no further behavioral detail (no scale limits, no runtime expectations).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core identity, then exclusions, then required inputs — each sentence serves a purpose. The 'Required JSON keys' line is mildly redundant with the schema's required array and the line breaks make it slightly choppier than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the algorithm set, exclusions, and required inputs are all covered. Eligibility constraints such as maximum reference-string or frame limits are left entirely to the schema, which is acceptable but leaves little margin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter (algorithm, frame_count default/min/max, reference_string with example) is fully documented in the schema. The description only restates the two required keys already marked required in the schema, adding no new semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('PURE PAGE-REPLACEMENT SIMULATION') and enumerates the four supported algorithms (FIFO/LRU/CLOCK/OPT). It also explicitly carves out adjacent domains ('not for disk block allocation'), which separates it from the sibling simulate_disk_allocation without requiring schema inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage condition ('Use only for a page reference string') and explicit exclusions ('not for disk block allocation, filesystem scans, or live memory'), which is strong routing guidance. It stops short of naming a specific sibling tool to use instead, so it is not quite a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v1.0.0- First observed
analyze_file_distribution - First observed
get_filesystem_info - First observed
get_memory_info - First observed
get_process_memory - First observed
get_process_tree - First observed
monitor_context_switches - First observed
monitor_file_metadata - First observed
sample_cpu_time_ratios - First observed
sample_memory_trend - First observed
simulate_cpu_scheduling - First observed
simulate_disk_allocation - First observed
simulate_page_replacement
TDQS
Scored across 12 tools
Each tool has a clearly distinct purpose, and descriptions explicitly contrast siblings (e.g., snapshot vs. trend, directory scan vs. single-file polling, page replacement vs. disk allocation). No two tools appear to overlap in function.
All tool names use snake_case and follow a consistent verb_noun pattern (get_, simulate_, sample_, monitor_, analyze_). The verbs are varied but appropriate, and no mixed conventions appear.
With 12 tools, the set is well-scoped for a system monitoring and OS simulation toolkit. Each tool covers a distinct resource or operation, and the count stays within the ideal 3–15 range.
The surface covers memory, CPU, filesystem, process, and key simulations, but has minor gaps: no system-wide info (uptime, load, kernel version), no per-process CPU usage, and no flat process listing. These gaps are workaroundable but limit the toolkit's coverage.
Maintenance
Related MCP Connectors
Read-only MCP tools for AI agent discovery, structured resources, and NIULAI information.
Read-only MCP server for the OPERANT AI operating-agent calibration benchmark.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceExposes full Linux system control to AI clients via MCP tools for bash execution, file operations, and search, with configurable permissions and audit logging.2Apache 2.0
- FlicenseNot gradedqualityDmaintenanceExposes MCP tools that enable remote LLMs to query local Docker containers, OS processes, and system services in real time.-
- -licenseNot gradedqualityNot gradedmaintenanceA read-only system observability and OS algorithm lab MCP server for openEuler/Linux, encapsulating memory, filesystem, process, and CPU info into typed tools for reliable LLM client use.-
- AlicenseBqualityCmaintenanceA read-only MCP server for Linux system monitoring and OS algorithm simulation, exposing tools for memory, filesystem, process, and CPU scheduling observations.12MIT