4343
4444MCP_SESSION_ID = "mcp-session-id"
4545MCP_PROTOCOL_VERSION = "mcp-protocol-version"
46+ MCP_METHOD = "mcp-method"
47+ MCP_NAME = "mcp-name"
4648LAST_EVENT_ID = "last-event-id"
4749
4850# Reconnection defaults
@@ -82,7 +84,7 @@ def __init__(self, url: str) -> None:
8284 self .session_id : str | None = None
8385 self .protocol_version : str | None = None
8486
85- def _prepare_headers (self ) -> dict [str , str ]:
87+ def _prepare_headers (self , message : JSONRPCMessage | None = None ) -> dict [str , str ]:
8688 """Build MCP-specific request headers.
8789
8890 These headers will be merged with the httpx.AsyncClient's default headers,
@@ -97,8 +99,28 @@ def _prepare_headers(self) -> dict[str, str]:
9799 headers [MCP_SESSION_ID ] = self .session_id
98100 if self .protocol_version :
99101 headers [MCP_PROTOCOL_VERSION ] = self .protocol_version
102+ if isinstance (message , JSONRPCRequest | JSONRPCNotification ):
103+ headers [MCP_METHOD ] = message .method
104+ if mcp_name := self ._get_mcp_name (message ):
105+ headers [MCP_NAME ] = mcp_name
100106 return headers
101107
108+ def _get_mcp_name (self , message : JSONRPCRequest | JSONRPCNotification ) -> str | None :
109+ params = message .params
110+ if not isinstance (params , dict ):
111+ return None
112+
113+ if message .method in {"tools/call" , "prompts/get" }:
114+ value = params .get ("name" )
115+ elif message .method in {"resources/read" , "resources/subscribe" , "resources/unsubscribe" }:
116+ value = params .get ("uri" )
117+ else :
118+ return None
119+
120+ if value is None :
121+ return None
122+ return str (value )
123+
102124 def _is_initialization_request (self , message : JSONRPCMessage ) -> bool :
103125 """Check if the message is an initialization request."""
104126 return isinstance (message , JSONRPCRequest ) and message .method == "initialize"
@@ -253,8 +275,8 @@ async def _handle_resumption_request(self, ctx: RequestContext) -> None:
253275
254276 async def _handle_post_request (self , ctx : RequestContext ) -> None :
255277 """Handle a POST request with response processing."""
256- headers = self ._prepare_headers ()
257278 message = ctx .session_message .message
279+ headers = self ._prepare_headers (message )
258280 is_initialization = self ._is_initialization_request (message )
259281
260282 async with ctx .client .stream (
0 commit comments