81
81
# Get logger
82
82
logger = logging .getLogger (__name__ )
83
83
84
+ # Global constant for default MCP tool name to filter and use
85
+ DEFAULT_MCP_TOOL_NAME = "intelligent_tool_finder"
86
+
87
+
88
+ def enable_verbose_logging ():
89
+ """Enable verbose debug logging for HTTP libraries and main logger."""
90
+ # Set main logger to DEBUG level
91
+ logger .setLevel (logging .DEBUG )
92
+
93
+ # Enable debug logging for httpx to see request/response details
94
+ httpx_logger = logging .getLogger ("httpx" )
95
+ httpx_logger .setLevel (logging .DEBUG )
96
+ httpx_logger .propagate = True
97
+
98
+ # Enable debug logging for httpcore (underlying HTTP library)
99
+ httpcore_logger = logging .getLogger ("httpcore" )
100
+ httpcore_logger .setLevel (logging .DEBUG )
101
+ httpcore_logger .propagate = True
102
+
103
+ # Enable debug logging for mcp client libraries
104
+ mcp_logger = logging .getLogger ("mcp" )
105
+ mcp_logger .setLevel (logging .DEBUG )
106
+ mcp_logger .propagate = True
107
+
108
+ logger .info ("Verbose logging enabled for httpx, httpcore, mcp libraries, and main logger" )
109
+
84
110
def get_auth_mode_from_args () -> tuple [bool , str , str ]:
85
111
"""
86
112
Parse command line arguments to determine authentication mode and env file names.
@@ -231,6 +257,14 @@ def parse_arguments() -> argparse.Namespace:
231
257
parser .add_argument ('--message' , type = str , default = 'what is the current time in Clarksburg, MD' ,
232
258
help = 'Message to send to the agent' )
233
259
260
+ # MCP tool filtering arguments
261
+ parser .add_argument ('--mcp-tool-name' , type = str , default = DEFAULT_MCP_TOOL_NAME ,
262
+ help = f'Name of the MCP tool to filter and use (default: { DEFAULT_MCP_TOOL_NAME } )' )
263
+
264
+ # Verbose logging argument
265
+ parser .add_argument ('--verbose' , '-v' , action = 'store_true' ,
266
+ help = 'Enable verbose HTTP debugging output' )
267
+
234
268
# Authentication method arguments
235
269
parser .add_argument ('--use-session-cookie' , action = 'store_true' ,
236
270
help = 'Use session cookie authentication instead of M2M' )
@@ -261,6 +295,10 @@ def parse_arguments() -> argparse.Namespace:
261
295
262
296
args = parser .parse_args ()
263
297
298
+ # Enable verbose logging if requested
299
+ if args .verbose :
300
+ enable_verbose_logging ()
301
+
264
302
# Validate authentication parameters based on method
265
303
if args .use_session_cookie :
266
304
# For session cookie auth, we just need the cookie file
@@ -394,19 +432,29 @@ async def invoke_mcp_tool(mcp_registry_url: str, server_name: str, tool_name: st
394
432
}
395
433
396
434
# TRACE: Print all parameters received by invoke_mcp_tool
397
- logger .info (f"invoke_mcp_tool TRACE - Parameters received:" )
398
- logger .info (f" mcp_registry_url: { mcp_registry_url } " )
399
- logger .info (f" server_name: { server_name } " )
400
- logger .info (f" tool_name: { tool_name } " )
401
- logger .info (f" arguments: { arguments } " )
402
- logger .info (f" auth_token: { auth_token [:50 ] if auth_token else 'None' } ..." )
403
- logger .info (f" user_pool_id: { user_pool_id } " )
404
- logger .info (f" client_id: { client_id } " )
405
- logger .info (f" region: { region } " )
406
- logger .info (f" auth_method: { auth_method } " )
407
- logger .info (f" session_cookie: { session_cookie } " )
408
- logger .info (f" supported_transports: { supported_transports } " )
409
- logger .info (f"invoke_mcp_tool TRACE - Headers built: { headers } " )
435
+ logger .debug (f"invoke_mcp_tool TRACE - Parameters received:" )
436
+ logger .debug (f" mcp_registry_url: { mcp_registry_url } " )
437
+ logger .debug (f" server_name: { server_name } " )
438
+ logger .debug (f" tool_name: { tool_name } " )
439
+ logger .debug (f" arguments: { arguments } " )
440
+ logger .debug (f" auth_token: { auth_token [:50 ] if auth_token else 'None' } ..." )
441
+ logger .debug (f" user_pool_id: { user_pool_id } " )
442
+ logger .debug (f" client_id: { client_id } " )
443
+ logger .debug (f" region: { region } " )
444
+ logger .debug (f" auth_method: { auth_method } " )
445
+ logger .debug (f" session_cookie: { session_cookie } " )
446
+ logger .debug (f" supported_transports: { supported_transports } " )
447
+ logger .debug (f"invoke_mcp_tool TRACE - Headers built: { headers } " )
448
+
449
+ # Check for server-specific AUTH_TOKEN environment variable
450
+ # Convert server_name to env var format: /sre-gateway -> SRE_GATEWAY_AUTH_TOKEN
451
+ server_env_name = server_name .strip ('/' ).upper ().replace ('-' , '_' ) + '_AUTH_TOKEN'
452
+ server_auth_token = os .environ .get (server_env_name )
453
+
454
+ if server_auth_token :
455
+ logger .info (f"Found server-specific auth token in environment variable: { server_env_name } " )
456
+ # Use the server-specific token for Authorization header
457
+ headers ['Authorization' ] = f'Bearer { server_auth_token } '
410
458
411
459
if auth_method == "session_cookie" and session_cookie :
412
460
headers ['Cookie' ] = f'mcp_gateway_session={ session_cookie } '
@@ -416,10 +464,16 @@ async def invoke_mcp_tool(mcp_registry_url: str, server_name: str, tool_name: st
416
464
'X-Client-Id' : redact_sensitive_value (client_id ) if client_id else '' ,
417
465
'X-Region' : region or 'us-east-1'
418
466
}
467
+ if server_auth_token :
468
+ redacted_headers ['Authorization' ] = f'Bearer { redact_sensitive_value (server_auth_token )} '
419
469
else :
420
- headers ['Authorization' ] = f'Bearer { auth_token } '
470
+ headers ['X-Authorization' ] = f'Bearer { auth_token } '
471
+ # If no server-specific token, use the general auth_token
472
+ if not server_auth_token :
473
+ headers ['Authorization' ] = f'Bearer { auth_token } '
421
474
redacted_headers = {
422
- 'Authorization' : f'Bearer { redact_sensitive_value (auth_token )} ' ,
475
+ 'Authorization' : f'Bearer { redact_sensitive_value (server_auth_token or auth_token )} ' ,
476
+ 'X-Authorization' : f'Bearer { redact_sensitive_value (auth_token )} ' ,
423
477
'X-User-Pool-Id' : redact_sensitive_value (user_pool_id ) if user_pool_id else '' ,
424
478
'X-Client-Id' : redact_sensitive_value (client_id ) if client_id else '' ,
425
479
'X-Region' : region or 'us-east-1'
@@ -707,7 +761,8 @@ async def main():
707
761
model = ChatAnthropic (
708
762
model = args .model ,
709
763
api_key = anthropic_api_key ,
710
- temperature = 0
764
+ temperature = 0 ,
765
+ max_tokens = 8192 ,
711
766
)
712
767
713
768
try :
@@ -722,7 +777,7 @@ async def main():
722
777
else :
723
778
# For both M2M and pre-generated JWT tokens
724
779
auth_headers = {
725
- 'Authorization' : f'Bearer { access_token } ' ,
780
+ 'X- Authorization' : f'Bearer { access_token } ' ,
726
781
'X-User-Pool-Id' : args .user_pool_id ,
727
782
'X-Client-Id' : args .client_id ,
728
783
'X-Region' : args .region
@@ -731,7 +786,7 @@ async def main():
731
786
# Log redacted headers
732
787
redacted_headers = {}
733
788
for k , v in auth_headers .items ():
734
- if k in ['Authorization' , 'Cookie' , 'X-User-Pool-Id' , 'X-Client-Id' ]:
789
+ if k in ['X- Authorization' , 'Cookie' , 'X-User-Pool-Id' , 'X-Client-Id' ]:
735
790
redacted_headers [k ] = redact_sensitive_value (v ) if v else ''
736
791
else :
737
792
redacted_headers [k ] = v
@@ -755,9 +810,12 @@ async def main():
755
810
mcp_tools = await client .get_tools ()
756
811
logger .info (f"Available MCP tools: { [tool .name for tool in mcp_tools ]} " )
757
812
758
- # Add the calculator and invoke_mcp_tool to the tools array
759
- # The invoke_mcp_tool function already supports authentication parameters
760
- all_tools = [calculator , invoke_mcp_tool ] + mcp_tools
813
+ # Filter MCP tools to only include the specified tool
814
+ filtered_tools = [tool for tool in mcp_tools if tool .name == args .mcp_tool_name ]
815
+ logger .info (f"Filtered MCP tools ({ args .mcp_tool_name } only): { [tool .name for tool in filtered_tools ]} " )
816
+
817
+ # Add only the calculator, invoke_mcp_tool, and the specified MCP tool to the tools array
818
+ all_tools = [calculator , invoke_mcp_tool ] + filtered_tools
761
819
logger .info (f"All available tools: { [tool .name if hasattr (tool , 'name' ) else tool .__name__ for tool in all_tools ]} " )
762
820
763
821
# Create the agent with the model and all tools
0 commit comments