chuk-mcp-vfs
Provides virtual filesystem workspaces with full file operations (read, write, ls, tree, mkdir, rm, mv, cp, cd, pwd, find, grep) and checkpoint management. Supports multiple storage providers (memory, filesystem, sqlite, s3) with session, user, and shared scopes.
README
chuk-mcp-vfs
MCP server providing virtual filesystem workspaces via the unified namespace architecture.
Features
✅ Unified Architecture - Built on chuk-artifacts namespace system ✅ Context-Aware - Automatic user/session scoping from MCP context ✅ Storage Scopes - SESSION (ephemeral), USER (persistent), SANDBOX (shared) ✅ Pydantic Native - All requests and responses use Pydantic models ✅ Async Native - Fully async/await throughout ✅ Type Safe - Enums and constants instead of magic strings ✅ Multiple Workspaces - Create and manage isolated virtual filesystems ✅ Full VFS Operations - read, write, ls, tree, mkdir, rm, mv, cp, cd, pwd, find, grep ✅ Checkpoints - Save and restore filesystem state at any point ✅ MCP Integration - Expose all operations as MCP tools for AI agents
Architecture
chuk-mcp-vfs → Workspace management + VFS tools
↓ uses
chuk-artifacts → Unified namespace architecture
↓ manages
Namespaces (WORKSPACE) → Each workspace is a namespace
↓ provides
chuk-virtual-fs → Async VFS with multiple storage providers
↓
Storage Provider → memory, filesystem, sqlite, s3
Key Concepts:
- Everything is VFS: Both blobs and workspaces are VFS-backed via namespaces
- Scopes: SESSION (per-conversation), USER (per-user persistent), SANDBOX (shared)
- Context-Aware: user_id and session_id automatically from MCP server context
- Grid Architecture: All namespaces stored in unified grid structure
Installation
# Basic installation
pip install chuk-mcp-vfs
# With FUSE mounting support (Linux/macOS)
pip install chuk-mcp-vfs[mount]
# Development
pip install -e .[dev]
Quick Start
As MCP Server
from chuk_mcp_vfs import run_server
# Start MCP server (stdio mode for Claude Desktop)
run_server()
Programmatic Usage
import asyncio
from chuk_mcp_vfs import (
WorkspaceManager,
ProviderType,
StorageScope,
WriteRequest,
)
from chuk_mcp_vfs.vfs_tools import VFSTools
async def main():
# Initialize manager (uses chuk-artifacts under the hood)
workspace_manager = WorkspaceManager()
tools = VFSTools(workspace_manager)
# Create SESSION-scoped workspace (ephemeral, tied to session)
await workspace_manager.create_workspace(
name="my-workspace",
provider_type=ProviderType.MEMORY,
scope=StorageScope.SESSION, # or USER for persistence
)
# Write file
await tools.write(WriteRequest(
path="/hello.txt",
content="Hello from VFS!"
))
# Read file
result = await tools.read("/hello.txt")
print(result.content)
asyncio.run(main())
MCP Tools
Workspace Management
| Tool | Description |
|---|---|
workspace_create |
Create new workspace with provider (memory, filesystem, sqlite, s3) |
workspace_destroy |
Delete workspace and clean up resources |
workspace_list |
List all workspaces |
workspace_switch |
Switch active workspace |
workspace_info |
Get workspace details |
workspace_mount |
Mount workspace via FUSE (planned) |
workspace_unmount |
Unmount workspace (planned) |
File Operations
| Tool | Description |
|---|---|
read |
Read file contents |
write |
Write file with content |
ls |
List directory contents |
tree |
Show directory tree structure |
mkdir |
Create directory |
rm |
Remove file/directory (with recursive option) |
mv |
Move/rename file/directory |
cp |
Copy file/directory (with recursive option) |
Navigation
| Tool | Description |
|---|---|
cd |
Change current working directory |
pwd |
Print working directory |
find |
Find files by glob pattern |
grep |
Search file contents |
Checkpoints
| Tool | Description |
|---|---|
checkpoint_create |
Create checkpoint of current state |
checkpoint_restore |
Restore from checkpoint |
checkpoint_list |
List all checkpoints |
checkpoint_delete |
Delete checkpoint |
Usage with Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"vfs": {
"command": "chuk-mcp-vfs",
"args": []
}
}
}
Then you can use natural language to interact with the filesystem:
You: Create a workspace called "myproject" and set up a Python project structure
Claude: [Uses workspace_create and mkdir tools]
You: Write a simple Flask app to main.py
Claude: [Uses write tool with Python code]
You: Create a checkpoint called "initial-setup"
Claude: [Uses checkpoint_create]
You: Make changes... actually restore to the checkpoint
Claude: [Uses checkpoint_restore]
Examples
See examples/basic_usage.py for a complete working example.
Storage Scopes
The unified architecture provides three storage scopes:
SESSION Scope (Ephemeral)
from chuk_mcp_vfs.models import StorageScope
# Create session-scoped workspace (default)
await workspace_manager.create_workspace(
name="temp-work",
scope=StorageScope.SESSION, # Tied to current session
)
- Lifetime: Expires when session ends
- Perfect for: Temporary workspaces, caches, current work
- Grid path:
grid/{sandbox}/sess-{session_id}/{namespace_id} - Access: Only accessible from same session
USER Scope (Persistent)
# Create user-scoped workspace
await workspace_manager.create_workspace(
name="my-project",
scope=StorageScope.USER, # Persists across sessions
)
- Lifetime: Persists across sessions
- Perfect for: User projects, personal data
- Grid path:
grid/{sandbox}/user-{user_id}/{namespace_id} - Access: Accessible from any session for the same user
SANDBOX Scope (Shared)
# Create sandbox-scoped workspace
await workspace_manager.create_workspace(
name="shared-templates",
scope=StorageScope.SANDBOX, # Shared across all users
)
- Lifetime: Persists indefinitely
- Perfect for: Templates, shared docs, libraries
- Grid path:
grid/{sandbox}/shared/{namespace_id} - Access: Accessible by all users
Provider Types
from chuk_mcp_vfs.models import ProviderType
# In-memory (fast, temporary)
ProviderType.MEMORY
# Filesystem (persistent)
ProviderType.FILESYSTEM
# SQLite (portable database)
ProviderType.SQLITE
# S3 (cloud storage)
ProviderType.S3
Models (Pydantic)
All requests and responses are Pydantic models:
from chuk_mcp_vfs.models import (
# Workspace models
WorkspaceCreateRequest,
WorkspaceCreateResponse,
WorkspaceInfo,
# File operation models
WriteRequest,
WriteResponse,
ReadResponse,
ListDirectoryResponse,
# Navigation models
FindRequest,
FindResponse,
GrepRequest,
GrepResponse,
# Checkpoint models
CheckpointCreateRequest,
CheckpointCreateResponse,
CheckpointInfo,
)
Development
# Install with dev dependencies
pip install -e .[dev]
# Run tests
pytest
# Run tests with coverage
pytest --cov=chuk_mcp_vfs
# Type checking
mypy src
# Linting
ruff check src
ruff format src
Architecture Details
Workspace Manager
- Thin wrapper around chuk-artifacts ArtifactStore
- Each workspace is a WORKSPACE-type namespace
- Tracks current working directory per workspace
- Context-aware: automatically uses user_id/session_id from MCP context
- Thread-safe workspace operations
Namespace Integration
- All workspaces stored in unified grid architecture
- Automatic scope-based isolation (SESSION/USER/SANDBOX)
- Namespaces provide VFS instances via
get_namespace_vfs() - Grid paths make ownership and scope explicit
Checkpoint Manager
- Wraps
chuk-virtual-fsAsyncSnapshotManager - Provides workspace-scoped checkpoints
- Metadata tracking for each checkpoint
VFS Tools
- Wraps async VFS operations with Pydantic models
- Path resolution relative to current working directory
- Error handling and validation
MCP Integration
- Registers all tools with
chuk-mcp-server - Automatic JSON schema generation from Pydantic models
- Context variables for user/session tracking
- Stdio transport for Claude Desktop
Roadmap
- [x] Core VFS operations
- [x] Workspace management
- [x] Checkpoint system
- [x] Pydantic models
- [x] Basic tests
- [ ] FUSE mounting implementation
- [ ] Template system integration
- [ ] Workspace import/export
- [ ] File watching
- [ ] Permissions system
- [ ] Comprehensive tests
License
MIT - see LICENSE file
Contributing
Contributions welcome! Please ensure:
- All code uses Pydantic models (no dict returns)
- All code is async native
- Use enums/constants instead of magic strings
- Add tests for new features
- Update documentation
Credits
Built on top of:
- chuk-artifacts - Unified namespace architecture
- chuk-virtual-fs - Virtual filesystem engine
- chuk-mcp-server - MCP framework with context management
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.