Chris Coutinho
a36038422b
feat: Add text processing background worker for telling client about progress
2025-10-25 19:52:45 +02:00
Chris Coutinho
2147fc1696
refactor: Transform document parsing into pluggable processor architecture
...
Refactors PR #190 's hardcoded Unstructured.io integration into a flexible,
extensible plugin system supporting multiple text extraction engines.
- **`DocumentProcessor` ABC**: Abstract interface for all processors
- **`ProcessorRegistry`**: Central registry for discovery and routing
- **`ProcessingResult`**: Standardized output format across processors
- **`UnstructuredProcessor`**: Refactored from `UnstructuredClient`
- **`TesseractProcessor`**: Local OCR for images (lightweight alternative)
- **`CustomHTTPProcessor`**: Generic wrapper for custom HTTP APIs
- New `get_document_processor_config()` returns structured config
- Supports enabling/disabling individual processors
- Per-processor configuration via environment variables
- **Breaking Change**: `ENABLE_UNSTRUCTURED_PARSING` replaced with:
- `ENABLE_DOCUMENT_PROCESSING=true/false` (master switch)
- `ENABLE_UNSTRUCTURED=true/false` (per-processor)
- `ENABLE_TESSERACT=true/false`
- `ENABLE_CUSTOM_PROCESSOR=true/false`
- `parse_document()` now uses `ProcessorRegistry`
- Auto-selects appropriate processor based on MIME type
- Processor priority system (Unstructured=10, Tesseract=5, Custom=1)
- `initialize_document_processors()` registers processors at startup
- Integrated into both BasicAuth and OAuth lifespans
- Graceful degradation if processors fail to initialize
```env
ENABLE_DOCUMENT_PROCESSING=false
ENABLE_UNSTRUCTURED=false
UNSTRUCTURED_API_URL=http://unstructured:8000
UNSTRUCTURED_STRATEGY=auto # auto|fast|hi_res
UNSTRUCTURED_LANGUAGES=eng,deu
ENABLE_TESSERACT=false
TESSERACT_LANG=eng
ENABLE_CUSTOM_PROCESSOR=false
CUSTOM_PROCESSOR_URL=http://localhost:9000/process
CUSTOM_PROCESSOR_TYPES=application/pdf,image/jpeg
```
- **Removed**: `tests/test_unstructured_config.py` (legacy tests)
- **Added**: `tests/unit/test_document_processor_config.py`
- 7 unit tests for new config system
- Tests individual and multi-processor configurations
- **Added**:
- `nextcloud_mcp_server/document_processors/__init__.py`
- `nextcloud_mcp_server/document_processors/base.py`
- `nextcloud_mcp_server/document_processors/registry.py`
- `nextcloud_mcp_server/document_processors/unstructured.py`
- `nextcloud_mcp_server/document_processors/tesseract.py`
- `nextcloud_mcp_server/document_processors/custom_http.py`
- `tests/unit/test_document_processor_config.py`
- **Modified**:
- `nextcloud_mcp_server/config.py` - New plugin config system
- `nextcloud_mcp_server/app.py` - Processor initialization
- `nextcloud_mcp_server/utils/document_parser.py` - Uses registry
- `nextcloud_mcp_server/server/webdav.py` - Import updates
- `env.sample` - New configuration format
- `docker-compose.yml` - (profile changes from previous work)
- **Removed**:
- `nextcloud_mcp_server/client/unstructured_client.py` - Replaced by UnstructuredProcessor
- `tests/test_unstructured_config.py` - Replaced with new tests
✅ **Extensible**: Add processors without modifying core code
✅ **Testable**: Mock processors for unit tests
✅ **Configurable**: Enable only needed processors
✅ **Flexible**: Choose fast (Tesseract) vs accurate (Unstructured)
✅ **Opt-in**: Disabled by default, no mandatory dependencies
Users upgrading from PR #190 need to update environment variables:
```bash
ENABLE_UNSTRUCTURED_PARSING=true
ENABLE_DOCUMENT_PROCESSING=true
ENABLE_UNSTRUCTURED=true
```
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-10-25 19:28:35 +02:00
yuisheaven
f0e5333e43
Merge branch 'master' into feature/introduce_files_parsing_with_unstructured_service_for_webdav_files_retrieval
2025-10-25 17:23:38 +02:00
Chris Coutinho
81ca799410
fix: Update webdav models for proper serialization
2025-10-24 06:01:02 +02:00
Chris Coutinho
d452684535
feat: Split read/write scopes into app:read/write scopes
2025-10-24 04:38:49 +02:00
yuisheaven
29df645d53
Merge branch 'master' into feature/introduce_files_parsing_with_unstructured_service_for_webdav_files_retrieval
2025-10-23 21:30:09 +02:00
Chris Coutinho
c069d78f80
feat: Initialize JWT-scoped tools
2025-10-22 06:21:16 +02:00
yuisheaven
64649c902d
Merge branch 'master' into feature/introduce_files_parsing_with_unstructured_service_for_webdav_files_retrieval
2025-10-21 20:37:00 +02:00
Chris Coutinho
92e18825bc
feat(caldav): Add support for tasks
2025-10-19 18:02:43 +02:00
Chris Coutinho
6158a890af
feat(webdav): Add search and list favorite response tools
2025-10-18 22:02:26 +02:00
Chris Coutinho
37164dbdbc
chore: sort imports
2025-10-18 22:02:25 +02:00
Chris Coutinho
dbcf9d93ca
chore: Improve RequestError message details
...
Show exception type and cause when str(e) is empty for better debugging
2025-10-17 04:37:31 +02:00
Chris Coutinho
2999d4b65e
fix: Handle RequestError in mcp tools
2025-10-17 04:17:41 +02:00
Chris Coutinho
9de59db718
feat(cookbook): Add full Cookbook app support with 13 tools and 2 resources
...
- Import recipes from URLs using schema.org metadata
- Full CRUD operations for recipes
- Search, categorize, and organize recipes
- Manage keywords/tags and categories
- Configure app settings and trigger reindexing
2025-10-17 03:08:16 +02:00
Chris Coutinho
a38c795124
feat: add sharing API client and server tools
2025-10-15 02:59:26 +02:00
Chris Coutinho
13e4915e38
test: Remove unused pytest fixtures
2025-10-14 01:23:39 +02:00
Chris Coutinho
4d7e4b9a4b
feat(server): Experimental support for OAuth2/OIDC authentication
2025-10-14 01:22:15 +02:00
yuisheaven
3ff6346c03
ran ruff format via uv
2025-10-05 02:16:42 +02:00
yuisheaven
76dce41ed9
added first versoin of the new document_parser utility and added it to the webdav file retrieval logic
2025-10-04 04:28:24 +02:00
Chris Coutinho
79e6250377
update deprecated log warnings
2025-09-24 00:17:57 +02:00
Chris Coutinho
cc9650b077
refactor: Add tools for all resources to enable tool-only workflows
2025-09-24 00:13:24 +02:00
Chris Coutinho
7498b501eb
chore: Remove remaining tools
2025-09-11 09:31:13 +02:00
Chris Coutinho
e7a5caa0d6
Merge remote-tracking branch 'origin/master' into feature/deck
2025-09-11 00:37:58 +02:00
Chris Coutinho
d2d413afcd
feat(deck): Add support for stack, cards, labels
2025-09-11 00:35:02 +02:00
Chris Coutinho
167053578d
feat(deck): Initialize Deck app client/server
2025-09-11 00:10:25 +02:00
Pedro Ruiz
5d4902a73e
feat: Add WebDAV resource copy functionality
2025-09-10 22:15:16 +02:00
Pedro Ruiz
b55b9640c6
feat: Add WebDAV resource move/rename functionality
2025-09-10 22:12:17 +02:00
Chris Coutinho
f79b957644
test: Update tests with McpError
2025-08-31 21:08:04 +02:00
Chris Coutinho
ef1fb9e9aa
fix(server): Replace ErrorResponses with standard McpErrors
2025-08-31 20:58:12 +02:00
Chris Coutinho
892a8d2d23
fix(notes): Include ETags in responses to avoid accidently updates
2025-08-31 19:20:51 +02:00
Chris Coutinho
949fb7124b
fix(notes): Remove note contents from responses to reduce token usage
2025-08-31 11:55:15 +02:00
Chris Coutinho
4cf5f2a95a
feat(client): Preserve fields when modifying contacts/calendar resources
2025-08-30 19:19:20 +02:00
Chris Coutinho
9b00530e8e
feat(server): Add structured output to all tool/resource output
...
BREAKING CHANGE
2025-08-30 18:27:32 +02:00
Chris Coutinho
1dfdad5fad
Update README, docstrings, and test scope for temporary_addressbook
2025-08-03 14:42:16 +02:00
Chris Coutinho
72cb62a101
test(contacts): Add unit/integration tests for a few tools
2025-08-03 14:36:16 +02:00
Chris Coutinho
70f01bf40a
Add files
2025-08-03 14:16:55 +02:00
Chris Coutinho
37b1057d2a
feat(contacts): Initialize Contacts App
2025-08-03 14:15:37 +02:00
Chris Coutinho
8956945e9d
chore: sort imports
2025-08-01 12:21:32 +02:00
Chris Coutinho
2bcfd3d7ee
fix(calendar): Fix iCalendar date vs datetime format
2025-08-01 08:34:51 +02:00
Chris Coutinho
e7598a5467
format
2025-07-29 15:00:23 +02:00
Chris Coutinho
fb6aa954b6
chore: ruff check
2025-07-29 09:11:25 +02:00
Chris Coutinho
02ad283a01
chore: format
2025-07-29 09:09:10 +02:00
Chris Coutinho
13ba9ef2e6
Merge remote-tracking branch 'origin/master' into refactor/server
2025-07-29 09:08:17 +02:00
Chris Coutinho
1e19061ee0
chore: Move tools into separate modules
2025-07-27 14:11:02 +02:00