diff --git a/nextcloud_mcp_server/server/cookbook.py b/nextcloud_mcp_server/server/cookbook.py index 8f534ce..8561b01 100644 --- a/nextcloud_mcp_server/server/cookbook.py +++ b/nextcloud_mcp_server/server/cookbook.py @@ -1,6 +1,6 @@ import logging -from httpx import HTTPStatusError +from httpx import HTTPStatusError, RequestError from mcp.server.fastmcp import Context, FastMCP from mcp.shared.exceptions import McpError from mcp.types import ErrorData @@ -83,6 +83,13 @@ def configure_cookbook_tools(mcp: FastMCP): recipe=recipe, recipe_id=recipe.id or "unknown", ) + except RequestError as e: + raise McpError( + ErrorData( + code=-1, + message=f"Network error importing recipe from {url}: {str(e)}", + ) + ) except HTTPStatusError as e: if e.response.status_code == 400: raise McpError( diff --git a/nextcloud_mcp_server/server/notes.py b/nextcloud_mcp_server/server/notes.py index a241633..631ea7b 100644 --- a/nextcloud_mcp_server/server/notes.py +++ b/nextcloud_mcp_server/server/notes.py @@ -1,6 +1,6 @@ import logging -from httpx import HTTPStatusError +from httpx import HTTPStatusError, RequestError from mcp.server.fastmcp import Context, FastMCP from mcp.shared.exceptions import McpError from mcp.types import ErrorData @@ -61,6 +61,13 @@ def configure_notes_tools(mcp: FastMCP): try: note_data = await client.notes.get_note(note_id) return Note(**note_data) + except RequestError as e: + raise McpError( + ErrorData( + code=-1, + message=f"Network error retrieving note {note_id}: {str(e)}", + ) + ) except HTTPStatusError as e: if e.response.status_code == 404: raise McpError(ErrorData(code=-1, message=f"Note {note_id} not found")) @@ -92,6 +99,10 @@ def configure_notes_tools(mcp: FastMCP): return CreateNoteResponse( id=note.id, title=note.title, category=note.category, etag=note.etag ) + except RequestError as e: + raise McpError( + ErrorData(code=-1, message=f"Network error creating note: {str(e)}") + ) except HTTPStatusError as e: if e.response.status_code == 403: raise McpError( @@ -146,6 +157,12 @@ def configure_notes_tools(mcp: FastMCP): return UpdateNoteResponse( id=note.id, title=note.title, category=note.category, etag=note.etag ) + except RequestError as e: + raise McpError( + ErrorData( + code=-1, message=f"Network error updating note {note_id}: {str(e)}" + ) + ) except HTTPStatusError as e: if e.response.status_code == 404: raise McpError(ErrorData(code=-1, message=f"Note {note_id} not found")) @@ -192,6 +209,13 @@ def configure_notes_tools(mcp: FastMCP): return AppendContentResponse( id=note.id, title=note.title, category=note.category, etag=note.etag ) + except RequestError as e: + raise McpError( + ErrorData( + code=-1, + message=f"Network error appending to note {note_id}: {str(e)}", + ) + ) except HTTPStatusError as e: if e.response.status_code == 404: raise McpError(ErrorData(code=-1, message=f"Note {note_id} not found")) @@ -238,6 +262,10 @@ def configure_notes_tools(mcp: FastMCP): return SearchNotesResponse( results=results, query=query, total_found=len(results) ) + except RequestError as e: + raise McpError( + ErrorData(code=-1, message=f"Network error searching notes: {str(e)}") + ) except HTTPStatusError as e: if e.response.status_code == 403: raise McpError( @@ -265,6 +293,12 @@ def configure_notes_tools(mcp: FastMCP): try: note_data = await client.notes.get_note(note_id) return Note(**note_data) + except RequestError as e: + raise McpError( + ErrorData( + code=-1, message=f"Network error getting note {note_id}: {str(e)}" + ) + ) except HTTPStatusError as e: if e.response.status_code == 404: raise McpError(ErrorData(code=-1, message=f"Note {note_id} not found")) @@ -295,6 +329,13 @@ def configure_notes_tools(mcp: FastMCP): "mimeType": mime_type, "data": content, } + except RequestError as e: + raise McpError( + ErrorData( + code=-1, + message=f"Network error getting attachment {attachment_filename} for note {note_id}: {str(e)}", + ) + ) except HTTPStatusError as e: if e.response.status_code == 404: raise McpError( @@ -330,6 +371,12 @@ def configure_notes_tools(mcp: FastMCP): message=f"Note {note_id} deleted successfully", deleted_id=note_id, ) + except RequestError as e: + raise McpError( + ErrorData( + code=-1, message=f"Network error deleting note {note_id}: {str(e)}" + ) + ) except HTTPStatusError as e: if e.response.status_code == 404: raise McpError(ErrorData(code=-1, message=f"Note {note_id} not found"))