@@ -196,3 +196,34 @@ def test_env_names_returns_sorted_names_or_none():
196196 assert _env_names ({"B_VAR" : "x" , "A_VAR" : "{{ env('A') }}" }) == ["A_VAR" , "B_VAR" ]
197197 assert _env_names ({}) == []
198198 assert _env_names (None ) is None
199+
200+
201+ @pytest .mark .parametrize ("kind" , ["streamable" , "sse" ])
202+ def test_mcp_client_params_resolves_remote_url_env (monkeypatch , kind ):
203+ # A remote toolbox sources its endpoint from the environment. The url must
204+ # be env-templated the same way stdio args/env and headers already are, so
205+ # `url: "{{ env('CONTAINER_SHELL_URL') }}"` reaches the client resolved.
206+ monkeypatch .setenv ("CONTAINER_SHELL_URL" , "http://host.docker.internal:8765/mcp/" )
207+ server_params = SimpleNamespace (
208+ kind = kind ,
209+ reconnecting = False ,
210+ url = "{{ env('CONTAINER_SHELL_URL') }}" ,
211+ headers = None ,
212+ optional_headers = None ,
213+ timeout = None ,
214+ command = None ,
215+ env = None ,
216+ args = None ,
217+ )
218+ toolbox = SimpleNamespace (
219+ server_params = server_params ,
220+ confirm = ["container_shell_exec" ],
221+ server_prompt = None ,
222+ client_session_timeout = None ,
223+ )
224+ available_tools = MagicMock ()
225+ available_tools .get_toolbox .return_value = toolbox
226+
227+ params = mcp_client_params (available_tools , ["pkg.remote" ])
228+
229+ assert params ["pkg.remote" ][0 ]["url" ] == "http://host.docker.internal:8765/mcp/"
0 commit comments