Filesystem MCP Server
OfficialThe Filesystem MCP Server is a Node.js server that provides secure filesystem operations through the Model Context Protocol (MCP) with dynamic access control.
File Operations:
Read: Text files (complete or specific lines), media files (base64 encoded with MIME types), or multiple files concurrently
Write & Edit: Create new files, overwrite existing ones, or perform selective line-based edits with diff previews
Move: Rename or move files and directories within allowed paths
Metadata: Retrieve detailed information including size, timestamps, type, and permissions
Directory Operations:
Create: New directories including nested paths
List: Directory contents with file/subdirectory distinction and sorting options
Search: Recursively find files and directories matching patterns with exclusion options
Tree View: Get recursive JSON structure of directory hierarchies
Access Control:
Static Control: Restrict operations to directories set via command-line
Dynamic Control: Update allowed directories using MCP Roots to override server-side configurations
Access Listing: View currently permitted directories
Click on "Install 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., "@Filesystem MCP Serverlist the files in my Documents folder"
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.
Filesystem MCP Server
Node.js server implementing Model Context Protocol (MCP) for filesystem operations.
Published on npm as @modelcontextprotocol/server-filesystem.
Features
Read/write files
Create/list/delete directories
Move files/directories
Search files
Get file metadata
Dynamic directory access control via Roots
Related MCP server: Filesystem MCP Server
Directory Access Control
The server uses a flexible directory access control system. Directories can be specified via command-line arguments or dynamically via Roots.
Method 1: Command-line Arguments
Specify Allowed directories when starting the server:
mcp-server-filesystem /path/to/dir1 /path/to/dir2Method 2: MCP Roots (Recommended)
MCP clients that support Roots can dynamically update the Allowed directories.
Roots notified by Client to Server, completely replace any server-side Allowed directories when provided.
Important: If server starts without command-line arguments AND client doesn't support roots protocol (or provides empty roots), the server will throw an error during initialization.
This is the recommended method, as this enables runtime directory updates via roots/list_changed notifications without server restart, providing a more flexible and modern integration experience.
How It Works
The server's directory access control follows this flow:
Server Startup
Server starts with directories from command-line arguments (if provided)
If no arguments provided, server starts with empty allowed directories
Client Connection & Initialization
Client connects and sends
initializerequest with capabilitiesServer checks if client supports roots protocol (
capabilities.roots)
Roots Protocol Handling (if client supports roots)
On initialization: Server requests roots from client via
roots/listClient responds with its configured roots
Server replaces ALL allowed directories with client's roots
On runtime updates: Client can send
notifications/roots/list_changedServer requests updated roots and replaces allowed directories again
Fallback Behavior (if client doesn't support roots)
Server continues using command-line directories only
No dynamic updates possible
Access Control
All filesystem operations are restricted to allowed directories
Use
list_allowed_directoriestool to see current directoriesServer requires at least ONE allowed directory to operate
Note: The server will only allow operations within directories specified either via args or via Roots.
API
Tools
read_text_file
Read complete contents of a file as text
Inputs:
path(string)head(number, optional): First N linestail(number, optional): Last N lines
Always treats the file as UTF-8 text regardless of extension
Cannot specify both
headandtailsimultaneously
read_media_file
Read a file and return it as a base64-encoded content block with its MIME type
Inputs:
path(string)
Streams the file and returns base64 data with the corresponding MIME type. Image and audio files are returned as
image/audiocontent; any other file type is returned as an embeddedresource(a valid MCP content block for arbitrary binary data)
read_multiple_files
Read multiple files simultaneously
Input:
paths(string[])Failed reads won't stop the entire operation
write_file
Create new file or overwrite existing (exercise caution with this)
Inputs:
path(string): File locationcontent(string): File content
edit_file
Make selective edits using advanced pattern matching and formatting
Features:
Line-based and multi-line content matching
Whitespace normalization with indentation preservation
Multiple simultaneous edits with correct positioning
Indentation style detection and preservation
Git-style diff output with context
Preview changes with dry run mode
Inputs:
path(string): File to editedits(array): List of edit operationsoldText(string): Text to search for (can be substring)newText(string): Text to replace with
dryRun(boolean): Preview changes without applying (default: false)
Returns detailed diff and match information for dry runs, otherwise applies changes
Best Practice: Always use dryRun first to preview changes before applying them
create_directory
Create new directory or ensure it exists
Input:
path(string)Creates parent directories if needed
Succeeds silently if directory exists
list_directory
List directory contents with [FILE] or [DIR] prefixes
Input:
path(string)
list_directory_with_sizes
List directory contents with [FILE] or [DIR] prefixes, including file sizes
Inputs:
path(string): Directory path to listsortBy(string, optional): Sort entries by "name" or "size" (default: "name")
Returns detailed listing with file sizes and summary statistics
Shows total files, directories, and combined size
move_file
Move or rename files and directories
Inputs:
source(string)destination(string)
Fails if destination exists
search_files
Recursively search for files/directories that match or do not match patterns
Inputs:
path(string): Starting directorypattern(string): Search patternexcludePatterns(string[]): Exclude any patterns.
Glob-style pattern matching
Returns full paths to matches
directory_tree
Get recursive JSON tree structure of directory contents
Inputs:
path(string): Starting directoryexcludePatterns(string[]): Exclude any patterns. Glob formats are supported.
Returns:
JSON array where each entry contains:
name(string): File/directory nametype('file'|'directory'): Entry typechildren(array): Present only for directoriesEmpty array for empty directories
Omitted for files
Output is formatted with 2-space indentation for readability
get_file_info
Get detailed file/directory metadata
Input:
path(string)Returns:
Size
Creation time
Modified time
Access time
Type (file/directory)
Permissions
list_allowed_directories
List all directories the server is allowed to access
No input required
Returns:
Directories that this server can read/write from
Tool annotations (MCP hints)
This server sets MCP ToolAnnotations on each tool so clients can:
Distinguish read‑only tools from write‑capable tools.
Understand which write operations are idempotent (safe to retry with the same arguments).
Highlight operations that may be destructive (overwriting or heavily mutating data).
Signal that a tool does not reach an open or external world (every filesystem tool sets
openWorldHint: false).
The mapping for filesystem tools is:
Tool | readOnlyHint | idempotentHint | destructiveHint | Notes |
|
| – | – | Pure read |
|
| – | – | Pure read |
|
| – | – | Pure read |
|
| – | – | Pure read |
|
| – | – | Pure read |
|
| – | – | Pure read |
|
| – | – | Pure read |
|
| – | – | Pure read |
|
| – | – | Pure read |
|
|
|
| Re‑creating the same dir is a no‑op |
|
|
|
| Overwrites existing files |
|
|
|
| Re‑applying edits can fail or double‑apply |
|
|
|
| Deletes source file |
Note:
idempotentHintanddestructiveHintare meaningful only whenreadOnlyHintisfalse, as defined by the MCP spec. Every tool also setsopenWorldHint: false— this server only accesses the local filesystem within its allowed directories, never an open or external world.
Usage with Claude Desktop
Add this to your claude_desktop_config.json:
Note: you can provide sandboxed directories to the server by mounting them to /projects. Adding the ro flag will make the directory readonly by the server.
Docker
Note: all directories must be mounted to /projects by default.
{
"mcpServers": {
"filesystem": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--mount", "type=bind,src=/Users/username/Desktop,dst=/projects/Desktop",
"--mount", "type=bind,src=/path/to/other/allowed/dir,dst=/projects/other/allowed/dir,ro",
"--mount", "type=bind,src=/path/to/file.txt,dst=/projects/path/to/file.txt",
"mcp/filesystem",
"/projects"
]
}
}
}NPX
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/username/Desktop",
"/path/to/other/allowed/dir"
]
}
}
}On Windows, use cmd /c to launch npx:
{
"mcpServers": {
"filesystem": {
"command": "cmd",
"args": [
"/c",
"npx",
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/username/Desktop",
"/path/to/other/allowed/dir"
]
}
}
}Usage with VS Code
For quick installation, click the installation buttons below...
For manual installation, you can configure the MCP server using one of these methods:
Method 1: User Configuration (Recommended)
Add the configuration to your user-level MCP configuration file. Open the Command Palette (Ctrl + Shift + P) and run MCP: Open User Configuration. This will open your user mcp.json file where you can add the server configuration.
Method 2: Workspace Configuration
Alternatively, you can add the configuration to a file called .vscode/mcp.json in your workspace. This will allow you to share the configuration with others.
For more details about MCP configuration in VS Code, see the official VS Code MCP documentation.
You can provide sandboxed directories to the server by mounting them to /projects. Adding the ro flag will make the directory readonly by the server.
Docker
Note: all directories must be mounted to /projects by default.
{
"servers": {
"filesystem": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--mount", "type=bind,src=${workspaceFolder},dst=/projects/workspace",
"mcp/filesystem",
"/projects"
]
}
}
}NPX
{
"servers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"${workspaceFolder}"
]
}
}
}On Windows, use:
{
"servers": {
"filesystem": {
"command": "cmd",
"args": [
"/c",
"npx",
"-y",
"@modelcontextprotocol/server-filesystem",
"${workspaceFolder}"
]
}
}
}Build
Docker build:
docker build -t mcp/filesystem -f src/filesystem/Dockerfile .License
This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.
Available Tools
14 toolscreate_directoryCreate DirectoryAIdempotent
Create a new directory or ensure a directory exists. Can create multiple nested directories in one operation. If the directory already exists, this operation will succeed silently. Perfect for setting up directory structures for projects or ensuring required paths exist. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide idempotentHint=true and destructiveHint=false, and the description elaborates by explaining that nested directories can be created in one operation and that existing directories are handled silently. The constraint of allowed directories is also stated, adding transparency beyond structured data.
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 description is concise with four clear sentences. Each sentence adds unique value: core function, nested/idempotent behavior, use case, and access restriction. No redundant 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?
For a simple tool with one parameter and an output schema, the description covers creation behavior, idempotency, nesting, and allowed-directories constraint. It is complete enough for an agent to understand when and how to invoke the 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?
With 0% schema description coverage, the description carries the full burden. It implies the path parameter supports nested creation, but does not detail format (e.g., absolute vs relative, trailing slash). The meaning is sufficient but not fully explicit.
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 clearly states the tool creates directories or ensures they exist, with nested creation capability. The verb 'Create' and resource 'directory' are specific, and the scope 'Only works within allowed directories' differentiates it from siblings that operate on files or list directories.
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?
The description provides context suggesting use for setting up directory structures or ensuring paths exist, but does not explicitly compare to alternatives or state when not to use. However, given no sibling tool duplicates this functionality, the guidance is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
directory_treeDirectory TreeARead-only
Get a recursive tree view of files and directories as a JSON structure. Each entry includes 'name', 'type' (file/directory), and 'children' for directories. Files have no children array, while directories always have a children array (which may be empty). The output is formatted with 2-space indentation for readability. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| excludePatterns | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, but the description adds valuable behavioral details: output structure with children arrays, formatting, recursion, and the constraint of working only within allowed directories.
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 description is three sentences, concise and front-loaded with the main purpose. It could be slightly improved by structuring parameter details.
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?
Given the tool has an output schema and two parameters, the description covers output structure, recursion, and allowed directories. It lacks discussion of performance implications but is otherwise 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 0% and the tool description provides no explanation for the 'path' or 'excludePatterns' parameters, leaving their meaning and usage unclear.
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 clearly states the tool returns a recursive tree view of files and directories as JSON, using specific verb and resource. It distinguishes from sibling tools like list_directory which provides a flat list.
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?
The description lacks explicit guidance on when to use this tool vs alternatives. It implies recursive use but does not compare to siblings like list_directory or list_directory_with_sizes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_fileEdit FileADestructive
Make line-based edits to a text file. Each edit replaces exact line sequences with new content. Returns a git-style diff showing the changes made. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| edits | Yes | ||
| dryRun | No | Preview changes using git-style diff format |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already show destructiveHint=true and readOnlyHint=false. The description adds that edits replace exact line sequences and returns a diff. However, it does not disclose behavior when oldText is not found or multiple matches occur, which is needed given the destructive nature.
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 sentences, front-loaded with the main action. No wasted words, though could include the dryRun preview mention more prominently. Efficient for the information provided.
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?
Given the destructive nature and the availability of an output schema (not shown but noted), the description covers the main behavior and return (git-style diff). However, it lacks guidance on dryRun usage, error cases, or safety, leaving some gaps for a tool that modifies files.
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 33%; only dryRun has a description. The description adds that each edit replaces exact line sequences and that oldText must match exactly, providing some meaning beyond the schema for the edits parameter, but does not fully compensate for missing parameter descriptions, especially path.
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 uses specific verbs and resources ('Make line-based edits to a text file'), clearly distinguishes from siblings like write_file by focusing on line-based edits and returning a diff. It is unambiguous and actionable.
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?
The description states a constraint ('Only works within allowed directories') but does not explicitly guide when to use this tool vs alternatives like write_file or search_files. Usage context is implied but not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_infoGet File InfoARead-only
Retrieve detailed metadata about a file or directory. Returns comprehensive information including size, creation time, last modified time, permissions, and type. This tool is perfect for understanding file characteristics without reading the actual content. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and closed-world behavior. The description adds specific metadata fields returned and the directory restriction, providing useful context 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?
Three sentences, each providing distinct value: purpose, return details, and usage constraint. No wasted words.
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 simple read-only tool with an output schema, the description covers purpose, behavior, and constraints adequately. The output schema handles return value documentation.
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?
The single 'path' parameter has 0% schema description coverage. The description clarifies it expects a file or directory within allowed directories, but lacks format details or examples. This partially compensates for the missing schema docs.
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 clearly states the tool retrieves detailed metadata (size, time, permissions, type) for files or directories, distinguishing it from siblings that read content or list entries.
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?
The description explains when to use (to understand file characteristics without reading content) and includes a constraint (only works within allowed directories). However, it does not explicitly list alternatives or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_allowed_directoriesList Allowed DirectoriesARead-only
Returns the list of directories that this server is allowed to access. Subdirectories within these allowed directories are also accessible. Use this to understand which directories and their nested paths are available before trying to access files.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that subdirectories within allowed directories are also accessible, which is not covered by annotations (readOnlyHint, openWorldHint). This provides useful context beyond the structured fields. No contradictions.
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, each earning its place: first states the purpose, second provides usage guidance. No redundant or unnecessary words. Front-loaded with the key action.
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 simple zero-parameter tool with an output schema, the description is complete. It explains what is returned, that subdirectories are included, and when to use it. No gaps given the tool's simplicity and the presence of an output schema.
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?
The tool has zero parameters, so schema coverage is complete. Baseline for 0 params is 4. The description indirectly explains the output (list of directories), but since there are no parameters, no additional semantics are needed.
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 uses a specific verb ('Returns the list') and resource ('directories'), clearly distinguishing it from siblings like list_directory which list contents of a directory. It unambiguously states what the tool does.
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 explicit guidance: 'Use this to understand which directories and their nested paths are available before trying to access files.' It tells the agent when to use the tool, though it doesn't explicitly mention when not to use it or alternatives. For a simple zero-parameter tool, this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_directoryList DirectoryBRead-only
Get a detailed listing of all files and directories in a specified path. Results clearly distinguish between files and directories with [FILE] and [DIR] prefixes. This tool is essential for understanding directory structure and finding specific files within a directory. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds that output prefixes [FILE] and [DIR] and the allowed-directories constraint, but does not disclose other behavioral aspects like recursive behavior or error cases.
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 sentences that are efficient and front-loaded. No wasted words, though could be slightly tighter.
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?
Adequate for a simple tool with one parameter and an output schema. Covers purpose, output format, and a constraint. Lacks error handling details but that is acceptable.
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 0%, so description must compensate. It mentions 'specified path' but provides no details on path format, validation, or behavior (e.g., relative vs absolute).
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?
Clearly states it gets a detailed listing of files/directories with specific prefixes. Distinguishes from siblings implicitly but does not name alternatives.
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?
Only mentions the constraint 'Only works within allowed directories', but provides no guidance on when to use this tool versus sibling tools like directory_tree or list_directory_with_sizes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_directory_with_sizesList Directory with SizesBRead-only
Get a detailed listing of all files and directories in a specified path, including sizes. Results clearly distinguish between files and directories with [FILE] and [DIR] prefixes. This tool is useful for understanding directory structure and finding specific files within a directory. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| sortBy | No | Sort entries by name or size | name |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=false. The description adds that results use [FILE] and [DIR] prefixes and include sizes, which is useful behavioral context, but does not mention sorting behavior or performance implications. Moderate value added 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?
The description is two sentences, directly addressing purpose, output format, utility, and a key constraint. No unnecessary words, well-structured and efficient.
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?
Given that an output schema exists, it's appropriate not to detail return values. The description covers output format (prefixes), purpose, and scope. It mentions nothing about the sortBy parameter, but the overall information is sufficient for basic usage.
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?
Only 50% of parameters have schema descriptions (sortBy is described, path is not). The description only says 'specified path' without adding format, restrictions, or examples for the path parameter, offering minimal help beyond the schema.
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 it lists files/directories with sizes and distinguishes with prefixes, making the purpose clear. However, it does not explicitly differentiate from sibling tool 'list_directory', which may only list names without sizes, but the distinction is implied.
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?
The description says it's useful for understanding structure and finding files, and mentions the allowed-directories constraint. It does not provide explicit guidance on when to use this tool versus siblings like 'directory_tree' or 'list_directory', leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_fileMove FileADestructive
Move or rename files and directories. Can move files between directories and rename them in a single operation. If the destination exists, the operation will fail. Works across different directories and can be used for simple renaming within the same directory. Both source and destination must be within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| destination | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description adds specific behavioral details: the operation fails if the destination exists, and it works across directories. It also notes the allowed directories constraint. These details help the agent understand error conditions and scope, which annotations alone do not provide.
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 description is concise with five sentences, each adding distinct value: primary function, combined operation capability, failure condition, cross-directory scope, and directory constraint. No redundant or irrelevant information. Information is front-loaded and well-structured.
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?
Given the tool's simplicity (2 parameters, straightforward purpose), the description covers all key aspects: action, success conditions, failure conditions, and constraints. The existence of an output schema means return values need not be described. The description is complete for an agent to decide when and how to invoke this 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?
With 0% schema description coverage, the description should compensate but only adds the constraint that both paths must be within allowed directories. It does not explain format (absolute/relative), validation rules, or the meaning of source vs destination beyond their names. The names are self-explanatory, but the description adds minimal value for parameter understanding.
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 clearly states the tool moves or renames files and directories, with specific verbs and resource. It distinguishes from sibling tools like edit_file and write_file by focusing on relocation/rename rather than content modification. The mention of 'single operation' and 'within allowed directories' further clarifies its scope.
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?
The description provides clear context: it can move between directories and rename within the same directory. It states a critical condition ('If the destination exists, the operation will fail') and a constraint ('Both source and destination must be within allowed directories'). However, it lacks explicit alternatives or when-not-to-use guidance, but the context is sufficient for most agents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileRead File (Deprecated)ARead-only
Read the complete contents of a file as text. DEPRECATED: Use read_text_file instead.
| Name | Required | Description | Default |
|---|---|---|---|
| head | No | If provided, returns only the first N lines of the file | |
| path | Yes | ||
| tail | No | If provided, returns only the last N lines of the file |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so description's 'read' is consistent. It adds that head/tail can limit lines, but no additional side effects, auth needs, or rate limits. Beyond annotations, adds moderate context.
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: first states action, second delivers deprecation notice. Front-loaded, no redundant phrasing. Every sentence is useful.
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?
Given the tool is deprecated and has identical functionality as read_text_file (a sibling), the description covers purpose, deprecation, and alternative. Output schema exists (not shown), so no need to explain return values. Complete for its context.
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 67% (head and tail have descriptions, path lacks one). Description mentions 'complete contents' implying path is the file, but does not elaborate on other parameters beyond what schema already provides. Baseline mid-level due to partial coverage.
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?
Description states 'Read the complete contents of a file as text' with specific verb and resource. Explicitly notes deprecation and recommends 'read_text_file', distinguishing it from sibling 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?
Explicitly indicates deprecation and directs to use 'read_text_file'. This is strong guidance, but does not cover other contexts where head/tail parameters might be used or call out alternatives for those cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_media_fileRead Media FileARead-only
Read a file and return it as a base64-encoded content block with its MIME type. Image and audio files are returned as image/audio content; any other file type is returned as an embedded resource. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and the description adds behavioral details such as base64 encoding, MIME type determination, and handling of image/audio vs other file types. It also mentions directory constraints, adding 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?
The description is contained in a single sentence that front-loads the purpose. It is succinct without waste, but could benefit from slightly more structure (e.g., separate sentences for constraints).
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?
Given the output schema exists, description does not need to detail return values. However, it lacks full context about file size limits, allowed MIME types specifically, and clear differentiation from similar siblings (read_file, read_text_file). Adequate but incomplete.
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 0%, so the description must compensate. It only mentions 'within allowed directories' for the path parameter, but does not explain path format, absolute/relative, or any additional constraints. The schema only defines path as a string, leaving ambiguity.
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 clearly states 'Read a file and return it as a base64-encoded content block with its MIME type', specifying the exact action and output format. It distinguishes from siblings like read_file or read_text_file by emphasizing base64 encoding and MIME type handling.
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?
The description only notes 'Only works within allowed directories' but does not provide explicit guidance on when to use this tool versus alternatives. It lacks 'when-not' or comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_multiple_filesRead Multiple FilesARead-only
Read the contents of multiple files simultaneously. This is more efficient than reading files one by one when you need to analyze or compare multiple files. Each file's content is returned with its path as a reference. Failed reads for individual files won't stop the entire operation. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | Array of file paths to read. Each path must be a string pointing to a valid file within allowed directories. |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint and openWorldHint, which are consistent. The description adds value by noting that 'Failed reads for individual files won't stop the entire operation', which is a key behavioral trait not captured by annotations. This helps the agent understand partial failure behavior.
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 description is four sentences, front-loaded with the core purpose. It avoids redundancy and each sentence offers useful information. Slightly longer than minimal but justified by the additional behavioral details.
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?
Given the tool handles multiple files with partial failures, the description covers efficiency, batch operation, failure handling, and directory restriction. With an output schema present, return format is documented. It provides sufficient context for an agent to use the tool 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?
Schema coverage is 100%, so baseline is 3. The description reinforces that each path must be a string within allowed directories, but adds no new meaning beyond the schema's description. It does hint at the output format (content with path reference), but that's more about return values than parameter semantics.
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 starts with 'Read the contents of multiple files simultaneously', clearly stating the verb and resource. It distinguishes from sibling tools like 'read_file' by highlighting batch efficiency and the ability to handle multiple files at once.
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?
The description says this tool is 'more efficient than reading files one by one', providing a clear use case. It also mentions that failed reads won't stop the operation and that it only works within allowed directories, offering practical guidance. However, it could explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_text_fileRead Text FileARead-only
Read the complete contents of a file from the file system as text. Handles various text encodings and provides detailed error messages if the file cannot be read. Use this tool when you need to examine the contents of a single file. Use the 'head' parameter to read only the first N lines of a file, or the 'tail' parameter to read only the last N lines of a file. Operates on the file as text regardless of extension. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| head | No | If provided, returns only the first N lines of the file | |
| path | Yes | ||
| tail | No | If provided, returns only the last N lines of the file |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, but the description adds useful behavioral details: handles various text encodings, provides detailed error messages, and operates as text regardless of extension. No contradictions.
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?
Four sentences, front-loaded with purpose, each sentence adds value: encoding handling, usage context, parameter details, and restrictions. No superfluous content.
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 simple read tool, the description covers purpose, usage context, parameter guidance, restrictions, and behavioral details. Output schema exists, so return format is not needed. It is thorough for the tool's complexity.
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?
The description explains the head and tail parameters (first N lines, last N lines), but these descriptions largely repeat the schema. The path parameter is not elaborated beyond the name. Given 67% schema coverage, the description adds marginal value.
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 specifies a clear verb ('Read') and resource ('file as text'), and distinguishes from siblings like read_multiple_files by stating 'single file'. It also mentions handling encodings and error messages, making the purpose 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?
The description explicitly states when to use this tool ('examine contents of a single file') and provides guidance on head/tail parameters. However, it does not explicitly mention when not to use it or compare with other tools like read_file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_filesSearch FilesARead-only
Recursively search for files and directories matching a pattern. The patterns should be glob-style patterns that match paths relative to the working directory. Use pattern like '.ext' to match files in current directory, and '**/.ext' to match files in all subdirectories. Returns full paths to all matching items. Great for finding files when you don't know their exact location. Only searches within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| pattern | Yes | ||
| excludePatterns | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds that it returns full paths, recursively searches, and is limited to allowed directories. It does not mention hidden files or case sensitivity, but it is sufficient for a read-only tool.
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 description is a single paragraph of five sentences, front-loaded with the main action, and every sentence adds necessary information without verbosity.
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?
The description covers the search behavior, pattern syntax, and allowed scope. Since an output schema exists, return values need not be explained. It is fairly complete, but could mention the role of the path parameter and the excludePatterns functionality.
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?
The schema has 0% coverage, so the description must compensate. It explains the pattern parameter in detail with examples but does not explain the path parameter (the starting directory) or the excludePatterns parameter. Thus it adds meaning for one key parameter but leaves gaps for others.
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 clearly states it recursively searches for files and directories matching a glob-style pattern, and the verb 'search_files' combined with the explanation differentiates it from siblings like list_directory and get_file_info. It is specific about pattern types and scope.
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?
The description provides clear context: 'Great for finding files when you don't know their exact location' and notes it only searches within allowed directories. However, it does not explicitly exclude alternatives or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_fileWrite FileADestructiveIdempotent
Create a new file or completely overwrite an existing file with new content. Use with caution as it will overwrite existing files without warning. Handles text content with proper encoding. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| content | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and idempotent behavior. The description adds valuable context: 'Handle text content with proper encoding' and 'Only works within allowed directories', which are beyond annotation and aid safe usage.
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 sentences efficiently cover purpose, caution, encoding, and scope. No redundancy, though additional parameter details could be added without bloating.
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?
Given the simple tool with two parameters and an output schema, the description covers key behavioral points but lacks parameter detail. It is adequate but not comprehensive.
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 0%, so the description must explain parameters, but it only mentions 'text content' without specifying path format or content constraints. No examples or additional semantic guidance is provided.
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 explicitly states the tool creates a new file or completely overwrites an existing file, distinguishing it from siblings like edit_file. The verb 'create' and 'overwrite' plus resource 'file' leave no ambiguity.
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?
The caution about overwriting without warning provides usage guidance, but it does not explicitly compare with edit_file or state when to use this over other file tools. The sibling list implies alternatives, but direct guidance is missing.
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. Dates show when Glama detected each change.
1 tool update
v2026.7.10- Changed
read_media_file5 fields changed- removed
Output schema / properties / content / items / additionalPropertiesRemoved value: -false - added
Output schema / properties / content / items / anyOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "type": { + "enum": [ + "image", + "audio" + ], + "type": "string" + } + }, + "required": [ + "type", + "data", + "mimeType" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "resource": { + "additionalProperties": false, + "properties": { + "blob": { + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "uri": { + "type": "string" + } + }, + "required": [ + "uri", + "blob" + ], + "type": "object" + }, + "type": { + "const": "resource", + "type": "string" + } + }, + "required": [ + "type", + "resource" + ], + "type": "object" + } +] - removed
Output schema / properties / content / items / propertiesRemoved value: -{ - "data": { - "type": "string" - }, - "mimeType": { - "type": "string" - }, - "type": { - "enum": [ - "image", - "audio", - "blob" - ], - "type": "string" - } -} - removed
Output schema / properties / content / items / requiredRemoved value: -[ - "type", - "data", - "mimeType" -] - removed
Output schema / properties / content / items / typeRemoved value: -"object"
14 tool updates
v1.0.0- Changed
create_directory2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + } + }, + "required": [ + "content" + ], + "type": "object" +}
- Changed
directory_tree3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / excludePatternsAdded value: +{ + "default": [], + "items": { + "type": "string" + }, + "type": "array" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + } + }, + "required": [ + "content" + ], + "type": "object" +}
- Changed
edit_file3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / edits / items / additionalPropertiesRemoved value: -false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + } + }, + "required": [ + "content" + ], + "type": "object" +}
- Changed
get_file_info2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + } + }, + "required": [ + "content" + ], + "type": "object" +}
- Changed
list_allowed_directories3 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - removed
Input schema / requiredRemoved value: -[] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + } + }, + "required": [ + "content" + ], + "type": "object" +}
- Changed
list_directory2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + } + }, + "required": [ + "content" + ], + "type": "object" +}
- Changed
list_directory_with_sizes2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + } + }, + "required": [ + "content" + ], + "type": "object" +}
- Changed
move_file2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + } + }, + "required": [ + "content" + ], + "type": "object" +}
- Changed
read_file2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + } + }, + "required": [ + "content" + ], + "type": "object" +}
- Changed
read_media_file2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "content": { + "items": { + "additionalProperties": false, + "properties": { + "data": { + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "type": { + "enum": [ + "image", + "audio", + "blob" + ], + "type": "string" + } + }, + "required": [ + "type", + "data", + "mimeType" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "content" + ], + "type": "object" +}
- Changed
read_multiple_files4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / paths / descriptionAdded value: +"Array of file paths to read. Each path must be a string pointing to a valid file within allowed directories." - added
Input schema / properties / paths / minItemsAdded value: +1 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + } + }, + "required": [ + "content" + ], + "type": "object" +}
- Changed
read_text_file2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + } + }, + "required": [ + "content" + ], + "type": "object" +}
- Changed
search_files2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + } + }, + "required": [ + "content" + ], + "type": "object" +}
- Changed
write_file2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + } + }, + "required": [ + "content" + ], + "type": "object" +}
14 tool updates
- First observed
create_directory - First observed
directory_tree - First observed
edit_file - First observed
get_file_info - First observed
list_allowed_directories - First observed
list_directory - First observed
list_directory_with_sizes - First observed
move_file - First observed
read_file - First observed
read_media_file - First observed
read_multiple_files - First observed
read_text_file - First observed
search_files - First observed
write_file
TDQS
Some tools overlap in purpose: list_directory and list_directory_with_sizes are nearly identical except for size output; read_file is deprecated in favor of read_text_file, causing confusion. Other tools are distinct but descriptions could be clearer to avoid misselection.
Most tools follow a verb_noun pattern (e.g., create_directory, edit_file, read_text_file). directory_tree is a minor deviation as noun_noun. Overall consistent with one exception.
14 tools is well-scoped for a filesystem server. Each tool serves a clear purpose, covering reading, writing, editing, listing, searching, and metadata retrieval without unnecessary bloat.
Missing critical operations: there is no tool to delete files or directories, and no copy functionality. This creates significant gaps that will hinder agents from performing basic file management tasks.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A Model Context Protocol (MCP) server for Selise Blocks Cloud integration
MCP server for understanding Javascript internals from ECMAScript specification.
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
A Model Context Protocol server for Wix AI tools
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceGo server implementing Model Context Protocol (MCP) for filesystem operations.678MIT
- AlicenseAqualityDmaintenanceNode.js server implementing Model Context Protocol (MCP) for filesystem operations with comprehensive permission controls, allowing secure file and directory manipulation with granular access restrictions.21668,8093-
- -licenseNot gradedqualityNot gradedmaintenanceNode.js server implementing Model Context Protocol (MCP) for filesystem operations, allowing AI systems to read, write, edit files and manage directories within specified allowed paths.668,809-
- -licenseAqualityNot gradedmaintenanceA comprehensive Node.js server implementing Model Context Protocol (MCP) that enables filesystem operations, process management, and terminal session handling with an enterprise-grade security approach.14668,809-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/modelcontextprotocol/filesystem'
If you have feedback or need assistance with the MCP directory API, please join our Discord server