Create a model package group if one does not exist: sm_client.create_model_package_group(ModelPackageGroupName='my-model-group', ModelPackageGroupDescription='...')
Register a model version: response = sm_client.create_model_package(ModelPackageGroupName='my-model-group', ModelApprovalStatus='PendingManualApproval', InferenceSpecification={...}) — InferenceSpecification specifies container image and supported instance types
Approve the model package to enable deployment: sm_client.update_model_package(ModelPackageArn=model_package_arn, ModelApprovalStatus='Approved')
Create a deployable Model object from the approved package using the SageMaker Python SDK: model = ModelPackage(role=role, model_package_arn=model_package_arn)
Deploy to a real-time endpoint: predictor = model.deploy(initial_instance_count=1, instance_type='ml.m5.large', endpoint_name='my-endpoint')
Invoke the endpoint for inference: predictor.predict(data) or use sm_runtime_client.invoke_endpoint() for raw Boto3 calls
Known gotchas
Only model packages with ModelApprovalStatus='Approved' can be deployed to endpoints — attempting to deploy a PendingManualApproval package raises a ClientError
The InferenceSpecification container image must be accessible from the SageMaker execution role; cross-account ECR images require explicit repository policy updates
Deploying an endpoint does not delete the previous endpoint of the same name — use update_endpoint to swap the model configuration in place and avoid downtime
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp