Source: microsoft/azure-skills · Maintainer: Microsoft · License: MIT · Checked: 28 October 2026
What is the Python App Service deploy skill?
The python-appservice-deploy skill is Microsoft's code-push recipe for Python web apps on Azure App Service. It tells a coding agent how to take a Flask, Django or FastAPI project in your working folder, create the Azure resources it needs if they are missing, and deploy it to App Service on Linux with one question to you: the app name.
Its description reads: "Deploy Python (Flask/Django/FastAPI) code to Azure App Service Linux." It also says what it is not for: "Container Apps, Functions, non-Python, Terraform/Bicep/IaC, full infra", which it sends to azure-prepare.
The skill ships in microsoft/azure-skills, the Azure Skills Plugin, which the README says is synced automatically from microsoft/GitHub-Copilot-for-Azure. The SKILL.md frontmatter gives version 1.1.1 and author Microsoft.
As of 28 October 2026, its skills.sh page listed about 231,400 installs (snapshot, 28 October 2026).
What does it do?
The SKILL.md is under 3 KB and lays out an eight-step workflow. Eight reference files and two helper scripts, each in a Bash and a PowerShell version, hold the detail.
| Step | What the agent does |
|---|---|
| 1. Resolve context | Asks only for the app name; derives <app>-rg, <app>-plan, the region (your az default or eastus2) and the subscription |
| 2. Detect framework | Reads requirements.txt or pyproject.toml for flask, django or fastapi; never blocks on an unknown result |
| 3. Choose a path | Uses azd deploy if azure.yaml has host: appservice, otherwise the Azure CLI |
| 4. Create resources | Runs a show-or-create pair for the resource group, a Linux P0v3 plan and a web app on PYTHON:3.14 |
| 5. Set startup | None for Flask or Django; a uvicorn command for FastAPI; a warning for anything else |
| 6. Enable build | Sets SCM_DO_BUILD_DURING_DEPLOYMENT=true so dependencies install on the server |
| 7. Deploy | Zips the project and runs az webapp deploy --type zip --track-status false, or azd deploy |
| 8. Stop | Prints the URL and log commands, then ends the turn |
Smart defaults. Before creating anything, the agent prints a summary of the names, region, SKU and runtime it will use, and proceeds unless you reply "stop". If you leave the name blank, scripts/generate-app-name.sh turns the folder name into a valid App Service name with an 8-character random suffix.
Startup rules that match the platform. Microsoft's Python on App Service configuration guide says the container looks for a Django wsgi.py or a Flask app.py or application.py and starts Gunicorn, and falls back to a default app otherwise. FastAPI isn't in that list, and the skill doesn't rely on auto-detection for it: it always sets python -m uvicorn main:app --host 0.0.0.0. The skill notes that "uvicorn defaults to 127.0.0.1, which causes App Service container-ping timeouts."
Server-side builds. The same Microsoft guide says to set SCM_DO_BUILD_DURING_DEPLOYMENT to true "before deploying a source archive with az webapp deploy." The Bash zip command excludes .git, virtual environments, __pycache__, .env and node_modules, which keeps local secrets and non-portable venvs out of the upload. The PowerShell version skips the same folders but not .env, so check for one before you deploy from Windows.
Retries for flaky Azure calls. scripts/retry-az-create.sh retries create commands up to two more times on connection resets, 429s and 502 to 504 errors, with 5 and 15 second waits. It never retries real errors such as AuthorizationFailed, SkuNotAvailable or QuotaExceeded.
Shell safety. The skill always passes the runtime as PYTHON:3.14 with a colon, because, in the SKILL.md's words, "pipe is a shell operator". Azure still reports it in pipe form, as PYTHON|3.14, which the skill says is normal.
How do you install the Python App Service deploy skill?
The repo README documents several routes.
Skill only. The command on skills.sh copies just this folder:
npx skills add https://github.com/microsoft/azure-skills --skill python-appservice-deploy
Claude Code: the Azure Skills Plugin. Run inside Claude Code:
/plugin install azure@claude-plugins-official
Or run /plugin and search for "azure". The plugin adds the Azure MCP Server, and the skill lists Azure MCP tools for subscriptions, resource groups, App Service and azd. See Claude Code plugins.
GitHub Copilot CLI:
/plugin marketplace add microsoft/azure-skills
/plugin install azure@azure-skills
Codex, Cursor and Gemini CLI. For Codex, the README says to run codex plugin marketplace add microsoft/azure-skills, then install azure from /plugins. For Cursor, use the Cursor Marketplace or Settings, then Plugins. For Gemini CLI, run gemini extensions install https://github.com/microsoft/azure-skills. See Codex skills and Cursor skills.
Prerequisites, per the README: an Azure account or subscription, Node.js 18 or later on your PATH, the Azure CLI signed in with az login, and the Azure Developer CLI signed in with azd auth login if you plan to use deployment workflows.
How do you use it?
Open the agent in your project folder and ask for a deploy. The skill is model-invoked; its trigger phrases include "Flask App Service", "Django App Service", "FastAPI App Service" and "deploy Python to App Service".
Example prompts (suggestions):
Deploy this Flask app to Azure App Service.Deploy this FastAPI project to App Service. The app object is in app/main.py.Deploy this Django site to App Service in westus3 under the resource group my-team-rg.Push this Python API to App Service on a B1 plan for testing.My App Service app shows ModuleNotFoundError after deploy. What did I miss?
Expect a short defaults summary, a few az commands, and a final message with the https://<app>.azurewebsites.net URL, a note to wait 2 to 3 minutes, and the commands to turn on and tail logs yourself.
Tips and limits
From the repo, Microsoft Learn and skills.sh, not from testing:
- It creates billable resources. The default plan is P0v3, one of the Premium V3 sizes. If you only want a test site, ask for a cheaper SKU; the skill respects it but notes P0v3 is its default. Check App Service pricing for your region.
- Success means "upload accepted". With
--track-status false, the deploy command returns once the zip is accepted, not when the build finishes. If the site never starts, the skill points toaz webapp log deployment listandshowfor the build logs. - No
az webapp up. The skill bans it as deprecated, and the Azure CLI reference marksaz webapp upas Deprecated. - Django settings are on you. The startup file reminds you to add
<app>.azurewebsites.nettoALLOWED_HOSTS. Microsoft's guide also suggests readingWEBSITE_HOSTNAMEand keepingSECRET_KEYandDEBUGin app settings. - Generic apps need a startup command. For plain WSGI or ASGI apps the code deploys, but the agent leaves the startup command to you and prints Gunicorn and uvicorn examples.
- Audits. On skills.sh, Gen Agent Trust Hub rated the skill Pass (Safe), Socket Pass and Snyk Pass (low risk), all on 29 July 2026.
The MIT License lets you copy and change the skill as long as you keep Microsoft's copyright and license notices.
Save it in your Kipt library
An edited copy helps if your team has fixed rules the stock skill can't guess, such as a default region, a cheaper dev SKU or a naming scheme. In Kipt, open Skills and paste the skill's GitHub folder link into the import box, or drop the folder or a .zip. The copy carries the skill files only, not the plugin's MCP setup. Skills in your private GitHub repo install into Claude Code or Codex with one command:
npx skills add https://github.com/<you>/<repo>.git --all -g
Kipt is not affiliated with Microsoft.
Similar skills
- Azure prepare skill: plans full infrastructure with Bicep or Terraform when a code push isn't enough.
- Azure deploy skill: runs
azd upand other deploys once a project has been prepared and validated. - Azure diagnostics skill: troubleshooting once the app is live.
- Application Insights instrumentation skill: adds monitoring to the app after it ships.
- Modern Python skill: sets up the Python project itself with uv, ruff and pytest.