lathe-mcp 0.1.0__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,45 @@
1
+ name: Test
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - uses: actions/setup-python@v5
17
+ with:
18
+ python-version: "3.12"
19
+
20
+ - name: Install external deps
21
+ run: |
22
+ sudo apt-get update
23
+ sudo apt-get install -y ffmpeg tesseract-ocr ghostscript
24
+
25
+ - name: Install Python deps
26
+ run: |
27
+ pip install -e ".[test]"
28
+ pip install pip-audit
29
+
30
+ - name: Generate test fixtures
31
+ run: python tests/generate_fixtures.py
32
+
33
+ - name: Run tests
34
+ run: pytest -v --cov=lathe --cov-report=xml --cov-fail-under=55
35
+
36
+ - name: Security audit
37
+ run: pip-audit
38
+
39
+ - name: Leakage scan
40
+ run: |
41
+ ! grep -ri "charlieseay\|seaynicroute\|192\.168\.0" src/ || (echo "LEAK DETECTED" && exit 1)
42
+
43
+ - name: Path traversal audit
44
+ run: |
45
+ ! grep -rn "os\.system\|subprocess\.call\|subprocess\.Popen.*shell=True" src/ || (echo "UNSAFE SHELL DETECTED" && exit 1)
@@ -0,0 +1,14 @@
1
+ __pycache__
2
+ *.pyc
3
+ .venv/
4
+ dist/
5
+ *.egg-info
6
+ .pytest_cache
7
+ .coverage
8
+ htmlcov/
9
+ tests/fixtures/*.png
10
+ tests/fixtures/*.jpg
11
+ tests/fixtures/*.wav
12
+ tests/fixtures/*.mp3
13
+ tests/fixtures/*.mp4
14
+ tests/fixtures/*.pdf
@@ -0,0 +1,6 @@
1
+ Copyright (c) 2026 Seaynic Labs LLC. All rights reserved.
2
+
3
+ This software is proprietary and confidential. Unauthorized copying, distribution,
4
+ modification, or use of this software, via any medium, is strictly prohibited.
5
+
6
+ A valid license is required for use. See https://seayniclabs.com for licensing terms.
@@ -0,0 +1,198 @@
1
+ Metadata-Version: 2.4
2
+ Name: lathe-mcp
3
+ Version: 0.1.0
4
+ Summary: File and media processing MCP server — resize, convert, optimize, extract.
5
+ Project-URL: Homepage, https://seayniclabs.com
6
+ Project-URL: Repository, https://github.com/seayniclabs/lathe
7
+ Author-email: Charlie Seay <charlie@seayniclabs.com>
8
+ License-Expression: LicenseRef-Proprietary
9
+ License-File: LICENSE
10
+ Keywords: audio,file-processing,image,mcp,ocr,pdf,video
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: Other/Proprietary License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Topic :: Multimedia :: Graphics
17
+ Classifier: Topic :: Multimedia :: Sound/Audio :: Conversion
18
+ Classifier: Topic :: Text Processing
19
+ Requires-Python: >=3.12
20
+ Requires-Dist: httpx
21
+ Requires-Dist: mcp[cli]
22
+ Requires-Dist: pillow
23
+ Provides-Extra: full
24
+ Requires-Dist: ffmpeg-python; extra == 'full'
25
+ Requires-Dist: pypdf; extra == 'full'
26
+ Requires-Dist: pytesseract; extra == 'full'
27
+ Provides-Extra: test
28
+ Requires-Dist: pip-audit; extra == 'test'
29
+ Requires-Dist: pypdf; extra == 'test'
30
+ Requires-Dist: pytest; extra == 'test'
31
+ Requires-Dist: pytest-cov; extra == 'test'
32
+ Description-Content-Type: text/markdown
33
+
34
+ # Lathe — File & Media Processing MCP Server
35
+
36
+ Transforming raw files into precision output — the Swiss army knife for file processing.
37
+
38
+ ![License: Proprietary](https://img.shields.io/badge/license-proprietary-D97706)
39
+
40
+ ---
41
+
42
+ ## What It Does
43
+
44
+ Lathe is an MCP server that gives AI assistants direct access to file and media processing operations. 16 tools across four categories handle the most common file transformation tasks: image manipulation, PDF operations, audio/video processing, and OCR text extraction.
45
+
46
+ Install the core package for image processing, or install with extras to unlock PDF, media, and OCR capabilities.
47
+
48
+ ---
49
+
50
+ ## Tool Reference
51
+
52
+ ### Image
53
+
54
+ | Tool | Description | Key Parameters |
55
+ |------|-------------|----------------|
56
+ | `image_info` | Get image metadata (dimensions, format, mode, EXIF) | `input_path` |
57
+ | `image_resize` | Resize with aspect ratio preservation | `input_path`, `output_path`, `width`, `height`, `percentage` |
58
+ | `image_convert` | Convert format (png, jpeg, webp, avif, bmp) | `input_path`, `output_path`, `format` |
59
+ | `image_optimize` | Optimize for web delivery | `input_path`, `output_path`, `quality`, `strip_metadata` |
60
+ | `image_crop` | Crop a rectangular region | `input_path`, `output_path`, `x`, `y`, `width`, `height` |
61
+ | `image_thumbnail` | Generate a square-fit thumbnail | `input_path`, `output_path`, `size` |
62
+
63
+ ### PDF
64
+
65
+ | Tool | Description | Key Parameters |
66
+ |------|-------------|----------------|
67
+ | `pdf_info` | Get PDF metadata (pages, title, author, encryption) | `input_path` |
68
+ | `pdf_extract_text` | Extract text, with OCR fallback | `input_path`, `pages` |
69
+ | `pdf_merge` | Merge multiple PDFs into one | `input_paths`, `output_path` |
70
+ | `pdf_to_images` | Convert pages to images (requires ghostscript) | `input_path`, `output_dir`, `pages`, `format` |
71
+
72
+ ### Audio / Video
73
+
74
+ | Tool | Description | Key Parameters |
75
+ |------|-------------|----------------|
76
+ | `audio_convert` | Convert audio format (mp3, wav, flac, aac, ogg) | `input_path`, `output_path`, `format` |
77
+ | `audio_info` | Get audio metadata (duration, bitrate, sample rate) | `input_path` |
78
+ | `video_thumbnail` | Extract a frame from video as image | `input_path`, `output_path`, `timestamp` |
79
+ | `video_info` | Get video metadata (duration, resolution, codec) | `input_path` |
80
+
81
+ ### OCR
82
+
83
+ | Tool | Description | Key Parameters |
84
+ |------|-------------|----------------|
85
+ | `ocr_image` | Extract text from image via Tesseract | `input_path` |
86
+
87
+ ### Utility
88
+
89
+ | Tool | Description | Key Parameters |
90
+ |------|-------------|----------------|
91
+ | `health` | Server status, version, dependency availability | — |
92
+
93
+ ---
94
+
95
+ ## Installation
96
+
97
+ Core install (image tools only):
98
+
99
+ ```bash
100
+ pip install lathe-mcp
101
+ ```
102
+
103
+ Full install (PDF, audio/video, OCR):
104
+
105
+ ```bash
106
+ pip install "lathe-mcp[full]"
107
+ ```
108
+
109
+ ### System Dependencies
110
+
111
+ Some tools require external binaries. Install only what you need:
112
+
113
+ | Dependency | Required For | Install |
114
+ |------------|-------------|---------|
115
+ | ffmpeg | Audio/video tools | `brew install ffmpeg` / `apt install ffmpeg` |
116
+ | tesseract | OCR tools | `brew install tesseract` / `apt install tesseract-ocr` |
117
+ | ghostscript | `pdf_to_images` | `brew install ghostscript` / `apt install ghostscript` |
118
+
119
+ The `health` tool reports which dependencies are available at runtime.
120
+
121
+ ---
122
+
123
+ ## Usage
124
+
125
+ Run the server directly:
126
+
127
+ ```bash
128
+ lathe
129
+ ```
130
+
131
+ Or via the MCP CLI:
132
+
133
+ ```bash
134
+ mcp run lathe
135
+ ```
136
+
137
+ ### Claude Code
138
+
139
+ ```bash
140
+ claude mcp add lathe -- /path/to/venv/bin/lathe
141
+ ```
142
+
143
+ ### Claude Desktop
144
+
145
+ Add to your Claude Desktop config (`claude_desktop_config.json`):
146
+
147
+ ```json
148
+ {
149
+ "mcpServers": {
150
+ "lathe": {
151
+ "command": "/path/to/venv/bin/lathe",
152
+ "env": {
153
+ "LATHE_WORKING_DIR": "/path/to/allowed/directory"
154
+ }
155
+ }
156
+ }
157
+ }
158
+ ```
159
+
160
+ ---
161
+
162
+ ## Configuration
163
+
164
+ | Variable | Description | Default |
165
+ |----------|-------------|---------|
166
+ | `LATHE_WORKING_DIR` | Root directory for all file operations | Current working directory |
167
+
168
+ All input and output paths are resolved relative to and constrained within `LATHE_WORKING_DIR`.
169
+
170
+ ---
171
+
172
+ ## Security
173
+
174
+ - **Sandboxed file access** — all paths validated against `LATHE_WORKING_DIR`
175
+ - **Path traversal protection** — `../` and absolute paths outside the sandbox are rejected
176
+ - **Symlink escape detection** — symlinks resolving outside the working directory are blocked
177
+ - **Decompression bomb guard** — Pillow's built-in protections are active
178
+ - **File size limits** — 500 MB maximum per input file
179
+
180
+ ---
181
+
182
+ ## Development
183
+
184
+ ```bash
185
+ git clone https://github.com/seayniclabs/lathe.git
186
+ cd lathe
187
+ python -m venv .venv && source .venv/bin/activate
188
+ pip install -e ".[test,full]"
189
+ python -m pytest tests/ -q
190
+ ```
191
+
192
+ ---
193
+
194
+ ## License
195
+
196
+ Proprietary. Copyright (c) 2026 Seaynic Labs LLC. All rights reserved.
197
+
198
+ See [LICENSE](LICENSE) for details.
@@ -0,0 +1,165 @@
1
+ # Lathe — File & Media Processing MCP Server
2
+
3
+ Transforming raw files into precision output — the Swiss army knife for file processing.
4
+
5
+ ![License: Proprietary](https://img.shields.io/badge/license-proprietary-D97706)
6
+
7
+ ---
8
+
9
+ ## What It Does
10
+
11
+ Lathe is an MCP server that gives AI assistants direct access to file and media processing operations. 16 tools across four categories handle the most common file transformation tasks: image manipulation, PDF operations, audio/video processing, and OCR text extraction.
12
+
13
+ Install the core package for image processing, or install with extras to unlock PDF, media, and OCR capabilities.
14
+
15
+ ---
16
+
17
+ ## Tool Reference
18
+
19
+ ### Image
20
+
21
+ | Tool | Description | Key Parameters |
22
+ |------|-------------|----------------|
23
+ | `image_info` | Get image metadata (dimensions, format, mode, EXIF) | `input_path` |
24
+ | `image_resize` | Resize with aspect ratio preservation | `input_path`, `output_path`, `width`, `height`, `percentage` |
25
+ | `image_convert` | Convert format (png, jpeg, webp, avif, bmp) | `input_path`, `output_path`, `format` |
26
+ | `image_optimize` | Optimize for web delivery | `input_path`, `output_path`, `quality`, `strip_metadata` |
27
+ | `image_crop` | Crop a rectangular region | `input_path`, `output_path`, `x`, `y`, `width`, `height` |
28
+ | `image_thumbnail` | Generate a square-fit thumbnail | `input_path`, `output_path`, `size` |
29
+
30
+ ### PDF
31
+
32
+ | Tool | Description | Key Parameters |
33
+ |------|-------------|----------------|
34
+ | `pdf_info` | Get PDF metadata (pages, title, author, encryption) | `input_path` |
35
+ | `pdf_extract_text` | Extract text, with OCR fallback | `input_path`, `pages` |
36
+ | `pdf_merge` | Merge multiple PDFs into one | `input_paths`, `output_path` |
37
+ | `pdf_to_images` | Convert pages to images (requires ghostscript) | `input_path`, `output_dir`, `pages`, `format` |
38
+
39
+ ### Audio / Video
40
+
41
+ | Tool | Description | Key Parameters |
42
+ |------|-------------|----------------|
43
+ | `audio_convert` | Convert audio format (mp3, wav, flac, aac, ogg) | `input_path`, `output_path`, `format` |
44
+ | `audio_info` | Get audio metadata (duration, bitrate, sample rate) | `input_path` |
45
+ | `video_thumbnail` | Extract a frame from video as image | `input_path`, `output_path`, `timestamp` |
46
+ | `video_info` | Get video metadata (duration, resolution, codec) | `input_path` |
47
+
48
+ ### OCR
49
+
50
+ | Tool | Description | Key Parameters |
51
+ |------|-------------|----------------|
52
+ | `ocr_image` | Extract text from image via Tesseract | `input_path` |
53
+
54
+ ### Utility
55
+
56
+ | Tool | Description | Key Parameters |
57
+ |------|-------------|----------------|
58
+ | `health` | Server status, version, dependency availability | — |
59
+
60
+ ---
61
+
62
+ ## Installation
63
+
64
+ Core install (image tools only):
65
+
66
+ ```bash
67
+ pip install lathe-mcp
68
+ ```
69
+
70
+ Full install (PDF, audio/video, OCR):
71
+
72
+ ```bash
73
+ pip install "lathe-mcp[full]"
74
+ ```
75
+
76
+ ### System Dependencies
77
+
78
+ Some tools require external binaries. Install only what you need:
79
+
80
+ | Dependency | Required For | Install |
81
+ |------------|-------------|---------|
82
+ | ffmpeg | Audio/video tools | `brew install ffmpeg` / `apt install ffmpeg` |
83
+ | tesseract | OCR tools | `brew install tesseract` / `apt install tesseract-ocr` |
84
+ | ghostscript | `pdf_to_images` | `brew install ghostscript` / `apt install ghostscript` |
85
+
86
+ The `health` tool reports which dependencies are available at runtime.
87
+
88
+ ---
89
+
90
+ ## Usage
91
+
92
+ Run the server directly:
93
+
94
+ ```bash
95
+ lathe
96
+ ```
97
+
98
+ Or via the MCP CLI:
99
+
100
+ ```bash
101
+ mcp run lathe
102
+ ```
103
+
104
+ ### Claude Code
105
+
106
+ ```bash
107
+ claude mcp add lathe -- /path/to/venv/bin/lathe
108
+ ```
109
+
110
+ ### Claude Desktop
111
+
112
+ Add to your Claude Desktop config (`claude_desktop_config.json`):
113
+
114
+ ```json
115
+ {
116
+ "mcpServers": {
117
+ "lathe": {
118
+ "command": "/path/to/venv/bin/lathe",
119
+ "env": {
120
+ "LATHE_WORKING_DIR": "/path/to/allowed/directory"
121
+ }
122
+ }
123
+ }
124
+ }
125
+ ```
126
+
127
+ ---
128
+
129
+ ## Configuration
130
+
131
+ | Variable | Description | Default |
132
+ |----------|-------------|---------|
133
+ | `LATHE_WORKING_DIR` | Root directory for all file operations | Current working directory |
134
+
135
+ All input and output paths are resolved relative to and constrained within `LATHE_WORKING_DIR`.
136
+
137
+ ---
138
+
139
+ ## Security
140
+
141
+ - **Sandboxed file access** — all paths validated against `LATHE_WORKING_DIR`
142
+ - **Path traversal protection** — `../` and absolute paths outside the sandbox are rejected
143
+ - **Symlink escape detection** — symlinks resolving outside the working directory are blocked
144
+ - **Decompression bomb guard** — Pillow's built-in protections are active
145
+ - **File size limits** — 500 MB maximum per input file
146
+
147
+ ---
148
+
149
+ ## Development
150
+
151
+ ```bash
152
+ git clone https://github.com/seayniclabs/lathe.git
153
+ cd lathe
154
+ python -m venv .venv && source .venv/bin/activate
155
+ pip install -e ".[test,full]"
156
+ python -m pytest tests/ -q
157
+ ```
158
+
159
+ ---
160
+
161
+ ## License
162
+
163
+ Proprietary. Copyright (c) 2026 Seaynic Labs LLC. All rights reserved.
164
+
165
+ See [LICENSE](LICENSE) for details.
@@ -0,0 +1,61 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "lathe-mcp"
7
+ version = "0.1.0"
8
+ description = "File and media processing MCP server — resize, convert, optimize, extract."
9
+ readme = "README.md"
10
+ license = "LicenseRef-Proprietary"
11
+ requires-python = ">=3.12"
12
+ authors = [
13
+ { name = "Charlie Seay", email = "charlie@seayniclabs.com" },
14
+ ]
15
+ keywords = ["mcp", "file-processing", "image", "pdf", "audio", "video", "ocr"]
16
+ classifiers = [
17
+ "Development Status :: 4 - Beta",
18
+ "Intended Audience :: Developers",
19
+ "License :: Other/Proprietary License",
20
+ "Programming Language :: Python :: 3",
21
+ "Programming Language :: Python :: 3.12",
22
+ "Topic :: Multimedia :: Graphics",
23
+ "Topic :: Multimedia :: Sound/Audio :: Conversion",
24
+ "Topic :: Text Processing",
25
+ ]
26
+ dependencies = [
27
+ "mcp[cli]",
28
+ "Pillow",
29
+ "httpx",
30
+ ]
31
+
32
+ [project.urls]
33
+ Homepage = "https://seayniclabs.com"
34
+ Repository = "https://github.com/seayniclabs/lathe"
35
+
36
+ [project.optional-dependencies]
37
+ full = [
38
+ "ffmpeg-python",
39
+ "pytesseract",
40
+ "pypdf",
41
+ ]
42
+ test = [
43
+ "pytest",
44
+ "pytest-cov",
45
+ "pip-audit",
46
+ "pypdf",
47
+ ]
48
+
49
+ [project.scripts]
50
+ lathe = "lathe.server:main"
51
+
52
+ [tool.hatch.build.targets.wheel]
53
+ packages = ["src/lathe"]
54
+
55
+ [tool.pytest.ini_options]
56
+ testpaths = ["tests"]
57
+ markers = [
58
+ "requires_ffmpeg: test requires ffmpeg binary",
59
+ "requires_tesseract: test requires tesseract binary",
60
+ "requires_ghostscript: test requires ghostscript binary",
61
+ ]
@@ -0,0 +1,3 @@
1
+ """Lathe — file and media processing MCP server."""
2
+
3
+ __version__ = "0.1.0"