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
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"id": "5c0122e65c053f38",
"metadata": {},
"source": [
"# Hosting MCP Server on Amazon Bedrock AgentCore Runtime\n",
"# Hosting MCP Server on Amazon Bedrock AgentCore Runtime - OAuth Inbound Authentication\n",
"\n",
"## Overview\n",
"\n",
Expand Down Expand Up @@ -71,6 +71,51 @@
"!pip install --force-reinstall -U -r requirements.txt --quiet"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d60bc625",
"metadata": {},
"outputs": [],
"source": [
"from bedrock_agentcore_starter_toolkit import Runtime\n",
"from bedrock_agentcore_starter_toolkit.operations.runtime import destroy_bedrock_agentcore\n",
"from boto3.session import Session\n",
"from pathlib import Path\n",
"import os\n",
"import sys\n",
"\n",
"# Get the current notebook's directory\n",
"current_dir = os.path.dirname(os.path.abspath('__file__' if '__file__' in globals() else '.'))\n",
"\n",
"utils_dir = os.path.join(current_dir, '..')\n",
"utils_dir = os.path.abspath(utils_dir)\n",
"\n",
"# Add to sys.path\n",
"sys.path.insert(0, utils_dir)\n",
"print(\"sys.path[0]:\", sys.path[0])\n",
"\n",
"from utils import setup_cognito_user_pool"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "76b89c61",
"metadata": {},
"outputs": [],
"source": [
"boto_session = Session()\n",
"region = boto_session.region_name\n",
"\n",
"ssm_client = boto_session.client('ssm', region_name=region)\n",
"secrets_client = boto_session.client('secretsmanager', region_name=region)\n",
"agentcore_control_client = boto_session.client(\"bedrock-agentcore-control\", region_name=region)\n",
"ssm_client = boto_session.client('ssm', region_name=region)\n",
"\n",
"tool_name = \"mcp_server_agentcore\""
]
},
{
"cell_type": "markdown",
"id": "ca924a7a2731e26f",
Expand Down Expand Up @@ -232,29 +277,6 @@
"AgentCore Runtime requires authentication. We'll use Amazon Cognito to provide JWT tokens for accessing our deployed MCP server."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "import_utils",
"metadata": {},
"outputs": [],
"source": [
"import sys\n",
"import os\n",
"\n",
"# Get the current notebook's directory\n",
"current_dir = os.path.dirname(os.path.abspath('__file__' if '__file__' in globals() else '.'))\n",
"\n",
"utils_dir = os.path.join(current_dir, '..')\n",
"utils_dir = os.path.abspath(utils_dir)\n",
"\n",
"# Add to sys.path\n",
"sys.path.insert(0, utils_dir)\n",
"print(\"sys.path[0]:\", sys.path[0])\n",
"\n",
"from utils import setup_cognito_user_pool"
]
},
{
"cell_type": "code",
"execution_count": null,
Expand Down Expand Up @@ -292,12 +314,6 @@
"metadata": {},
"outputs": [],
"source": [
"from bedrock_agentcore_starter_toolkit import Runtime\n",
"from boto3.session import Session\n",
"import time\n",
"\n",
"boto_session = Session()\n",
"region = boto_session.region_name\n",
"print(f\"Using AWS region: {region}\")\n",
"\n",
"required_files = ['mcp_server.py', 'requirements.txt']\n",
Expand Down Expand Up @@ -326,7 +342,7 @@
" region=region,\n",
" authorizer_configuration=auth_config,\n",
" protocol=\"MCP\",\n",
" agent_name=\"mcp_server_agentcore\"\n",
" agent_name=tool_name\n",
")\n",
"print(\"Configuration completed ✓\")"
]
Expand Down Expand Up @@ -360,43 +376,6 @@
"print(f\"Agent ID: {launch_result.agent_id}\")"
]
},
{
"cell_type": "markdown",
"id": "step8_check_status",
"metadata": {},
"source": [
"## Checking AgentCore Runtime Status\n",
"\n",
"Now that we've deployed the AgentCore Runtime, let's check for its deployment status and wait for it to be ready:"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "afa6ac09-9adb-4846-9fc1-4d12aeb74853",
"metadata": {},
"outputs": [],
"source": [
"print(\"Checking AgentCore Runtime status...\")\n",
"status_response = agentcore_runtime.status()\n",
"status = status_response.endpoint['status']\n",
"print(f\"Initial status: {status}\")\n",
"\n",
"end_status = ['READY', 'CREATE_FAILED', 'DELETE_FAILED', 'UPDATE_FAILED']\n",
"while status not in end_status:\n",
" print(f\"Status: {status} - waiting...\")\n",
" time.sleep(10)\n",
" status_response = agentcore_runtime.status()\n",
" status = status_response.endpoint['status']\n",
"\n",
"if status == 'READY':\n",
" print(\"✓ AgentCore Runtime is READY!\")\n",
"else:\n",
" print(f\"⚠ AgentCore Runtime status: {status}\")\n",
" \n",
"print(f\"Final status: {status}\")"
]
},
{
"cell_type": "markdown",
"id": "step9_store_credentials",
Expand Down Expand Up @@ -745,49 +724,38 @@
"metadata": {},
"outputs": [],
"source": [
"import boto3\n",
"# print(\"🗑️ Starting cleanup process...\")\n",
"\n",
"print(\"🗑️ Starting cleanup process...\")\n",
"\n",
"agentcore_control_client = boto3.client('bedrock-agentcore-control', region_name=region)\n",
"ecr_client = boto3.client('ecr', region_name=region)\n",
"ssm_client = boto3.client('ssm', region_name=region)\n",
"secrets_client = boto3.client('secretsmanager', region_name=region)\n",
"\n",
"try:\n",
" print(\"Deleting AgentCore Runtime...\")\n",
" runtime_delete_response = agentcore_control_client.delete_agent_runtime(\n",
" agentRuntimeId=launch_result.agent_id,\n",
" )\n",
" print(\"✓ AgentCore Runtime deletion initiated\")\n",
"# try:\n",
"# ssm_client.delete_parameter(Name='/mcp_server/runtime/agent_arn')\n",
"# print(\"✓ Parameter Store parameter deleted\")\n",
"# except ssm_client.exceptions.ParameterNotFound:\n",
"# print(\"ℹ️ Parameter Store parameter not found\")\n",
"\n",
" print(\"Deleting ECR repository...\")\n",
" ecr_repo_name = launch_result.ecr_uri.split('/')[1]\n",
" ecr_client.delete_repository(\n",
" repositoryName=ecr_repo_name,\n",
" force=True\n",
" )\n",
" print(\"✓ ECR repository deleted\")\n",
"# try:\n",
"# secrets_client.delete_secret(\n",
"# SecretId='mcp_server/cognito/credentials',\n",
"# ForceDeleteWithoutRecovery=True\n",
"# )\n",
"# print(\"✓ Secrets Manager secret deleted\")\n",
"# except secrets_client.exceptions.ResourceNotFoundException:\n",
"# print(\"ℹ️ Secrets Manager secret not found\")\n",
"\n",
" try:\n",
" ssm_client.delete_parameter(Name='/mcp_server/runtime/agent_arn')\n",
" print(\"✓ Parameter Store parameter deleted\")\n",
" except ssm_client.exceptions.ParameterNotFound:\n",
" print(\"ℹ️ Parameter Store parameter not found\")\n",
" try:\n",
" secrets_client.delete_secret(\n",
" SecretId='mcp_server/cognito/credentials',\n",
" ForceDeleteWithoutRecovery=True\n",
" )\n",
" print(\"✓ Secrets Manager secret deleted\")\n",
" except secrets_client.exceptions.ResourceNotFoundException:\n",
" print(\"ℹ️ Secrets Manager secret not found\")\n",
"\n",
" print(\"\\n✅ Cleanup completed successfully!\")\n",
" \n",
"except Exception as e:\n",
" print(f\"❌ Error during cleanup: {e}\")\n",
" print(\"You may need to manually clean up some resources.\")"
"# print(\"\\n✅ Cleanup completed successfully!\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b29754a7",
"metadata": {},
"outputs": [],
"source": [
"# destroy_bedrock_agentcore(\n",
"# config_path=Path(\".bedrock_agentcore.yaml\"),\n",
"# agent_name=tool_name,\n",
"# delete_ecr_repo=True\n",
"# )"
]
},
{
Expand Down Expand Up @@ -824,7 +792,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"display_name": ".venv",
"language": "python",
"name": "python3"
},
Expand All @@ -838,7 +806,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.9"
"version": "3.13.2"
}
},
"nbformat": 4,
Expand Down
Loading