8.2 KiB
Healthcare Appointment Agent
Overview
An AI agent for immunization related healthcare appointments built with Amazon Bedrock AgentCore Gateway using the Model Context Protocol (MCP) to expose the tools. This AI agent supports enquiring about current immunization status/schedule, checking appointment slots and booking appointments. It also provides personalized experience by knowing the logged in user (adult) and his/her children and uses AWS Healthlake as FHIR R4 (Fast Healthcare Interoperability Resources) database.
Uase case details
Information | Details |
---|---|
Use case type | Conversational |
Agent type | Single Agent |
Use case components | Amazon Bedrock AgentCore related components: Gateway and Identity |
Other Components: Amazon Cognito, AWS Healthlake, Amazon API Gateway and AWS Lambda | |
MCP Tools: MCP tools are exposed to Bedrock AgentCore Gateway using OpenAPI specification | |
Use case vertical | Healthcare |
Example complexity | Intermediate |
SDK used | Amazon Bedrock AgentCore SDK and boto3 |
Use case Architecture
Use case key Features
Prerequisites
Note: These steps are designed to work in us-east-1 and us-west-2 regions.
Required IAM Policies
Please ensure the required IAM permissions. Ignore if running this sample from Admin role.
Cloudformation stack used in this sample has AWS Healthlake, Cognito, S3, IAM Roles, API Gateway, Lambda functions related sources.
As a quick start, you may use the combination of AWS managed IAM policies and an Inline policy to avoid issues in deploying and setting up this code sample. However it is recommended to follow the principle of privilege in production.
AWS managed IAM policies:
- AmazonAPIGatewayAdministrator
- AmazonCognitoPowerUser
- AmazonHealthLakeFullAccess
- AmazonS3FullAccess
- AWSCloudFormationFullAccess
- AWSKeyManagementServicePowerUser
- AWSLakeFormationDataAdmin
- AWSLambda_FullAccess
- AWSResourceAccessManagerFullAccess
- CloudWatchFullAccessV2
- AmazonBedrockFullAccess
Inline Policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-source-bucket/*",
"arn:aws:s3:::amzn-s3-demo-logging-bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"ram:GetResourceShareInvitations",
"ram:AcceptResourceShareInvitation",
"glue:CreateDatabase",
"glue:DeleteDatabase"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"bedrock-agentcore:*",
"agent-credential-provider:*"
],
"Resource": "*"
}
]
}
Others
- Python 3.12
- GIT
- AWS CLI 2.x
- Claude 3.5 Sonnet model enabled on Amazon Bedrock. Please follow this guide to set up the same.
Use case Setup
Clone the GIT repository and navigate the the Healthcare-Appointment-Agent directory.
git clone <repository-url>
cd ./02-use-cases/05-Healthcare-Appointment-Agent/
Setup Infrastructure
Create an S3 bucket (ignore if you would like to use an existing bucket)
aws s3api create-bucket --bucket <globally unique bucket name here>
Push the lambda zip package to S3 bucket
aws s3 cp "./cloudformation/fhir-openapi-searchpatient.zip" s3://<bucket name here>/lambda_code/fhir-openapi-searchpatient.zip
Deploy cloudformation template by using below steps. The stack will take around 10 minutes. You can monitor the progress of stack by following this guide.
aws cloudformation create-stack \
--stack-name healthcare-cfn-stack \
--template-body file://cloudformation/healthcare-cfn.yaml \
--capabilities CAPABILITY_NAMED_IAM \
--region <us-east-1 or us-west-2> \
--parameters ParameterKey=LambdaS3Bucket,ParameterValue="<bucket name here>" \
ParameterKey=LambdaS3Key,ParameterValue="lambda_code/fhir-openapi-searchpatient.zip"
Install python dependencies and initialize the environment
Install UV as per this guide
Create and activate virtual environment
uv venv --python 3.12
source ./.venv/bin/activate
Install dependencies
uv pip install -r requirements.txt
Initialize the environment by running below command. This will create an .env file which would be used for environment variables. Use the same region name as what was used with Cloudformation template above. Note down APIEndpoint and APIGWCognitoLambdaName as returned in the output.
python init_env.py \
--cfn_name healthcare-cfn-stack \
--openapi_spec_file ./fhir-openapi-spec.yaml \
--region <us-east-1 or us-west-2>
if you need to use a named credential profile then same can be achieved with below.
python init_env.py \
--cfn_name healthcare-cfn-stack \
--region <us-east-1 or us-west-2> \
--openapi_spec_file ./fhir-openapi-spec.yaml \
--profile <profile-name here>>
The .env file should look like below.
Enable Cognito Auth with API Gateway
aws lambda invoke \
--function-name <input APIGWCognitoLambdaName as noted earlier> \
response.json \
--payload '{ "RequestType": "Create" }' \
--cli-binary-format raw-in-base64-out \
--region <us-east-1 or us-west-2>
Create some test data in AWS Healthlake
Run the below python program to ingest the test data as present in test_data folder. It may take around ~5 minutes to complete.
python create_test_data.py
Execution Instructions
Create Bedrock AgentCore Gateway and Gateway Target
Open the OpenAPI spec file fhir-openapi-spec.yaml and replace with APIEndpoint as noted down earlier.
Set up Bedrock AgentCore Gateway and Gateway Target based on OpenAPI specification in fhir-openapi-spec.yaml file. Note down the Gaeway Id from the output as it would be needed in later steps.
python setup_fhir_mcp.py --op_type Create --gateway_name <gateway_name_here>
Run Strands Agent
Run Strands Agent by using below steps.
python strands_agent.py --gateway_id <gateway_id_here>
Run Langgraph Agent
Run Strands Agent by using below steps.
python langgraph_agent.py --gateway_id <gateway_id_here>
Sample prompts to interact with Agent:
- How can you help?
- Let us check for immunization schedule first
- Please find slots for MMR vaccine around the scheduled date
Clean up instructions
Disable Cognito Auth with API Gateway
aws lambda invoke \
--function-name <input APIGWCognitoLambdaName as noted earlier> \
response.json \
--payload '{ "RequestType": "Delete" }' \
--cli-binary-format raw-in-base64-out \
--region <us-east-1 or us-west-2>
Delete the gateway and gateway target. If you created multiple gateways then repeat this step for all gateways.
python setup_fhir_mcp.py --op_type Delete --gateway_id <gateway_id_here>
Delete the cloudformation stack.
aws cloudformation delete-stack \
--stack-name healthcare-cfn-stack \
--region <us-east-1 or us-west-2>