From 5ce67f756ba07c185e0037dcac601768ca6ff30d Mon Sep 17 00:00:00 2001 From: Omer Aharonian <43315856+omeraha@users.noreply.github.com> Date: Sat, 18 Oct 2025 11:46:57 -0400 Subject: [PATCH] transform NotFoundError to standard MCP error (#2133) --- src/fastmcp/server/middleware/error_handling.py | 4 +++- tests/server/middleware/test_error_handling.py | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/fastmcp/server/middleware/error_handling.py b/src/fastmcp/server/middleware/error_handling.py index 0a71a24ea..176240584 100644 --- a/src/fastmcp/server/middleware/error_handling.py +++ b/src/fastmcp/server/middleware/error_handling.py @@ -9,6 +9,8 @@ from typing import Any from mcp import McpError from mcp.types import ErrorData +from fastmcp.exceptions import NotFoundError + from .middleware import CallNext, Middleware, MiddlewareContext @@ -90,7 +92,7 @@ class ErrorHandlingMiddleware(Middleware): return McpError( ErrorData(code=-32602, message=f"Invalid params: {str(error)}") ) - elif error_type in (FileNotFoundError, KeyError): + elif error_type in (FileNotFoundError, KeyError, NotFoundError): return McpError( ErrorData(code=-32001, message=f"Resource not found: {str(error)}") ) diff --git a/tests/server/middleware/test_error_handling.py b/tests/server/middleware/test_error_handling.py index 6c7c3cde3..1ed534709 100644 --- a/tests/server/middleware/test_error_handling.py +++ b/tests/server/middleware/test_error_handling.py @@ -6,6 +6,7 @@ from unittest.mock import AsyncMock, MagicMock import pytest from mcp import McpError +from fastmcp.exceptions import NotFoundError from fastmcp.server.middleware.error_handling import ( ErrorHandlingMiddleware, RetryMiddleware, @@ -146,6 +147,17 @@ class TestErrorHandlingMiddleware: assert result.error.code == -32001 assert "Resource not found: test error" in result.error.message + def test_transform_error_not_found_error(self): + """Test transforming NotFoundError.""" + middleware = ErrorHandlingMiddleware() + error = NotFoundError("test error") + + result = middleware._transform_error(error) + + assert isinstance(result, McpError) + assert result.error.code == -32001 + assert "Resource not found: test error" in result.error.message + def test_transform_error_permission_error(self): """Test transforming PermissionError.""" middleware = ErrorHandlingMiddleware()