@@ -56,7 +56,7 @@ async def test_setup_mcp_mode(
5656 mock_args .profile = None
5757 mock_args .read_only = True
5858 mock_args .retries = 1
59- mock_args .forwarding_region = None
59+ mock_args .metadata = None
6060 # Add timeout parameters
6161 mock_args .timeout = 180.0
6262 mock_args .connect_timeout = 60.0
@@ -87,7 +87,7 @@ async def test_setup_mcp_mode(
8787 assert call_args [0 ][0 ] == 'https://test.example.com'
8888 assert call_args [0 ][1 ] == 'test-service'
8989 assert call_args [0 ][2 ] == 'us-east-1'
90- assert call_args [0 ][3 ] == ' us-east-1' # forwarding_region (defaults to region)
90+ assert call_args [0 ][3 ] == { 'AWS_REGION' : ' us-east-1'} # metadata
9191 # call_args[0][4] is the Timeout object
9292 assert call_args [0 ][5 ] is None # profile
9393 mock_as_proxy .assert_called_once_with (mock_transport )
@@ -118,7 +118,7 @@ async def test_setup_mcp_mode_no_retries(
118118 mock_args .profile = 'test-profile'
119119 mock_args .read_only = False
120120 mock_args .retries = 0 # No retries
121- mock_args .forwarding_region = ' eu-west-1'
121+ mock_args .metadata = { 'AWS_REGION' : ' eu-west-1', 'CUSTOM_KEY' : 'custom_value' }
122122 # Add timeout parameters
123123 mock_args .timeout = 180.0
124124 mock_args .connect_timeout = 60.0
@@ -149,13 +149,116 @@ async def test_setup_mcp_mode_no_retries(
149149 assert call_args [0 ][0 ] == 'https://test.example.com'
150150 assert call_args [0 ][1 ] == 'test-service'
151151 assert call_args [0 ][2 ] == 'us-east-1'
152- assert call_args [0 ][3 ] == 'eu-west-1' # forwarding_region
152+ assert call_args [0 ][3 ] == {
153+ 'AWS_REGION' : 'eu-west-1' ,
154+ 'CUSTOM_KEY' : 'custom_value' ,
155+ } # metadata
153156 # call_args[0][4] is the Timeout object
154157 assert call_args [0 ][5 ] == 'test-profile' # profile
155158 mock_as_proxy .assert_called_once_with (mock_transport )
156159 mock_add_filtering .assert_called_once_with (mock_proxy , False )
157160 mock_proxy .run_async .assert_called_once ()
158161
162+ @patch ('mcp_proxy_for_aws.server.create_transport_with_sigv4' )
163+ @patch ('mcp_proxy_for_aws.server.FastMCP.as_proxy' )
164+ @patch ('mcp_proxy_for_aws.server.determine_aws_region' )
165+ @patch ('mcp_proxy_for_aws.server.determine_service_name' )
166+ @patch ('mcp_proxy_for_aws.server.add_tool_filtering_middleware' )
167+ async def test_setup_mcp_mode_no_metadata_injects_aws_region (
168+ self ,
169+ mock_add_filtering ,
170+ mock_determine_service ,
171+ mock_determine_region ,
172+ mock_as_proxy ,
173+ mock_create_transport ,
174+ ):
175+ """Test that AWS_REGION is automatically injected when no metadata is provided."""
176+ # Arrange
177+ local_mcp = Mock (spec = FastMCP )
178+ mock_args = Mock ()
179+ mock_args .endpoint = 'https://test.example.com'
180+ mock_args .service = 'test-service'
181+ mock_args .region = 'ap-southeast-1'
182+ mock_args .profile = None
183+ mock_args .read_only = False
184+ mock_args .retries = 0
185+ mock_args .metadata = None # No metadata provided
186+ mock_args .timeout = 180.0
187+ mock_args .connect_timeout = 60.0
188+ mock_args .read_timeout = 120.0
189+ mock_args .write_timeout = 180.0
190+ mock_args .log_level = 'INFO'
191+
192+ mock_determine_service .return_value = 'test-service'
193+ mock_determine_region .return_value = 'ap-southeast-1'
194+
195+ mock_transport = Mock ()
196+ mock_create_transport .return_value = mock_transport
197+ mock_proxy = Mock ()
198+ mock_proxy .run_async = AsyncMock ()
199+ mock_as_proxy .return_value = mock_proxy
200+
201+ # Act
202+ await setup_mcp_mode (local_mcp , mock_args )
203+
204+ # Assert - verify AWS_REGION was automatically injected
205+ assert mock_create_transport .call_count == 1
206+ call_args = mock_create_transport .call_args
207+ metadata = call_args [0 ][3 ]
208+ assert metadata == {'AWS_REGION' : 'ap-southeast-1' }
209+
210+ @patch ('mcp_proxy_for_aws.server.create_transport_with_sigv4' )
211+ @patch ('mcp_proxy_for_aws.server.FastMCP.as_proxy' )
212+ @patch ('mcp_proxy_for_aws.server.determine_aws_region' )
213+ @patch ('mcp_proxy_for_aws.server.determine_service_name' )
214+ @patch ('mcp_proxy_for_aws.server.add_tool_filtering_middleware' )
215+ async def test_setup_mcp_mode_metadata_without_aws_region_injects_it (
216+ self ,
217+ mock_add_filtering ,
218+ mock_determine_service ,
219+ mock_determine_region ,
220+ mock_as_proxy ,
221+ mock_create_transport ,
222+ ):
223+ """Test that AWS_REGION is injected even when other metadata is provided."""
224+ # Arrange
225+ local_mcp = Mock (spec = FastMCP )
226+ mock_args = Mock ()
227+ mock_args .endpoint = 'https://test.example.com'
228+ mock_args .service = 'test-service'
229+ mock_args .region = 'us-west-1'
230+ mock_args .profile = None
231+ mock_args .read_only = False
232+ mock_args .retries = 0
233+ mock_args .metadata = {'CUSTOM_KEY' : 'custom_value' , 'ANOTHER_KEY' : 'another_value' }
234+ mock_args .timeout = 180.0
235+ mock_args .connect_timeout = 60.0
236+ mock_args .read_timeout = 120.0
237+ mock_args .write_timeout = 180.0
238+ mock_args .log_level = 'INFO'
239+
240+ mock_determine_service .return_value = 'test-service'
241+ mock_determine_region .return_value = 'us-west-1'
242+
243+ mock_transport = Mock ()
244+ mock_create_transport .return_value = mock_transport
245+ mock_proxy = Mock ()
246+ mock_proxy .run_async = AsyncMock ()
247+ mock_as_proxy .return_value = mock_proxy
248+
249+ # Act
250+ await setup_mcp_mode (local_mcp , mock_args )
251+
252+ # Assert - verify AWS_REGION was injected along with custom metadata
253+ assert mock_create_transport .call_count == 1
254+ call_args = mock_create_transport .call_args
255+ metadata = call_args [0 ][3 ]
256+ assert metadata == {
257+ 'AWS_REGION' : 'us-west-1' ,
258+ 'CUSTOM_KEY' : 'custom_value' ,
259+ 'ANOTHER_KEY' : 'another_value' ,
260+ }
261+
159262 def test_add_tool_filtering_middleware (self ):
160263 """Test that tool filtering middleware is added correctly."""
161264 # Arrange
0 commit comments