@@ -52,49 +52,71 @@ def start(self):
52
52
try :
53
53
# Send hello message
54
54
self ._send_hello ()
55
+ logger .info ("Sent hello message to MCP client" )
55
56
56
57
# Process incoming messages
58
+ logger .info ("Waiting for incoming messages from MCP client..." )
59
+
57
60
for line in self .stdin :
58
- if not line .strip ():
61
+ line = line .strip ()
62
+ if not line :
63
+ logger .debug ("Received empty line, continuing" )
59
64
continue
60
65
66
+ logger .info (f"Received message: { line [:100 ]} ..." )
67
+
61
68
try :
62
69
message = json .loads (line )
63
70
message_type = message .get ("type" )
64
71
65
72
if message_type == MESSAGE_TYPE_READY :
66
73
logger .info ("MCP client is ready" )
67
74
elif message_type == MESSAGE_TYPE_TOOL_CALL :
75
+ logger .info (f"Handling tool call: { message .get ('tool' , {}).get ('name' )} " )
68
76
self ._handle_tool_call (message )
69
77
elif message_type == MESSAGE_TYPE_RESOURCE_REQUEST :
78
+ logger .info (f"Handling resource request: { message .get ('uri' )} " )
70
79
self ._handle_resource_request (message )
71
80
elif message_type == MESSAGE_TYPE_PROMPT_REQUEST :
81
+ logger .info (f"Handling prompt request: { message .get ('prompt' , {}).get ('name' )} " )
72
82
self ._handle_prompt_request (message )
73
83
elif message_type == MESSAGE_TYPE_BYE :
74
84
logger .info ("MCP client is disconnecting" )
75
85
break
76
86
else :
87
+ logger .warning (f"Unknown message type: { message_type } " )
77
88
self ._send_error (f"Unknown message type: { message_type } " )
78
89
79
- except json .JSONDecodeError :
90
+ except json .JSONDecodeError as e :
91
+ logger .error (f"Invalid JSON in message: { e } " )
80
92
self ._send_error ("Invalid JSON in message" )
81
93
except Exception as e :
94
+ logger .error (f"Error processing message: { e } " )
82
95
self ._send_error (f"Error processing message: { e } " )
83
96
97
+ logger .info ("Message processing loop exited normally" )
98
+
84
99
except KeyboardInterrupt :
85
100
logger .info ("MCP server was interrupted" )
86
101
except Exception as e :
87
102
logger .error (f"MCP server error: { e } " )
88
103
self ._send_error (f"Server error: { e } " )
89
104
90
- # Send goodbye message
105
+ # Send goodbye message only if not already sent
106
+ logger .info ("Sending goodbye message" )
91
107
self ._send_bye ()
108
+ logger .info ("MCP server shutting down" )
92
109
93
110
def _send_message (self , message : Dict [str , Any ]):
94
111
"""Send a message to the client"""
95
- json_str = json .dumps (message )
96
- self .stdout .write (json_str + "\n " )
97
- self .stdout .flush ()
112
+ try :
113
+ json_str = json .dumps (message )
114
+ self .stdout .write (json_str + "\n " )
115
+ self .stdout .flush ()
116
+ logger .debug (f"Sent message: { json_str [:100 ]} ..." )
117
+ except Exception as e :
118
+ logger .error (f"Error sending message: { e } " )
119
+ # Don't raise - we want to continue processing if possible
98
120
99
121
def _send_hello (self ):
100
122
"""Send hello message with server capabilities"""
0 commit comments