Now available in preview, Azure Container Apps supports a new shell session pool type in dynamic sessions as well as MCP support for both shell and Python container types. With MCP enablement, you can bring the benefits of dynamics sessions to your AI agents by giving them the ability to execute code, run system commands, access file systems, and perform complex tasks in isolated, secure container environments that appear and disappear on demand.
The following is a tutorial on how to use an MCP enabled dynamic session as a tool used in an Azure Foundry agent giving it the capability to run remote shell commands.
For this tutorial, we're going to use an ARM template to deploy our Container App Session Pool resource.
Begin by signing into Azure and creating a resource group.
az loginAfter you're logged in, set the following variables that will be used to deploy the resource. Replace the <> with your own values.
SUBSCRIPTION_ID=$(az account show --query id --output tsv) RESOURCE_GROUP=<RESOURCE_GROUP_NAME> SESSION_POOL_NAME=<SESSION_POOL_NAME> LOCATION=<LOCATION>Create a resource group
az group create --name $RESOURCE_GROUP --location $LOCATIONUse an ARM template to create a shell session pool with MCP server enabled.
Create a deployment template file named deploy.json and copy the following into the file:
{ "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "name": { "type": "String" }, "location": { "type": "String" } }, "resources": [ { "type": "Microsoft.App/sessionPools", "apiVersion": "2025-02-02-preview", "name": "[parameters('name')]", "location": "[parameters('location')]", "properties": { "poolManagementType": "Dynamic", "containerType": "Shell", "scaleConfiguration": { "maxConcurrentSessions": 5 }, "sessionNetworkConfiguration": { "status": "EgressEnabled" }, "dynamicPoolConfiguration": { "lifecycleConfiguration": { "lifecycleType": "Timed", "coolDownPeriodInSeconds": 300 } }, "mcpServerSettings": { "isMCPServerEnabled": true } } } ] }Next, deploy the ARM template you just created.
az deployment group create --resource-group $RESOURCE_GROUP --template-file deploy.json --name $SESSION_POOL_NAME --location $LOCATIONOnce completed, your resource will be provisioned and available in the portal.
Get the MCP server endpoint and credentials
Next, retrieve the MCP server endpoint from the deployed container app session pool.
az rest --method GET --uri "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionPools/$SESSION_POOL_NAME?api-version=2025-02-02-preview" --query "properties.mcpServerSettings.mcpServerEndpoint" -o tsvThen, request the API credentials for the MCP server
az rest --method POST --uri "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionPools/$SESSION_POOL_NAME/fetchMCPServerCredentials?api-version=2025-02-02-preview" --query "apiKey" -o tsvKeep the fetched values nearby and copied to be used in the next step to connect your MCP server as a tool in the Azure Foundry agent.
Go to the Azure Foundry website and follow the steps below to create a project. Make sure you are in the New Foundry portal by turning it on in the top nav.
Once your project is created, follow the steps below to create an agent.
After your agent is created, you can connect a remote MCP server as a tool for your agent to use. Follow the steps below to connect an MCP server to your agent.
Once the tool is created you will see a Use in an agent button. Click on that and choose the agent you previously created.
After choosing the agent you should now see a connected tool in your agent view.
Now that the tool is connected you can use the playground to prompt the agent with a question that will launch the shell environment.
Try the following prompt with your agent:
"Create a hello world flask app in a new remote environment. Then send a request to the app to show that it works."
Once prompted, the connected MCP server will use it's tools to launch a shell environment and create an environmentId. This is used to track your session by creating a unique GUID so future commands are run in the same session.
The Foundry agent will then ask for approval for each step as the connected MCP tool will execute a series of shell commands that will install Python and Flask.
Once all requests have been completed and approved, you'll notice it has run the necessary shell commands in the remote environment and sent a curl request to the app with a response of Hello, World!
In this tutorial, we demonstrated how to extend Azure AI Foundry agents using Azure Container Apps dynamic session pools. By enabling MCP support on a shell session pool, we created a secure, on-demand execution environment that allows AI agents to run remote shell commands. With this setup, your AI agents can now bridge the gap between conversation and action, providing users with interactive and useful experiences.
If you're an engineer looking to move into a senior role, you have likely heard that you need to demonstrate "ownership". Unfortunately, this crucial term is often poorly defined and leads to a major misconception: that ownership means being assigned a full project or a Tech Lead role. I want to dispel that myth and explain why ownership is actually a necessary behavior and mindset shift, applicable in almost every action you take, regardless of whether you’re leading a project.
If you enjoyed this episode and would like me to discuss a question that you have on the show, drop it over at: developertea.com.
If you want to be a part of a supportive community of engineers (non-engineers welcome!) working to improve their lives and careers, join us on the Developer Tea Discord community by visiting https://developertea.com/discord today!
If you're enjoying the show and want to support the content head over to iTunes and leave a review! It helps other developers discover the show and keep us focused on what matters to you.
1134. This week, we look at the poetic power of personification (the language quirk that gives human traits to nonhuman things) and why style guides advise against using it for AI. Then, we look at the different names for common sayings, defining a proverb and breaking down the four main types: maxim, adage, dictum, and truism.
The personification segment was written by Karen Lunde, a longtime writer and editor turned web designer and marketing mentor. Solo service business owners come to her for websites where beautiful design meets authentic words that actually build connections. Find her at chanterellemarketingstudio.com.
The proverbs segment was written by Jim Norrena, MFA, who has been writing, editing, and leading grammar and proofreading workshops for more than thirty-five years. He founded TypoSuction.com, an independent editorial service, and is a member of Bay Area Editors’ Forum. He also serves on the board of Professional Publishers Network. You can find him at LinkedIn.
🔗 Share your familect recording in a WhatsApp chat.
🔗 Watch my LinkedIn Learning writing courses.
🔗 Subscribe to the newsletter.
🔗 Take our advertising survey.
🔗 Get the edited transcript.
🔗 Get Grammar Girl books.
🔗 Join Grammarpalooza. Get ad-free and bonus episodes at Apple Podcasts or Subtext. Learn more about the difference.
| HOST: Mignon Fogarty
| VOICEMAIL: 833-214-GIRL (833-214-4475).
| Grammar Girl is part of the Quick and Dirty Tips podcast network.
| Theme music by Catherine Rannus.
| Grammar Girl Social Media: YouTube. TikTok. Facebook. Threads. Instagram. LinkedIn. Mastodon. Bluesky.
Hosted by Simplecast, an AdsWizz company. See pcm.adswizz.com for information about our collection and use of personal data for advertising.
In this episode, recorded live at GitHub Universe 2025, Andrea sits down with Frank “Frenck” Nijhof, a GitHub Star and project lead for Home Assistant, one of the most active open source projects on the platform. They unpack how millions of households run privacy-first automations locally (no cloud required), why the Open Home Foundation exists to prevent vendor lock-in and e-waste, and how this famously welcoming community scaled to 21k+ contributors. Frank also shares insights about the development of “Assist,” an open, local-first voice assistant (with optional AI), as well as the new “Home Assist Green” hardware device, plus practical ways non-coders can meaningfully contribute to the project, too.
Links mentioned in the episode:
https://www.home-assistant.io/green
https://www.home-assistant.io/voice
https://www.home-assistant.io/assist
https://github.com/home-assistant
Hosted by Simplecast, an AdsWizz company. See pcm.adswizz.com for information about our collection and use of personal data for advertising.