fix: Handle RequestError in mcp tools
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
@@ -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"))
|
||||||
|
|||||||
Reference in New Issue
Block a user