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.
- airgap_file_bridge-1.0.3/PKG-INFO +125 -0
- airgap_file_bridge-1.0.3/README.md +95 -0
- airgap_file_bridge-1.0.3/pyproject.toml +100 -0
- airgap_file_bridge-1.0.3/setup.cfg +4 -0
- airgap_file_bridge-1.0.3/src/airgap_file_bridge.egg-info/PKG-INFO +125 -0
- airgap_file_bridge-1.0.3/src/airgap_file_bridge.egg-info/SOURCES.txt +17 -0
- airgap_file_bridge-1.0.3/src/airgap_file_bridge.egg-info/dependency_links.txt +1 -0
- airgap_file_bridge-1.0.3/src/airgap_file_bridge.egg-info/entry_points.txt +2 -0
- airgap_file_bridge-1.0.3/src/airgap_file_bridge.egg-info/requires.txt +15 -0
- airgap_file_bridge-1.0.3/src/airgap_file_bridge.egg-info/top_level.txt +1 -0
- airgap_file_bridge-1.0.3/src/filesystem_mcp/__init__.py +6 -0
- airgap_file_bridge-1.0.3/src/filesystem_mcp/core.py +463 -0
- airgap_file_bridge-1.0.3/src/filesystem_mcp/models.py +260 -0
- airgap_file_bridge-1.0.3/src/filesystem_mcp/py.typed +0 -0
- airgap_file_bridge-1.0.3/src/filesystem_mcp/server.py +150 -0
- airgap_file_bridge-1.0.3/src/filesystem_mcp/tools/__init__.py +38 -0
- airgap_file_bridge-1.0.3/tests/test_core.py +448 -0
- airgap_file_bridge-1.0.3/tests/test_integration.py +189 -0
- airgap_file_bridge-1.0.3/tests/test_models.py +65 -0
|
@@ -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,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 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
filesystem_mcp
|