From 7a4850f54f56b31bad2029ff94d160bcfe22fcb3 Mon Sep 17 00:00:00 2001 From: Gonzalo Date: Wed, 23 Apr 2025 18:42:25 -0700 Subject: [PATCH 1/2] session_id added to message --- src/mcp/server/sse.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/mcp/server/sse.py b/src/mcp/server/sse.py index d051c25bf..b1476d2b4 100644 --- a/src/mcp/server/sse.py +++ b/src/mcp/server/sse.py @@ -32,6 +32,7 @@ async def handle_sse(request): """ import logging +import json from contextlib import asynccontextmanager from typing import Any from urllib.parse import quote @@ -160,7 +161,11 @@ async def handle_post_message( logger.debug(f"Received JSON: {body}") try: - message = types.JSONRPCMessage.model_validate_json(body) + message_with_session_id = { + **json.loads(body), + 'session_id': str(session_id), + } + message = types.JSONRPCMessage.model_validate_json(json.dumps(message_with_session_id)) logger.debug(f"Validated client message: {message}") except ValidationError as err: logger.error(f"Failed to parse message: {err}") From e9ba658127305b0f601471d92442df73864a9ed2 Mon Sep 17 00:00:00 2001 From: Gonzalo Date: Wed, 23 Apr 2025 19:09:22 -0700 Subject: [PATCH 2/2] default tool functions sending request object --- src/mcp/server/lowlevel/server.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/mcp/server/lowlevel/server.py b/src/mcp/server/lowlevel/server.py index dbaff3051..5d286225c 100644 --- a/src/mcp/server/lowlevel/server.py +++ b/src/mcp/server/lowlevel/server.py @@ -221,8 +221,8 @@ def list_prompts(self): def decorator(func: Callable[[], Awaitable[list[types.Prompt]]]): logger.debug("Registering handler for PromptListRequest") - async def handler(_: Any): - prompts = await func() + async def handler(request: types.ListPromptsRequest): + prompts = await func(request) return types.ServerResult(types.ListPromptsResult(prompts=prompts)) self.request_handlers[types.ListPromptsRequest] = handler @@ -251,8 +251,8 @@ def list_resources(self): def decorator(func: Callable[[], Awaitable[list[types.Resource]]]): logger.debug("Registering handler for ListResourcesRequest") - async def handler(_: Any): - resources = await func() + async def handler(request: types.ListResourcesRequest): + resources = await func(request) return types.ServerResult( types.ListResourcesResult(resources=resources) ) @@ -266,8 +266,8 @@ def list_resource_templates(self): def decorator(func: Callable[[], Awaitable[list[types.ResourceTemplate]]]): logger.debug("Registering handler for ListResourceTemplatesRequest") - async def handler(_: Any): - templates = await func() + async def handler(request: types.ListResourceTemplatesRequest): + templates = await func(request) return types.ServerResult( types.ListResourceTemplatesResult(resourceTemplates=templates) ) @@ -383,8 +383,8 @@ def list_tools(self): def decorator(func: Callable[[], Awaitable[list[types.Tool]]]): logger.debug("Registering handler for ListToolsRequest") - async def handler(_: Any): - tools = await func() + async def handler(request: types.ListToolsRequest): + tools = await func(request) return types.ServerResult(types.ListToolsResult(tools=tools)) self.request_handlers[types.ListToolsRequest] = handler