Skip to main content
Glama
vaayne

omni-fs-mcp

by vaayne
README.md
# Omni-FS MCP Server

An MCP server that provides unified access to multiple file systems simultaneously through OpenDAL.

## Installation

```bash
pip install omni-fs-mcp
```

## Quick Start

### Single Backend

```bash
# 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`:
```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:
```bash
# Stdio (default)
omni-fs-mcp backends.json

# HTTP
omni-fs-mcp --transport http --config backends.json --port 8080
```

## Usage

### Command Options

```bash
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 directories
- `read_file(path, backend=None)` - Read file contents
- `write_file(path, content, backend=None)` - Write to file
- `copy_file(src, dst, src_backend=None, dst_backend=None)` - Copy files
- `rename_file(src, dst, backend=None)` - Rename/move files
- `create_dir(path, backend=None)` - Create directory
- `stat_file(path, backend=None)` - Get file metadata

**Backend Management:**
- `register_backend(name, url, ...)` - Add new backend
- `list_backends()` - Show all backends
- `set_default_backend(name)` - Set default backend
- `remove_backend(name)` - Remove backend
- `check_backend_health(backend=None)` - Check connectivity

## Supported Backends

| Type | URL Example |
|------|-------------|
| Local | `fs://` |
| S3 | `s3://bucket?region=us-east-1&access_key_id=...` |
| WebDAV | `webdav://server.com/path?username=user&password=pass` |
| Memory | `memory://` |
| FTP | `ftp://server.com?username=user&password=pass` |
| HTTP | `https://api.example.com` |

## Examples

### Cross-Backend Copy
```python
# Backup to S3
copy_file("/local/file.txt", "/backup/file.txt",
          src_backend="local", dst_backend="s3-backup")
```

### Runtime Backend Management
```python
# Add temporary backend
register_backend("temp", "memory://", description="Temp storage")

# Use it
write_file("/test.txt", "content", backend="temp")
```

## Development

```bash
git clone <repo>
cd omni-fs-mcp
uv sync

# Run locally
uv run omni-fs-mcp "memory://"
```

## License

MIT

TDQS

A3.6/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a distinct operation: file reading, writing, copying, renaming, listing, directory creation, and backend management. No overlap or ambiguity.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern (e.g., write_file, list_backends), making them predictable and easy to understand.

Tool Count5/5

With 13 tools, the server covers both file operations and backend management comprehensively without being bloated.

Completeness3/5

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

ActivityInactive
ResponsivenessNo issues