airgap-file-bridge 1.0.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,125 @@
1
+ Metadata-Version: 2.4
2
+ Name: airgap-file-bridge
3
+ Version: 1.0.3
4
+ Summary: Bridge your AI assistant to local files — read, write, search, and manage files securely without cloud dependencies
5
+ Author-email: Airgap Fleet <fleet@airgap.io>
6
+ License: MIT
7
+ Classifier: Development Status :: 4 - Beta
8
+ Classifier: Intended Audience :: Developers
9
+ Classifier: License :: OSI Approved :: MIT License
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
14
+ Requires-Python: >=3.11
15
+ Description-Content-Type: text/markdown
16
+ Requires-Dist: fastmcp<4.0,>=3.4
17
+ Requires-Dist: pydantic>=2.10
18
+ Requires-Dist: pydantic-settings>=2.6
19
+ Requires-Dist: structlog>=25.1
20
+ Requires-Dist: watchdog>=4.0
21
+ Provides-Extra: dev
22
+ Requires-Dist: pytest>=8.0; extra == "dev"
23
+ Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
24
+ Requires-Dist: pytest-cov>=5.0; extra == "dev"
25
+ Requires-Dist: ruff>=0.6; extra == "dev"
26
+ Requires-Dist: mypy>=1.10; extra == "dev"
27
+ Requires-Dist: uv>=0.5; extra == "dev"
28
+ Requires-Dist: types-pyyaml>=6.0; extra == "dev"
29
+ Requires-Dist: types-requests>=2.32; extra == "dev"
30
+
31
+ # File Bridge
32
+
33
+ Bridge your AI assistant to local files — read, write, search, and manage files securely without cloud dependencies.
34
+
35
+ ## Quick Start (uvx — no install needed)
36
+
37
+ ```bash
38
+ uvx airgap-file-bridge /path/to/your/files
39
+ ```
40
+
41
+ ## Installation
42
+
43
+ ```bash
44
+ pip install airgap-file-bridge
45
+ ```
46
+
47
+ ## Usage
48
+
49
+ ### CLI (Direct)
50
+ ```bash
51
+ airgap-file-bridge
52
+ ```
53
+
54
+ ### MCP Client Config (Claude Desktop, Cursor, VS Code)
55
+ ```json
56
+ {
57
+ "mcpServers": {
58
+ "files": {
59
+ "command": "airgap-file-bridge",
60
+ "env": {
61
+ "FILE_BRIDGE_ROOT_PATH": "C:/path/to/files"
62
+ }
63
+ }
64
+ }
65
+ }
66
+ ```
67
+
68
+ ### DXT (Claude Desktop 1-Click)
69
+ Download `airgap-file-bridge-1.0.2.dxt` from [Releases](https://github.com/airgap-fleet/file-bridge/releases) → drag into Claude Desktop.
70
+
71
+ ## Configuration
72
+
73
+ | Environment Variable | Default | Description |
74
+ |---------------------|---------|-------------|
75
+ | `FILE_BRIDGE_ROOT_PATH` | Current directory | Root directory for file operations |
76
+ | `FILE_BRIDGE_MAX_FILE_SIZE` | 10MB | Max file size for operations |
77
+ | `FILE_BRIDGE_FOLLOW_SYMLINKS` | false | Follow symlinks |
78
+ | `FILE_BRIDGE_ALLOW_ABSOLUTE_PATHS` | false | Allow absolute paths outside root |
79
+ | `FILE_BRIDGE_DEFAULT_ENCODING` | utf-8 | Text encoding |
80
+
81
+ ## Available Tools
82
+
83
+ | Tool | Description |
84
+ |------|-------------|
85
+ | `read_file` | Read a file safely with size limits and binary detection |
86
+ | `write_file` | Write a file atomically with size limits |
87
+ | `list_dir` | List directory contents with optional filtering and recursion |
88
+ | `search_files` | Search file contents using ripgrep |
89
+ | `glob` | Find files matching a glob pattern |
90
+ | `patch_file` | Apply a targeted patch to a file (find and replace) |
91
+
92
+ ## Transport Modes
93
+
94
+ - **stdio** (default) — For local MCP clients (Claude Desktop, etc.)
95
+ - **sse** — Server-Sent Events for HTTP clients
96
+ - **http** — Streamable HTTP for modern clients
97
+
98
+ Set via `FILE_BRIDGE_TRANSPORT` environment variable.
99
+
100
+ ## Why File Bridge?
101
+
102
+ - **Local-first** — Your files never leave your machine
103
+ - **Air-gapped ready** — No cloud dependencies, works offline
104
+ - **Security hardened** — Path traversal protection, size limits, symlink control, binary detection
105
+ - **Multiple transports** — stdio, SSE, Streamable HTTP
106
+ - **Ripgrep powered** — Fast regex search with context
107
+ - **uvx compatible** — Zero-install usage like the competition
108
+
109
+ ## Development
110
+
111
+ ```bash
112
+ # Install with dev dependencies
113
+ pip install -e ".[dev]"
114
+
115
+ # Run tests
116
+ uv run pytest -v
117
+
118
+ # Check code quality
119
+ uv run ruff check .
120
+ uv run mypy .
121
+ ```
122
+
123
+ ## License
124
+
125
+ MIT
@@ -0,0 +1,95 @@
1
+ # File Bridge
2
+
3
+ Bridge your AI assistant to local files — read, write, search, and manage files securely without cloud dependencies.
4
+
5
+ ## Quick Start (uvx — no install needed)
6
+
7
+ ```bash
8
+ uvx airgap-file-bridge /path/to/your/files
9
+ ```
10
+
11
+ ## Installation
12
+
13
+ ```bash
14
+ pip install airgap-file-bridge
15
+ ```
16
+
17
+ ## Usage
18
+
19
+ ### CLI (Direct)
20
+ ```bash
21
+ airgap-file-bridge
22
+ ```
23
+
24
+ ### MCP Client Config (Claude Desktop, Cursor, VS Code)
25
+ ```json
26
+ {
27
+ "mcpServers": {
28
+ "files": {
29
+ "command": "airgap-file-bridge",
30
+ "env": {
31
+ "FILE_BRIDGE_ROOT_PATH": "C:/path/to/files"
32
+ }
33
+ }
34
+ }
35
+ }
36
+ ```
37
+
38
+ ### DXT (Claude Desktop 1-Click)
39
+ Download `airgap-file-bridge-1.0.2.dxt` from [Releases](https://github.com/airgap-fleet/file-bridge/releases) → drag into Claude Desktop.
40
+
41
+ ## Configuration
42
+
43
+ | Environment Variable | Default | Description |
44
+ |---------------------|---------|-------------|
45
+ | `FILE_BRIDGE_ROOT_PATH` | Current directory | Root directory for file operations |
46
+ | `FILE_BRIDGE_MAX_FILE_SIZE` | 10MB | Max file size for operations |
47
+ | `FILE_BRIDGE_FOLLOW_SYMLINKS` | false | Follow symlinks |
48
+ | `FILE_BRIDGE_ALLOW_ABSOLUTE_PATHS` | false | Allow absolute paths outside root |
49
+ | `FILE_BRIDGE_DEFAULT_ENCODING` | utf-8 | Text encoding |
50
+
51
+ ## Available Tools
52
+
53
+ | Tool | Description |
54
+ |------|-------------|
55
+ | `read_file` | Read a file safely with size limits and binary detection |
56
+ | `write_file` | Write a file atomically with size limits |
57
+ | `list_dir` | List directory contents with optional filtering and recursion |
58
+ | `search_files` | Search file contents using ripgrep |
59
+ | `glob` | Find files matching a glob pattern |
60
+ | `patch_file` | Apply a targeted patch to a file (find and replace) |
61
+
62
+ ## Transport Modes
63
+
64
+ - **stdio** (default) — For local MCP clients (Claude Desktop, etc.)
65
+ - **sse** — Server-Sent Events for HTTP clients
66
+ - **http** — Streamable HTTP for modern clients
67
+
68
+ Set via `FILE_BRIDGE_TRANSPORT` environment variable.
69
+
70
+ ## Why File Bridge?
71
+
72
+ - **Local-first** — Your files never leave your machine
73
+ - **Air-gapped ready** — No cloud dependencies, works offline
74
+ - **Security hardened** — Path traversal protection, size limits, symlink control, binary detection
75
+ - **Multiple transports** — stdio, SSE, Streamable HTTP
76
+ - **Ripgrep powered** — Fast regex search with context
77
+ - **uvx compatible** — Zero-install usage like the competition
78
+
79
+ ## Development
80
+
81
+ ```bash
82
+ # Install with dev dependencies
83
+ pip install -e ".[dev]"
84
+
85
+ # Run tests
86
+ uv run pytest -v
87
+
88
+ # Check code quality
89
+ uv run ruff check .
90
+ uv run mypy .
91
+ ```
92
+
93
+ ## License
94
+
95
+ MIT
@@ -0,0 +1,100 @@
1
+ [project]
2
+ name = "airgap-file-bridge"
3
+ version = "1.0.3"
4
+ description = "Bridge your AI assistant to local files — read, write, search, and manage files securely without cloud dependencies"
5
+ readme = "README.md"
6
+ requires-python = ">=3.11"
7
+ license = {text = "MIT"}
8
+ authors = [{name = "Airgap Fleet", email = "fleet@airgap.io"}]
9
+ classifiers = [
10
+ "Development Status :: 4 - Beta",
11
+ "Intended Audience :: Developers",
12
+ "License :: OSI Approved :: MIT License",
13
+ "Programming Language :: Python :: 3",
14
+ "Programming Language :: Python :: 3.11",
15
+ "Programming Language :: Python :: 3.12",
16
+ "Programming Language :: Python :: 3.13",
17
+ ]
18
+ dependencies = [
19
+ "fastmcp>=3.4,<4.0",
20
+ "pydantic>=2.10",
21
+ "pydantic-settings>=2.6",
22
+ "structlog>=25.1",
23
+ "watchdog>=4.0",
24
+ ]
25
+
26
+ [project.scripts]
27
+ airgap-file-bridge = "filesystem_mcp.server:main"
28
+
29
+ [project.optional-dependencies]
30
+ dev = [
31
+ "pytest>=8.0",
32
+ "pytest-asyncio>=0.23",
33
+ "pytest-cov>=5.0",
34
+ "ruff>=0.6",
35
+ "mypy>=1.10",
36
+ "uv>=0.5",
37
+ "types-pyyaml>=6.0",
38
+ "types-requests>=2.32",
39
+ ]
40
+
41
+ [build-system]
42
+ requires = ["setuptools>=68", "wheel"]
43
+ build-backend = "setuptools.build_meta"
44
+
45
+ [tool.setuptools.packages.find]
46
+ where = ["src"]
47
+
48
+ [tool.ruff]
49
+ target-version = "py311"
50
+ line-length = 100
51
+ select = ["E", "F", "I", "UP", "B", "C4", "SIM", "TID", "RUF", "PTH", "ERA", "ARG", "AIR", "DTZ", "FA", "ISC", "ICN", "PIE", "PT", "TCH", "TRY", "RET", "ASYNC", "NPY", "PL", "T20", "W", "N", "INP", "S", "BLE"]
52
+ ignore = [
53
+ "TRY003",
54
+ "PLC0415",
55
+ "PLR2004",
56
+ "ARG002",
57
+ "SIM102",
58
+ "INP001",
59
+ "F401",
60
+ "W292",
61
+ "S603",
62
+ "PLW1510",
63
+ "PLW0603",
64
+ ]
65
+ fixable = ["ALL"]
66
+ unfixable = []
67
+
68
+ [tool.ruff.lint.per-file-ignores]
69
+ "tests/*" = ["S101", "S106", "S311"]
70
+
71
+ [tool.mypy]
72
+ python_version = "3.11"
73
+ warn_return_any = true
74
+ warn_unused_configs = true
75
+ disallow_untyped_defs = false
76
+ ignore_missing_imports = false
77
+ explicit_package_bases = true
78
+ package_root = "src"
79
+
80
+ [tool.pytest.ini_options]
81
+ asyncio_mode = "auto"
82
+ testpaths = ["tests"]
83
+ python_files = ["test_*.py"]
84
+ python_functions = ["test_*"]
85
+ addopts = "-v --tb=short --cov=filesystem_mcp --cov-fail-under=70 -m \"not integration\""
86
+ markers = [
87
+ "integration: marks tests as integration tests requiring filesystem access",
88
+ ]
89
+
90
+ [tool.coverage.run]
91
+ source = ["filesystem_mcp"]
92
+
93
+ [tool.coverage.report]
94
+ exclude_lines = [
95
+ "pragma: no cover",
96
+ "def __repr__",
97
+ "raise AssertionError",
98
+ "raise NotImplementedError",
99
+ "if __name__ == .__main__.:",
100
+ ]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,125 @@
1
+ Metadata-Version: 2.4
2
+ Name: airgap-file-bridge
3
+ Version: 1.0.3
4
+ Summary: Bridge your AI assistant to local files — read, write, search, and manage files securely without cloud dependencies
5
+ Author-email: Airgap Fleet <fleet@airgap.io>
6
+ License: MIT
7
+ Classifier: Development Status :: 4 - Beta
8
+ Classifier: Intended Audience :: Developers
9
+ Classifier: License :: OSI Approved :: MIT License
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
14
+ Requires-Python: >=3.11
15
+ Description-Content-Type: text/markdown
16
+ Requires-Dist: fastmcp<4.0,>=3.4
17
+ Requires-Dist: pydantic>=2.10
18
+ Requires-Dist: pydantic-settings>=2.6
19
+ Requires-Dist: structlog>=25.1
20
+ Requires-Dist: watchdog>=4.0
21
+ Provides-Extra: dev
22
+ Requires-Dist: pytest>=8.0; extra == "dev"
23
+ Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
24
+ Requires-Dist: pytest-cov>=5.0; extra == "dev"
25
+ Requires-Dist: ruff>=0.6; extra == "dev"
26
+ Requires-Dist: mypy>=1.10; extra == "dev"
27
+ Requires-Dist: uv>=0.5; extra == "dev"
28
+ Requires-Dist: types-pyyaml>=6.0; extra == "dev"
29
+ Requires-Dist: types-requests>=2.32; extra == "dev"
30
+
31
+ # File Bridge
32
+
33
+ Bridge your AI assistant to local files — read, write, search, and manage files securely without cloud dependencies.
34
+
35
+ ## Quick Start (uvx — no install needed)
36
+
37
+ ```bash
38
+ uvx airgap-file-bridge /path/to/your/files
39
+ ```
40
+
41
+ ## Installation
42
+
43
+ ```bash
44
+ pip install airgap-file-bridge
45
+ ```
46
+
47
+ ## Usage
48
+
49
+ ### CLI (Direct)
50
+ ```bash
51
+ airgap-file-bridge
52
+ ```
53
+
54
+ ### MCP Client Config (Claude Desktop, Cursor, VS Code)
55
+ ```json
56
+ {
57
+ "mcpServers": {
58
+ "files": {
59
+ "command": "airgap-file-bridge",
60
+ "env": {
61
+ "FILE_BRIDGE_ROOT_PATH": "C:/path/to/files"
62
+ }
63
+ }
64
+ }
65
+ }
66
+ ```
67
+
68
+ ### DXT (Claude Desktop 1-Click)
69
+ Download `airgap-file-bridge-1.0.2.dxt` from [Releases](https://github.com/airgap-fleet/file-bridge/releases) → drag into Claude Desktop.
70
+
71
+ ## Configuration
72
+
73
+ | Environment Variable | Default | Description |
74
+ |---------------------|---------|-------------|
75
+ | `FILE_BRIDGE_ROOT_PATH` | Current directory | Root directory for file operations |
76
+ | `FILE_BRIDGE_MAX_FILE_SIZE` | 10MB | Max file size for operations |
77
+ | `FILE_BRIDGE_FOLLOW_SYMLINKS` | false | Follow symlinks |
78
+ | `FILE_BRIDGE_ALLOW_ABSOLUTE_PATHS` | false | Allow absolute paths outside root |
79
+ | `FILE_BRIDGE_DEFAULT_ENCODING` | utf-8 | Text encoding |
80
+
81
+ ## Available Tools
82
+
83
+ | Tool | Description |
84
+ |------|-------------|
85
+ | `read_file` | Read a file safely with size limits and binary detection |
86
+ | `write_file` | Write a file atomically with size limits |
87
+ | `list_dir` | List directory contents with optional filtering and recursion |
88
+ | `search_files` | Search file contents using ripgrep |
89
+ | `glob` | Find files matching a glob pattern |
90
+ | `patch_file` | Apply a targeted patch to a file (find and replace) |
91
+
92
+ ## Transport Modes
93
+
94
+ - **stdio** (default) — For local MCP clients (Claude Desktop, etc.)
95
+ - **sse** — Server-Sent Events for HTTP clients
96
+ - **http** — Streamable HTTP for modern clients
97
+
98
+ Set via `FILE_BRIDGE_TRANSPORT` environment variable.
99
+
100
+ ## Why File Bridge?
101
+
102
+ - **Local-first** — Your files never leave your machine
103
+ - **Air-gapped ready** — No cloud dependencies, works offline
104
+ - **Security hardened** — Path traversal protection, size limits, symlink control, binary detection
105
+ - **Multiple transports** — stdio, SSE, Streamable HTTP
106
+ - **Ripgrep powered** — Fast regex search with context
107
+ - **uvx compatible** — Zero-install usage like the competition
108
+
109
+ ## Development
110
+
111
+ ```bash
112
+ # Install with dev dependencies
113
+ pip install -e ".[dev]"
114
+
115
+ # Run tests
116
+ uv run pytest -v
117
+
118
+ # Check code quality
119
+ uv run ruff check .
120
+ uv run mypy .
121
+ ```
122
+
123
+ ## License
124
+
125
+ MIT
@@ -0,0 +1,17 @@
1
+ README.md
2
+ pyproject.toml
3
+ src/airgap_file_bridge.egg-info/PKG-INFO
4
+ src/airgap_file_bridge.egg-info/SOURCES.txt
5
+ src/airgap_file_bridge.egg-info/dependency_links.txt
6
+ src/airgap_file_bridge.egg-info/entry_points.txt
7
+ src/airgap_file_bridge.egg-info/requires.txt
8
+ src/airgap_file_bridge.egg-info/top_level.txt
9
+ src/filesystem_mcp/__init__.py
10
+ src/filesystem_mcp/core.py
11
+ src/filesystem_mcp/models.py
12
+ src/filesystem_mcp/py.typed
13
+ src/filesystem_mcp/server.py
14
+ src/filesystem_mcp/tools/__init__.py
15
+ tests/test_core.py
16
+ tests/test_integration.py
17
+ tests/test_models.py
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ airgap-file-bridge = filesystem_mcp.server:main
@@ -0,0 +1,15 @@
1
+ fastmcp<4.0,>=3.4
2
+ pydantic>=2.10
3
+ pydantic-settings>=2.6
4
+ structlog>=25.1
5
+ watchdog>=4.0
6
+
7
+ [dev]
8
+ pytest>=8.0
9
+ pytest-asyncio>=0.23
10
+ pytest-cov>=5.0
11
+ ruff>=0.6
12
+ mypy>=1.10
13
+ uv>=0.5
14
+ types-pyyaml>=6.0
15
+ types-requests>=2.32
@@ -0,0 +1,6 @@
1
+ """Filesystem MCP Server package."""
2
+
3
+ from filesystem_mcp.server import mcp
4
+
5
+ __version__ = "1.0.0"
6
+ __all__ = ["mcp"]