fix: Handle RequestError in mcp tools

This commit is contained in:
Chris Coutinho
2025-10-17 04:17:41 +02:00
parent 0fd32ecd34
commit 2999d4b65e
2 changed files with 56 additions and 2 deletions
+8 -1
View File
@@ -1,6 +1,6 @@
import logging import logging
from httpx import HTTPStatusError from httpx import HTTPStatusError, RequestError
from mcp.server.fastmcp import Context, FastMCP from mcp.server.fastmcp import Context, FastMCP
from mcp.shared.exceptions import McpError from mcp.shared.exceptions import McpError
from mcp.types import ErrorData from mcp.types import ErrorData
@@ -83,6 +83,13 @@ def configure_cookbook_tools(mcp: FastMCP):
recipe=recipe, recipe=recipe,
recipe_id=recipe.id or "unknown", 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: except HTTPStatusError as e:
if e.response.status_code == 400: if e.response.status_code == 400:
raise McpError( raise McpError(
+48 -1
View File
@@ -1,6 +1,6 @@
import logging import logging
from httpx import HTTPStatusError from httpx import HTTPStatusError, RequestError
from mcp.server.fastmcp import Context, FastMCP from mcp.server.fastmcp import Context, FastMCP
from mcp.shared.exceptions import McpError from mcp.shared.exceptions import McpError
from mcp.types import ErrorData from mcp.types import ErrorData
@@ -61,6 +61,13 @@ def configure_notes_tools(mcp: FastMCP):
try: try:
note_data = await client.notes.get_note(note_id) note_data = await client.notes.get_note(note_id)
return Note(**note_data) 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: except HTTPStatusError as e:
if e.response.status_code == 404: if e.response.status_code == 404:
raise McpError(ErrorData(code=-1, message=f"Note {note_id} not found")) raise McpError(ErrorData(code=-1, message=f"Note {note_id} not found"))
@@ -92,6 +99,10 @@ def configure_notes_tools(mcp: FastMCP):
return CreateNoteResponse( return CreateNoteResponse(
id=note.id, title=note.title, category=note.category, etag=note.etag 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: except HTTPStatusError as e:
if e.response.status_code == 403: if e.response.status_code == 403:
raise McpError( raise McpError(
@@ -146,6 +157,12 @@ def configure_notes_tools(mcp: FastMCP):
return UpdateNoteResponse( return UpdateNoteResponse(
id=note.id, title=note.title, category=note.category, etag=note.etag 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: except HTTPStatusError as e:
if e.response.status_code == 404: if e.response.status_code == 404:
raise McpError(ErrorData(code=-1, message=f"Note {note_id} not found")) raise McpError(ErrorData(code=-1, message=f"Note {note_id} not found"))
@@ -192,6 +209,13 @@ def configure_notes_tools(mcp: FastMCP):
return AppendContentResponse( return AppendContentResponse(
id=note.id, title=note.title, category=note.category, etag=note.etag 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: except HTTPStatusError as e:
if e.response.status_code == 404: if e.response.status_code == 404:
raise McpError(ErrorData(code=-1, message=f"Note {note_id} not found")) raise McpError(ErrorData(code=-1, message=f"Note {note_id} not found"))
@@ -238,6 +262,10 @@ def configure_notes_tools(mcp: FastMCP):
return SearchNotesResponse( return SearchNotesResponse(
results=results, query=query, total_found=len(results) 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: except HTTPStatusError as e:
if e.response.status_code == 403: if e.response.status_code == 403:
raise McpError( raise McpError(
@@ -265,6 +293,12 @@ def configure_notes_tools(mcp: FastMCP):
try: try:
note_data = await client.notes.get_note(note_id) note_data = await client.notes.get_note(note_id)
return Note(**note_data) 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: except HTTPStatusError as e:
if e.response.status_code == 404: if e.response.status_code == 404:
raise McpError(ErrorData(code=-1, message=f"Note {note_id} not found")) 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, "mimeType": mime_type,
"data": content, "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: except HTTPStatusError as e:
if e.response.status_code == 404: if e.response.status_code == 404:
raise McpError( raise McpError(
@@ -330,6 +371,12 @@ def configure_notes_tools(mcp: FastMCP):
message=f"Note {note_id} deleted successfully", message=f"Note {note_id} deleted successfully",
deleted_id=note_id, 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: except HTTPStatusError as e:
if e.response.status_code == 404: if e.response.status_code == 404:
raise McpError(ErrorData(code=-1, message=f"Note {note_id} not found")) raise McpError(ErrorData(code=-1, message=f"Note {note_id} not found"))