55import mcp .types as types
66
77try :
8- import redis .asyncio as redis
8+ import redis .asyncio as redis # type: ignore[import]
99except ImportError :
1010 raise ImportError (
1111 "Redis support requires the 'redis' package. "
@@ -31,7 +31,7 @@ def __init__(
3131 redis_url: Redis connection string
3232 prefix: Key prefix for Redis keys to avoid collisions
3333 """
34- self ._redis = redis .Redis .from_url (redis_url , decode_responses = True )
34+ self ._redis = redis .Redis .from_url (redis_url , decode_responses = True ) # type: ignore[attr-defined]
3535 self ._prefix = prefix
3636 self ._active_sessions_key = f"{ prefix } active_sessions"
3737 logger .debug (f"Initialized Redis message queue with URL: { redis_url } " )
@@ -63,7 +63,7 @@ async def add_message(
6363 data = message .model_dump_json (by_alias = True , exclude_none = True )
6464
6565 # Push to the right side of the list (queue)
66- await self ._redis .rpush (self ._session_queue_key (session_id ), data )
66+ await self ._redis .rpush (self ._session_queue_key (session_id ), data ) # type: ignore[attr-defined]
6767 logger .debug (f"Added message to Redis queue for session { session_id } " )
6868 return True
6969
@@ -77,45 +77,50 @@ async def get_message(
7777
7878 # Pop from the left side of the list (queue)
7979 # Use BLPOP with timeout to avoid busy waiting
80- result = await self ._redis .blpop ([self ._session_queue_key (session_id )], timeout )
80+ result = await self ._redis .blpop ([self ._session_queue_key (session_id )], timeout ) # type: ignore[attr-defined]
8181
8282 if not result :
8383 return None
8484
8585 # result is a tuple of (key, value)
86- _ , data = result
86+ _ , data = result # type: ignore[misc]
8787
8888 # Deserialize the message
89- json_data = json .loads (data )
89+ json_data = json .loads (data ) # type: ignore[arg-type]
9090
9191 # Check if it's an exception
92- if isinstance (json_data , dict ) and json_data .get ("_exception" ):
93- # Reconstitute a generic exception
94- return Exception (f"{ json_data ['type' ]} : { json_data ['message' ]} " )
92+ if isinstance (json_data , dict ):
93+ exception_dict : dict [str , object ] = json_data
94+ if exception_dict .get ("_exception" , False ):
95+ return Exception (
96+ f"{ exception_dict ['type' ]} : { exception_dict ['message' ]} "
97+ )
9598
9699 # Regular message
97100 try :
98- return types .JSONRPCMessage .model_validate_json (data )
101+ return types .JSONRPCMessage .model_validate_json (data ) # type: ignore[arg-type]
99102 except Exception as e :
100103 logger .error (f"Failed to deserialize message: { e } " )
101104 return None
102105
103106 async def register_session (self , session_id : UUID ) -> None :
104107 """Register a new session with the queue."""
105108 # Add session ID to the set of active sessions
106- await self ._redis .sadd (self ._active_sessions_key , session_id .hex )
109+ await self ._redis .sadd (self ._active_sessions_key , session_id .hex ) # type: ignore[attr-defined]
107110 logger .debug (f"Registered session { session_id } in Redis" )
108111
109112 async def unregister_session (self , session_id : UUID ) -> None :
110113 """Unregister a session when it's closed."""
111114 # Remove session ID from active sessions
112- await self ._redis .srem (self ._active_sessions_key , session_id .hex )
115+ await self ._redis .srem (self ._active_sessions_key , session_id .hex ) # type: ignore[attr-defined]
113116 # Delete the session's message queue
114- await self ._redis .delete (self ._session_queue_key (session_id ))
117+ await self ._redis .delete (self ._session_queue_key (session_id )) # type: ignore[attr-defined]
115118 logger .debug (f"Unregistered session { session_id } from Redis" )
116119
117120 async def session_exists (self , session_id : UUID ) -> bool :
118121 """Check if a session exists."""
119- return bool (
120- await self ._redis .sismember (self ._active_sessions_key , session_id .hex )
122+ # Explicitly annotate the result as bool to help the type checker
123+ result = bool (
124+ await self ._redis .sismember (self ._active_sessions_key , session_id .hex ) # type: ignore[attr-defined]
121125 )
126+ return result
0 commit comments