Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 47 additions & 35 deletions src/assets/__tests__/__snapshots__/assets.snapshot.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -4000,20 +4000,20 @@ def get_all_gateway_mcp_toolsets() -> list[MCPToolset]:
{{#each gatewayProviders}}
url = os.environ.get("{{envVarName}}")
if url:
{{#if (eq authType "AWS_IAM")}}
{{#if (eq authType "AWS_IAM")}}
session = create_aws_session()
auth = SigV4HTTPXAuth(session.get_credentials(), "bedrock-agentcore", session.region_name)
toolsets.append(MCPToolset(connection_params=StreamableHTTPConnectionParams(
toolsets.append(MCPToolset(tool_name_prefix="{{snakeCase name}}", connection_params=StreamableHTTPConnectionParams(
url=url,
httpx_client_factory=lambda **kwargs: httpx.AsyncClient(auth=auth, **kwargs)
)))
{{else if (eq authType "CUSTOM_JWT")}}
{{else if (eq authType "CUSTOM_JWT")}}
token = _get_bearer_token_{{snakeCase name}}()
headers = {"Authorization": f"Bearer {token}"} if token else None
toolsets.append(MCPToolset(connection_params=StreamableHTTPConnectionParams(url=url, headers=headers)))
{{else}}
toolsets.append(MCPToolset(connection_params=StreamableHTTPConnectionParams(url=url)))
{{/if}}
toolsets.append(MCPToolset(tool_name_prefix="{{snakeCase name}}", connection_params=StreamableHTTPConnectionParams(url=url, headers=headers)))
{{else}}
toolsets.append(MCPToolset(tool_name_prefix="{{snakeCase name}}", connection_params=StreamableHTTPConnectionParams(url=url)))
{{/if}}
else:
logger.warning("{{envVarName}} not set — {{name}} gateway tools unavailable")
{{/each}}
Expand Down Expand Up @@ -4106,7 +4106,7 @@ requires-python = ">=3.10"
dependencies = [
"opentelemetry-distro",
"opentelemetry-exporter-otlp",
"google-adk >= 1.17.0, < 2.0.0",
"google-adk >= 1.35.0, < 2.0.0",
"google-genai >= 1.0.0, < 2.0.0",
"bedrock-agentcore >= 1.0.3",
"botocore[crt] >= 1.35.0",
Expand Down Expand Up @@ -4435,23 +4435,25 @@ def get_all_gateway_mcp_client() -> MultiServerMCPClient | None:
{{#each gatewayProviders}}
url = os.environ.get("{{envVarName}}")
if url:
{{#if (eq authType "AWS_IAM")}}
{{#if (eq authType "AWS_IAM")}}
session = create_aws_session()
auth = SigV4HTTPXAuth(session.get_credentials(), "bedrock-agentcore", session.region_name)
servers["{{name}}"] = {"transport": "streamable_http", "url": url, "auth": auth}
{{else if (eq authType "CUSTOM_JWT")}}
servers["{{snakeCase name}}"] = {"transport": "streamable_http", "url": url, "auth": auth}
{{else if (eq authType "CUSTOM_JWT")}}
token = _get_bearer_token_{{snakeCase name}}()
headers = {"Authorization": f"Bearer {token}"} if token else None
servers["{{name}}"] = {"transport": "streamable_http", "url": url, "headers": headers}
{{else}}
servers["{{name}}"] = {"transport": "streamable_http", "url": url}
{{/if}}
servers["{{snakeCase name}}"] = {"transport": "streamable_http", "url": url, "headers": headers}
{{else}}
servers["{{snakeCase name}}"] = {"transport": "streamable_http", "url": url}
{{/if}}
else:
logger.warning("{{envVarName}} not set — {{name}} gateway tools unavailable")
{{/each}}
if not servers:
return None
return MultiServerMCPClient(servers)
# tool_name_prefix namespaces each gateway's tools by server key so multiple
# gateways exposing the same tool (e.g. x_amz_bedrock_agentcore_search) don't collide.
return MultiServerMCPClient(servers, tool_name_prefix=True)
{{else}}
{{#if isVpc}}
# VPC mode: external MCP endpoints are not reachable without a NAT gateway.
Expand Down Expand Up @@ -4629,7 +4631,7 @@ dependencies = [
"opentelemetry-instrumentation-langchain >= 0.59.0",
"langgraph >= 1.0.2",
"mcp >= 1.19.0",
"langchain-mcp-adapters >= 0.1.11",
"langchain-mcp-adapters >= 0.2.0",
"langchain >= 1.0.3",
"bedrock-agentcore >= 1.8.0",
"botocore[crt] >= 1.35.0",
Expand Down Expand Up @@ -4747,6 +4749,9 @@ exports[`Assets Directory Snapshots > Python framework assets > python/python/ht
"{{#if needsOs}}
import os
{{/if}}
{{#if hasGateway}}
from contextlib import AsyncExitStack
{{/if}}
from agents import Agent, Runner, function_tool
from bedrock_agentcore.runtime import BedrockAgentCoreApp
from model.load import load_model
Expand Down Expand Up @@ -4857,15 +4862,22 @@ async def main(query):
try:
{{#if hasGateway}}
if mcp_servers:
agent = Agent(
name="{{ name }}",
model="gpt-4.1",
instructions=INSTRUCTIONS,
mcp_servers=mcp_servers,
tools=tools
)
result = await Runner.run(agent, query)
return result
# Connect every gateway server before the run; include_server_in_tool_names
# namespaces each server's tools so multiple gateways exposing the same tool
# (e.g. x_amz_bedrock_agentcore_search) don't collide.
async with AsyncExitStack() as stack:
for server in mcp_servers:
await stack.enter_async_context(server)
agent = Agent(
name="{{ name }}",
model="gpt-4.1",
instructions=INSTRUCTIONS,
mcp_servers=mcp_servers,
tools=tools,
mcp_config={"include_server_in_tool_names": True},
)
result = await Runner.run(agent, query)
return result
else:
agent = Agent(
name="{{ name }}",
Expand Down Expand Up @@ -4965,20 +4977,20 @@ def get_all_gateway_mcp_servers() -> list[MCPServerStreamableHttp]:
{{#each gatewayProviders}}
url = os.environ.get("{{envVarName}}")
if url:
{{#if (eq authType "AWS_IAM")}}
{{#if (eq authType "AWS_IAM")}}
session = create_aws_session()
auth = SigV4HTTPXAuth(session.get_credentials(), "bedrock-agentcore", session.region_name)
servers.append(MCPServerStreamableHttp(
name="{{name}}",
params={"url": url, "httpx_client_factory": lambda **kwargs: httpx.AsyncClient(auth=auth, **kwargs)}
))
{{else if (eq authType "CUSTOM_JWT")}}
{{else if (eq authType "CUSTOM_JWT")}}
token = _get_bearer_token_{{snakeCase name}}()
headers = {"Authorization": f"Bearer {token}"} if token else {}
servers.append(MCPServerStreamableHttp(name="{{name}}", params={"url": url, "headers": headers}))
{{else}}
{{else}}
servers.append(MCPServerStreamableHttp(name="{{name}}", params={"url": url}))
{{/if}}
{{/if}}
else:
logger.warning("{{envVarName}} not set — {{name}} gateway tools unavailable")
{{/each}}
Expand Down Expand Up @@ -5066,7 +5078,7 @@ readme = "README.md"
requires-python = ">=3.10"
dependencies = [
"aws-opentelemetry-distro",
"openai-agents >= 0.4.2",
"openai-agents >= 0.16.0",
"bedrock-agentcore >= 1.8.0",
"botocore[crt] >= 1.35.0",
{{#if hasGateway}}{{#if (includes gatewayAuthTypes "AWS_IAM")}}"mcp-proxy-for-aws >= 1.1.0",
Expand Down Expand Up @@ -5471,13 +5483,13 @@ def get_{{snakeCase name}}_mcp_client() -> MCPClient | None:
logger.warning("{{envVarName}} not set — {{name}} gateway tools unavailable")
return None
{{#if (eq authType "AWS_IAM")}}
return MCPClient(lambda: aws_iam_streamablehttp_client(url, aws_service="bedrock-agentcore", aws_region=os.environ.get("AWS_REGION", os.environ.get("AWS_DEFAULT_REGION"))))
return MCPClient(lambda: aws_iam_streamablehttp_client(url, aws_service="bedrock-agentcore", aws_region=os.environ.get("AWS_REGION", os.environ.get("AWS_DEFAULT_REGION"))), prefix="{{snakeCase name}}")
{{else if (eq authType "CUSTOM_JWT")}}
token = _get_bearer_token_{{snakeCase name}}()
headers = {"Authorization": f"Bearer {token}"} if token else {}
return MCPClient(lambda: streamablehttp_client(url, headers=headers))
return MCPClient(lambda: streamablehttp_client(url, headers=headers), prefix="{{snakeCase name}}")
{{else}}
return MCPClient(lambda: streamablehttp_client(url))
return MCPClient(lambda: streamablehttp_client(url), prefix="{{snakeCase name}}")
{{/if}}

{{/each}}
Expand Down Expand Up @@ -5662,7 +5674,7 @@ dependencies = [
{{#if (eq modelProvider "Gemini")}}"google-genai >= 1.0.0",
{{/if}}"mcp >= 1.19.0",
{{#if (eq modelProvider "OpenAI")}}"openai >= 1.0.0",
{{/if}}"strands-agents >= 1.13.0",
{{/if}}"strands-agents >= 1.15.0",
{{#if hasGateway}}{{#if (includes gatewayAuthTypes "AWS_IAM")}}"mcp-proxy-for-aws >= 1.1.0",
{{/if}}{{/if}}
]
Expand Down
14 changes: 7 additions & 7 deletions src/assets/python/http/googleadk/base/mcp_client/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,20 +34,20 @@ def get_all_gateway_mcp_toolsets() -> list[MCPToolset]:
{{#each gatewayProviders}}
url = os.environ.get("{{envVarName}}")
if url:
{{#if (eq authType "AWS_IAM")}}
{{#if (eq authType "AWS_IAM")}}
session = create_aws_session()
auth = SigV4HTTPXAuth(session.get_credentials(), "bedrock-agentcore", session.region_name)
toolsets.append(MCPToolset(connection_params=StreamableHTTPConnectionParams(
toolsets.append(MCPToolset(tool_name_prefix="{{snakeCase name}}", connection_params=StreamableHTTPConnectionParams(
url=url,
httpx_client_factory=lambda **kwargs: httpx.AsyncClient(auth=auth, **kwargs)
)))
{{else if (eq authType "CUSTOM_JWT")}}
{{else if (eq authType "CUSTOM_JWT")}}
token = _get_bearer_token_{{snakeCase name}}()
headers = {"Authorization": f"Bearer {token}"} if token else None
toolsets.append(MCPToolset(connection_params=StreamableHTTPConnectionParams(url=url, headers=headers)))
{{else}}
toolsets.append(MCPToolset(connection_params=StreamableHTTPConnectionParams(url=url)))
{{/if}}
toolsets.append(MCPToolset(tool_name_prefix="{{snakeCase name}}", connection_params=StreamableHTTPConnectionParams(url=url, headers=headers)))
{{else}}
toolsets.append(MCPToolset(tool_name_prefix="{{snakeCase name}}", connection_params=StreamableHTTPConnectionParams(url=url)))
{{/if}}
else:
logger.warning("{{envVarName}} not set — {{name}} gateway tools unavailable")
{{/each}}
Expand Down
2 changes: 1 addition & 1 deletion src/assets/python/http/googleadk/base/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ requires-python = ">=3.10"
dependencies = [
"opentelemetry-distro",
"opentelemetry-exporter-otlp",
"google-adk >= 1.17.0, < 2.0.0",
"google-adk >= 1.35.0, < 2.0.0",
"google-genai >= 1.0.0, < 2.0.0",
"bedrock-agentcore >= 1.0.3",
"botocore[crt] >= 1.35.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,23 +32,25 @@ def get_all_gateway_mcp_client() -> MultiServerMCPClient | None:
{{#each gatewayProviders}}
url = os.environ.get("{{envVarName}}")
if url:
{{#if (eq authType "AWS_IAM")}}
{{#if (eq authType "AWS_IAM")}}
session = create_aws_session()
auth = SigV4HTTPXAuth(session.get_credentials(), "bedrock-agentcore", session.region_name)
servers["{{name}}"] = {"transport": "streamable_http", "url": url, "auth": auth}
{{else if (eq authType "CUSTOM_JWT")}}
servers["{{snakeCase name}}"] = {"transport": "streamable_http", "url": url, "auth": auth}
{{else if (eq authType "CUSTOM_JWT")}}
token = _get_bearer_token_{{snakeCase name}}()
headers = {"Authorization": f"Bearer {token}"} if token else None
servers["{{name}}"] = {"transport": "streamable_http", "url": url, "headers": headers}
{{else}}
servers["{{name}}"] = {"transport": "streamable_http", "url": url}
{{/if}}
servers["{{snakeCase name}}"] = {"transport": "streamable_http", "url": url, "headers": headers}
{{else}}
servers["{{snakeCase name}}"] = {"transport": "streamable_http", "url": url}
{{/if}}
else:
logger.warning("{{envVarName}} not set — {{name}} gateway tools unavailable")
{{/each}}
if not servers:
return None
return MultiServerMCPClient(servers)
# tool_name_prefix namespaces each gateway's tools by server key so multiple
# gateways exposing the same tool (e.g. x_amz_bedrock_agentcore_search) don't collide.
return MultiServerMCPClient(servers, tool_name_prefix=True)
{{else}}
{{#if isVpc}}
# VPC mode: external MCP endpoints are not reachable without a NAT gateway.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ dependencies = [
"opentelemetry-instrumentation-langchain >= 0.59.0",
"langgraph >= 1.0.2",
"mcp >= 1.19.0",
"langchain-mcp-adapters >= 0.1.11",
"langchain-mcp-adapters >= 0.2.0",
"langchain >= 1.0.3",
"bedrock-agentcore >= 1.8.0",
"botocore[crt] >= 1.35.0",
Expand Down
28 changes: 19 additions & 9 deletions src/assets/python/http/openaiagents/base/main.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
{{#if needsOs}}
import os
{{/if}}
{{#if hasGateway}}
from contextlib import AsyncExitStack
{{/if}}
from agents import Agent, Runner, function_tool
from bedrock_agentcore.runtime import BedrockAgentCoreApp
from model.load import load_model
Expand Down Expand Up @@ -111,15 +114,22 @@ async def main(query):
try:
{{#if hasGateway}}
if mcp_servers:
agent = Agent(
name="{{ name }}",
model="gpt-4.1",
instructions=INSTRUCTIONS,
mcp_servers=mcp_servers,
tools=tools
)
result = await Runner.run(agent, query)
return result
# Connect every gateway server before the run; include_server_in_tool_names
# namespaces each server's tools so multiple gateways exposing the same tool
# (e.g. x_amz_bedrock_agentcore_search) don't collide.
async with AsyncExitStack() as stack:
for server in mcp_servers:
await stack.enter_async_context(server)
agent = Agent(
name="{{ name }}",
model="gpt-4.1",
instructions=INSTRUCTIONS,
mcp_servers=mcp_servers,
tools=tools,
mcp_config={"include_server_in_tool_names": True},
)
result = await Runner.run(agent, query)
return result
else:
agent = Agent(
name="{{ name }}",
Expand Down
8 changes: 4 additions & 4 deletions src/assets/python/http/openaiagents/base/mcp_client/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,20 +33,20 @@ def get_all_gateway_mcp_servers() -> list[MCPServerStreamableHttp]:
{{#each gatewayProviders}}
url = os.environ.get("{{envVarName}}")
if url:
{{#if (eq authType "AWS_IAM")}}
{{#if (eq authType "AWS_IAM")}}
session = create_aws_session()
auth = SigV4HTTPXAuth(session.get_credentials(), "bedrock-agentcore", session.region_name)
servers.append(MCPServerStreamableHttp(
name="{{name}}",
params={"url": url, "httpx_client_factory": lambda **kwargs: httpx.AsyncClient(auth=auth, **kwargs)}
))
{{else if (eq authType "CUSTOM_JWT")}}
{{else if (eq authType "CUSTOM_JWT")}}
token = _get_bearer_token_{{snakeCase name}}()
headers = {"Authorization": f"Bearer {token}"} if token else {}
servers.append(MCPServerStreamableHttp(name="{{name}}", params={"url": url, "headers": headers}))
{{else}}
{{else}}
servers.append(MCPServerStreamableHttp(name="{{name}}", params={"url": url}))
{{/if}}
{{/if}}
else:
logger.warning("{{envVarName}} not set — {{name}} gateway tools unavailable")
{{/each}}
Expand Down
2 changes: 1 addition & 1 deletion src/assets/python/http/openaiagents/base/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ readme = "README.md"
requires-python = ">=3.10"
dependencies = [
"aws-opentelemetry-distro",
"openai-agents >= 0.4.2",
"openai-agents >= 0.16.0",
"bedrock-agentcore >= 1.8.0",
"botocore[crt] >= 1.35.0",
{{#if hasGateway}}{{#if (includes gatewayAuthTypes "AWS_IAM")}}"mcp-proxy-for-aws >= 1.1.0",
Expand Down
6 changes: 3 additions & 3 deletions src/assets/python/http/strands/base/mcp_client/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,13 @@ def get_{{snakeCase name}}_mcp_client() -> MCPClient | None:
logger.warning("{{envVarName}} not set — {{name}} gateway tools unavailable")
return None
{{#if (eq authType "AWS_IAM")}}
return MCPClient(lambda: aws_iam_streamablehttp_client(url, aws_service="bedrock-agentcore", aws_region=os.environ.get("AWS_REGION", os.environ.get("AWS_DEFAULT_REGION"))))
return MCPClient(lambda: aws_iam_streamablehttp_client(url, aws_service="bedrock-agentcore", aws_region=os.environ.get("AWS_REGION", os.environ.get("AWS_DEFAULT_REGION"))), prefix="{{snakeCase name}}")
{{else if (eq authType "CUSTOM_JWT")}}
token = _get_bearer_token_{{snakeCase name}}()
headers = {"Authorization": f"Bearer {token}"} if token else {}
return MCPClient(lambda: streamablehttp_client(url, headers=headers))
return MCPClient(lambda: streamablehttp_client(url, headers=headers), prefix="{{snakeCase name}}")
{{else}}
return MCPClient(lambda: streamablehttp_client(url))
return MCPClient(lambda: streamablehttp_client(url), prefix="{{snakeCase name}}")
{{/if}}

{{/each}}
Expand Down
2 changes: 1 addition & 1 deletion src/assets/python/http/strands/base/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ dependencies = [
{{#if (eq modelProvider "Gemini")}}"google-genai >= 1.0.0",
{{/if}}"mcp >= 1.19.0",
{{#if (eq modelProvider "OpenAI")}}"openai >= 1.0.0",
{{/if}}"strands-agents >= 1.13.0",
{{/if}}"strands-agents >= 1.15.0",
{{#if hasGateway}}{{#if (includes gatewayAuthTypes "AWS_IAM")}}"mcp-proxy-for-aws >= 1.1.0",
{{/if}}{{/if}}
]
Expand Down
Loading
Loading