@@ -91,10 +91,11 @@ def _load_rnk_token() -> str | None:
9191 continue # token is for a different deployment
9292 if payload .get ("exp" ) and time .time () > int (payload ["exp" ]) - 60 :
9393 continue # token is expired or expires in < 60 s
94- except Exception :
95- pass # accept token anyway if JWT decode fails
94+ except (ValueError , KeyError , IndexError ):
95+ # JWT decode failed — accept the token anyway and let Keycloak validate it.
96+ pass
9697 return access
97- except Exception :
98+ except ( OSError , json . JSONDecodeError , KeyError ) :
9899 continue
99100 return None
100101
@@ -115,8 +116,8 @@ def _resolve_token() -> str:
115116 entry = json .loads (f .read_text ()).get (_base_url (), {})
116117 if t := entry .get ("access_token" ) or entry .get ("token" ):
117118 return t
118- except Exception :
119- pass
119+ except ( OSError , json . JSONDecodeError , KeyError , AttributeError ) :
120+ pass # malformed or unreadable credential file — try next source
120121
121122 # 3. Official rnk CLI token file
122123 if t := _load_rnk_token ():
@@ -254,7 +255,7 @@ async def _run_stdio() -> None:
254255def _run_http () -> None :
255256 import uvicorn
256257
257- host = os .environ .get ("MCP_HOST" , "0.0.0.0" )
258+ host = os .environ .get ("MCP_HOST" , "0.0.0.0" ) # nosec B104 — intentional for server deployment
258259 port = int (os .environ .get ("MCP_PORT" , "9000" ))
259260 app = _build_http_app (_deps )
260261 logger .info ("Starting Renku MCP server (HTTP) on %s:%s" , host , port )
0 commit comments