Skip to content

Commit 6cf4631

Browse files
committed
fix: patch fastmcp lowlevel session method
We need this until jlowin/fastmcp#2531 is accepted.
1 parent 0908d3c commit 6cf4631

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

mcp_proxy_for_aws/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
from importlib.metadata import version as _metadata_version
1818

19+
import mcp_proxy_for_aws.fastmcp_patch as _fastmcp_patch
20+
1921

2022
__all__ = ['__version__']
2123
__version__ = _metadata_version('mcp-proxy-for-aws')

mcp_proxy_for_aws/fastmcp_patch.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import fastmcp.server.low_level as low_level_module
2+
import mcp.types
3+
from functools import wraps
4+
from mcp import McpError
5+
from mcp.server.stdio import stdio_server as stdio_server
6+
from mcp.shared.session import RequestResponder
7+
8+
9+
original_receive_request = low_level_module.MiddlewareServerSession._received_request
10+
11+
12+
@wraps(original_receive_request)
13+
async def _received_request(
14+
self,
15+
responder: RequestResponder[mcp.types.ClientRequest, mcp.types.ServerResult],
16+
):
17+
"""Monkey patch fastmcp so that the initialize error from the middleware can be send back to the client."""
18+
if isinstance(responder.request.root, mcp.types.InitializeRequest):
19+
try:
20+
return await original_receive_request(self, responder)
21+
except McpError as e:
22+
if not responder._completed:
23+
with responder:
24+
return await responder.respond(e.error)
25+
26+
raise e
27+
else:
28+
return await original_receive_request(self, responder)
29+
30+
31+
low_level_module.MiddlewareServerSession._received_request = _received_request

0 commit comments

Comments
 (0)