From 6db6e660fa759bf0b2892c843e0d8883a41d5e46 Mon Sep 17 00:00:00 2001 From: Vishal Habib Date: Mon, 26 Oct 2026 11:52:03 -0400 Subject: [PATCH] fix(samples): accept explicit null for optional MCP params, keep logs off stdout - knowledge_base_list(region_name) and get_emails(subject_contains) default to None but were typed str, so an explicit null failed validation. Type them Optional[str]. - create_comparison_chart and real_estate_expert printed to stdout, which is the JSON-RPC channel on stdio. Print to stderr. --- .../application/mcp_server_kb.py | 4 ++-- .../application/mcp_server_stock.py | 2 +- .../backend/mcp_servers/email_history/email_history_server.py | 4 ++-- .../triage-agent/backend/mcp_servers/strands/strands_agent.py | 3 ++- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/python/04-industry-use-cases/finance/genai-powered-financial-advisor-tools/application/mcp_server_kb.py b/python/04-industry-use-cases/finance/genai-powered-financial-advisor-tools/application/mcp_server_kb.py index d99a282a9..e2765e370 100644 --- a/python/04-industry-use-cases/finance/genai-powered-financial-advisor-tools/application/mcp_server_kb.py +++ b/python/04-industry-use-cases/finance/genai-powered-financial-advisor-tools/application/mcp_server_kb.py @@ -5,7 +5,7 @@ import logging import os import sys -from typing import Any, Dict, List +from typing import Any, Dict, List, Optional from pathlib import Path import yaml @@ -51,7 +51,7 @@ def load_config(): logger.error(f"{err_msg}") @mcp.tool() -async def knowledge_base_list(region_name: str = None) -> List[Dict[str, Any]]: +async def knowledge_base_list(region_name: Optional[str] = None) -> List[Dict[str, Any]]: """Extract the list of Knowledge Bases on Amazon Bedrock Args: diff --git a/python/04-industry-use-cases/finance/genai-powered-financial-advisor-tools/application/mcp_server_stock.py b/python/04-industry-use-cases/finance/genai-powered-financial-advisor-tools/application/mcp_server_stock.py index d75f9e4df..7fc151b71 100644 --- a/python/04-industry-use-cases/finance/genai-powered-financial-advisor-tools/application/mcp_server_stock.py +++ b/python/04-industry-use-cases/finance/genai-powered-financial-advisor-tools/application/mcp_server_stock.py @@ -402,7 +402,7 @@ async def create_comparison_chart(tickers: str, period: Optional[str] = None) -> timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"comparison_{'_'.join(ticker_list)}_{period or '1y'}_{timestamp}.png" filepath = os.path.join("outputs/charts/", filename) - print(f"\nfilepath: {filepath}") + print(f"\nfilepath: {filepath}", file=sys.stderr) plt.savefig(filepath, dpi=300, bbox_inches='tight') plt.close() diff --git a/python/07-ux-demos/triage-agent/backend/mcp_servers/email_history/email_history_server.py b/python/07-ux-demos/triage-agent/backend/mcp_servers/email_history/email_history_server.py index 8bc460699..ac4280525 100644 --- a/python/07-ux-demos/triage-agent/backend/mcp_servers/email_history/email_history_server.py +++ b/python/07-ux-demos/triage-agent/backend/mcp_servers/email_history/email_history_server.py @@ -1,7 +1,7 @@ from mcp.server import FastMCP import json import os -from typing import List, Dict +from typing import List, Dict, Optional # Create a new MCP server mcp = FastMCP("Email History Server") @@ -19,7 +19,7 @@ def load_emails() -> List[Dict]: @mcp.tool(description="Get sent emails with optional filtering") def get_emails( limit: int = 10, - subject_contains: str = None + subject_contains: Optional[str] = None ) -> List[Dict]: """Get sent emails with optional filtering.""" emails = load_emails() diff --git a/python/07-ux-demos/triage-agent/backend/mcp_servers/strands/strands_agent.py b/python/07-ux-demos/triage-agent/backend/mcp_servers/strands/strands_agent.py index d880fbadb..1cbc0b906 100644 --- a/python/07-ux-demos/triage-agent/backend/mcp_servers/strands/strands_agent.py +++ b/python/07-ux-demos/triage-agent/backend/mcp_servers/strands/strands_agent.py @@ -1,3 +1,4 @@ +import sys from mcp.server import FastMCP from strands import Agent from strands_tools import http_request @@ -23,7 +24,7 @@ def real_estate_agent(query: str) -> str: formatted_query = f"Answer the following question: {query}" try: - print("Routed to Real Estate Expert") + print("Routed to Real Estate Expert", file=sys.stderr) real_estate_agent = Agent( model="us.amazon.nova-pro-v1:0", system_prompt=REAL_ESTATE_SYSTEM_PROMPT,