urirun-connector-mcp-filesystem
Sandboxed filesystem connector for ifURI / urirun,in the spirit of MCP filesystem servers. Query routes list/read/stat/findduplicates under one root. The guarded move command is also sandboxed anddefaults to dry-run.
Catalog page: https://connect.ifuri.com/connectors/mcp-filesystem
Routes
| URI | Operation |
|---|---|
fs://host/dir/query/list |
list a directory |
fs://host/file/query/read |
read a text file (size-capped) |
fs://host/file/query/blob |
read a binary file as base64 (size-capped) |
fs://host/path/query/stat |
stat a path |
fs://host/dir/command/prune_empty |
remove empty directories under a sandboxed path |
fs://host/duplicates/query/find |
find exact duplicate files by SHA-256 |
fs://host/file/command/write_text |
write a UTF-8 text file under the sandbox root |
fs://host/file/command/write_blob |
write a base64-decoded binary file under the sandbox root |
fs://host/file/command/move_to_dir |
move one file into a sandboxed directory |
fs://host/file/command/move |
move or rename one file to a sandboxed path |
Sandbox
Everything resolves under IFURI_FS_ROOT (default: the current workingdirectory). Paths that escape the root are rejected with ok: false.Query routes never write or delete. fs://host/dir/command/prune_empty,fs://host/file/command/write_text, fs://host/file/command/write_blob,fs://host/file/command/move_to_dir andfs://host/file/command/move are the mutating routes; they default todry_run: true. File writes and moves do not overwrite unlessoverwrite: true.
Install
pip install "urirun-connector-mcp-filesystem @ git+https://github.com/if-uri/[email protected]"
# or, from the hub:
urirun connectors install mcp-filesystem --execute
Use
export IFURI_FS_ROOT="$PWD"
urirun-mcp-filesystem bindings > bindings.json
urirun compile bindings.json --out registry.json
urirun run 'fs://host/dir/query/list' registry.json \
--payload '{"path":"."}' --execute --allow 'fs://host/*'
urirun run 'fs://host/duplicates/query/find' registry.json \
--payload '{"path":".","extensions":"pdf,png,jpg"}' \
--execute --allow 'fs://host/*'
urirun run 'fs://host/file/query/blob' registry.json \
--payload '{"path":"2026.05/invoice.pdf","max_bytes":10485760}' \
--execute --allow 'fs://host/*'
urirun run 'fs://host/file/command/move_to_dir' registry.json \
--payload '{"path":"2026.05/manual.pdf","target_dir":"no_invoice","dry_run":true}' \
--execute --allow 'fs://host/*'
urirun run 'fs://host/file/command/move' registry.json \
--payload '{"path":"2026.05/_by_supplier/saas/me/invoice.pdf","target_path":"2026.05/2026.05.12-saas-invoice.pdf","dry_run":true}' \
--execute --allow 'fs://host/*'
urirun run 'fs://host/dir/command/prune_empty' registry.json \
--payload '{"path":".","exclude":"no_invoice","dry_run":true}' \
--execute --allow 'fs://host/*'
urirun run 'fs://host/file/command/write_text' registry.json \
--payload '{"path":"index.php","content":"<?php echo \"ok\";","dry_run":true}' \
--execute --allow 'fs://host/*'
urirun run 'fs://host/file/command/write_blob' registry.json \
--payload '{"path":"2026-06/invoice.pdf","bytes_b64":"JVBERg==","dry_run":true}' \
--execute --allow 'fs://host/*'
After installation, urirun can discover this connector automatically throughthe urirun.bindings entry-point group:
urirun discover --out connectors.bindings.json --registry-out connectors.registry.json
urirun list --entry-points
The connector projects to MCP tools and A2A skills like any other urirunconnector (python3 -m urirun.v2_mcp tools registry.json).
License
Released under the terms in LICENSE.