Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Build container-based Foundry Agents with Azure AI Projects SDK (ImageBasedHostedAgentDefinition). Use when creating hosted agents with custom container images in Azure AI Foundry.
.claude/skills/majiayu000-agents-v2-py/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-14 | ✗→✓ | ▲ Improved | 42% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 57% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 47% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 100% | 0% |
Build container-based hosted agents using ImageBasedHostedAgentDefinition from the Azure AI Projects SDK.
bashpip install azure-ai-projects>=2.0.0b3 azure-identity
Minimum SDK Version: 2.0.0b3 or later required for hosted agent support.
bashAZURE_AI_PROJECT_ENDPOINT=https://<resource>.services.ai.azure.com/api/projects/<project>
Before creating hosted agents:
AcrPull role on the ACRenablePublicHostingEnvironment=trueazure-ai-projects>=2.0.0b3Always use DefaultAzureCredential:
pythonfrom azure.identity import DefaultAzureCredential from azure.ai.projects import AIProjectClient credential = DefaultAzureCredential() client = AIProjectClient( endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"], credential=credential )
pythonimport os from azure.identity import DefaultAzureCredential from azure.ai.projects import AIProjectClient from azure.ai.projects.models import ( ImageBasedHostedAgentDefinition, ProtocolVersionRecord, AgentProtocol, )
pythonclient = AIProjectClient( endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"], credential=DefaultAzureCredential() ) agent = client.agents.create_version( agent_name="my-hosted-agent", definition=ImageBasedHostedAgentDefinition( container_protocol_versions=[ ProtocolVersionRecord(protocol=AgentProtocol.RESPONSES, version="v1") ], cpu="1", memory="2Gi", image="myregistry.azurecr.io/my-agent:latest", tools=[{"type": "code_interpreter"}], environment_variables={ "AZURE_AI_PROJECT_ENDPOINT": os.environ["AZURE_AI_PROJECT_ENDPOINT"], "MODEL_NAME": "gpt-4o-mini" } ) ) print(f"Created agent: {agent.name} (version: {agent.version})")
pythonversions = client.agents.list_versions(agent_name="my-hosted-agent") for version in versions: print(f"Version: {version.version}, State: {version.state}")
pythonclient.agents.delete_version( agent_name="my-hosted-agent", version=agent.version )
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | container_protocol_versions | list[ProtocolVersionRecord] | Yes | Protocol versions the agent supports | | image | str | Yes | Full container image path (registry/image:tag) | | cpu | str | No | CPU allocation (e.g., "1", "2") | | memory | str | No | Memory allocation (e.g., "2Gi", "4Gi") | | tools | list[dict] | No | Tools available to the agent | | environment_variables | dict[str, str] | No | Environment variables for the container |
The container_protocol_versions parameter specifies which protocols your agent supports:
pythonfrom azure.ai.projects.models import ProtocolVersionRecord, AgentProtocol # RESPONSES protocol - standard agent responses container_protocol_versions=[ ProtocolVersionRecord(protocol=AgentProtocol.RESPONSES, version="v1") ]
Available Protocols: | Protocol | Description | |----------|-------------| | AgentProtocol.RESPONSES | Standard response protocol for agent interactions |
Specify CPU and memory for your container:
pythondefinition=ImageBasedHostedAgentDefinition( container_protocol_versions=[...], image="myregistry.azurecr.io/my-agent:latest", cpu="2", # 2 CPU cores memory="4Gi" # 4 GiB memory )
Resource Limits: | Resource | Min | Max | Default | |----------|-----|-----|---------| | CPU | 0.5 | 4 | 1 | | Memory | 1Gi | 8Gi | 2Gi |
Add tools to your hosted agent:
pythontools=[{"type": "code_interpreter"}]
pythontools=[ {"type": "code_interpreter"}, { "type": "mcp", "server_label": "my-mcp-server", "server_url": "https://my-mcp-server.example.com" } ]
pythontools=[ {"type": "code_interpreter"}, {"type": "file_search"}, { "type": "mcp", "server_label": "custom-tool", "server_url": "https://custom-tool.example.com" } ]
Pass configuration to your container:
pythonenvironment_variables={ "AZURE_AI_PROJECT_ENDPOINT": os.environ["AZURE_AI_PROJECT_ENDPOINT"], "MODEL_NAME": "gpt-4o-mini", "LOG_LEVEL": "INFO", "CUSTOM_CONFIG": "value" }
Best Practice: Never hardcode secrets. Use environment variables or Azure Key Vault.
pythonimport os from azure.identity import DefaultAzureCredential from azure.ai.projects import AIProjectClient from azure.ai.projects.models import ( ImageBasedHostedAgentDefinition, ProtocolVersionRecord, AgentProtocol, ) def create_hosted_agent(): """Create a hosted agent with custom container image.""" client = AIProjectClient( endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"], credential=DefaultAzureCredential() ) agent = client.agents.create_version( agent_name="data-processor-agent", definition=ImageBasedHostedAgentDefinition( container_protocol_versions=[ ProtocolVersionRecord( protocol=AgentProtocol.RESPONSES, version="v1" ) ], image="myregistry.azurecr.io/data-processor:v1.0", cpu="2", memory="4Gi", tools=[ {"type": "code_interpreter"}, {"type": "file_search"} ], environment_variables={ "AZURE_AI_PROJECT_ENDPOINT": os.environ["AZURE_AI_PROJECT_ENDPOINT"], "MODEL_NAME": "gpt-4o-mini", "MAX_RETRIES": "3" } ) ) print(f"Created hosted agent: {agent.name}") print(f"Version: {agent.version}") print(f"State: {agent.state}") return agent if __name__ == "__main__": create_hosted_agent()
pythonimport os from azure.identity.aio import DefaultAzureCredential from azure.ai.projects.aio import AIProjectClient from azure.ai.projects.models import ( ImageBasedHostedAgentDefinition, ProtocolVersionRecord, AgentProtocol, ) async def create_hosted_agent_async(): """Create a hosted agent asynchronously.""" async with DefaultAzureCredential() as credential: async with AIProjectClient( endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"], credential=credential ) as client: agent = await client.agents.create_version( agent_name="async-agent", definition=ImageBasedHostedAgentDefinition( container_protocol_versions=[ ProtocolVersionRecord( protocol=AgentProtocol.RESPONSES, version="v1" ) ], image="myregistry.azurecr.io/async-agent:latest", cpu="1", memory="2Gi" ) ) return agent
| Error | Cause | Solution | |-------|-------|----------| | ImagePullBackOff | ACR pull permission denied | Grant AcrPull role to project's managed identity | | InvalidContainerImage | Image not found | Verify image path and tag exist in ACR | | CapabilityHostNotFound | No capability host configured | Create account-level capability host | | ProtocolVersionNotSupported | Invalid protocol version | Use AgentProtocol.RESPONSES with version "v1" |
latest in productionThis skill is applicable to execute the workflow or actions described in the overview.
Other measured skills in the registry, with their headline benchmark lift.