omni-fs-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@omni-fs-mcplist files in /home/user"
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.
Omni-FS MCP Server
An MCP server that provides unified access to multiple file systems simultaneously through OpenDAL.
Installation
pip install omni-fs-mcpRelated MCP server: MinIO Model-Context Protocol (MCP) Server
Quick Start
Single Backend
# Local filesystem
omni-fs-mcp "fs://"
# S3
omni-fs-mcp --transport http "s3://bucket?region=us-east-1&access_key_id=xxx&secret_access_key=yyy"
# WebDAV
omni-fs-mcp "webdav://server.com/path?username=user&password=pass"
# Memory (testing)
omni-fs-mcp "memory://"Multi-Backend with Config File
Create backends.json:
{
"backends": [
{
"name": "local",
"url": "fs://",
"description": "Local filesystem",
"default": true
},
{
"name": "s3-prod",
"url": "s3://bucket?region=us-east-1&access_key_id=...",
"description": "Production S3"
}
]
}Run with config:
# Stdio (default)
omni-fs-mcp backends.json
# HTTP
omni-fs-mcp --transport http --config backends.json --port 8080Usage
Command Options
omni-fs-mcp [OPTIONS] [URL_OR_CONFIG]
Options:
--config FILE JSON configuration file
--transport TYPE stdio (default) or http
--port PORT HTTP port (default: 8000)
--host HOST HTTP host (default: localhost)Available Tools
File Operations:
list_files(path, backend=None)- List files and directoriesread_file(path, backend=None)- Read file contentswrite_file(path, content, backend=None)- Write to filecopy_file(src, dst, src_backend=None, dst_backend=None)- Copy filesrename_file(src, dst, backend=None)- Rename/move filescreate_dir(path, backend=None)- Create directorystat_file(path, backend=None)- Get file metadata
Backend Management:
register_backend(name, url, ...)- Add new backendlist_backends()- Show all backendsset_default_backend(name)- Set default backendremove_backend(name)- Remove backendcheck_backend_health(backend=None)- Check connectivity
Supported Backends
Type | URL Example |
Local |
|
S3 |
|
WebDAV |
|
Memory |
|
FTP |
|
HTTP |
|
Examples
Cross-Backend Copy
# Backup to S3
copy_file("/local/file.txt", "/backup/file.txt",
src_backend="local", dst_backend="s3-backup")Runtime Backend Management
# Add temporary backend
register_backend("temp", "memory://", description="Temp storage")
# Use it
write_file("/test.txt", "content", backend="temp")Development
git clone <repo>
cd omni-fs-mcp
uv sync
# Run locally
uv run omni-fs-mcp "memory://"License
MIT
Available Tools
13 toolscheck_backend_healthB
Check the health status of backends by attempting basic operations.
Args:
backend: Specific backend to check (checks all if not specified)
Returns:
Dictionary mapping backend names to their health status (True/False)
| Name | Required | Description | Default |
|---|---|---|---|
| backend | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden of disclosure. It conveys that the tool 'attempts basic operations' to check health, indicating it performs actions, but does not specify what operations, side effects, or permission requirements exist.
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 and well-structured with a brief intro followed by parameter/return documentation. No unnecessary details, though it could be slightly more streamlined (e.g., avoid docstring format).
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 (1 optional parameter, no required fields) and explicit return description (dictionary of health statuses), the description covers the essential behavior. Missing potential error handling for invalid backends, but acceptable for a health check.
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 provides crucial semantics: the 'backend' parameter specifies which backend to check, and defaults to checking all if omitted. This adds value beyond the schema's type and default.
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 verb 'check' and resource 'health status of backends', distinguishing it from sibling tools like 'list_backends' and 'get_backend_stats' which focus on listing or statistics rather than active health verification via basic operations.
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?
No explicit guidance on when to use this tool versus alternatives (e.g., 'get_backend_stats'). The description is functional but lacks context about prerequisites or 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.
copy_fileB
Copy a file between backends or within the same backend.
Args:
src: Source file path
dst: Destination file path
src_backend: Source backend name (uses default if not specified)
dst_backend: Destination backend name (uses default if not specified)
Returns:
Success message
| Name | Required | Description | Default |
|---|---|---|---|
| src | Yes | ||
| dst | Yes | ||
| src_backend | No | ||
| dst_backend | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose key behavioral traits such as overwrite behavior, source existence checks, authentication requirements, or whether the operation is atomic. The only behavioral claim is a success message return.
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 and uses a standard docstring format with an Args section. It conveys the essential information without unnecessary verbosity, though it could be slightly more compact.
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 performs a file copy operation across backends, the description lacks details on overwrite policy, error handling, and backend-specific behaviors. The output schema exists but the description only mentions 'Success message,' which is minimal.
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 lists parameters with brief explanations, adding 'uses default if not specified' for backend parameters—information not present in the schema. However, coverage is low (0%), and most descriptors are redundant with the schema titles.
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 'Copy a file between backends or within the same backend,' which specifies the action (copy), resource (file), and scope (backends). This distinguishes it from siblings like rename_file, which performs a different operation.
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 does not provide explicit guidance on when to use this tool versus alternatives. It implies copying but does not mention when not to use it or compare with rename_file or other file operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_dirB
Create a directory on the specified backend.
Args:
path: Directory path to create
backend: Backend name to use (uses default backend if not specified)
Returns:
Success message
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| backend | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Only states it creates a directory and returns success; no info on overwrite behavior, permissions, idempotency, or error handling.
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?
Short and front-loaded with purpose. Every sentence adds value, though the Args/Returns section could be integrated more concisely.
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 directory creation with 2 params and no annotations, but lacks behavioral details that would help an agent anticipate side effects or prerequisites.
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 adds basic meaning: path is directory path, backend can be omitted for default. However, lacks details like path format or backend selection logic.
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 'Create a directory on the specified backend', which is a specific verb-resource pair. Distinguishes from sibling tools like copy_file or read_file.
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?
No guidance on when to use this tool versus alternatives like list_files or copy_file. Does not mention prerequisites or context for creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_backend_statsA
Get statistics and information about the backend manager.
Returns:
Dictionary with total backends, default backend, healthy backends count, etc.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return value structure (dictionary with total backends, default backend, healthy backends count). However, it does not mention any side effects or access requirements, which is acceptable for a read-only operation.
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 extremely concise: two sentences front-loading the purpose and return value. No redundant information, every sentence earns its place.
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 zero parameters and the presence of an output schema, the description adequately explains the return content. For a simple stats retrieval tool, this is fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema description coverage is 100% (empty). With no parameters, a baseline score of 4 applies as the description need not add parameter details.
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 'statistics and information about the backend manager' with a specific verb and resource. It distinguishes from siblings like check_backend_health (health of a specific backend) and list_backends (listing backends).
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 implies usage for getting general backend stats but does not explicitly state when to use this tool versus alternatives like check_backend_health or list_backends. No exclusion criteria or contextual guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_backendsA
List all registered backends with their configurations and status.
Returns:
List of backend information including name, URL, description,
readonly status, default status, and health status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states the return fields. It does not disclose behavioral traits like caching, freshness, rate limits, or authentication requirements. Minimal behavioral context beyond the output schema.
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 extremely concise with one line for purpose and a structured return description. Front-loads the action. Every sentence serves a clear purpose.
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 list tool with a provided output schema, the description covers the essential return fields. However, it lacks context on potential size, ordering, or performance implications. Nearly 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?
The tool has no parameters, so the description does not need to add parameter meaning. Schema coverage is trivially 100%. Baseline score of 4 for zero parameters is appropriate.
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 verb ('List'), resource ('registered backends'), and scope ('all'). It distinguishes from siblings like 'check_backend_health' and 'get_backend_stats' by specifying the comprehensive listing purpose.
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 implies usage for listing all backends but provides no explicit guidance on when to use this tool over alternatives. No exclusions or conditions are mentioned. Sibling tools are listed but not compared.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesB
List files and directories in the specified path.
Args:
path: The directory path to list (default: "/")
backend: Backend name to use (uses default backend if not specified)
Returns:
List of entries with their metadata
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | / | |
| backend | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only mentions returning a list with metadata but does not specify behavior like recursion, error handling, or authentication needs.
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 a clear structure: a brief sentence followed by an Args list and Returns note. However, the Args section could be omitted if the schema were documented, making it slightly verbose.
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, the description need not detail return values. However, lack of information about listing behavior (recursive?), edge cases, or performance makes it incomplete for a tool among many siblings.
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 two parameters (path and backend) but lacks details on path format, valid values, or how backend connects to other tools. It adds basic meaning beyond the schema, which has 0% 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?
The description clearly states the tool's function: 'List files and directories in the specified path.' It uses a specific verb and resource, and distinguishes from sibling tools like read_file or stat_file.
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 does not provide guidance on when to use this tool versus alternatives. It implies usage through the list of arguments but lacks explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileC
Read file contents from the specified backend.
Args:
path: File path to read
backend: Backend name to use (uses default backend if not specified)
Returns:
File contents as string
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| backend | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It mentions reading file contents and returning a string, but omits details like error handling, permissions needed, binary file handling, or any side effects.
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 no fluff, using a clear Args/Returns structure. Every sentence serves a purpose, though the Returns section could be integrated into the main description.
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 and the presence of an output schema, the description covers the basics. However, it lacks details on encoding, error behavior, or limitations, which would help in complex use cases.
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 should add meaning. It names the parameters (path, backend) and their roles, but provides no additional context like path format, accepted backends, or examples. This is minimally helpful.
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 reads file contents from a specified backend, using a specific verb and resource. It distinguishes itself from sibling tools like write_file or list_files, though it could be more specific about the 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 no guidance on when to use this tool versus alternatives (e.g., when to use stat_file or list_files instead). It only states what it does, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_backendA
Register a new backend with the given configuration.
Args:
name: Unique identifier for the backend (alphanumeric, hyphens, underscores only)
url: Backend connection URL (e.g., "fs:///", "s3://bucket", "memory:///")
description: Human-readable description of the backend
readonly: Whether this backend should be treated as read-only
timeout: Connection timeout in seconds
retry_attempts: Number of retry attempts for failed operations
set_as_default: Whether to set this as the default backend
validate_connection: Whether to validate the connection during registration
Returns:
Success or failure message
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| url | Yes | ||
| description | No | ||
| readonly | No | ||
| timeout | No | ||
| retry_attempts | No | ||
| set_as_default | No | ||
| validate_connection | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry the full burden. It mentions connection validation and default setting but lacks details on side effects, error handling, or idempotency.
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 structured with a summary, Args list, and Returns. It is mostly concise, though bullet points for each parameter add slight 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?
Given 8 parameters, no annotations, and an output schema, the description covers parameter semantics well but lacks important behavioral context like side effects and error handling.
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 fully compensates by explaining each parameter, including validation rules for 'name' and examples for 'url'.
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 'Register a new backend with the given configuration,' using a specific verb and resource. It distinguishes from siblings like remove_backend and list_backends.
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 does not provide guidance on when to use this tool versus alternatives, nor does it mention prerequisites or 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.
remove_backendA
Remove a backend from the manager.
Args:
name: Name of the backend to remove
force: Force removal even if it's the default backend
Returns:
Success message
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| force | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It mentions the force parameter behavior, adding some transparency, but fails to disclose side effects, irreversibility, or failure conditions.
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?
Extremely concise: two sentences plus Args/Returns. Front-loaded with purpose. No unnecessary fluff.
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?
Covers basic purpose and parameters, but misses prerequisites (e.g., backend must be registered) and permanence of removal. Output schema exists but description also mentions return, so partially 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 has 0% description coverage, but the description explains both parameters: 'name' as the backend name, and 'force' for forced removal. This adds essential meaning 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 clearly states 'Remove a backend from the manager.' with a specific verb (remove) and resource (backend). It distinguishes well from sibling tools like register_backend, set_default_backend, and list_backends.
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?
No guidance on when to use this tool versus alternatives (e.g., register_backend, set_default_backend). Missing prerequisites, such as the backend existing before removal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_fileB
Rename or move a file within a backend.
Args:
src: Source file path
dst: Destination file path
backend: Backend name to use (uses default backend if not specified)
Returns:
Success message
| Name | Required | Description | Default |
|---|---|---|---|
| src | Yes | ||
| dst | Yes | ||
| backend | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose behavioral traits such as whether the source is deleted after rename, handling of existing destinations, or permission requirements. With no annotations, more detail is needed.
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 very concise, structured with Args and Returns sections, and contains no unnecessary words. It is appropriately sized for the task.
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 basic purpose and parameters but lacks details on path formats, error conditions, and the exact return value. Although an output schema exists, it is not provided.
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 adds value for the backend parameter (explains default behavior), but for src and dst, it merely restates the parameter names without additional detail. With 0% schema description coverage, it partially compensates.
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 'Rename or move a file within a backend,' specifying the verb and resource. It implicitly distinguishes from sibling tools like copy_file, but lacks explicit differentiation.
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 no guidance on when to use this tool versus alternatives like copy_file, move, or other file operations. No prerequisites or context are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_default_backendB
Set the default backend for operations when no backend is specified.
Args:
name: Name of the backend to set as default
Returns:
Success message
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavioral traits. It indicates mutation ('set') and a return value, but does not mention failure scenarios (e.g., if the backend doesn't exist), side effects, or error conditions. This is insufficient for a write operation.
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 short and to the point, with two clear paragraphs. It is front-loaded with the purpose. Minor improvement could be combining the Args and Returns into a single sentence, but it is still 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 the tool has one required parameter and an output schema, the description is incomplete. It does not explain how to find available backends (e.g., use list_backends) or that the backend must be registered first. For a simple tool, more context is needed for correct invocation.
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% description coverage, so the description should add meaning beyond the property title. However, the Args section merely restates the schema: 'name: Name of the backend to set as default'. It adds no constraints or context (e.g., must be a registered backend).
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's action: setting the default backend. It specifies the resource ('default backend for operations') and the condition ('when no backend is specified'), which distinguishes it from sibling tools like register_backend or check_backend_health.
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 implies usage when you want to set a default backend, but it does not provide explicit guidance on when not to use this tool or mention alternatives. It lacks context such as prerequisites (e.g., the backend must already be registered).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stat_fileA
Get metadata/statistics for a file or directory.
Args:
path: Path to get statistics for
backend: Backend name to use (uses default backend if not specified)
Returns:
File metadata object
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| backend | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose behavioral traits. It states it gets metadata and returns a file metadata object, suggesting a read-only operation. However, it fails to mention behavior for missing paths, invalid backends, or potential side effects, which are important for safe invocation.
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 extremely concise, using a single sentence for purpose followed by structured Args and Returns sections. Every sentence adds value without redundancy, and the front-loaded format aids quick comprehension.
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?
Despite low complexity (2 params, no enums), the description omits details about the returned 'File metadata object'—its fields or structure—and the valid backend values. Without an output schema, an agent lacks sufficient information to interpret results or handle errors, leaving significant gaps.
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 coverage, the description provides crucial parameter explanations: 'path: Path to get statistics for' and 'backend: Backend name to use (uses default backend if not specified).' This adds meaningful context beyond bare schema types, compensating well for the lack of schema descriptions.
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 'Get metadata/statistics for a file or directory,' providing a specific verb and resource. It naturally distinguishes from sibling tools like read_file (content) and list_files (names), making the tool's purpose unmistakable.
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 implies usage for retrieving file metadata but gives no explicit when-to-use or when-not-to-use guidance. It does not reference alternative tools for similar tasks, such as list_files for directory listings or read_file for content, leaving the selection partially to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_fileA
Write content to a file on the specified backend.
Args:
path: File path to write to
content: Content to write to the file
backend: Backend name to use (uses default backend if not specified)
Returns:
Success message
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| content | Yes | ||
| backend | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. It discloses the write operation but omits critical details like whether the file is overwritten or appended, whether paths are created automatically, permissions, or error handling. For a file-writing tool, this is insufficient transparency.
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 reasonably concise but includes a redundant 'Args:' section since the schema already defines parameters. The structure is clear, but could be more streamlined by removing the label and integrating the parameter explanations.
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 and presence of an output schema, the description is adequate but not complete. It mentions a success message return but does not detail the output format or potential error states. The sibling tools list is large, yet no comparisons are provided, leaving the agent to infer boundaries.
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 adds meaningful semantics for all three parameters: path, content, and backend. It clarifies that backend is optional with a default, which is not evident from the schema alone. However, it lacks details on path format or content encoding.
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 action ('Write content') and the resource ('to a file'), and distinguishes from sibling tools like 'read_file' and 'copy_file'. The mention of 'on the specified backend' adds context that differentiates it from generic file operations.
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 mentions the default backend behavior but provides no explicit guidance on when to use this tool versus alternatives like 'copy_file' or 'create_dir'. The agent must infer usage from the tool name and basic purpose, lacking when-not-to-use or prerequisite information.
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.
13 tool updates
v0.1.8- First observed
check_backend_health - First observed
copy_file - First observed
create_dir - First observed
get_backend_stats - First observed
list_backends - First observed
list_files - First observed
read_file - First observed
register_backend - First observed
remove_backend - First observed
rename_file - First observed
set_default_backend - First observed
stat_file - First observed
write_file
TDQS
Scored across 13 tools
Each tool targets a distinct operation: file reading, writing, copying, renaming, listing, directory creation, and backend management. No overlap or ambiguity.
All tools follow a consistent snake_case verb_noun pattern (e.g., write_file, list_backends), making them predictable and easy to understand.
With 13 tools, the server covers both file operations and backend management comprehensively without being bloated.
The file operations cover most CRUD but are missing a delete file tool, which is a significant gap for a file system server. Backend management seems complete.
Maintenance
Related MCP Connectors
Browse, upload, download, and share files in your S3-compatible buckets with delegated roles.
Persistent file storage for AI agents via MCP and curl. Upload, download, and version files.
Manage files and folders directly from your workspace. Read and write files, list directories, cre…
Cloud file relay: chunked uploads, folders, share links, inline text reads, ZIP packing.
Related MCP Servers
- AlicenseBqualityCmaintenanceA Model Context Protocol server that provides seamless access to multiple storage services including S3, Azure Blob Storage, and Google Cloud Storage through Apache OpenDAL™.335Apache 2.0
- AlicenseNot gradedqualityFmaintenanceProvides a standardized way to interact with MinIO object storage, allowing access to text files, binary files, and bucket contents while supporting operations like listing buckets/objects, retrieving objects, and uploading files.6MIT
- FlicenseNot gradedqualityNot gradedmaintenanceProvides unified access to multiple cloud object storage services (Huawei OBS, Alibaba OSS, AWS S3, MinIO) enabling AI assistants to list, search, retrieve, and manage unstructured data across different storage providers.-
- FlicenseAqualityNot gradedmaintenanceEnables unified access to both structured databases (PostgreSQL, MySQL, SQLite, etc.) and unstructured object storage (AWS S3, Alibaba OSS, Huawei OBS, etc.) through a single interface.7-