Skip to main content
Glama
ikhlas-sayyed

OS Agent MCP Server

OS Agent MCP Server

Small local MCP server for OS tasks. It gives an agent tools for finding files, reading and writing text, moving and deleting paths, checking terminal processes, and opening a terminal in a directory.

The tools return ordinary paths and short results, so an agent can use one result as the input for the next call. For example, it can find a project and open a terminal in that project directory.

Requirements

  • Python 3.10 or newer

  • The dependencies installed in the existing .venv

Related MCP server: Files MCP Server

Run it

From the project directory, activate the virtual environment:

.\.venv\Scripts\Activate.ps1

Limit the server to the current project directory:

$env:MCP_ALLOWED_ROOTS = (Get-Location).Path

Then start the server:

os-agent-mcp

The server uses stdio, so it waits for an MCP client and does not print a normal command prompt message. It is configured for VS Code in .vscode/mcp.json.

To install or repair the project dependencies in the existing environment:

python -m pip install -e ".[dev]"

Development

python -m pytest

The tests cover the file search, file writing, and path permission behavior.

Available Tools

8 tools
delete_pathA

Delete a file, or an empty directory unless recursive=true is provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
recursiveNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden, and it does convey the key destructive scope (file vs empty directory vs recursive non-empty directory). It stops short of stating permanence/irreversibility, permission requirements, or error behavior for missing paths, which would be expected for a delete operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; it covers both parameters and the main behavioral condition efficiently. Every word contributes to the call decision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter destructive tool, the core behavior is present, and an output schema exists so return values need not be described. Still, the absence of annotations and lack of irreversibility/error/permission detail leave some gaps an agent would need to discover at runtime.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must add meaning beyond the bare schema. It clarifies the recursive parameter's effect (allows deleting non-empty directories) and implicitly treats path as the file/directory to delete, but it does not document path format, directory/file disambiguation rules, or edge cases.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb+resource: it deletes a file or an empty directory, and immediately adds the recursive=true condition that distinguishes directory deletion cases. This is specific enough that an agent can tell it apart from move_path or write_text_file without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The recursive condition gives implicit guidance: without recursive=true only empty directories can be deleted, so agents trying to remove a non-empty directory know to pass the flag. However, it does not explicitly compare against sibling tools (e.g., when to move instead of delete) or state conditions like path must exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

launch_terminalB

Open a new terminal in a directory and optionally run one command.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo.
commandNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not mention whether the terminal persists, whether the command runs asynchronously, what happens to command output, how the terminal session is managed, or what side effects occur. The description only states the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence with no filler. It front-loads the main action and then adds the optional capability, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with only two optional parameters and an output schema, the description is mostly sufficient to invoke it correctly: the user provides a directory and optionally a command. The main gaps concern runtime behavior, but these are relatively minor for such a simple tool and are already partially covered by the clarity of the action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It connects 'directory' to the path parameter and 'one command' to the command parameter, which adds some meaning. However, it does not explain command string format, path behavior, default handling, or terminal session specifics beyond the schema's existing defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Open'), a resource ('a new terminal'), and scope ('in a directory and optionally run one command'). This clearly distinguishes it from sibling tools like list_open_terminals, which only lists terminals.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given about when to use this tool versus alternatives such as list_open_terminals or file-operation tools. The intended use is implied by the action, but there are no conditions, exclusions, or alternative tool references.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_directoryA

List immediate children with their type and size.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo.
include_hiddenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It communicates that listing is non-recursive and includes type and size, which is useful. However, it does not disclose behavior around hidden files, default paths, sorting, symlinks, or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and front-loaded: a single sentence with no filler. Every word adds meaning, and the key scoping detail ('immediate children') comes first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with an output schema, the description is mostly adequate. However, the missing explanation of include_hidden and the lack of any parameter details leave an agent to infer important invocation behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the undocumented parameters. It does not explain the 'path' parameter beyond the tool's name, and it entirely omits the 'include_hidden' parameter's meaning and default behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('directory') and specifies scope ('immediate children') and content ('type and size'). This clearly distinguishes it from sibling tools like search_files or read_text_file, which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use this to list a directory's direct children rather than searching or reading files. However, it does not explicitly state when to prefer this over search_files or mention any exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_open_terminalsA

List likely terminal processes currently running on this machine.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. The qualifier 'likely' usefully signals heuristic or approximate detection, and 'currently running on this machine' sets scope. However, it does not explicitly state that listing is read-only, how terminal processes are identified, or how reliable the result is.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It efficiently conveys action, subject, and scope, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless listing tool with an output schema available, the description is mostly sufficient: an agent knows what action to perform and on what. It lacks usage guidance and a bit of behavioral transparency, but the low complexity and simple invocation keep it near-complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the input schema is empty, so there is nothing to document. The 0-parameter baseline applies and no additional parameter explanation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('List'), a specific resource ('likely terminal processes'), and temporal/local scope ('currently running on this machine'). It is clearly distinguishable from siblings like launch_terminal, which creates a terminal, and list_directory, which lists files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives, no exclusions, and no prerequisites. The purpose is implied, but the description never tells an agent when it is the right choice or when another sibling would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_pathB

