Python Bug: Error while trying to interact with the MCP server
Describe the bug While trying to interact with the MCP Server (python/samples/demos/mcp_server/agent_as_server.py) The server breaks with POST request to list the tools and also to interact with the one available.
ERROR: Exception in ASGI application
- Exception Group Traceback (most recent call last): | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/uvicorn/protocols/http/h11_impl.py", line 403, in run_asgi | result = await app( # type: ignore[func-returns-value] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | self.scope, self.receive, self.send | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ) | ^ | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in call | return await self.app(scope, receive, send) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/starlette/applications.py", line 112, in call | await self.middleware_stack(scope, receive, send) | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/starlette/middleware/errors.py", line 187, in call | raise exc | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/starlette/middleware/errors.py", line 165, in call | await self.app(scope, receive, _send) | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/starlette/middleware/exceptions.py", line 62, in call | await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app | raise exc | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app | await app(scope, receive, sender) | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/starlette/routing.py", line 714, in call | await self.middleware_stack(scope, receive, send) | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/starlette/routing.py", line 734, in app | await route.handle(scope, receive, send) | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/starlette/routing.py", line 288, in handle | await self.app(scope, receive, send) | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/starlette/routing.py", line 76, in app | await wrap_app_handling_exceptions(app, request)(scope, receive, send) | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app | raise exc | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app | await app(scope, receive, sender) | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/starlette/routing.py", line 73, in app | response = await f(request) | ^^^^^^^^^^^^^^^^ | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/agent_as_server.py", line 120, in handle_sse | async with sse.connect_sse(request.scope, request.receive, request._send) as ( | ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/opt/homebrew/Cellar/[email protected]/3.13.2/Frameworks/Python.framework/Versions/3.13/lib/python3.13/contextlib.py", line 235, in aexit | await self.gen.athrow(value) | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/mcp/server/sse.py", line 123, in connect_sse | async with anyio.create_task_group() as tg: | ~~~~~~~~~~~~~~~~~~~~~~~^^ | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit | raise BaseExceptionGroup( | "unhandled errors in a TaskGroup", self._exceptions | ) from None | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception) +-+---------------- 1 ---------------- | Exception Group Traceback (most recent call last): | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/mcp/server/sse.py", line 131, in connect_sse | yield (read_stream, write_stream) | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/agent_as_server.py", line 124, in handle_sse | await server.run(read_stream, write_stream, server.create_initialization_options()) | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/mcp/server/lowlevel/server.py", line 483, in run | async with AsyncExitStack() as stack: | ~~~~~~~~~~~~~~^^ | File "/opt/homebrew/Cellar/[email protected]/3.13.2/Frameworks/Python.framework/Versions/3.13/lib/python3.13/contextlib.py", line 768, in aexit | raise exc | File "/opt/homebrew/Cellar/[email protected]/3.13.2/Frameworks/Python.framework/Versions/3.13/lib/python3.13/contextlib.py", line 751, in aexit | cb_suppress = await cb(*exc_details) | ^^^^^^^^^^^^^^^^^^^^^^ | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/mcp/shared/session.py", line 210, in aexit | return await self._task_group.aexit(exc_type, exc_val, exc_tb) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit | raise BaseExceptionGroup( | "unhandled errors in a TaskGroup", self._exceptions | ) from None | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception) +-+---------------- 1 ---------------- | Traceback (most recent call last): | File "/opt/homebrew/Cellar/[email protected]/3.13.2/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/tasks.py", line 304, in __step_run_and_handle_result | result = coro.send(None) | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/mcp/shared/session.py", line 324, in _receive_loop | await self._received_request(responder) | File "/Users/javipercor/Development/semantic-kernel-mod/python/samples/demos/mcp_server/.venv/lib/python3.13/site-packages/mcp/server/session.py", line 163, in _received_request | raise RuntimeError( | "Received request before initialization was complete" | ) | RuntimeError: Received request before initialization was complete +------------------------------------
To Reproduce Steps to reproduce the behavior:
- Go to python/samples/demos/mcp_server/agent_as_server.py
- Execute script with see flag and port 8000
- Send GET request to generate session in MCP
- Send POST request to initialize {"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"MCPClientPoc","version":"1.0.0.0"}},"id":1,"jsonrpc":"2.0"}
- Send POST request to list tools {"method":"tools/list","params":{},"id":1,"jsonrpc":"2.0"}
Expected behavior Error as the stated in the description will arise
Screenshots If applicable, add screenshots to help explain your problem.
Platform
- Language: Python
- Source: Semantic-kernel 1.28.1
- AI model: Azure OpenAI GPT-4o(2024-07-18)]
- IDE: VS Code
- OS: MAC
Temporary Solution
Surfing the web I found that a working patch could be to add the following code after the package imports:
#PATCH from mcp.server.session import ServerSession
old__received_request = ServerSession._received_request
async def _received_request(self, *args, **kwargs): try: return await old__received_request(self, *args, **kwargs) except RuntimeError: pass
ServerSession._received_request = _received_request
@Javipercor if I read the last part correctly, this is a bug in the MCP package or not?
yes, it is. Maybe if it is a third party bug, that make a execution breaking impact on semantic kernel, the label of the issue has to be different, or the way to report it?
Could it be this one? https://github.com/modelcontextprotocol/python-sdk/issues/583
Don´t think so, more about this open discussion https://github.com/orgs/modelcontextprotocol/discussions/266
@Javipercor, with the latest SK 1.31.0 do you still experience an issue?