Move a file or directory within the configured local roots.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
destinationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, but it only mentions the action and the root restriction. It does not disclose what happens if the destination exists, whether parent directories are created, whether cross-root moves are rejected, or the effect on directory contents.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise sentence with no filler, and it front-loads the core action. It is efficient, though it could add more behavioral detail without becoming bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value details are not required. However, for a mutation-like tool with no annotations, critical edge cases around destination conflicts, path constraints, and failure behavior are left unspecified, making the description incomplete for confident invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate for the source and destination parameters. It only implies they are paths within the configured roots and provides no format, path-resolution, or constraint details beyond the parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Move') and a clear resource ('a file or directory'), and explicitly scopes it to 'configured local roots'. This immediately distinguishes it from sibling tools like delete_path, read_text_file, and write_text_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'within the configured local roots' phrase gives an explicit constraint that helps an agent decide when this tool applies. It does not name alternatives or when-not-to-use scenarios, but the action and scope are clear enough for selection against the listed siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_text_fileB

Read a UTF-8 text file, capped to keep tool responses manageable.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It does disclose that the file is read as UTF-8 and that output is capped, which is useful, but it omits details such as what happens with oversized files, invalid paths, or non-text content.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence with no filler. It front-loads the primary action ('Read a UTF-8 text file') and adds a relevant constraint ('capped') without wasting words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is relatively simple and an output schema exists, so return-value documentation is not required. Still, the description leaves gaps: no guidance on path handling, no explicit tie between the cap and `max_chars`, and no mention of edge cases or alternatives. It is minimally viable but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it only alludes to capping without explicitly explaining the `path` or `max_chars` parameters. The parameter names and schema types provide some meaning, but the description adds little beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and resource ('a UTF-8 text file'), clearly conveying the tool's core function. However, it does not explicitly differentiate this tool from sibling tools like search_files or list_directory, so it stops short of full clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool—whenever file contents are needed—but offers no explicit guidance about when to prefer this over alternatives, nor any exclusions (e.g., binary files, large files, or search scenarios).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_filesA

Find files below a directory using a glob such as '.py' or 'README'.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
patternNo*

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the behavioral burden. It communicates the main behavior—searching for files below a directory using a glob—and gives concrete examples. It omits edge details such as recursion semantics, hidden files, case sensitivity, and error behavior, but for a simple search operation the description is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no filler. The main action is front-loaded and the glob examples are compact and immediately informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple two-parameter tool with an output schema available, so the description does not need to explain return values. Together with the schema, the description gives an agent enough to understand what the tool does and how to call it. It could add more explicit differentiation from list_directory, but the core context is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the bare schema. It does explain that 'pattern' is a glob and gives examples like '*.py' or 'README*', and it suggests that 'path' is the directory from which to search. It does not provide formal definitions, but the description adds useful meaning beyond the parameter titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Find files below a directory using a glob'. The verb 'Find' plus the resource 'files below a directory' and the glob examples identify the intended operation. It does not explicitly contrast with sibling list_directory, but the recursive 'below a directory' and glob-based matching clearly imply a different behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool should be used when the agent needs to locate files by glob pattern under a directory, which is a reasonable usage signal. However, it does not explicitly state when to prefer this tool over list_directory or other siblings, nor does it mention any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_text_fileB

Create a UTF-8 text file, refusing to overwrite unless asked explicitly.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
contentYes
overwriteNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It does disclose UTF-8 encoding and the refusal to overwrite unless explicitly requested, which are the most important behaviors. However, it does not mention what happens on failure, whether parent directories are created, or the exact semantics of overwrite.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler. The core action is front-loaded, and the overwrite guard is stated immediately after, making the tool's key behavior easy to grasp.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter write tool, the description is minimally adequate, especially with an output schema present. However, the lack of parameter elaboration and any selection guidance leaves some burden on the agent to infer details from parameter names alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no parameter descriptions, so the description must compensate. It adds UTF-8 context and the overwrite refusal, but it does not explain path, content, or the overwrite flag beyond what their names already imply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: 'Create a UTF-8 text file'. It also communicates the key scoping constraint around overwriting, which distinguishes it from read-only sibling tools like read_text_file, search_files, and list_directory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to choose this tool over siblings such as read_text_file, move_path, or delete_path. The overwrite behavior is implied, but there are no explicit alternatives, exclusions, or conditions.

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.

  1. 8 tool updatesv0.1.0
    • First observeddelete_path
    • First observedlaunch_terminal
    • First observedlist_directory
    • First observedlist_open_terminals
    • First observedmove_path
    • First observedread_text_file
    • First observedsearch_files
    • First observedwrite_text_file

TDQS

A3.8/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct operation: file search, directory listing, read/write, move/delete, and terminal listing/launch. There is no meaningful overlap, and the search/list distinction is clear.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern, such as search_files, read_text_file, and launch_terminal. The style is uniform and predictable.

Tool Count5/5

Eight tools is well-scoped for an OS agent covering filesystem operations and terminal launching. Each tool earns its place without redundancy or bloat.

Completeness4/5

The filesystem surface covers search, list, read, write, move, and delete well, and terminal launch is covered. Minor gaps exist such as no explicit directory creation, copy operation, or terminal process termination, but core workflows are supported.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers